Piccolo problema in c.
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Visualizzazione risultati da 1 a 14 di 14

Discussione: Piccolo problema in c.

Cambio titolo
  1. #1
    Utente L'avatar di Master94ga
    Registrato il
    05-09
    Località
    Messina
    Messaggi
    7.613

    Piccolo problema in c.

    Il programma è questo:
    Codice:
    /*Scrivere un programmam che consenta di caricare un elenco di massimo 30 libri, ciascuno caratterizzato dai campi:
               -Titolo
               -Autore
               -Prezzo
    Scrivere una funziona che trovi il libro di prezzo maggiore*/
    
    #include <stdio.h>
    #include <conio.h>
    
    typedef struct tlibri
    {
            char titolo [20];
            char autore [30];
            float prezzo [10];
    };
    
    tlibri libroprezmax;
    tlibri elencolibri [100];
    
    void prezzomax (tlibri libroprezmax, int n);
    
    main ()
    {
         int n,i;
         printf("Inserisci il numero dei libri: ");
         scanf("%d", &n);
         
         for(i=0;i<n;i++)
         {
                         printf("Inserisci il titolo del libro: ");
                         scanf("%s", elencolibri [i].titolo);
                         printf("Inserisci l'autore del libro: ");
                         scanf("%s", elencolibri [i].autore);
                         printf("Inserisci il prezzo del libro: ");
                         scanf("%f", elencolibri [i].prezzo);
                         prezzomax(libroprezmax,n);
         }
         getch();
    }
    
    void prezzomax (tlibri libroprezmax, int n)
    {
    Io non so come fare la funzione che trovi e stampi il libro con prezzo maggiore, consigli?
    CPU: Amd Phenom II 945 Mobo:Asrock 980DE3/U3S3 RAM: 2x4Gb G-skill ddr3 VGA: Asus GTX 660 DirectCuII PSU: OCZ ZT550 HD: Maxtor 200GB+Seagate Barracuda 7200.12 500GB Case: Zalman Z11Plus Monitor: BENQ GL2450HM Mouse: CM Devastator Tastiera: CM Devastator Cuffie: Sharkoon Rush Mousepad: Sharkoon 1337 Gaming Mat

    http://myanimelist.net/profile/master94ga

  2. #2
    SamFisher-92
    Ospite
    libroprezmax lo dichiari come intero.

    Codice:
     
    void prezzomax(int libroprezmax, int n){
    libroprezmax=0;
    for (i=1;i<n;i++)
        {if (elencolibri[i].prezzo>elencolibri[libroprezmax].prezzo) 
           {libroprezmax=i;}
        }
    printf(elencolibri[libroprezmax].titolo)
    }
    Ultima modifica di SamFisher-92; 21-09-2011 alle 19:20:50

  3. #3
    Non sono uno. L'avatar di .:Venom:.
    Registrato il
    06-06
    Località
    Palermo
    Messaggi
    8.637
    fermo restando che non so se esista un funzione nativa di C per trovare il massimo valore in un array,
    puoi ciclare l'array di libri impostare la variabile max= 0 prima del ciclo vedi se max<elencolibri[i].prezzo
    allora max=elencolibri[i].prezzo.

    Io non sono un programmatore C ma penso che la logica giusta sia questa.
    PARADOX "GRAND STRATEGY GAMES" [THREAD UFFICIALE]
    Codice amico 3DS: 1289-9178-7241 NERO2: 3912 5487 5241

  4. #4
    Utente L'avatar di Master94ga
    Registrato il
    05-09
    Località
    Messina
    Messaggi
    7.613
    Citazione SamFisher-92 Visualizza Messaggio
    libroprezmax lo dichiari come intero.

    Codice:
     
    void prezzomax(int libroprezmax, int n)
    libroprezmax=0;
    for (i=1;i<n;i++)
    {if (elencolibri[i].prezzo>elencolibri[libroprezmax].prezzo) 
    {libroprezmax=i;}
    }
    printf(elencolibri[libroprezmax].titolo)
    }
    Questa dovrebbe funzionare, però ho cambiato un pò tutto:
    Codice:
    /*Scrivere un programmam che consenta di caricare un elenco di massimo 30 libri, ciascuno caratterizzato dai campi:
               -Titolo
               -Autore
               -Prezzo
    Scrivere una funziona che trovi il libro di prezzo maggiore*/
    
    #include <stdio.h>
    #include <conio.h>
    
    typedef struct tlibri
    {
            char titolo[20];
            char autore[30];
            float prezzo;
    };
    
    
    
    int prezzomax( tlibri elencolibri[] , int n );
    
    main ()
    {
         int n,i,imax;
         tlibri elencolibri[30];
         printf("Inserisci il numero dei libri: ");
         scanf("%d", &n);
         
         for(i=0;i<n;i++)
         {
                         printf("Inserisci il titolo del libro: ");
                         scanf("%s", &elencolibri[i].titolo);
                         printf("Inserisci l'autore del libro: ");
                         scanf("%s", &elencolibri[i].autore);
                         printf("Inserisci il prezzo del libro: ");
                         scanf("%f", &elencolibri[i].prezzo);
         }
         imax= prezzomax( elencolibri, n );
         printf("Il libro con prezzo piu' alto e' :%s", elencolibri[imax].titolo);
         getch();
    }
    
    int prezzomax( tlibri elencolibri[] , int n )
    {
         int I,imax;
         float ap;
         ap=elencolibri[0].prezzo;
         for(I=1;I<n;I++)
         {
          if(elencolibri[I].prezzo>ap)
          imax=I;
    
          return imax;
          }                                          
    }
    CPU: Amd Phenom II 945 Mobo:Asrock 980DE3/U3S3 RAM: 2x4Gb G-skill ddr3 VGA: Asus GTX 660 DirectCuII PSU: OCZ ZT550 HD: Maxtor 200GB+Seagate Barracuda 7200.12 500GB Case: Zalman Z11Plus Monitor: BENQ GL2450HM Mouse: CM Devastator Tastiera: CM Devastator Cuffie: Sharkoon Rush Mousepad: Sharkoon 1337 Gaming Mat

    http://myanimelist.net/profile/master94ga

  5. #5
    SamFisher-92
    Ospite
    Citazione .:Venom:. Visualizza Messaggio
    fermo restando che non so se esista un funzione nativa di C per trovare il massimo valore in un array,
    puoi ciclare l'array di libri impostare la variabile max= 0 prima del ciclo vedi se max<elencolibri[i].prezzo
    allora max=elencolibri[i].prezzo.

    Io non sono un programmatore C ma penso che la logica giusta sia questa.
    Sì in questo caso andava perchè essendo prezzi non dovrebbero essere negativi. Io avevo pensato di partire dal presupposto che il primo elemento dell'array avesse il prezzo massimo, per poi confrontarlo con i successivi.

  6. #6
    Utente L'avatar di Master94ga
    Registrato il
    05-09
    Località
    Messina
    Messaggi
    7.613
    Citazione SamFisher-92 Visualizza Messaggio
    Sì in questo caso andava perchè essendo prezzi non dovrebbero essere negativi. Io avevo pensato di partire dal presupposto che il primo elemento dell'array avesse il prezzo massimo, per poi confrontarlo con i successivi.
    L'ho fatto anche come hai detto tu e funziona:
    Codice:
    /*Scrivere un programmam che consenta di caricare un elenco di massimo 30 libri, ciascuno caratterizzato dai campi:
               -Titolo
               -Autore
               -Prezzo
    Scrivere una funziona che trovi il libro di prezzo maggiore*/
    
    #include <stdio.h>
    #include <conio.h>
    
    typedef struct tlibri
    {
            char titolo [20];
            char autore [30];
            float prezzo [10];
    };
    
    int libroprezmax;
    tlibri elencolibri [100];
    
    void prezzomax (int libroprezmax, int n);
    
    main ()
    {
         int n,i;
         printf("Inserisci il numero dei libri: ");
         scanf("%d", &n);
         
         for(i=0;i<n;i++)
         {
                         printf("Inserisci il titolo del libro: ");
                         scanf("%s", &elencolibri [i].titolo);
                         printf("Inserisci l'autore del libro: ");
                         scanf("%s", &elencolibri [i].autore);
                         printf("Inserisci il prezzo del libro: ");
                         scanf("%f", &elencolibri [i].prezzo);
                         prezzomax(libroprezmax,n);
         }
         getch();
    }
    
    void prezzomax(int libroprezmax, int n)
    {
         int i;
         libroprezmax=0;
    for (i=1;i<n;i++)
    {
        if (elencolibri[i].prezzo>elencolibri[libroprezmax].prezzo) 
        libroprezmax=i;
    }
    printf("Il libro con il prezzo piu' alto e'%s", &elencolibri[libroprezmax].titolo);
    }
    CPU: Amd Phenom II 945 Mobo:Asrock 980DE3/U3S3 RAM: 2x4Gb G-skill ddr3 VGA: Asus GTX 660 DirectCuII PSU: OCZ ZT550 HD: Maxtor 200GB+Seagate Barracuda 7200.12 500GB Case: Zalman Z11Plus Monitor: BENQ GL2450HM Mouse: CM Devastator Tastiera: CM Devastator Cuffie: Sharkoon Rush Mousepad: Sharkoon 1337 Gaming Mat

    http://myanimelist.net/profile/master94ga

  7. #7
    SamFisher-92
    Ospite
    Ma infatti è la stessa cosa, non essendo io programmatore non so dirti quale scegliere, forse il tuo è più leggibile non so.

  8. #8
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    Oddio, da dove è saltata fuori conio.h ? , sono secoli che non la vedo

    Il programma è ok, ma sconsiglio fortemente l'uso del typedef

  9. #9
    Utente
    Registrato il
    02-06
    Località
    ...
    Messaggi
    4.972
    Oddio conio.h?
    Sul serio?

    Cmq per quale motivo sconsiglieresti l'uso dei typedef?
    Son l'unica cosa che salva la leggibilità del codice finchè il nuovo standard non viene adottato ufficialmente.

  10. #10
    Utente L'avatar di Master94ga
    Registrato il
    05-09
    Località
    Messina
    Messaggi
    7.613
    Se avete consigli per migliorarmi, dite
    CPU: Amd Phenom II 945 Mobo:Asrock 980DE3/U3S3 RAM: 2x4Gb G-skill ddr3 VGA: Asus GTX 660 DirectCuII PSU: OCZ ZT550 HD: Maxtor 200GB+Seagate Barracuda 7200.12 500GB Case: Zalman Z11Plus Monitor: BENQ GL2450HM Mouse: CM Devastator Tastiera: CM Devastator Cuffie: Sharkoon Rush Mousepad: Sharkoon 1337 Gaming Mat

    http://myanimelist.net/profile/master94ga

  11. #11
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    Citazione CorralX Visualizza Messaggio
    Cmq per quale motivo sconsiglieresti l'uso dei typedef?
    Son l'unica cosa che salva la leggibilità del codice finchè il nuovo standard non viene adottato ufficialmente.
    Non salva la leggibilità e rende il codice più oscuro. L'abuso del typedef porta a lunghe catene di sinonimi dove è difficile capire con che tipo si ha effettivamente a che fare. Tipo

    typedef unsigned char int8u;
    typedef int8u* int8up;
    typedef int8up ...

    Non è raro vedre orrori del genere sparsi tra le librerie (o tra header della stessa libreria) e questo ha anche contribuito alla diffusione dell'altro orrore che è la notazione ungherese. L'unico caso ammissibile per il typedef è la dichiarazione di puntatori a funzione

  12. #12
    Utente
    Registrato il
    02-06
    Località
    ...
    Messaggi
    4.972
    Citazione devilheart Visualizza Messaggio
    Non salva la leggibilità e rende il codice più oscuro. L'abuso del typedef porta a lunghe catene di sinonimi dove è difficile capire con che tipo si ha effettivamente a che fare. Tipo

    typedef unsigned char int8u;
    typedef int8u* int8up;
    typedef int8up ...

    Non è raro vedre orrori del genere sparsi tra le librerie (o tra header della stessa libreria) e questo ha anche contribuito alla diffusione dell'altro orrore che è la notazione ungherese. L'unico caso ammissibile per il typedef è la dichiarazione di puntatori a funzione
    Beh su obrobri del genere siamo d'accordo.
    Io uso sempre i tipi già definiti, non mi metto a definire mille tipi con lo stesso significato.
    Però nel caso di uso di template i typedef sono fondamentali, soprattutto quando hai contenitori dentro contenitori, con stringhe e iteratori.
    I tipi diventano illeggibile e impossibili da ricordare.
    Non a caso è nato auto nel nuovo standard (che eliminerà il 90% dei motivi per usare un typedef).

  13. #13
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    Sinceramente non sono d'accordo. Scrivere esplicitamente i tipi è fondamentale per capire bene con che dato si ha a che fare

  14. #14
    Utente
    Registrato il
    02-06
    Località
    ...
    Messaggi
    4.972
    Citazione devilheart Visualizza Messaggio
    Sinceramente non sono d'accordo. Scrivere esplicitamente i tipi è fondamentale per capire bene con che dato si ha a che fare
    Io trovo che basta un pò di buona documentazione, e un typedef con un nome senzato che racchiude l'essenza di cosa rappresenta sia molto piu leggibile del tipo originale, soprattutto con template in mezzo.
    Soprattutto quando devo scriverlo 100 volte in 50.000 righe di codice e mi vien la bile
    Ma ognuno ha i suoi metodi, i suoi schemi e le sue preferenze.

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •