|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Apr 2010
Messaggi: 3
|
[c++] problema funzione
Ciao a tutti sono nuovo del forum e anche alla programmazione.non capisco perche' la funzione che ho scritto mi restituisce dei valori che non sono quelli che vorrei cioe' la tabellina di un numero che gli passo.Grazie e scusate la mia ignoranza.
#include <cstdlib> #include <iostream> //funzione che riceve un numero e ne restituisce la tabellina using namespace std; int tabelline(int num) { int v[10];//vettore per contenere la tabellina int ris=0; int i=1; int numero; for(i=1;i<=10;i++) { ris=numero*i;//ris=il numero per il contatore e passo il risultato al vettore v[ris]; } return v[ris];//restituisce il vettore con la tabellina del numero } int main(int argc, char *argv[]) { int numero; cout<<"scrivi un numero "<<endl; cin>>numero; cout<<"la tabellina di "<<numero<<" e' "<<endl<<tabelline(numero);//chiamo la funzione e gli passo numero system("PAUSE"); return EXIT_SUCCESS; } |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Semplicemente perché invece di moltiplicare num per i, moltiplichi numero per i.
numero tra l'altro è una variabile (inutile) che non hai inizializzato. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
ehm....ci sono un paio di errori ovunque nella struttura della funzione
Codice:
int tabelline(int num) { //qui la funzione restituisce solo un intero...non una tabellina..e non usi la variabile "num"
int v[10];
int ris=0;
int i=1;
int numero;
for(i=1;i<=10;i++) { //gli indici devono andare da 0 a 9
ris=numero*i;
v[ris]; //questa operazione non fa nulla
}
return v[ris]; //restituisce un elemento che è al di fuori del vettore
}
Codice:
int[] tabelline(int num) {
int v[10];
for(int i=0;i<10;i++)
v[i]=num*(i+1);
return v;
}
Ultima modifica di lupoxxx87 : 20-04-2010 alle 16:17. |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Apr 2010
Messaggi: 3
|
#include <cstdlib>
#include <iostream> using namespace std; //funzione che dato un numero ne stampa la tabellina int tabellina(int num) { int v[10];//vettore per contenere la tabellina int risultato=0,i=0; for(i=1;i<=10;i++) { risultato=num*i; v[risultato]; } return v[risultato]; } int main(int argc, char *argv[]) { int risposta; cout<<"inserisci numero"<<endl; cin>>risposta; cout<<"la tabellina del "<<risposta<<" e' "<<tabellina(risposta)<<endl; system("PAUSE"); return EXIT_SUCCESS; } questo e' cio' che ho scritto dopo alcune modifiche grazie ai vostri suggerimenti purtroppo continua a restituire valori strani.Io penso che il problema sia che la funzione deve restituire un vettore.Forse vanno usati i puntatori.Spero che qualcuno me lo spieghi.grazie Ultima modifica di gabriel_cz : 30-04-2010 alle 19:42. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Usa il tag code per favore...
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6659
|
Quote:
Se vuoi che restituisca una tabellina, la funzione dovrà restituire un array di interi, e non un intero. Ma tu, l'array, non lo costruisci, anzi rischi che ti dia parecchi problemi. Vediamo nel dettaglio. int risultato=0,i=0;Qui, l'inizializzatione di i è inutile, perché subito dopo (nel for) lo poni ad 1. Fai così: lo inizializzi subito ad 1, ed elimini l'assegnazione nel primo pezzo del for, così: for(;i<=10;i++) v[risultato];Questa riga non fa assolutamente nulla: non assegni, insomma, il risultato alla corrispondente posizione nell'array. Quello che fai è richiamare il valore dell'array v nella posizione risultato (che quindi può valere anche 90, ben oltre i limiti dell'array)... e basta, perché non ci fai nulla: non lo assegni a niente. Allora, ricapitoliamo: tu vuoi che l'array contenga la tabellina. Cioè, nel primo posto ci vuoi num*1, nel secondo num*2 e così via. Allora, quello che devi fare è questo: v[i-1]=risultato;La variabile i contiene i valori da 1 a 10 e c'è utile per indicare la posizione all'interno dell'array. Il -1 serve perché la prima posizione dell'array è indicata con 0 e non con 1. Quindi fai l'assegnazione dovuta. return v[risultato];Per l'appunto, questo è l'errore di prima. Se immetto 5 come num, allora verrà restituito v[50], che è un valore numerico ben oltre il range dell'array. Inoltre, così tu restituisci un intero, e non un array. Allora devi restituire v, e non v[qualcosa]. Contemporaneamente, devi modificare la dichiarazione della funzione in modo che restituisca un array, o più generalmente un puntatore ad una variabile di tipo intero. Così: int* tabellina(int num)Tutto il trucco sta in quel piccolo asterisco, per farti entrare nel magico mondo dei puntatori (non ne sai molto, vero? Preparati psicologicamente, per chi non li ha mai visti sono un po' un trauma... E col C ne vedrai fino al voltastomaco). Infine c'è la questione della stampa a video. Non puoi stampare direttamente un array, questo è poco ma sicuro. Ti produrrebbe risultati incomprensibili... Ti consiglio di cambiare l'ultima parte così: Codice PHP:
__________________
HWU Rugby Group :'( - FAQ Processori - Aurea Sectio - CogitoWeb: idee varie sviluppando nel web
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
|
Codice PHP:
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Apr 2010
Messaggi: 3
|
grazie ragazzi.erano giorni che ci pensavo ma non riuscivo ad uscirne.
Max se mi spiegassi nel dettaglio ,come hai fatto nella prima parte,il codice per la stampa,te ne sarei grato. deadly adesso mi studio quello che hai scritto tu e casomai ti chiedo chiarimenti. Pensavo fosse piu' facile,voleva essere un esercizio per imparare ma si e' rivelato piu' ostico di quello che pensavo... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:36.












HWU Rugby Group







