Programmatori di C a me

Collapse
X
 
  • Filter
  • Ora
  • Show
Clear All
new posts
  • Sam Fisher
    Bodyweb Advanced
    • Jan 2006
    • 4257
    • 576
    • 583
    • Ministero della Pubblica Istruzione
    • Send PM

    #76
    Originariamente Scritto da BLOOD black Visualizza Messaggio
    hai sbagliato una cosa fondamentale

    questo è il codice errato:


    Codice:
         for(i=0;i<C;i++)
         {    
                  
             if(!strcmp(D[i].sesso,"M"))
             {
                D[i]=maschio[j];
                j++;
             }
             
             else
             {
                D[i]=femmina[k];
                k++;
             } 
         }
    questo è il codice giusto

    Codice:
         for(i=0;i<C;i++)
         {    
                  
             if(!strcmp(D[i].sesso,"m"))
             {
               [B] maschio[j]=D[i];[/B]
                j++;
             }
             
             else
             {
               [B] femmina[k]=D[i];[/B]
                k++;
             } 
         }
    l'assegnamento...
    ***** è vero cmq sembra che abbia finito l'esercizio in maniera corretta
    Codice:
    #include<stdio.h>
    #include<conio.h>
    
    struct studente { char cognome[20];char sesso[2];int voto;};
    /*il penultimo ; puoi anche toglierlo ma ti da un warning*/
    void acquisisci(FILE*,struct studente*,struct studente*,struct studente*);
    
    
    main()
    {
          FILE *fpi;
          
          int N;
          struct studente classe [20],maschi[20],femmine[20];
          fpi=fopen("studenti.txt","r");
          if(fpi==NULL)
          printf("Il file non esiste");
          else
          {
          printf("*ELENCO DEGLI STUDENTI ACQUISITO DA FILE* \n\n\n\n");
          acquisisci(fpi,classe,maschi,femmine);
          
          }
          getch();
    }
    
    void acquisisci(FILE *A,struct studente *B, struct studente *E,struct studente *G)
    
    {   
        FILE *fpm,*fpf;
        struct studente temp;
        int d,j,dmin,k;
        int i=0;
        while(fscanf(A,"%s%s%d",B[i].cognome,B[i].sesso,&B[i].voto)!=EOF)
        {    
             printf("cognome= %s sesso= %s voto= %d \n\n" ,B[i].cognome,B[i].sesso,B[i].voto);
             i++;
        }
        fclose(A);
        
    /*Ordino i nominativi per voto mediante selection sort
    devo dichiarare temp di tipo struct perchè al suo interno ha B[d] 
    che è di quel tipo */
         
         for (d=0;d<i-1;d++)
         {    dmin=d;
             for(j=d+1;j<i;j++)
             {  
                if(B[j].voto<B[dmin].voto)
                dmin=j;
             }
    
    /*dopo aver ordinato le componenti per voto crescente sposto anche tutte le altre 
    conponenti delllo struct studente quindi uso B[d] e non B[d].voto*/
         
         temp=B[d];
         B[d]=B[dmin];
         B[dmin]=temp;
         }
    
    /*l'eventuale stampa a video sempre fuori il primo ciclo di for cioè 
    for (d=0;d<i-1;d++) */
         
         printf("\n\n\n*ORDINAMENTO DEGLI STUDENTI PER VOTO* \n\n\n\n");
         for(d=0;d<i;d++)
         printf("cognome= %s sesso= %s voto= %d \n\n",B[d].cognome,B[d].sesso,B[d].voto);
    
    
    
    
    /*Rilevazione maschi */
          
          j=0; k=0;
          for(d=0;d<i;d++)
         {
             if(B[d].sesso[0]=='M')
             {
                E[j]=B[d];
                j++;
             }
             
             else
             {
                G[k]=B[d];
                k++;
             } 
         
         }
         printf("\n\nI maschi presenti sono %d le femmine %d\n\n",j,k);
         
    /*Stampa su file*/
             
         fpm=fopen("maschio.txt","w");
         if(fpm==NULL)
         printf("Non riesco a scrivere il file");
         else
             {
                for(d=0;d<j;d++)
                fprintf(fpm,"%s %s %d \n",E[d].cognome,E[d].sesso,E[d].voto);
             }
             fclose(fpm);
         
         fpf=fopen("femmina.txt","w");
         if(fpf==NULL)
         printf("Non riesco a scrivere il file");
         else
             {
                for(d=k;d>=0;d--)
                fprintf(fpf,"%s %s %d \n",G[d].cognome,G[d].sesso,G[d].voto);
             }
             fclose(fpf); 
    }
    Ho provato i file e viene scritto correttamente solo maschi.txt per quanto riguarda le femmine viene scritta prima una riga senza senso e poi il file in maniera corretta.
    Da cosa può dipende ?

    Edit.
    Dipendeva dall'ultimo for andava inmpostato in questo modo
    for(d=k-1;d>=0;d--)
    fprintf(fpf,"%s %s %d \n",G[d].cognome,G[d].sesso,G[d].voto);
    }
    Last edited by Sam Fisher; 31-12-2008, 14:18:27.
    Pillola rossa o pillola blu ????

    La risposta è dentro te.

    Commenta

    • BLOOD black
      Bodyweb Advanced
      • Aug 2008
      • 8344
      • 497
      • 299
      • Nella mia testa
      • Send PM

      #77
      Originariamente Scritto da Sam Fisher Visualizza Messaggio
      ***** è vero cmq sembra che abbia finito l'esercizio in maniera corretta
      Codice:
      #include<stdio.h>
      #include<conio.h>
      
      struct studente { char cognome[20];char sesso[2];int voto;};
      /*il penultimo ; puoi anche toglierlo ma ti da un warning*/
      void acquisisci(FILE*,struct studente*,struct studente*,struct studente*);
      
      
      main()
      {
            FILE *fpi;
            
            int N;
            struct studente classe [20],maschi[20],femmine[20];
            fpi=fopen("studenti.txt","r");
            if(fpi==NULL)
            printf("Il file non esiste");
            else
            {
            printf("*ELENCO DEGLI STUDENTI ACQUISITO DA FILE* \n\n\n\n");
            acquisisci(fpi,classe,maschi,femmine);
            
            }
            getch();
      }
      
      void acquisisci(FILE *A,struct studente *B, struct studente *E,struct studente *G)
      
      {   
          FILE *fpm,*fpf;
          struct studente temp;
          int d,j,dmin,k;
          int i=0;
          while(fscanf(A,"%s%s%d",B[i].cognome,B[i].sesso,&B[i].voto)!=EOF)
          {    
               printf("cognome= %s sesso= %s voto= %d \n\n" ,B[i].cognome,B[i].sesso,B[i].voto);
               i++;
          }
          fclose(A);
          
      /*Ordino i nominativi per voto mediante selection sort
      devo dichiarare temp di tipo struct perchè al suo interno ha B[d] 
      che è di quel tipo */
           
           for (d=0;d<i-1;d++)
           {    dmin=d;
               for(j=d+1;j<i;j++)
               {  
                  if(B[j].voto<B[dmin].voto)
                  dmin=j;
               }
      
      /*dopo aver ordinato le componenti per voto crescente sposto anche tutte le altre 
      conponenti delllo struct studente quindi uso B[d] e non B[d].voto*/
           
           temp=B[d];
           B[d]=B[dmin];
           B[dmin]=temp;
           }
      
      /*l'eventuale stampa a video sempre fuori il primo ciclo di for cioè 
      for (d=0;d<i-1;d++) */
           
           printf("\n\n\n*ORDINAMENTO DEGLI STUDENTI PER VOTO* \n\n\n\n");
           for(d=0;d<i;d++)
           printf("cognome= %s sesso= %s voto= %d \n\n",B[d].cognome,B[d].sesso,B[d].voto);
      
      
      
      
      /*Rilevazione maschi */
            
            j=0; k=0;
            for(d=0;d<i;d++)
           {
               if(B[d].sesso[0]=='M')
               {
                  E[j]=B[d];
                  j++;
               }
               
               else
               {
                  G[k]=B[d];
                  k++;
               } 
           
           }
           printf("\n\nI maschi presenti sono %d le femmine %d\n\n",j,k);
           
      /*Stampa su file*/
               
           fpm=fopen("maschio.txt","w");
           if(fpm==NULL)
           printf("Non riesco a scrivere il file");
           else
               {
                  for(d=0;d<j;d++)
                  fprintf(fpm,"%s %s %d \n",E[d].cognome,E[d].sesso,E[d].voto);
               }
               fclose(fpm);
           
           fpf=fopen("femmina.txt","w");
           if(fpf==NULL)
           printf("Non riesco a scrivere il file");
           else
               {
                  for(d=k;d>=0;d--)
                  fprintf(fpf,"%s %s %d \n",G[d].cognome,G[d].sesso,G[d].voto);
               }
               fclose(fpf); 
      }
      Ho provato i file e viene scritto correttamente solo maschi.txt per quanto riguarda le femmine viene scritta prima una riga senza senso e poi il file in maniera corretta.
      Da cosa può dipende ?
      Dipende dal fatto che accedi ad una zona di memoria non valida, ossia la struttura indicizzata dal valore k
      i dati leciti per il tuo problema sono k-1 non k,dato che il seguente blocco di codice

      else
      {
      femmina[k]=D[i];
      k++;
      }

      se ad esempio hai 4 femmine
      alla prima femmina si ha
      femmina[0] viene rimepito con la prima femmina
      k ora avrà valore 1
      alla seconda femmina
      k[1] viene rempito con la seconda femmina
      k viene incrementato e varrà 2
      alla terza femmina
      verrà riempito k[3]
      k viene incrementato e varrà 4
      alla 4 femmina
      k[4] viene riempito
      k viene incrementato e varrà 5.... ma la 5 femmina non esiste,quindi il ciclo che conta a ritroso deve partire da 4 ,ossia da k-1

      {
      for(i=k-1;i>=0;i--)
      fprintf(fpf,"%s %s %d \n",femmina[i].cognome,femmina[i].sesso,femmina[i].voto);
      }

      Commenta

      • Sam Fisher
        Bodyweb Advanced
        • Jan 2006
        • 4257
        • 576
        • 583
        • Ministero della Pubblica Istruzione
        • Send PM

        #78
        Originariamente Scritto da BLOOD black Visualizza Messaggio
        Dipende dal fatto che accedi ad una zona di memoria non valida, ossia la struttura indicizzata dal valore k
        i dati leciti per il tuo problema sono k-1 non k,dato che il seguente blocco di codice

        else
        {
        femmina[k]=D[i];
        k++;
        }

        se ad esempio hai 4 femmine
        alla prima femmina si ha
        femmina[0] viene rimepito con la prima femmina
        k ora avrà valore 1
        alla seconda femmina
        k[1] viene rempito con la seconda femmina
        k viene incrementato e varrà 2
        alla terza femmina
        verrà riempito k[3]
        k viene incrementato e varrà 4
        alla 4 femmina
        k[4] viene riempito
        k viene incrementato e varrà 5.... ma la 5 femmina non esiste,quindi il ciclo che conta a ritroso deve partire da 4 ,ossia da k-1

        {
        for(i=k-1;i>=0;i--)
        fprintf(fpf,"%s %s %d \n",femmina[i].cognome,femmina[i].sesso,femmina[i].voto);
        }

        grazie anche a te dell'interessamento
        Pillola rossa o pillola blu ????

        La risposta è dentro te.

        Commenta

        • BLOOD black
          Bodyweb Advanced
          • Aug 2008
          • 8344
          • 497
          • 299
          • Nella mia testa
          • Send PM

          #79
          Originariamente Scritto da Sam Fisher Visualizza Messaggio
          grazie anche a te dell'interessamento
          di niente

          Commenta

          • XVII
            Bodyweb Advanced
            • Nov 2007
            • 595
            • 48
            • 75
            • Send PM

            #80
            Ora come minimo il prof ti deve dare la lode
            what?

            Commenta

            • Sam Fisher
              Bodyweb Advanced
              • Jan 2006
              • 4257
              • 576
              • 583
              • Ministero della Pubblica Istruzione
              • Send PM

              #81
              Originariamente Scritto da XVII Visualizza Messaggio
              Ora come minimo il prof ti deve dare la lode
              si la lode... questo era un esercizietto fesso vedremo all'esame cosa mette e poi c'è sempre l'orale e li saranno dolori.
              Pillola rossa o pillola blu ????

              La risposta è dentro te.

              Commenta

              • XVII
                Bodyweb Advanced
                • Nov 2007
                • 595
                • 48
                • 75
                • Send PM

                #82
                Originariamente Scritto da Sam Fisher Visualizza Messaggio
                si la lode... questo era un esercizietto fesso vedremo all'esame cosa mette e poi c'è sempre l'orale e li saranno dolori.
                Io sono rimasto sconvolto dall'esercizio proposto all'esame, quindi parti psicologicamente preparato
                what?

                Commenta

                • Tristan
                  Papəete Beach
                  • Oct 2007
                  • 16642
                  • 547
                  • 588
                  • AS Roma
                  • Send PM

                  #83
                  orale per un esame di programmazione?

                  mah che boiata

                  io non lo feci

                  Commenta

                  • Sam Fisher
                    Bodyweb Advanced
                    • Jan 2006
                    • 4257
                    • 576
                    • 583
                    • Ministero della Pubblica Istruzione
                    • Send PM

                    #84
                    Originariamente Scritto da Tristan Visualizza Messaggio
                    orale per un esame di programmazione?

                    mah che boiata

                    io non lo feci

                    purtroppo io sto al politecnico di bari e quasi tutti gli esami sn orale e scritto
                    Pillola rossa o pillola blu ????

                    La risposta è dentro te.

                    Commenta

                    • laplace
                      Bodyweb Advanced
                      • Dec 2005
                      • 7984
                      • 962
                      • 1,370
                      • Send PM

                      #85
                      beh l'orale in un esame del genere serve piu che altro a vedere se uno ha copiato o meno l'esercizio di programmazione...

                      Commenta

                      • X3me
                        Ex-Bodyweb Senior
                        • Dec 2005
                        • 8060
                        • 310
                        • 260
                        • Nord Italia
                        • Send PM

                        #86
                        ecco 6 pagine che mi danno certa l'idea di non fare ing programmatore -_-'
                        - Climber
                        - ex Istruttore
                        - ex P.Trainer AFFWA

                        Commenta

                        • laplace
                          Bodyweb Advanced
                          • Dec 2005
                          • 7984
                          • 962
                          • 1,370
                          • Send PM

                          #87
                          Originariamente Scritto da X3me Visualizza Messaggio
                          ecco 6 pagine che mi danno certa l'idea di non fare ing programmatore -_-'
                          ma questo non è nulla....non hai ancora visto niente

                          Commenta

                          • X3me
                            Ex-Bodyweb Senior
                            • Dec 2005
                            • 8060
                            • 310
                            • 260
                            • Nord Italia
                            • Send PM

                            #88
                            Originariamente Scritto da laplace Visualizza Messaggio
                            ma questo non è nulla....non hai ancora visto niente
                            l'unica cosa che sapevo fare con una specie di linguaggio era quello per modificare mirc XDD e lo facevo in 2 media.La programmazione mi ha sempre affascinato ma non ho le possibilità per farlo uno perchè non sono un grande studioso due perche la matematica non la digerisco molto!!va beh pace
                            - Climber
                            - ex Istruttore
                            - ex P.Trainer AFFWA

                            Commenta

                            • laplace
                              Bodyweb Advanced
                              • Dec 2005
                              • 7984
                              • 962
                              • 1,370
                              • Send PM

                              #89
                              Originariamente Scritto da X3me Visualizza Messaggio
                              l'unica cosa che sapevo fare con una specie di linguaggio era quello per modificare mirc XDD e lo facevo in 2 media.La programmazione mi ha sempre affascinato ma non ho le possibilità per farlo uno perchè non sono un grande studioso due perche la matematica non la digerisco molto!!va beh pace
                              beh ti conviene lasciar perdere allora...a volte si impazzisce li sopra...

                              Commenta

                              • X3me
                                Ex-Bodyweb Senior
                                • Dec 2005
                                • 8060
                                • 310
                                • 260
                                • Nord Italia
                                • Send PM

                                #90
                                Originariamente Scritto da laplace Visualizza Messaggio
                                beh ti conviene lasciar perdere allora...a volte si impazzisce li sopra...
                                si infatti l'idea di fare ingegneria (anche civile) non mi sfiora neanche
                                - Climber
                                - ex Istruttore
                                - ex P.Trainer AFFWA

                                Commenta

                                Working...
                                X