Stai usando un browser non aggiornato. Potresti non visualizzare correttamente questo o altri siti web. Dovreste aggiornare o usare un browser alternativo.
Hai cercato prima su google? Pare che il problema sia che name.exe sia ancora attivo, uccidilo dal task manager e riprova (magari chiudi e riapri codeblocks, male non fa)
Ho solo letto i quesiti, ma non ho visto la possibilità di usare ricorsione (almeno non intesa come "richiamo della stessa funzione più volte")
1) si risolve con:
1.1)dichiaro una variabile risultato
1.2) la azzero (unibile a 1.1)
1.3) for da 0 a n, escluso usando la variabile X a passi di 1 (la cosa spero abbia senso e potrebbe essere questa la ricorsione, anche se la chiamo iterazione)
1.3.1) risultato=risultato+2*X+1
1.4) ritorno risultato
2) del tutto simile alla prima, tranne che
2.3) for da 1 a n, escluso usando la variabile X a passi di 1 (la cosa spero abbia senso e potrebbe essere questa la ricorsione, anche se la chiamo iterazione)
2.3.1) risultato=risultato+n
Post unito automaticamente:
3) si risolve con
3.1) creo una variabile intera
3.2) le assegno il valore della lunghezza della stringa
3.3) creo una boolean risultato
3.4) la rendo vera
3.5) creo una variabile X
3.6) la azzero
3.7) fino a che lunghezza stringa é maggiore di (X*2)
3.7.1) creobuna boolean Y
3.7.2) verifico che l'X esimo elemento sia uguale al lunghezza-X esimo (NON é una condizione, ma il valore dell'uguaglianza) e assegno il valore dell'uguaglianza a Y
3.7.3) risultato=risultato*Y
3.7.4) X=X+1
3.8) ritorno risultato
NON so se va bene, ma dovrebbe andare, comunque non mi sembra sbagliata
Ma per forza non riesci a fare questo, non ha molto senso...
C++:
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
using namespace std;
int somma(int A[], int n)
{
if (n==0)
return 0;
else
return A[n-1] + somma (A, n-1);
}
int main()
{
int n;
cin>>n;
int A[n];
cin>>A[n];
cout<<somma(A, n);
}
Ormai dovresti sapere come funzionano gli array, comunque...
Stai leggendo in input n e dichiari l'array A di quella dimensione; tuttavia questo array, che è allocato staticamente sullo stack, avrà al suo interno valori "sporchi". Poi assegni alla posizione A[n] il valore letto in input, cosa che non ha molto senso, in quanto quell'indice è fuori dal range dell'array.
Come risultato vedrai sempre numeri "a caso", e quasi certamente piuttosto alti.
Tu dovresti fare un for e richiedere gli N numeri che andrai ad inserire nell'array.
C++:
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
using namespace std;
bool tutti(int A[], int n)
{
if (n<=10)
return false;
else
return tutti (A,n-1);
}
int main()
{
int A[6] = {11, 21, 101, 41, 51,61};
int n=6;
cout<<tutti(A, n);
}
Questo torna false subito in quanto (posto che non ho capito bene cosa vorresti ottenere) n è minore di 10, e quindi entra subito nell'if.
Questo ricorsivo non ha molto senso come esercizio.
Comunque stai sbagliando proprio il caso base e la chiamata ricorsiva; non torna mai true quello.
Devi restituire true se tutti gli elementi sono maggiori di 10 (questo implica dover guardare tutti i valori), e false non appena ne trovi anche solo uno che non rispetta il criterio.
Anche il controllo che fai su A[n] non è corretto: nella prima iterazione varrà quanto la dimensione dell'array, e quindi, come nel precedente esercizio, andrebbe a verificare una posizione fuori dai limiti.
Come lo cambieresti? Non voglio darti subito la soluzione, ti suggerisco solo che l'if che utilizzi è corretto (a parte l'indice sbagliato), ma che ne manca un altro (che torni true).
Questo ricorsivo non ha molto senso come esercizio.
Comunque stai sbagliando proprio il caso base e la chiamata ricorsiva; non torna mai true quello.
Devi restituire true se tutti gli elementi sono maggiori di 10 (questo implica dover guardare tutti i valori), e false non appena ne trovi anche solo uno che non rispetta il criterio.
Anche il controllo che fai su A[n] non è corretto: nella prima iterazione varrà quanto la dimensione dell'array, e quindi, come nel precedente esercizio, andrebbe a verificare una posizione fuori dai limiti.
Come lo cambieresti? Non voglio darti subito la soluzione, ti suggerisco solo che l'if che utilizzi è corretto (a parte l'indice sbagliato), ma che ne manca un altro (che torni true).
Per questa volta puoi scrivermi il codice corretto?
Ora sono un po' fuso sono due giorni che faccio informatica e non riesco ora piu' a connettere, devo mettermi su scienze e fisica, se per favore ripeto puoi correggerlo perchè ora come ora potrei stare li' tutto il pomeriggio ma non ho piu' la testa per informatica....
E' meglio se ci provi comunque, sono due righe in croce...
Se ti perdi nei ragionamenti chiedi, se non è chiaro qualcosa anche, approfittane. Vale sempre il discorso delle volte precedenti.
Stacca dal problema se non riesci ora. Cosa ti sta bloccando?
Hai ragione ma non ci arrivo scusami non sempre è banale quello che per te è banale credimi, la soluzione sarà anche elementare ma non ci arrivo, come ben sai non sono un "mostro" e in questo thread alla fine ho cercato le soluzioni anche tramite vostre indicazioni senza avere la soluzione già fatta giustamente , ma per questo esercizio ti chiedo cortesemente se puoi scrivermi esattamente come va fatto.
Ho fatto anche il minimo e il massimo in un array:
C++:
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
using namespace std;
if (n == 1)
return A[0];
return min(A[n-1], minimo(A, n-1));
}
int main()
{
int A[] = {1, 4, 45, 6, -50, 10, 2};
int n=7;
cout << minimo(A, n);
return 0;
}
C++:
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>
using namespace std;
if (n == 1)
return A[0];
return min(A[n-1], minimo(A, n-1));
}
int massimo(int A[], int n)
{
if (n == 1)
return A[0];
return max(A[n-1], massimo(A, n-1));
}
int main()
{
int A[] = {1, 4, 45, 6, -50, 10, 2};
int n=7;
cout << massimo(A, n);
return 0;
}
ho visto che si puo' usare min e max (che non avevo mai usato) ma pero' in un forum ho visto che al posto di
if (n == 1)
return A[0];
usano
if (n == 0)
return A[0];
qual'è la soluzione giusta?
ho visto che si puo' usare min e max (che non avevo mai usato) ma pero' in un forum ho visto che al posto di
if (n == 1)
return A[0];
usano
if (n == 0)
return A[0];
qual'è la soluzione giusta?
Se scorri tutto l'array sino a quando non ha più elementi, e quindi giungi all'ultima posizione, sei sicuro che la condizione sia rispettata, e quindi restituisci true.
Si, nel tuo caso si. Per lui ad ogni chiamata l'elemento corrente è a[n], nel tuo caso è a[n-1].
Tra i due preferisco utilizzare n e non n-1; comunque il risultato è il medesimo.