abC primeri - kazalci/odklon4.c

odklon4.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

struct element {
  float x;
  struct element *naslednji;
};

struct element *zacetek;

void dodajZ(float s) {
  struct element *tmp;

  // za nov element rezerviramo prostor
  tmp = (struct element *) 
    malloc(sizeof(struct element));

  // v x shranimo stevilo
  tmp->x = s;

  // pokazemo na prejsnji zacetek ...
  tmp->naslednji=zacetek;

  // ... z zacetkom pa na tmp
  zacetek = tmp;
} 
   

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

  // kazalec za sprehod po seznamu
  struct element *trenutni; 


  // s kazalcem za zacetek pokazemo na NULL 
  zacetek = NULL;

  // beremo stevila, dokler uporabnik ne vpise 0
  while (1) { // beremo, dokler uporabnik ne vpise 0
    printf("Vpisi %d. stevilo: ", i+1); scanf("%f",&tx);
    // ce je prebrano stevilo razlicno od 0, 
    // ga vpisemo v linearni seznam
    if (tx != 0) { 
      dodajZ(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;
  trenutni=zacetek;
  while (trenutni != NULL) {
    vsota1=vsota1+trenutni->x;
    trenutni = trenutni -> naslednji;
  }
  pov    = vsota1 / n;

  // racunanje standardnega odklona
  vsota2=0;
  trenutni=zacetek;
  while (trenutni != NULL) {
    vsota2=vsota2+pow((pov - trenutni->x),2);
    trenutni = trenutni -> naslednji;
  }
  odk = sqrt(vsota2 / n);

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

    Nazaj...