[C]Function

di il
6 risposte

[C]Function

Salve a tutti mi presento brevemente (non ho trovato alcuna sezione apposita).Sono uno studente di Informatica e come primo lnguaggio stiamo studiando il C.
Vengo al dunque... in laboratorio avevamo un esercizio del genere:

-Riempimento array di float a
s=variabile di scelta

If(s==1)
printf("max=%f\n",max(a));
if(s==2)
printf("absmax=%f\n",absmax(a));

In pratica inserito un vettore si può scegliere tramite due funzioni se trovare il massimo (max(a)) oppure il massimo in valore assoluto (absmax(a)); le funzioni vengono richiamate solo nei printf alle quali viene passato solo l'array a (senza la dimensione),mi chiedo se sia possibile fare una cosa del genere ,anche perchè provando il programma non funziona (il compilatore mi restiuisce errori relativi al fatto che la dimensione del vettore non viene passata);in base a che criterio si può fare una cos del genere?Non credo il professore abbia scritto qualcosa di illogico,piuttosto forse ci manca qualcosa.

Grazie in anticipo

6 Risposte

  • Re: [C]Function

    Se mostri il codice C forse qualcuno può lavorarci su.
    Ciao
  • Re: [C]Function

    Se ti serve la dimensione deevi calcolarla all'interno della funzione. I vettori hanno un marcatore di fine, un elemento che segna la fine del vettore ed è '\0'.
    Perciò, la butto lì, potresti con un ciclo while calcolare la lunghezza del vettore ad es:
    
    i=0;
    while (a[i] != '\0'){
           i++;
    }
    
    in questo modo i indicherà la lunghezza del vettore. Spero di esserti stato utile, sono solo un autodidatta quindi non prendermi come verità rivelata.
  • Re: [C]Function

    Edit:Ecco il codice

    MAIN


    1 Function


    2 Function



    Notate che alle funzioni non viene passata la dimensione del vettore e queste vengono richiamate direttamente nei printf,si può fare così?A me questo programma non va
  • Re: [C]Function

    AscanioFX ha scritto:


    I vettori hanno un marcatore di fine, un elemento che segna la fine del vettore ed è '\0'.
    Falso. Per un array di float lo 0 è perfettamente legale.
    Stai facendo confusione con le ASCIIZ string, che sono un caso particolare di array di char.
    Dato che le ASCIIZ string di solito contengono un limitato insieme dei 256 bytes possibili, i progettisti del C hanno deciso di terminarle con lo 0, ma se tu hai bisogno di leggere tutti i 256 bytes possibili lo 0 diventa valido, pertanto è indispensabile sapere a priori la lunghezza di tale array e portarsela dietro quando serve.
  • Re: [C]Function

    boolean ha scritto:


    Notate che alle funzioni non viene passata la dimensione del vettore e queste vengono richiamate direttamente nei printf,si può fare così?
    Si è corretto. Alle funzioni la dimensione dell'array la passi tramite la macro LEN definita a inizio codice, mentre le printf si limitano a mostrare l'unico valore restituito dalle funzioni.
  • Re: [C]Function

    shodan ha scritto:


    boolean ha scritto:


    Notate che alle funzioni non viene passata la dimensione del vettore e queste vengono richiamate direttamente nei printf,si può fare così?
    Si è corretto. Alle funzioni la dimensione dell'array la passi tramite la macro LEN definita a inizio codice, mentre le printf si limitano a mostrare l'unico valore restituito dalle funzioni.
    Grazie 1000;Solitamente spostimo in un header sia la dimensione del vettore che la dichiarazione delle funzioni,in questo caso comununque non c'è bisogno di passare il LEN alle funzioni?
Devi accedere o registrarti per scrivere nel forum
6 risposte