Contraddizione traccia:

di il
26 risposte

Contraddizione traccia:

Salve a tutti! Riscrivo qui sopra a seguito di un dubbio che mi è sorto:
sto ancora esercitandomi per l'esame di informatica. In un traccia scritta dal mio professore c'è una richiesta del genere:
"Si sviluppi una funzione capace di restituire il minimo valore di un array di interi e l'indice del valore restituito nell'array."
Ovviamente ho già definito la dimensione dell'array e gli elementi che esso contiene. Il problema è: quale funzione devo utilizzare? Da un lato ho pensato ad una fuzione del tipo int, dato che devo RESTITUIRE valori che devono essere numeri interi, e quindi al termine della funzione dovrò inserire "return"; dall'altro lato mi verrebbe da dire void, che può operare su molteplici dati, poiché devo ottenere più di un valore: il minimo e l'indice, tuttavia per definizione void è una procedura, cioè una funzione che non restituisce nulla. Il mio dilemma è: il professore è stato poco chiaro a scrivere la traccia e dovrò chiedergli spiegazioni al ricevimento, oppure esiste un modo per utilizzare int ed ottenere più di un risultato? Mi sembrerebbe comunque strano, dato che una funzione per definizione matematica, se deve restituire qualcosa, quel qualcosa deve essere unico. Grazie mille per l'attenzione nuovamente!!

26 Risposte

  • Re: Contraddizione traccia:

    Hai studiato i puntatori? Puoi usare la funzione void e restituire i due valori tramite puntatori con due argomenti
  • Re: Contraddizione traccia:

    No, se per puntatori intendi questi : * non li abbiamo mai utilizzati, nè il prof ce li ha mai spiegati. Abbiamo studiato solo sostituzioni per valore o per riferimento, quindi non ho altra scelta.
  • Re: Contraddizione traccia:

    Ma poi aggiungo, ci si dovrebbe mettere d'accordo sul significato di "restituire": se anche nel caso di una funzione void si può utilizzare tale termine, significa che la parola non è strettamente legata all'utilizzo di "return ... "?
  • Re: Contraddizione traccia:

    Allora una struct come return value? Non mi dire che non avete fatto nemmeno quelle...
  • Re: Contraddizione traccia:

    Weierstrass ha scritto:


    Allora una struct come return value? Non mi dire che non avete fatto nemmeno quelle...
    Le struct le abbiamo fatte, sì, almeno quelle è necessario vi fossero nel corso, però nella traccia non è scritto esplicitamente che bisogna creare una struct per risolvere il problema. Se è necessaria una struct, il professore scrive SEMPRE nella traccia di crearne una.
  • Re: Contraddizione traccia:

    Una condizione necessaria è necessaria di per sé, non perché te lo dice il prof. Se non ti piace la struct usa pure i puntatori nella versione [ ], tanto sono uguali a *
  • Re: Contraddizione traccia:

    Per capirci o puntatori o struct c'è poco da studiarci su...

    È un esercizio semplice...
  • Re: Contraddizione traccia:

    Ma tu hai perfettamente ragione! Anzi, ringrazio moltissimo sia te che Oregon per i consigli. E' che come al solito, questi prof, o li assecondi, o ti bocciano e le struct non le ho mai viste utilizzate in questo modo, sottolineo da parte sua. Forse so come fare: definisco due variabili globali al di fuori della funzione, le inserisco nel prototipo di una void e poi, tramite parametro di riferimento con la e commerciale, le riottengo modificate, ma ancora una volta, mi pare strano si utilizzi il termine "restituire". Ciò che m'interessa davvero è sapere se questo verbo può essere utilizzato, in maniera cauta, anche con le void.
  • Re: Contraddizione traccia:

    Quindi l'esame è C++? Quella soluzione non è valida in C
  • Re: Contraddizione traccia:

  • Re: Contraddizione traccia:

    Weierstrass ha scritto:


    Quindi l'esame è C++? Quella soluzione non è valida in C
    Esatto, è in C++
  • Re: Contraddizione traccia:

    migliorabile ha scritto:


    1) NI: la funzione deve restituire DUE interi, NON uno: il massimo e l'indice dove si trova il massimo

    2) ASSOLUTAMENTE NO: void vuol dire che NON RITORNA NULLA, metre tu DEVI ritornare qualcosa. Inoltre NON scambiare i PARAMETRI con il RISULTATO: i parametri li passi alla funzione, il risultato telo ritorna la funzione. E NON LIMITARTI alle funzioni SEMPLICI usate in matematica (seno, coseno, massimo, minimo, ...) che accettano un numero e ritornano un numero. Anche in matematica, una funzione ""vettoriale"" puo avere piu' parametri e ritornare piu' valori

    3) ESATTAMENTE

    4) il prof e' stato PERFETTAMENTE CHIARO. NOn servono spiegazioni

    5) e' ASSOLUTAMENTE PERMESSO/NORMALE che una funzione ritornari PIU' valori. Per fare un esempio una funzione che ritorna un numero complesso sta' ritornando DUE valori. Una funzione che moltiplica due matrici ritorna come valore il prodotto delle matrici che e' un oggetto con TANTI valori.

    Quindi le informazioni SONO PIU' CHE SUFFICIENTI. Esistono, ovviamente, MOLTE implementazioni possibili. Le piu' banali:

    1) una struct
    2) un vettore di DUE elementi

    e con questo ho gia' detto troppo


    Nota: se NON LE HAI MAI VISTE utilizzate in questo modo, e' solo perche' non hai guardato abbastanza.
    Si fa di MOOOOOOOOLTO peggio, te lo assicuro

    6) VARIABILI GLOBALI?????? Ti taglio le dita della mano!!!!!

    7) NO: con void NON SI RESTUTUISCE NULLA ne in modo cauto NE in modo incauto.

    8 ) pensa in grande. DOVE e' scritto che ti una funzione puo' ritornare SOLO valori semplici???????

    Ti rispondo io: DA NESSUNA PARTE!!!!!!

    9) si potrebbe fare anche con i puntatori, ma non ti servono
    Ammetto che questa risposta perentoria mi ha messo un po' in soggezione , ma al contempo è stata utile per capire bene cosa posso fare e cosa no, per cui ti ringrazio infinitamente. Il dubbio mi era venuto perché appunto non ho guardato abbastanza esempi, o meglio, non mi si è mai presentato un esempio simile nello specifico. Anzi, proprio adesso un mio amico a cui gli avevo chiesto questa cosa mi ha scritto di usare o un "qualcosa di simile" ad un vettore o una struttura che includesse entrambi i valori, oppure addirittura una void come ho pensato io per un attimo... e questo ragazzo ha preso 28... per intenderci... ma concordava con me che non avesse mai visto un esempio simile, in cui cioè si dovessero restituire due valori.
  • Re: Contraddizione traccia:

    NON SERVE riquotare tutto il testo! E' gia' scritto nel post precedente.

    La funzione NON RITORNA due valori, MA UN VALORE '''composito'''.
    E come e' composto questo UNICO valore?
    Da TUTTO quello che ti pare!
    Un intero, CENTO interi, una stringa, un mix di interi, stringhe, vettori, puntatori, funzioni, altee cose piu' complicate.

    Ma e' sempre UN valore.

    Se ti ha consigliato I'll void e ha preso 28, e' perche' non lo ha detto al prof .
    Altrimenti il prof lo avrebbe '''defenestrato'''
  • Re: Contraddizione traccia:

    Beh, se insegna C++ senza puntatori è dura che si azzardi a defenestrare qualcuno... che poi magari il consiglio vuole approfondire la questione
Devi accedere o registrarti per scrivere nel forum
26 risposte