abC primeri - izzivi/odklon5.c

odklon5.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#define kos 10

int velikost;
float *x;

void povecaj() {
  float *nov;
  int i;

  nov = (float *) malloc((velikost+kos) * sizeof(float));
  for (i=0; i<velikost; i++)
    nov[i] = x[i];

  velikost+=kos;
  free(x);
  x = nov;
}

main() {
  float vsota1, vsota2, pov, odk;

  int i=0;   // stevec za indekse v tabeli x
  int n;     // stevilo prebranih stevil
  float tx;  // pomozna spremenljivka za branje

  velikost = kos;
  x = (float *) malloc(velikost * sizeof(float));

  // beremo stevila, dokler uporabnik ne vpise 0
  while (1 == 1) { // "neskoncna" zanka 
    printf("Vpisi %d. stevilo: ", i+1); scanf("%f",&tx);
    // ce je prebrano stevilo razlicno od 0, 
    // ga vpisemo v tabelo x na i-to mesto, ...
    if (tx != 0) { 
      if (i>=velikost)
        povecaj();

      x[i] = tx;
      i++;
    } else // ... sicer nehamo brati!
      break;
  } 
  // zapomnimo si, koliko stevil smo prebrali
  n = i;

  // ce nismo prebrali niti enega stevila, koncamo!
  if (n==0) 
    exit(0);

  // racunanje povprecja     
  vsota1=0;
  for (i=0; i<n; i++)
    vsota1=vsota1+x[i];
  pov    = vsota1 / n;

  // racunanje standardnega odklona
  vsota2=0;
  for (i=0; i<n; i++)
    vsota2=vsota2+pow((pov - x[i]),2);
  odk = sqrt(vsota2 / n);

  printf("Povprecje: %.2f, Odklon: %.2f", pov, odk);
}

    Nazaj...