Originariamente inviato da andypower
Help me please!
Stavo cercando di studiare un esercizio di Algoritmi e strutture dati rispolverando il c++ ma purtroppo mi son accorto di aver perso un po' di informazioni visto che è da un po' che uso solo Java, nn ricordo se una funzione in C++ puo' restituire o meno un array perchè quando compilo questo codice:
...
mi dice che la dichiarazione del prototipo funzione Spam termina scorrettamente. Chi mi aiuta a capire dov'è l'errore??
ecco...
codice:
#include <iostream.h> /* NON utilizzare + <iostream.h> ma al suo posto <iostream> ,che è la sua nuova versione riscritta qualche anno fà */
/* se utilizzi <iostream> il resto del programma sarà cmq lo stesso anche se dovrai inserire in questo punto:
using namespace std; naturalmente non commentato */
const int N = 10;
int* Span (int P[]);
/* la funzione main() non è mai void ma per convenzione SEMPRE int,tanto che molti compilatori danno errore se la dichiari void */
int main () {
int P[N] = {1,4,8,3,5,3,9,2,5,34},*s;
s = new int[N]; /*alloco la memoria per 10 interi anche se non cononosco cosa fà la funzione span(),quindi non so quanto sarà grande il puntatore/array che restituirà)*/
s = Span(P);
return 0; /* aggiungi sempre return 0 alla fine del main o cmq di una funzione che svolge il suo compito CORRETTAMENTE.Ritorna -1 quando invece vi sono "errori" di vario tipo(in un controllo per verificare l'esistenza di un file,in un controllo per controllare se la memoria allocata dinamicamente è disponibile sul pc,ecc.... */
}
/* manca la dichiarazione del array/puntatore S dentro la seguente funzione e poi repeat/until non è un ciclo del c/c++...rimpiazzalo con un DO-WHILE */
int* Span (int P[]) {
int k;
bool done;
for (int i = 0; i < 10; i++) {
k = 0;
done = false;
repeat
if (P[i-k] == P[i]) {
k = k + 1;
} else {
done = true;
until (k > i) or done
}
S[i] = k;
return S;
}
Io ti ho sistemato il fatto del return e altre cosette importanti(confronta i due codice
) e ti ho aggiunto dei commenti utili.
Anche se :
1)Nella funzione ho visto l'istruzione repeat-unitl-done ma esiste in c/c++??
non so ma credo di no.Io la ricordo in pascal/delphi!
2)Sempre nella funzione spam() utilizzi l'array S(che poi è tra l'altro anche "ritornato" dalla stessa) ma senza dichiararlo
.