programma Agenda studente

Pubblicità
U

Utente cancellato 359755

Ospite
Salve a tutti, sto scrivendo un programma che mi permetta di gestire l'agenda di uno studente. Ho però un problema, penso legato al passaggio per parametri.



Questo è il sottoprogramma che mi deve ordinare per giorno gli appuntamenti, mentre
C:
ordinamento (Anno2020, appoggio, i);
questa sarebbe la chiamata alla funzione.
Il problema è che eseguendo il programma, quando poi con un'altra funzione provo a stampare lo struct, esce come se non fosse stato ordinato.
Ho provato allora a modificarlo così
C:
void ordinamento (Agenda *Anno2020, Agenda appoggio, int i){
    for(int k=0; k<i; k++){
            if( Anno2020.numero[k].n_giorno > Anno2020.numero[k+1].n_giorno ){

                Anno2020.numero[k+1]=appoggio.numero[k];
            }
        }
}
C:
ordinamento (&Anno2020, appoggio, i);
tuttavia mi escono questi tipi di errore
20 44 [Error] request for member 'numero' in something not a structure or union
 
Ultima modifica da un moderatore:
Sai cosa è un puntatore? Perché a quanto sembra no

Innanzitutto quello che stai facendo non è un ordinamento, quanto solo la prima iterazione di un ordinamento di tipo BubbleSort. Non è corretto che tu chieda il supporto come parametro e nemmeno, a mio punto di vista, un parametro di nome i perché utilizzato di solito come contatore.

Ora, riflettendoci bene, potresti star facendo questo:
C:
for (int i = length; i > 0; -—i)
    ordinamento(Anno2020, appoggio, i);
Cosa che posso solo supporre, visto che ti sei limitato molto nel pubblicare il codice…

Ti posso dire che non dovresti fare così in quanto stai solo spezzando il BubbleSort in iterazioni e definendo queste “ordinamento”.
E poi hai davvero bisogno di un oggetto Agenda come oggetto temporaneo? Se ordini un vettore di interi usi un altro vettori di interi come supporto?

E per quanto riguarda l’ultimo problema semplicemente stai correttamente passando il puntatore a struttura, ma nella funzione stessa lo stai utilizzando come oggetto con l’operatore . mentre dovresti usare ->
 
Ti riconfermo quello che ti ho scritto, apparte la mia supposizione.

Implementa correttamente il BubbleSort e non passare i (che nemmeno hai inizializzato apparentemente) ma piuttosto il numero stesso di giorni, ossia 31, in una costante magari.
 
Il programma non viene compilato perché alla chiamata di BubbleSort0 stai passando un array di tipo Giorno mentre nella definizione della funzione hai dichiarato come parametro di input un array di int. Devi modificare la definizione in modo da far sì che prenda in input un array di tipo Giorno. Idem per la funzione scambia. Nell'ordinamento, precisamente in if (a[j-1] > a[j]), devi modificare la condizione perché l'operatore > non è definito per il tipo Giorno: non si possono confrontare direttamente due variabili Giorno, bensì il confronto deve essere fatto su uno dei campi della struct Giorno (ad esempio n_giorno).
Inoltre, quando chiami BubbleSort0 devi passare come secondo parametro il numero di elementi dell'array effettivamente utilizzati, non 31.
 
Sì, so che non viene compilato perché passocun array di tipo Giorno mentre nella definizione della funzione ho dichiarato come parametro di input un array di int e che quindi devo modificare la definizione in modo da far sì che prenda in input un array di tipo Giorno.
Il problema è che non so come modificarlo per passare la struttura su cui deve operare, perciò avevo chiesto un esempio se possibile
 
Devi semplicemente cambiare il tipo dell'array che appare come primo parametro delle funzioni BubbleSort0 e scambia da int a Giorno, e di conseguenza anche della variabile temp, e fare il confronto nell'if non direttamente tra due elementi di tipo Giorno ma tra i valori di un loro campo. Ad esempio, scegliendo di ordinare in base a n_giorno, la condizione diventa a[j-1].n_giorno > a[j].n_giorno
 
Pubblicità
Pubblicità
Indietro
Top