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

    #16
    Originariamente Scritto da laplace Visualizza Messaggio
    quindi il problema consiste nell'ordinare non un array di numeri (problema classico) ma bensi un array di strutture contenenti un campo numerico...
    si .Se fosse stato il classico vettore non c'erano problemi ma qui è + tosto il fatto ma sn convinto che il problema sta in ordina e sbaglio qualcosa nell'assegnamento .
    Pillola rossa o pillola blu ????

    La risposta è dentro te.

    Commenta

    • laplace
      Bodyweb Advanced
      • Dec 2005
      • 7982
      • 960
      • 1,370
      • Send PM

      #17
      allora sam fisher io ti dico sinceramente come la penso...
      quello che hai scritto non mi convince per niente e non è l'approccio migliore al problema...anche perchè perde di generalità...ci sono troppi indici che tendono solo a confondere la mente...infatti non riesco manco a leggerlo........io ti dico quella che secondo me è la soluzione migliore e più compatta........

      int compare( const void *a, const void *b );

      typedef struct
      {
      int cod;
      char sex;
      int vot;
      } stud;

      int main( void )
      {
      ..............................

      qsort( clas, 3, sizeof(stud), compare ); //3 è il numero di studenti...

      return 0;
      }

      int compare( const void *a, const void *b )
      {

      if( ((stud *)a)->vot < ((stud *)b)->vot ) return 1;
      if( ((stud *)a)->vot > ((stud *)b)->vot ) return -1;

      return 0;
      }

      tutto chiaro?











      }

      Commenta

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

        #18
        Originariamente Scritto da laplace Visualizza Messaggio
        allora sam fisher io ti dico sinceramente come la penso...
        quello che hai scritto non mi convince per niente e non è l'approccio migliore al problema...anche perchè perde di generalità...ci sono troppi indici che tendono solo a confondere la mente...infatti non riesco manco a leggerlo........io ti dico quella che secondo me è la soluzione migliore e più compatta........

        int compare( const void *a, const void *b );

        typedef struct
        {
        int cod;
        char sex;
        int vot;
        } stud;

        int main( void )
        {
        ..............................

        qsort( clas, 3, sizeof(stud), compare ); //3 è il numero di studenti...

        return 0;
        }

        int compare( const void *a, const void *b )
        {

        if( ((stud *)a)->vot < ((stud *)b)->vot ) return 1;
        if( ((stud *)a)->vot > ((stud *)b)->vot ) return -1;

        return 0;
        }

        tutto chiaro?
        grazie dell'interessamento però ci sn alcune cose che non ho fatto ancora a lezione.
        Comunque ho risolto ora posto il listato completo
        Pillola rossa o pillola blu ????

        La risposta è dentro te.

        Commenta

        • mmaattyy
          Bodyweb Senior
          • May 2007
          • 9383
          • 593
          • 546
          • Send PM

          #19
          Originariamente Scritto da Dave Clark's attacks Visualizza Messaggio
          sti cazzi il 19 ho la prova intercorso di C e sn arrivato solamente ai cicli for
          Ahaha pure io il 21 però
          Che facoltà fai ??!!

          Originariamente Scritto da oleh butko
          Io ho provato in estate 2009, avevo 14 anni, ho tirato su 70 per 4 volte, pesavo 59kg ed ero alto 1.71 . ora non sò quanto potrei tirare su... ovviamente era la prima volta che andavo in palestra

          Commenta

          • laplace
            Bodyweb Advanced
            • Dec 2005
            • 7982
            • 960
            • 1,370
            • Send PM

            #20
            Originariamente Scritto da Sam Fisher Visualizza Messaggio
            grazie dell'interessamento però ci sn alcune cose che non ho fatto ancora a lezione.
            Comunque ho risolto ora posto il listato completo
            si ma come vedi la soluzione è piu compatta...
            semplicemente l'ordinamento non lo fai tu (rischiando di fare casino) ma lo fai fare alla funzione di libreria (stdlib.h) chiamata qsort, che implementa un ordinamento di array in base al criterio definito nella funzione compare (ricorda che il nome di una funzione è un puntatore alla funzione stessa). e poi è efficiente perchè qsort implementa il quicksort che è il migliore algoritmo general purpose di ordinamento...

            Commenta

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

              #21
              #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*/
              int acquisisci(FILE*,struct studente*);
              void ordina (int,struct studente*);

              main()
              {
              FILE *fpi;

              int N,i;
              struct studente classe [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");
              N=acquisisci(fpi,classe);
              ordina(N,classe);
              }
              getch();
              }

              int acquisisci(FILE *A,struct studente *B)

              {
              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);
              return i;

              }

              void ordina (int A,struct studente *B)
              {
              int i,j,imin;
              struct studente temp;

              /*devo dichiarare temp di tipo struct perchè al suo interno ha B[i]
              che è di quel tipo */

              for (i=0;i<A-1;i++)
              { imin=i;
              for(j=i+1;j<A;j++)
              {
              if(B[j].voto<B[imin].voto)
              imin=j;
              }

              /*dopo aver ordinato le componenti per voto crescente sposto anche tutte le altre
              conponenti delllo struct studente quindi uso B[i] e non B[i].voto*/

              temp=B[i];
              B[i]=B[imin];
              B[imin]=temp;
              }
              /*l'eventuale stampa a video sempre fuori il primo ciclo di for cioè
              for (i=0;i<A-1;i++) */
              printf("\n\n\n*ORDINAMENTO DEGLI STUDENTI PER VOTO* \n\n\n\n");
              for(i=0;i<A;i++)
              printf("cognome= %s sesso= %s voto= %d \n\n",B[i].cognome,B[i].sesso,B[i].voto);

              }



              Laplace i molti indici mi servono per il selection sort per ordinare i voti.
              Pillola rossa o pillola blu ????

              La risposta è dentro te.

              Commenta

              • laplace
                Bodyweb Advanced
                • Dec 2005
                • 7982
                • 960
                • 1,370
                • Send PM

                #22
                lo so che servono. ma se se ne può fare a meno...perchè non farne a meno...

                Commenta

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

                  #23
                  Originariamente Scritto da laplace Visualizza Messaggio
                  lo so che servono. ma se se ne può fare a meno...perchè non farne a meno...
                  detto in maniera chiara io sn un neofita per la programmazione quindi preferisco fare cose a livello "terra terra", inoltre a me serve solo per un corso universitario di fondamenti di informatica.
                  Cmq grazie dell'interessamento.
                  Pillola rossa o pillola blu ????

                  La risposta è dentro te.

                  Commenta

                  • gbpackers
                    #1 Fan GreenBay Packers
                    • Jun 2006
                    • 5542
                    • 302
                    • 227
                    • Send PM

                    #24
                    OT: vedere il c dopo anni che non lo uso più mi fà una tristezza... per il tempo che passa neh...
                    sigpic

                    Commenta

                    • laplace
                      Bodyweb Advanced
                      • Dec 2005
                      • 7982
                      • 960
                      • 1,370
                      • Send PM

                      #25
                      tristezza di cosa?

                      Commenta

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

                        #26
                        Originariamente Scritto da gbpackers Visualizza Messaggio
                        OT: vedere il c dopo anni che non lo uso più mi fà una tristezza... per il tempo che passa neh...
                        cmq il c va alla grande nelle università è presente nella maggior parte dei corsi universitari di fondamenti di informatica.
                        Pillola rossa o pillola blu ????

                        La risposta è dentro te.

                        Commenta

                        • laplace
                          Bodyweb Advanced
                          • Dec 2005
                          • 7982
                          • 960
                          • 1,370
                          • Send PM

                          #27
                          Originariamente Scritto da Sam Fisher Visualizza Messaggio
                          cmq il c va alla grande nelle università è presente nella maggior parte dei corsi universitari di fondamenti di informatica.
                          è normale ed è giusto cosi. chi conosce e sa usare il c non ci mette quasi nulla ad apprendere altri sistemi che di fatto sono sempre basati su questo

                          Commenta

                          • gbpackers
                            #1 Fan GreenBay Packers
                            • Jun 2006
                            • 5542
                            • 302
                            • 227
                            • Send PM

                            #28
                            Originariamente Scritto da laplace Visualizza Messaggio
                            tristezza di cosa?
                            per il tempo che è passato dall'università.

                            oramai a livello lavorativo il c è usato poco e soprattutto in ambienti dove si sviluppa driver hardware o prodotti di nicchia.

                            Originariamente Scritto da Sam Fisher Visualizza Messaggio
                            cmq il c va alla grande nelle università è presente nella maggior parte dei corsi universitari di fondamenti di informatica.
                            già

                            Originariamente Scritto da laplace Visualizza Messaggio
                            è normale ed è giusto cosi. chi conosce e sa usare il c non ci mette quasi nulla ad apprendere altri sistemi che di fatto sono sempre basati su questo
                            quoto
                            sigpic

                            Commenta

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

                              #29
                              avoja..il c è la base di tutto..

                              un'infinità di applicazioni sono sviluppate in c in c++

                              cmq...tornando it

                              sam, hai provato a fare qualche stampa di prova?riesci ad estrapolare i dati dalle struts contenute nel file?

                              a naso, senza pensare ad ottimizzazioni delle prestazioni, farei cosi:
                              - estrarrei le struct dal file e le metterei dentro un'array
                              - scorrerei l'array per ordinarlo tramite il voto (nomestruct.voto)
                              - lo ributti dentro al file ordinato sovrascrivendo quello che c'era prima

                              Commenta

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

                                #30
                                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*/
                                int acquisisci(FILE*,struct studente*);
                                void ordina (int,struct studente*);
                                
                                main()
                                {
                                      FILE *fpi;
                                      
                                      int N,i;
                                      struct studente classe [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");
                                      N=acquisisci(fpi,classe);
                                      ordina(N,classe); 
                                      }
                                      getch();
                                }
                                
                                int acquisisci(FILE *A,struct studente *B)
                                
                                {
                                    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);
                                    return i;
                                    
                                }
                                
                                void ordina (int A,struct studente *B)
                                {
                                     int i,j,imin; 
                                     struct studente temp; 
                                     
                                /*devo dichiarare temp di tipo struct perchè al suo interno ha B[i] 
                                che è di quel tipo */
                                     
                                     for (i=0;i<A-1;i++)
                                     {    imin=i;
                                         for(j=i+1;j<A;j++)
                                         {  
                                            if(B[j].voto<B[imin].voto)
                                            imin=j;
                                         }
                                
                                /*dopo aver ordinato le componenti per voto crescente sposto anche tutte le altre 
                                conponenti delllo struct studente quindi uso B[i] e non B[i].voto*/
                                     
                                     temp=B[i];
                                     B[i]=B[imin];
                                     B[imin]=temp;
                                     }
                                /*l'eventuale stampa a video sempre fuori il primo ciclo di for cioè 
                                for (i=0;i<A-1;i++) */
                                     printf("\n\n\n*ORDINAMENTO DEGLI STUDENTI PER VOTO* \n\n\n\n");
                                     for(i=0;i<A;i++)
                                     printf("cognome= %s sesso= %s voto= %d \n\n",B[i].cognome,B[i].sesso,B[i].voto);
                                
                                }
                                impaginato

                                Commenta

                                Working...
                                X