Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-04-2010, 14:57   #1
gabriel_cz
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;
}
gabriel_cz è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2010, 15:08   #2
agente mm8
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.
agente mm8 è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2010, 15:10   #3
lupoxxx87
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
}
una versione corretta potrebbe essere

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 15:17.
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2010, 18:37   #4
gabriel_cz
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 18:42.
gabriel_cz è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2010, 20:18   #5
agente mm8
Senior Member
 
Iscritto dal: Mar 2008
Messaggi: 401
Usa il tag code per favore...
agente mm8 è offline   Rispondi citando il messaggio o parte di esso
Old 01-05-2010, 00:02   #6
MaxArt
Senior Member
 
L'Avatar di MaxArt
 
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6659
Quote:
Originariamente inviato da gabriel_cz Guarda i messaggi
Codice PHP:
#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 argcchar *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
Forse non hai ben chiaro come funziona la cosa...
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:
inttabell tabellina(risposta),i=0;
cout<<"la tabellina del "<<risposta<<" e' ";
for (;
i<10;i++) {
   
cout << *(tabell+i) << " ";
}
cout << endl
Se hai delle domande chiedi pure.
__________________
HWU Rugby Group :'( - FAQ Processori - Aurea Sectio - CogitoWeb: idee varie sviluppando nel web
MaxArt è offline   Rispondi citando il messaggio o parte di esso
Old 01-05-2010, 11:38   #7
deadlyomen17
Senior Member
 
L'Avatar di deadlyomen17
 
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
Codice PHP:
#include <iostream>

using namespace std;

intottieniTabellinaint numero );

int main (int argcchar const* argv[])
{
    
int numero;
    
// lettura del numero
    
cout << "Inserisci un numero: ";
    
cin >> numero;
    
    
// ottengo l'array di interi che contiene la tabellina
    
inttabellina ottieniTabellinanumero );
    
    
// ciclo l'array e stampo ogni suo elemento
    
for( inttabellina; *ii++ )
    {
        
cout << *<< " ";
    } 
    
cout << endl;
    
    
delete [] tabellina;
    
    return 
0;
}

intottieniTabellinaint numero 
{
    
// dichiaro e inizializzo l'array di interi in cui metterò il risultato
    
inttabellina = new int[10];
    
    for( 
int i 1<= 10i++ ) 
    {
        
// i-1 perchè per fare la tabellina facciamo partire i da 1, mentre 
        // un array parte sempre da 0
        
tabellina[i-1] = numero i;
    }
    
    return 
tabellina;

deadlyomen17 è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2010, 17:21   #8
gabriel_cz
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...
gabriel_cz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Googlebook pronto al debutto: Google apr...
Guida all'acquisto: quale lavapavimenti ...
Google Maps su Android Auto introduce fi...
AMD Ryzen 5 5500F: fino al 16% di presta...
L'ecosistema partner di Microsoft cresce...
Oracle registra un boom nella divisione ...
Amazon Prime Video sfida TikTok con le n...
L'uscita di Rayman Legends Retold &egrav...
Dazio UE sui pacchi extra UE, in Italia ...
La nuova lavatrice smart di Xiaomi ha tr...
Hai una PSP nel cassetto? Questo nuovo p...
Oracle presenta Java 27 con diverse novi...
Il microscopio dell'EPFL vede più...
Volvo avvia la produzione dei nuovi cami...
26 offerte Amazon da non perdere, da iPh...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v