Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto
be quiet! debutta nel settore mouse da gaming con Dark Perk Ergo e Dark Perk Sym: due modelli gemelli per specifiche, con polling rate di 8.000 Hz anche in wireless, sensore PixArt PAW3950 da 32.000 DPI e autonomia dichiarata fino a 110 ore. Nel test, a 8.000 Hz si arriva a circa 30 ore reali, con ricarica completa in un'ora e mezza
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-04-2010, 15: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, 16: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, 16: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 16:17.
lupoxxx87 è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2010, 19: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 19:42.
gabriel_cz è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2010, 21: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, 01: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, 12: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, 18: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


Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Il telescopio XRISM ha osservato i raggi...
Il telescopio spaziale James Webb ha sco...
Logitech G325: audio di fascia alta, wir...
Nessuna pubblicità su Claude, per...
Gli stipendi nel settore tech? Sono anco...
Problemi con la stampa 3D? Un prompt per...
Amazon Leo amplia i contratti con SpaceX...
Basta Purefication, il Giurì bloc...
LibreOffice 26.2 migliora prestazioni e ...
La Cina si prepara a un test della capsu...
La NASA rende note alcune informazioni a...
ASUS ExpertCenter PN54: mini PC Copilot+...
Geely userà una fabbrica europea ...
Leica Camera tratta la cessione della ma...
La nuova AMD non è più 'ec...
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: 01:36.


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