[C] funzione con riferimento a struttura

fedegt
Ragazzi qualcuno mi può dire il codice del programma??? graziee

1)Usando la struttura

typedef struct {
		int	anno_frequentato;
		int	matricola;
		int 	esami_sostenuti;
		}	Libretto


scrivere il corpo di una funzione col seguente prototipo

VOID tipo_corso (Libretto	unlibretto)

che stampi sullo stdout “studente bravo” o “studente svogliato” solo per gli studenti di matricola pari che abbiano sostenuto almeno 3 esami all’anno.

Risposte
apatriarca
Che cosa non riesci a fare dell'esercizio? Non sai come accedere ai membri della struttura all'interno della funzione? È sufficiente scrivere unlibretto.esami_sostenuti

fedegt
quindi sarebbe così l'esercizio?

VOID tipo_corso (Libretto   unlibretto) 

{
if (unlibretto.matricola%2)
     {if(unlibretto.esami_sotenuti/unlibretto.anno_frequentato>=3) printf("studente bravo \n")
       else printf ("studente svogliato \n");
       }
}

apatriarca
L'idea è quella giusta ma il tuo test per la matricola è sbagliato. unlibretto.matricola % 2 è infatti 0 se la matricola è pari e dispari altrimenti, quindi scritto in quel modo viene vero per le matricole dispari e non per quelle pari. Il resto mi sembra corretto anche se dovresti cercare di formattare il codice in modo da facilitarne la lettura.

fedegt
cioè? non ho capito il pare e dispari

abbax
%2 è la funzione modulo che restituisce il resto della divisione intera tra i due numeri... nel tuo caso n°matricola e 2... solo che nel primo if io non vedo controlli.... cioè quell'if non fa alcun controllo dato che viene fatto solo il modulo ma non si verifica se esso sia uguale ad un certo numero o no

apatriarca
Un numero intero è considerato vero quando è diverso da 0, falso altrimenti (uguale a 0). Nel tuo caso il tuo test è equivalente a

if (unlibretto.matricola % 2 != 0)


che è quindi equivalente a richiedere che la matricola sia dispari. Aggiungi "== 0".

provola-votailprof
"abbax":
%2 è la funzione modulo che restituisce il resto della divisione intera tra i due numeri... nel tuo caso n°matricola e 2... solo che nel primo if io non vedo controlli.... cioè quell'if non fa alcun controllo dato che viene fatto solo il modulo ma non si verifica se esso sia uguale ad un certo numero o no

Quel if fa un controllo, non quello desiderato ma lo fa...
Durante l'esecuzione di questo programma, a quel punto verrà valutata l'espressione unlibretto.matricola%2, che potrà dare 0 o 1 (visto che in una divisione dividendo/divisore il resto massimo è compreso fra 0 e divisore-1). Quindi l'if potrà comparire come o if(0) o if(1). In C ogni condizione diversa da 0 è considerata vera, di conseguenza si entrerà nell'if solo nel caso di matricole dispari.
Io preferisco scrivere così:
if(!unlibretto.matricola%2){
...
}

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.