Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [c] Non riesco a capire il problema v2

    codice:
    // data la struttura studente con nome cognome voto orale voto scritto voto pratico di informatica,caricare la struttura 
    //per ogni studente stampare la media,stampare lo studente con la media più alta,studente con voto più alto/basso
    //dire pure quelli rimandati
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct{char nome [20];char cognome [20];float votoo;float votos;float votop;}studente;
    main()
    {
          studente studenti[20];
          int c,n=1,k,j,u,f,g;
          float somma,media[20],media1,votooM,votooB,votosM,votosB,votopM,votopB;
          char nome1[20],nome2[20],nome3[20];
          
          for(c=0;c<3;c++)
          {
                          printf("\nInserisci il nome,cognome del %d studente: ",n);
                          scanf("%s",studenti[c].nome);
                          scanf("%s",studenti[c].cognome);
                          printf("\nINserisci il voto:\n-Orale,\n-Scritto,\n-Pratico:\n");
                          scanf("%f",&studenti[c].votoo);
                          scanf("%f",&studenti[c].votos);
                          scanf("%f",&studenti[c].votop);
                          n++;
          }
          media[0]=(studenti[0].votoo+studenti[0].votos+studenti[0].votop)/3;
          media1=media[0];
          
          votooM=studenti[0].votoo;
          votooB=studenti[0].votoo;
          votosM=studenti[0].votos;
          votosB=studenti[0].votos;
          votopM=studenti[0].votop;
          votopB=studenti[0].votop;
          
          for(c=0;c<3;c++)
          {
                          media[c]=(studenti[c].votoo+studenti[c].votos+studenti[c].votop)/3;
                          printf("\nLa media di %s %s e' %.2f",studenti[c].nome,studenti[c].cognome,media[c]);
                          if(media[c]>media1)
                          {
                                         media1=media[c];
                                         k=c;
                          }
          }
          printf("\nLa media piu' alta e' quella di %s %s con %.2f",studenti[k].nome,studenti[k].cognome,media1);
          
          for(c=0;c<3;c++)
          {
                          if(studenti[c].votoo>votooM)
                          {
                                                      votooM=studenti[c].votoo;
                                                      k=c;
                          }
                          if(studenti[c].votoo<votooB)
                          {
                                                      votooB=studenti[c].votoo;
                                                      n=c;
                          }
                          if(studenti[c].votos>votosM)
                          {
                                                      votosM=studenti[c].votos;
                                                      j=c;
                          }
                          if(studenti[c].votos<votosB)
                          {
                                                      votosB=studenti[c].votos;
                                                      u=c;
                          }
                          if(studenti[c].votop>votopM)
                          {
                                                      votopM=studenti[c].votop;
                                                      f=c;
                          }
                          if(studenti[c].votop<votopB)
                          {
                                                      votopB=studenti[c].votop;
                                                      g=c;
                          }
          }
          printf("\nVoto orale:\n-MAGGIORE: %s %s con %.1f;\n-MINORE: %s %s con %.1f;",studenti[k].nome,studenti[k].cognome,votooM,studenti[n].nome,studenti[n].cognome,votooB);
          printf("\nVoto scritto:\n-MAGGIORE: %s %s con %.1f;\n-MINORE: %s %s con %.1f;",studenti[j].nome,studenti[j].cognome,votosM,studenti[u].nome,studenti[u].cognome,votosB);
          printf("\nVoto pratico:\n-MAGGIORE: %s %s con %.1f;\n-MINORE: %s %s con %.1f;",studenti[f].nome,studenti[f].cognome,votopM,studenti[g].nome,studenti[g].cognome,votopB);
          printf("\n\nSONO RIMANDATI:");
          for(c=0;c<3;c++)
          {
                          if(media[c]<5.5)
                          printf("\n- %s %s con %.2f ",studenti[c].nome,studenti[c ].cognome,media[c]);
          }
          system("pause");
    }
    visto che il problema ce l'ho ancora, ho dovuto aprire un'altra discussione visto che l'altra mi è stata chiusa,.il codice spero di averlo inserito giusto questa volta.come detto prima penso che il problema sia intorno alla riga 83 dove il programma va in crash..considerando che è la prima volta che mi succede non ho la minima idea di cosa scrivere come titolo della discussione e non so cosa cercare su google o in discussioni precedenti visto che non so quale sia il problema...spero che qualcuno sia in grado di risolvermi il problema considerando che il mio prof non sapeva nemmeno da dove partire ....

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466

    Moderazione

    Originariamente inviato da elialongoni04
    non ho la minima idea di cosa scrivere come titolo della discussione
    A me non pare difficile inserire nel titolo il contesto di ciò che si sta facendo o una descrizione sommaria del contenuto della discussione, al posto di "non riesco a capire il problema", ma siccome non ce la facciamo proprio ho provveduto io.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3

    Re: Moderazione

    Originariamente inviato da alka
    A me non pare difficile inserire nel titolo il contesto di ciò che si sta facendo o una descrizione sommaria del contenuto della discussione, al posto di "non riesco a capire il problema", ma siccome non ce la facciamo proprio ho provveduto io.
    non mi sembra nemmeno difficile capire che non sapevo il problema visto che non sono così esperto :| ...ora almeno so che è un problema di caricamento.

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    A mio parere non hai inizializzato una variabile, tuttavia non ho voglia di cercarla...
    Io ho semplicemente messo un'inizializzazione all'inizio e tolto un pezzo di inizializzazione inutile e ripetitivo, funziona correttamente, questo è il codice:
    codice:
    // data la struttura studente con nome cognome voto orale voto scritto voto pratico di informatica,caricare la struttura 
    //per ogni studente stampare la media,stampare lo studente con la media più alta,studente con voto più alto/basso
    //dire pure quelli rimandati
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct{char nome [20];char cognome [20];float votoo;float votos;float votop;}studente;
    main()
    {
          studente studenti[20];
          int c,n=1,k,j,u,f,g;
          float somma,media[20],media1=0,votooM=-1,votooB=111,votosM=-1,votosB=111,votopM=-1,votopB=111;
          
          for(c=0;c<3;c++)
          {
                          printf("\nInserisci il nome,cognome del %d studente: ",n);
                          scanf("%s",studenti[c].nome);
                          scanf("%s",studenti[c].cognome);
                          printf("\nINserisci il voto:\n-Orale,\n-Scritto,\n-Pratico:\n");
                          scanf("%f",&studenti[c].votoo);
                          scanf("%f",&studenti[c].votos);
                          scanf("%f",&studenti[c].votop);
                          n++;
          }      
          for(c=0;c<3;c++)
          {
                          media[c]=(studenti[c].votoo+studenti[c].votos+studenti[c].votop)/3;
                          printf("\nLa media di %s %s e' %.2f",studenti[c].nome, studenti[c].cognome, media[c]);
                          if(media[c]>media1)
                          {
                                         media1=media[c];
                                         k=c;
                          }
          }
          printf("\nLa media piu' alta e' quella di %s %s con %.2f",studenti[k].nome,studenti[k].cognome,media1);
          
          for(c=0;c<3;c++)
          {
                          if(studenti[c].votoo>votooM)
                          {
                                                      votooM=studenti[c].votoo;
                                                      k=c;
                          }
                          if(studenti[c].votoo<votooB)
                          {
                                                      votooB=studenti[c].votoo;
                                                      n=c;
                          }
                          if(studenti[c].votos>votosM)
                          {
                                                      votosM=studenti[c].votos;
                                                      j=c;
                          }
                          if(studenti[c].votos<votosB)
                          {
                                                      votosB=studenti[c].votos;
                                                      u=c;
                          }
                          if(studenti[c].votop>votopM)
                          {
                                                      votopM=studenti[c].votop;
                                                      f=c;
                          }
                          if(studenti[c].votop<votopB)
                          {
                                                      votopB=studenti[c].votop;
                                                      g=c;
                          }
          }
          printf("\nVoto orale:\n-MAGGIORE: %s %s con %.1f;\n-MINORE: %s %s con %.1f;",studenti[k].nome,studenti[k].cognome,votooM,studenti[n].nome,studenti[n].cognome,votooB);
          printf("\nVoto scritto:\n-MAGGIORE: %s %s con %.1f;\n-MINORE: %s %s con %.1f;",studenti[j].nome,studenti[j].cognome,votosM,studenti[u].nome,studenti[u].cognome,votosB);
          printf("\nVoto pratico:\n-MAGGIORE: %s %s con %.1f;\n-MINORE: %s %s con %.1f;",studenti[f].nome,studenti[f].cognome,votopM,studenti[g].nome,studenti[g].cognome,votopB);
          printf("\n\nSONO RIMANDATI:");
          for(c=0;c<3;c++)
          {
                          if(media[c]<5.5)
                          	printf("\n- %s %s con %.2f ",studenti[c].nome, studenti[c].cognome, media[c]);
          }
          getchar();
    }
    Comunque non accontentarti di sapere che funziona, cerca dove hai sbagliato nel tuo programma.

    P.s. io ne approfitterei per fare un po' di pulizia e mettere qualche commento, magari il codice diventa più chiaro e facile da gestire/correggere
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Riformulo, ho trovato l'errore:
    manca l'inizializzazione delle variabili n k j u f g (che hanno dei nomi orribili e scollegati) che nella mia versione si inizializzano per forza da sole.
    Nella tua invece, se non c'è un voto maggiore o minore di quello iniziale, restano con un valore indefinito...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Originariamente inviato da Scara95
    A mio parere non hai inizializzato una variabile, tuttavia non ho voglia di cercarla...
    Io ho semplicemente messo un'inizializzazione all'inizio e tolto un pezzo di inizializzazione inutile e ripetitivo, funziona correttamente, questo è il codice:


    Comunque non accontentarti di sapere che funziona, cerca dove hai sbagliato nel tuo programma.

    P.s. io ne approfitterei per fare un po' di pulizia e mettere qualche commento, magari il codice diventa più chiaro e facile da gestire/correggere
    grazie molto gentile! confrontandolo con il mio hai semplicemente dato dei valori iniziali alle variabili, mentre io assegnavo come valori iniziali il primo valore inserito dall'utente...va be, concettualmente ritengo siano uguali, c'era solo il problema del caricamento che non so a cosa sia dovuto. grazie ancora!
    ps:la prossima volta scriverò anche qualche commento xD

  7. #7
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Originariamente inviato da elialongoni04
    grazie molto gentile! confrontandolo con il mio hai semplicemente dato dei valori iniziali alle variabili, mentre io assegnavo come valori iniziali il primo valore inserito dall'utente...va be, concettualmente ritengo siano uguali, c'era solo il problema del caricamento che non so a cosa sia dovuto. grazie ancora!
    ps:la prossima volta scriverò anche qualche commento xD
    Leggi il post che ho fatto subito dopo e capisci dov'è la differenza concettuale...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  8. #8
    Originariamente inviato da Scara95
    Riformulo, ho trovato l'errore:
    manca l'inizializzazione delle variabili n k j u f g (che hanno dei nomi orribili e scollegati) che nella mia versione si inizializzano per forza da sole.
    Nella tua invece, se non c'è un voto maggiore o minore di quello iniziale, restano con un valore indefinito...
    a ok credo di aver capito...nel senso che non è detto che ci sia PER FORZA un valore che verifichi la condizione dell'if, dunque la variabile resta senza valore e dunque al momento di andare a stampare la parola contenuta nell'array non sa che indice prendere.ho capito bene??

  9. #9
    Originariamente inviato da Scara95
    Leggi il post che ho fatto subito dopo e capisci dov'è la differenza concettuale...
    ok perfetto ho capito giusto! ho corretto il mio programma semplicemente mettendo nelle condizioni degli IF un (maggiore/uguale)o (minore/uguale)così entra per forza in ogni IF..
    grazie per l'aiuto!

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Esatto, nel tuo codice succede proprio quello, nel mio invece, essendo i valori di inizializzazione dei voti fasulli, vengono cambiati al primo giro del loop e con loro anche le variabili k, j, n, ...

    Non c'è di che...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.