Funzioni

di il
7 risposte

Funzioni

Ciao a tutti! Ho un problema con un tema esame su linguaggio C e non riesco proprio a capire come risolverlo. Il testo dell'esercizio è il seguente:


Un programma in linguaggio C deve gestire i dati degli iscritti ad un club
tennistico. Nel seguito viene riportato l’inizio del codice in main che acquisisce e
stampa i dati di un certo numero di iscritti, quindi determina l’iscritto più giovane
tra quelli acquisiti copiandolo nella variabile g.
int main(){
int i,n;
struct tennista v[100];
struct tennista g;
printf(“Inserire numero iscritti\n”);
scanf(“%d”, &n);
for(i=0; i<n; i++)
v[i]=input_iscritto();
for(i=0; i<n; i++)
stampa_iscritto(v+i);
piugiovane(v, n, &g);
…
}

Per quanto riguarda le funzioni input_iscritto e stampa_iscritto non ho avuto nessun problema. ma per la funzione piugiovane non so dove andare a parare Se qualcuno ha voglia di darmi qualche suggerimento gliene sarei molto grato! Ho provato in vari modi ma non sono riuscito ad arrivare a nessuna soluzione.(Il tema esame chiede di stendere solo le funzioni al di fuori del main.)

7 Risposte

  • Re: Funzioni

    Io ho provato a fare così ma non so se sia giusto e se poi effettivamente funzioni nel main:
    
    struct tennista piugiovane(struct tennista iscritti[100], int nisc){
    	int i;
    	struct tennista *t;
    	t=&iscritti[i];
    	for(i=0;i<nisc;i++){
    		if(iscritti[i].data.anno>t->data.anno){
    			t=&iscritti[i];
    		}else{
    			if(iscritti[i].data.anno=t->data.anno || iscritti[i].data.mese>t->data.mese){
    				t=&iscritti[i];
    			}else{
    				if(iscritti[i].data.anno==t->data.anno || iscritti[i].data.mese==t->data.mese || iscritti[i].data.giorno>t->data.giorno){
    					t=&iscritti[i];
    				}
    			}
    		}
    		printf("L'atleta piu giovane e %s %s \n",t->nome,t->cognome);
    	}
    }
    
  • Re: Funzioni

    Ma compila?
  • Re: Funzioni

    Nel main ho scritto così:
    
    int main(int argc, char *argv[]) {
    	int i,n;
    	struct tennista g;
    	struct tennista v[100];
    	do{
    		printf("Quanti atleti vuoi inserire? \n");
    		scanf("%d",&n);
    	}while(n>100);
    	for(i=0;i<n;i++){
    		printf("ATLETA N %d: \n",i+1);
    		v[i]=input_iscritto();
    	}
    	for(i=0;i<n;i++){
    		printf("ATLETA ISCRITTO N %d: \n",i+1);
    		stampa_iscritto(&v[i]);
    	
    	}
    	for(i=0;i<n;i++){
    		piugiovane(&v[100],&g);
    	}
    	return 0;
    }
    
    tutto funziona perfettamente tranne quando arrivo alla funzione piugiovane, qui il compilatore compila ma mi esce la nota di attenzione "passing argument 2 of 'piugiovane' makes integer from pointer without a cast" e quando lo avvio e arrivo al momento della funzione piugiovane mi stampa a video cose a caso.
  • Re: Funzioni

    Mi preme molto capire lo schema da usare perchè praticamente in tutti i suoi tema esame mette una richiesta del genere, che sia l'atleta più giovane di una squadra o il libro più vecchio di una collezione, credo che il ragionamento dietro sarà sempre più o meno lo stesso.
  • Re: Funzioni

    Se scrivi cose a caso non puoi pretendere che ti ritornino cose sensate

    piugiovane(struct tennista iscritti[100], int nisc)

    Non la puoi chiamare così

    piugiovane(&v[100],&g)

    Che argomenti stai passando alla funzione? Cos'è &v[100]? Devi iniziare dal primo elemento dell'array. E &g non ha senso, devi passargli n
    Che poi il return value della funzione non sarebbe meglio int? E la funzione è corretta come l'hai scritta? E perché la chiami dentro un for?
  • Re: Funzioni

    Nel main
    piugiovane(&v[100],&g);
    Gli stai passando il centesimo elemento del vettore e g, che non è un int.
    Magari la chiamata giusta sarebbe stata:
    piugiovane(v,n);
    In piugiovane la variabile i va inizializzata prima di usarla e il confronto di uguaglianza si fa con == (vedi la parte dove confronti il mese).
  • Re: Funzioni

    Ok ora funziona, in effetti giustamente il ciclo for non serve proprio a nulla. Mi è bastato eliminare (anche qui giustamente) la & dalla funzione e sostituire la struttura tennista g con il numero di iscritti n. Effettivamente ho sbagliato a leggere la traccia, piugiovane riceve in ingresso la struttura tennista v e il numero intero n di atleti iscritti, e il risultato lo restituisce nella variabile g (&g). Ora ho capito. Grazie mille a tutti!
Devi accedere o registrarti per scrivere nel forum
7 risposte