Calcolo della media .

di il
32 risposte

Calcolo della media .

Ho una lista , in cui inserisco nome cognome e voto(su un tipo char)
mi viene chiesto di calcolare la media dei voti tra gli studenti.
Come posso agire?
Il mio dubbio è come posso allocare un vettore dinamico tipo intero da dati proveniente da tipi char?

32 Risposte

  • Re: Calcolo della media .

    Prima di tutto perché il voto è in un char? E intendi un solo char in cui c'è un valore ASCII o proprio numerico ?
  • Re: Calcolo della media .

    Il mio dubbio è come posso allocare un vettore dinamico tipo intero da dati proveniente da tipi char?
    Perchè devi allocare un vettore dinamico? Ti è sufficiente scorrere la lista calcolando la sommatoria dei voti e tenendoti traccia del conteggio degli studenti, quindi calcolare la media alla fine.
    unsigned long sommavoti = 0;
    int nstudenti = 0;
    float media = 0.0;
    <per ogni studente in lista>
    {
       sommavoti += (unsigned long)voto_studente;
       nstudenti ++;
    }
    if( nstudenti > 0 )
      media = (float)sommavoti / nstudenti;
    
  • Re: Calcolo della media .

    La media me la da 0.0000


    Come mai ?
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    struct bib{
           char title[MAX_STR];
           char author[MAX_STR];
           char coll[MAX_STR];
           
           struct bib *next;
           };
           //typedef struct bib bib;
           typedef struct bib *bib_p;
           
           bib_p Add_to_list(bib_p begin,char title[],char auth[],char coll[]);
     void print_list(bib_p p);
     int mygetline(char buffer_line[],int);
    
     int main()
           {
                 char buffer_title[MAX_STR];
                 char buffer_name[MAX_STR];
                 char buffer_coll[MAX_STR];
                
                 unsigned long sommavoti = 0;
                   unsigned long voto_studente=0;
                    int nstudenti = 0;
                   float media = 0.0;
                  bib_p head=NULL;
                       while(cont)
                 {
                            printf("\nInserire il titolo dell'opera:\n");
                            mygetline(buffer_title,MAX_STR);
                            if(strcmp(buffer_title,"exit")==0)
                            break;
                            printf("Inserire l'autore:\n");
                            mygetline(buffer_name,MAX_STR);
                            if(strcmp(buffer_name,"exit")==0)
                            break;
                            printf("Inserire la collocazione dell'opera:\n");
                            mygetline(buffer_coll,MAX_STR);
                            if(strcmp(buffer_coll,"exit")==0)
                            break;
                             sommavoti += (unsigned long)voto_studente;
                             nstudenti ++;
                             
                            printf("\n\nPer terminare digitare exit. . .\n\n");
                            
                            if(strcmp(buffer_title,"")!=0&&strcmp(buffer_name,"")!=0&&strcmp(buffer_coll,"")!=0)
                            head=Add_to_list(head,buffer_title,buffer_name,buffer_coll);
                            //head=Add_in_order(head,buffer_title,buffer_name,buffer_coll);
                            print_list(head);
                            }
                            
                          
    
                              if( nstudenti > 0 )
                              media = (float)sommavoti / nstudenti;
                              printf("%f",media);
                              system("pause");
                              }
    
    bib_p Add_to_list(bib_p head,char title[],char auth[],char coll[])
    {
          bib_p p;
          bib_p curr;
          
          p=(bib*)malloc(sizeof(bib));
          strcpy(p->title,title);
          strcpy(p->author,auth);
          strcpy(p->coll,coll);
          
          p->next=NULL;
          
          if(head==NULL)
          return p;
          
          else
          {
              curr=head;
              while(curr->next!=NULL)
              curr=curr->next;
              curr->next=p;
              return head;
              }
              }
    
    
    void print_list(bib_p p)
    {
         
         if(p!=NULL)
         {
                    printf("\n%4s  %4s  %4s\n",p->title,p->author,p->coll);
                    p=p->next;
                    print_list(p);
                    }
                    }
                    
    
                                                                                                                                                   
                    
    void insert(bib_p a,bib_p b,bib_p q)
    {
         if(a->next!=b)
         {
                       printf("Errore nella lista\n\n");
                       return;
                       }
                       a->next=q;
                       q->next=b;
                       }
    
    
    
  • Re: Calcolo della media .

    Che pasticcio ma cosa centra la collezione di opere??? mi sembra che stai prendendo in giro le persone e questo non è per niente bello.
  • Re: Calcolo della media .

    Non è quella mia intenzione!!!
  • Re: Calcolo della media .

    Mi spiego meglio al posto di char coll[] fate finta che c'è char voto[] , volevo sapere come fosse possibile inserendo i voti iin questo dato tipo char (numerico) fare la media.
  • Re: Calcolo della media .

    Spero di essere stato esauriente nei miei dubbi.
    Potrei risolvere tutto dichiarando il voto all'interno della struttura di tipo in t , ma il prof non ci ha mai spiegato una cosa del genere anche perche in questo caso tutte le funzioni che mi ritrvo (impostate su tipi char) andrebbero a farsi benedire , dovrebbero essere corrette ma io sinceramente non so come fare!!
    Quind mi chiedevo se fosse possibile una volta inserito il voto di n studenti allocarli in un vettore dinamico o comunque qualche altra strategia per il calcolo della media..
  • Re: Calcolo della media .

    C'è qualcuno??
  • Re: Calcolo della media .

    Quel programma non è neanche compilabile...
    Io ottengo questi errori, abbastanza eloquenti:
    
    foo.c:6:19: error: ‘MAX_STR’ undeclared here (not in a function)
            char title[MAX_STR];
                       ^
    foo.c: In function ‘main’:
    foo.c:30:26: error: ‘cont’ undeclared (first use in this function)
                        while(cont)
                              ^
    foo.c:30:26: note: each undeclared identifier is reported only once for each function it appears in
    foo.c: In function ‘Add_to_list’:
    foo.c:68:10: error: ‘bib’ undeclared (first use in this function)
           p=(bib*)malloc(sizeof(bib));
              ^
    foo.c:68:14: error: expected expression before ‘)’ token
           p=(bib*)malloc(sizeof(bib));
    
  • Re: Calcolo della media .

    Hai ragione , io l'ho mandato cosi solo per far vedere come era strutturato il mio programma , spero sia arrivato il messaggio di ciò che io sto chiedendo però!!!
  • Re: Calcolo della media .

    C'è una confusione assoluta in questo thread.

    Ma non riesci a fare un esempio concreto in modo che la gente non debba "immaginare" quello che vuoi ?
  • Re: Calcolo della media .

    Avete ragione ho formulato la lista in questione.

    Adesso io mi chiedo , se volessi calcolare la media dei voti inseriti , come potrei procedere?
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define DIM 50
    #define FILENAME "test.dat"
    
    
    
    struct stud{
           char nome[DIM];
           char cognome[DIM];
           char voto[2];
           struct stud *next;
           };
           
           typedef struct stud *stud_p;
           
           
           void print_list(stud_p p);
           int mygetline(char buffer_line[],int Max_l);
           stud_p Add_to_list(stud_p head,char nome[],char cognome[],char voto[]);
           
           main(){
                   char buffer_nome[DIM];
                   char buffer_cognome[DIM];
                   char buffer_voto[DIM];
                   int cont;
                   
                    stud_p head=NULL;
                  
                              while(cont){
                              printf("Inserire nome alunno :");
                              mygetline(buffer_nome,DIM);
                              if(strcmp(buffer_nome,"exit")==0)
                              break;
                              
                              printf("Inserire cognome alunno :");
                              mygetline(buffer_cognome,DIM);
                              if(strcmp(buffer_cognome,"exit")==0)
                              break;
                              
                              printf("Inserire voto alunno :");
                              mygetline(buffer_voto,2);
                              if(strcmp(buffer_voto,"exit")==0)
                              break;
                              
                              printf("\n\nPer terminare digitare exit. . .\n\n");
                              if(strcmp(buffer_nome,"")!=0&&strcmp(buffer_cognome,"")!=0&&strcmp(buffer_voto,"")!=0)
                               
                              head=Add_to_list(head,buffer_nome,buffer_cognome,buffer_voto);
                              print_list(head);
                               
                               }
                              
                              system("pause");
                               }
                               
                                                           
    void print_list(stud_p p)
    {
         if(p!=NULL)
         {
                    printf("\n%4s  %4s  %4s  \n\n",p->nome,p->cognome,p->voto);
                    p=p->next;
                    print_list(p);
                    }
                    }
                    
        int mygetline(char buffer_line[],int Max_l)
    {
        int c,i;
        i=0;
        while((c=getchar())!='\n'&&i<Max_l)
        buffer_line[i++]=c;
        buffer_line[i]='\0';
        return i;
    } 
    
             
              stud_p Add_to_list(stud_p head,char nome[],char cognome[],char voto[])
    {
          stud_p p;
          stud_p curr;
          
          p=(stud*)malloc(sizeof(stud));
          strcpy(p->nome,nome);
          strcpy(p->cognome,cognome);
          strcpy(p->voto,voto);
          
          p->next=NULL;
          
          if(head==NULL)
          return p;
          
          else
          {
              curr=head;
              while(curr->next!=NULL)
              curr=curr->next;
              curr->next=p;
              return head;
              }
              }              
    
    
    
  • Re: Calcolo della media .

    Non cambia molto rispetto al caso in cui avessi usato un int.

    Prima di utilizzare il dato devi trasformarlo in intero tramite la funzione atoi
  • Re: Calcolo della media .

    Funzione atoi?? e cos'è ?
Devi accedere o registrarti per scrivere nel forum
32 risposte