programma Agenda studente

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:

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
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 ->
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
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.
 

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
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.
 
U

Utente cancellato 359755

Ospite
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
 

fabio93

Utente Attivo
609
173
CPU
AMD Ryzen 5 2400G
Dissipatore
Arctic Alpine64 Plus
Scheda Madre
Gigabyte GA-AX370-Gaming 3
HDD
Crucial MX500 250 GB, Crucial BX500 240 GB
RAM
G.Skill F4-3200C14D-16GFX FlareX 16 GB
Monitor
HP 2010i
PSU
Corsair TX550M
Case
Sharkoon M25-W
Periferiche
Magicforce 68, Logitech G203
OS
Windows 10 Pro, Fedora 31
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
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili