Procedura per raddoppiare un array (C++)
Buongiorno a tutti ,
questo è il testo dell'esercizio che vorrei sottoporvi:
"Scrivere una procedura RADD che prende in input un array di interi e la sua dimensione e lo modifica raddoppiando il contenuto di ogni sua cella"
E questo è il codice che ho provato a scrivere io :
#include
using namespace std;
void radd (int a[],int dim){
for (int i=0;i
cin>>a;
for (int i=0;i
cout<<<" ";
}
int main(){
int k,num[k];
cout<<"quanti numeri vuoi inserire?\n";
cin>>k;
cout<<"Inseriscili\n";
for (int j=0;j
cin>>num[j];
cout<<"Ecco la serie raddoppiata\n";
radd(num,k);
system("PAUSE");
return 0;
}
Però purtroppo non mi esce ; ho un'idea sul punto in cui sbaglio ma non ne sono sicuro , potreste darmi una mano?
Ps : posso utilizzare solo quella libreria , so che ci potrebbero essere molte funzionalità utili che non conosco , ma purtroppo sto facendo un corso di informatica generale.
Grazie mille
questo è il testo dell'esercizio che vorrei sottoporvi:
"Scrivere una procedura RADD che prende in input un array di interi e la sua dimensione e lo modifica raddoppiando il contenuto di ogni sua cella"
E questo è il codice che ho provato a scrivere io :
#include
using namespace std;
void radd (int a[],int dim){
for (int i=0;i
for (int i=0;i
}
int main(){
int k,num[k];
cout<<"quanti numeri vuoi inserire?\n";
cin>>k;
cout<<"Inseriscili\n";
for (int j=0;j
cout<<"Ecco la serie raddoppiata\n";
radd(num,k);
system("PAUSE");
return 0;
}
Però purtroppo non mi esce ; ho un'idea sul punto in cui sbaglio ma non ne sono sicuro , potreste darmi una mano?
Ps : posso utilizzare solo quella libreria , so che ci potrebbero essere molte funzionalità utili che non conosco , ma purtroppo sto facendo un corso di informatica generale.
Grazie mille

Risposte
Ciao,
secondo te il tuo codice fa quello che viene scritto nell'esercizio?
è più facile di quanto tu pensi-
Comunque prova a spiegare a parole cosa fa il tuo codice, così capiamo come hai interpretato te il problema.
PS: potresti utilizzare il tag [code], così mantieni l'indentazione.
secondo te il tuo codice fa quello che viene scritto nell'esercizio?
"previ91":
"Scrivere una procedura RADD che prende in input un array di interi e la sua dimensione e lo modifica raddoppiando il contenuto di ogni sua cella"
è più facile di quanto tu pensi-
Comunque prova a spiegare a parole cosa fa il tuo codice, così capiamo come hai interpretato te il problema.
PS: potresti utilizzare il tag [code], così mantieni l'indentazione.
Allora : nella procedura inserisco un array di interi quindi lo inizializzo con un ciclo for , poi per avere l'array raddoppiato utilizzo un altro ciclo for (e forse sbaglio qua) e lo mando in cout dato che nella procedura non posso usare return.
Nel main definisco dimensione e "i numeri" dell'array e poi dico qualche preghiera nella speranza di leggere i numeri raddoppiati sul terminale ma ...purtroppo niente
Nel main definisco dimensione e "i numeri" dell'array e poi dico qualche preghiera nella speranza di leggere i numeri raddoppiati sul terminale ma ...purtroppo niente

Forse mi sono complicato la vita ...

Quello che manca totalmente nel tuo codice è una qualche espressione per raddoppiare gli elementi, li stai solo stampando e ovviamente la funzione standard del C++ stampa esattamente quello che è memorizzato nel tuo array e non applica alcuna trasformazione casuale come raddoppiarli. Per cui, partiamo da un problema più semplice. Data una variabile, come la raddoppieresti? Nel tuo codice per l'array dovrai in qualche modo ripetere la stessa operazione per tutte le celle dell'array. Nota che non hai alcun bisogno di restituire l'array perché qualsiasi modifica fatta su di esso si ripercuoterà anche sull'array che hai nel main. Se non ti è chiaro il motivo prova a studiarti meglio come vengono passati gli array alle funzioni sul tuo manuale o sulle tue dispense.
E' qui che ho problemi... non so diciamo che se ho una variabile i , la raddoppio i*=2 ; ma credo sia sbagliato
Ma non stai raddoppiando un elemento dell'array, stai raddoppiando l'indice per accedere a tale elemento. Come raddoppieresti ad esempio il primo elemento dell'array? O ancora più semplicemente come accedi per esempio al terzo elemento di un array?
se l'array è a , il terzo elemento sarà a[3]
Quindi, se dovessi raddoppiare quell'elemento che cosa faresti?
Farei a[3]*=2 , può andare?
Ok, corretto. E se ora volessi raddoppiare tutti gli elementi di un array di lunghezza n?
Ci sto provando proprio adesso ma non riesco bene ; farei a*=2;
però nel mio codice non so come inserirlo ; fino al for credo vada bene :
#include
using namespace std;
void radd (int a[],int dim){
for (int i=0;i
cin>>a;
for (int i=0;i
cout<<<" ";
}
però nel mio codice non so come inserirlo ; fino al for credo vada bene :
#include
using namespace std;
void radd (int a[],int dim){
for (int i=0;i
for (int i=0;i
}
Il tuo codice va scartato al 90% (ciò che rimane è il codice standard) quindi ignoralo. Devi ripensare a come scrivere il problema.
Prova a pensare a come lo faresti a mano. Hai su un foglio di carta n numeri e li devi raddoppiare. Dopo di che prova a scrivere le varie operazioni che fai e trasformale in un codice. Un buon codice non parte da una serie di codici prefabbricati ma dall'algoritmo. Inoltre in genere se tu hai una funzione che raddoppia un array, non devi inserire in quella funzione anche assegnazione dell'array e visualizzazione.
Prova a pensare a come lo faresti a mano. Hai su un foglio di carta n numeri e li devi raddoppiare. Dopo di che prova a scrivere le varie operazioni che fai e trasformale in un codice. Un buon codice non parte da una serie di codici prefabbricati ma dall'algoritmo. Inoltre in genere se tu hai una funzione che raddoppia un array, non devi inserire in quella funzione anche assegnazione dell'array e visualizzazione.
Lo so che fa schifo come codice e purtroppo ci ho provato a lungo...se mi potete dare una mano potrei capire bene i passaggi capendo perchè si fa così o no ! Grazie
Che cos'è un ciclo e come funziona? Ho l'impressione che tu abbia scritto il tuo codice più copiando che comprendendo gli argomenti. Si tratta semplicemente di inserire quell'espressione "a *= 2;" in un qualche ciclo in cui i varia su tutti gli indici possibili.
Un ciclo for per esempio è un ciclo , una ripetizione che inizializzando un indice e imponendo una determinata condizione "fa qualcosa" per un certo numero di volte , sino a che la condizione è vera. Credimi , ho provato in mille modi a inserire quello in qualche ciclo nella mia procedura ma niente!
for(int i=0; i<dim; i++) { a[i] = a[i]*2; }
for(int i=0; i<dim; i+=1) { a[i] += a[i]; }
for(int i=dim-1; i!=-1; i--) { a[i] *= 2; }
Cosa fanno questi 3 codici secondo te?