Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: [C] Ordinamento struct

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    7

    Struct C

    A quanto pare è un problema abbastanza comune, ho letto spesso di persone che hanno problemi con le struct in C e, purtroppo, ci sono anche io. In realtà l'unica cosa che mi viene difficile è l'ordinamento, stavo provando con il bubblesort (anche perchè è l'unico che abbiamo fatto bene) ma mi è sembrato molto poco adatto. Quindi ho optato per strncpy, funzione che ho deciso di studiare da solo, in quanto, i miei professori, si sono dimostrati totali incompetenti. Quello che vi chiedo è di postare come dovrebbe essere fatto il codice, magari con qualche spiegazione. Io ho fatto varie e infruttuose prove. Se avete anche consigli generali per migliorare il codice sono sempre ben accetti. Grazie
    codice:
    //Codice che prende in input dati di un album e li restituisce ordinati per data
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define SIZE 50
    
    struct album {
    
           char nome_album[SIZE];
           char nome_artista[SIZE];
           int anno_album;
           };
    typedef struct album CD;
    
    void inserimento(int, CD[]);
    void stampa(int, CD[]);
    void ordinamento(int, CD[]);
    
    main () {
    
         int num_album;
         CD album[SIZE];
         //int menu=1;
    
         printf("Quanti cd vuoi inserire? ");
         scanf("%d",&num_album);
         printf("\n");
         printf("Inserisci i dati dei cd\n");
    
         inserimento(num_album, album);
         stampa(num_album, album);
         ordinamento(num_album, album);
         system("pause");
         }
    
    
    void inserimento(int num_album, CD album[]){
    
         int i;
    
         for (i=0;i<num_album;i++){
    
          printf("\nCD %d\n",i+1);
    
          printf("Nome dell'album\n");
           gets(album[i].nome_album);
           gets(album[i].nome_album);
          printf("Nome dell'artista\n");
           gets(album[i].nome_artista);
          printf("Anno di uscita dell'album\n");
           scanf("%d",&album[i].anno_album);
           printf("\n");
    
         }
          return;
    }
    
    void stampa(int num_album, CD album[]){ //Per ora la stampa avviene seguendo l'ordine di inserimento ma vorrei che in seguito fosse legata all'ordinamento
    
         int i;
         for (i=0;i<num_album;i++){
    
          printf("\nCD %d\n",i+1);
    
          printf("%s,",album[i].nome_album);
          printf("%s,",album[i].nome_artista);
          printf("%d",album[i].anno_album);
         }
         printf("\n");
          return;
    }
    
    void ordinamento(int num_album, CD album[]){
    
    
     int i=0, j=0;
     for (i=0; i<num_album-1; i++){
            for (j=i+1; j<num_album; j++){
             if (album[i].anno_album>album[j].anno_album){
    
                 //non so come continuare, tutte le prove, non hanno funzionato
    
             }
    
            }
     }

  2. #2

    Moderazione

    Ho provveduto a mettere il codice tra tag [co­de] ... [/co­de] (altrimenti perde l'indentazione) e a rendere il titolo un po' più significativo, in futuro ricordati di impostare il thread correttamente fin da subito.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    7
    Grazie mille, lo avevo fatto, ma evidentemente avevo sbagliato qualcosa perchè usciva tutto su un'unica riga quindi ho preferito scriverlo normalmente

  4. #4
    Originariamente inviato da Nerul
    Grazie mille, lo avevo fatto, ma evidentemente avevo sbagliato qualcosa perchè usciva tutto su un'unica riga quindi ho preferito scriverlo normalmente
    Sì è uno dei tanti bachi del forum i pulsanti "CODE", "PHP" e "Quote" sono sostanzialmente inutili perché la finestra che viene fuori consente di inserire una sola riga, il modo corretto è incollare il codice e aggiungerci intorno i tag [co­de] ... [/co­de] a mano.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481

    Re: Struct C

    Originariamente inviato da Nerul
    //non so come continuare, tutte le prove, non hanno funzionato
    Qui devi scambiare i due elementi del vettore di strutture album[i] e album[j] usando una variabile di tipo struttura temporanea (come faresti per due interi ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    7

    Re: Re: Struct C

    Originariamente inviato da oregon
    usando una variabile di tipo struttura temporanea
    Ok e questo lo avevo capito, il problema è che la variabile struttura temporanea non so come inserirla, non è che potresti farmi un esempio?
    Intendo: dovrei dichiararla nella funzione, quindi dovrebbe essere tipo
    codice:
    CD album[min];
    ?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Semplicemente

    CD temp;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    7
    void ordinamento(int num_album, CD album[]){

    CD temp;
    int i=0, j=0;
    for (i=0; i<num_album-1; i++){
    for (j=i+1; j<num_album; j++){
    if (album[i].anno_album<album[j].anno_album){

    CD temp=CD album[i];
    CD album[i]=CD album[j];
    CD album[j]=CD temp;
    }

    faccio così ma mi da errore:
    expected espression before CD
    variable-sized object may not be initialized

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    7
    Originariamente inviato da Nerul
    void ordinamento(int num_album, CD album[]){

    CD temp;
    int i=0, j=0;
    for (i=0; i<num_album-1; i++){
    for (j=i+1; j<num_album; j++){
    if (album[i].anno_album<album[j].anno_album){

    CD temp=CD album[i];
    CD album[i]=CD album[j];
    CD album[j]=CD temp;
    }

    faccio così ma mi da errore:
    expected espression before CD
    variable-sized object may not be initialized
    scusate se non uso code ma continua a darmi quell'errore di mettere tutto su un unica linea

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    E' solo temp che devi dichiarare, il vettore esiste già ...

    codice:
    CD temp;
    
    temp=album[i];
    album[i]=album[j];
    album[j]=temp;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.