View Full Version : Problemi con programma in C++...
Ciao raga.... volevo chiedervi un aiutino per questo programma.....Il testo dell'esercizio è già scritto...
Se nn vi chiedo troppo vorrei poterlo completare entro il 3 maggio per favore....grazie
/*Modificare il codice seguente per permettere:
1) la generazione del numero pseudocasuale
nell'intervallo 1..100.
2) un numero predefinito di tentativi del giocatore.
3) l'assegnazione di un punteggio inversamente
proporzionale al numero di tentativi effettuati. */
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int magic; // numero magico
int guess; // tentativo del giocatore
int i; // num tentativi scelti
int nt=0; // condiz iniz di tentativi
randomize();
magic = random(100); // sceglie un numero a caso
cout << magic; // visualizza num scelto dal computer
cout << " \n Inserisci il numero di tentativi: ";
cin >> i; // inserisci i
do {
for (i;nt;i--) break; // decremento
do {
cout << " Scrivi il tuo numero: \n";
cin >> guess;
if(guess == magic) {
cout << "** Giusto ** ";
cout << magic << " era ora....finalmente!!!\n";
}
else {
cout << "...Mi dispiace, hai sbagliato.";
if(guess > magic)
cout << " Il tuo numero e' troppo alto.\n";
else cout << " Il tuo numero e' troppo basso.\n";
}
} while(guess != magic);
} while(i=0);
system("pause");
}
wingman87
01-05-2007, 10:16
1)Guarda qui per generare il numero:
http://www.cplusplus.com/reference/clibrary/cstdlib/rand.html
2)Devi aver preso un codice già fatto e poi l'hai modificato giusto? Hai messo un po' troppi cicli, ne basta uno...
3)Ad esempio? 100/ntentativi?
ciao....no il programma da cui si doveva partire è il seguente....
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int magic; // numero magico
int guess; // tentativo del giocatore
randomize();
magic = rand(); // sceglie un numero a caso
do {
cout << "Scrivi il tuo numero: ";
cin >> guess;
if(guess == magic) {
cout << "** Giusto ** ";
cout << magic << " è il numero magico.\n";
}
else {
cout << "...Mi dispiace, hai sbagliato.";
if(guess > magic)
cout << " Il tuo numero è troppo alto.\n";
else cout << " Il tuo numero è troppo basso.\n";
}
} while(guess != magic);
system("pause");
return 0;
}
Da qui praticamente dobbiamo aggiungere:
1) la generazione del numero pseudocasuale
nell'intervallo 1..100.
2) un numero predefinito di tentativi del giocatore.
3) l'assegnazione di un punteggio inversamente
proporzionale al numero di tentativi effettuati.
Fino adesso sn arrivato alla generazione del numero pseudocasuale.....non mi funzionano gli ultimi due punti....
1) la generazione del numero pseudocasuale
nell'intervallo 1..100.Vedi un mio esempio in <questo> (http://www.hwupgrade.it/forum/showthread.php?t=1330044) thread.
2) un numero predefinito di tentativi del giocatore.Metti una variabile che contiene il numero di tentativi, inizializzata ad un certo valore (es. 10). Alla fine del ciclo decrementi tale contatore. Il while deve far ripetere il ciclo se guess != magic e se tentativi > 0
3) l'assegnazione di un punteggio inversamente
proporzionale al numero di tentativi effettuati.In questo caso puoi usare la stessa variabile spiegata al punto 2. Se si indovina quando sono rimasti 3 tentativi è chiaramente peggio di quando si indovina quando rimangono 9 tentativi. Così è già "inversamente proporzionale".
Ok grazie mille...semmai vi faccio sapere se qualcosa nn va....ciao ciao
ciao....potresti dirmi in linguaggio c++ cm si mette il punto 3? (assegnazione di un punteggio inversamente proporzionale al numero di tentativi effettuati)..grazie
ciao....potresti dirmi in linguaggio c++ cm si mette il punto 3? (assegnazione di un punteggio inversamente proporzionale al numero di tentativi effettuati)..grazieMi sembrava di averlo spiegato, sebbene a parole, ma chiaramente.
Se usi una variabile che tiene il numero di tentativi ancora da effettuare (quindi in decremento man mano), quello è già un valore inversamente proporzionale al numero di tentativi effettuati.
int magic, guess;
int tentativi = 10;
do {
cout << "Scrivi il tuo numero: ";
......
} while (guess != magic && --tentativi > 0);
cout << "Il tuo punteggio e`: " << tentativi;
/* 1) la generazione del numero pseudocasuale
nell'intervallo 1..100.
2) un numero predefinito di tentativi del giocatore.
3) l'assegnazione di un punteggio inversamente
proporzionale al numero di tentativi effettuati. */
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int magic; // numero magico
int guess; // tentativo del giocatore
int i; // num tentativi scelti
int nt=0; // condiz iniz di tentativi
randomize();
magic = random(100); // sceglie un numero a caso
cout << magic; // visualizza num scelto dal computer
cout << " \n Inserisci il numero di tentativi: ";
cin >> i; // inserisci i
do {
for (i;nt;i--) break; // decremento
do {
cout << " Scrivi il tuo numero: \n";
cin >> guess;
if(guess == magic) {
cout << "** Giusto ** ";
cout << magic << " era ora....finalmente!!!\n";
}
else {
cout << "...Mi dispiace, hai sbagliato.";
if(guess > magic)
cout << " Il tuo numero e' troppo alto.\n";
else cout << " Il tuo numero e' troppo basso.\n";
}
} while(guess != magic);
} while(guess != magic && --i > 0); // punteggio
system("pause");
return 0;
}
Questo è il codice che ho creato....per favore potreste dirmi se funziona? è urgente devo consegnarlo doma....grazie
Questo è il codice che ho creato....per favore potreste dirmi se funziona? è urgente devo consegnarlo doma....grazieUhm, ecco cosa posso dirti:
a) Perché hai usato randomize()/random()??? Sono funzioni non standard e quindi poco portabili. Usa srand() e rand() che sono standard ANSI C.
b) Questo come te lo sei inventato?
for (i;nt;i--) break;
Un ciclo for in cui la espressione di inizializzazione è solo una variabile (quindi non fa nulla), in cui nt causa subito l'uscita dal ciclo (visto che nt è inizializzato a 0).
c) Non capisco la necessità di un doppio do-while annidato .... basta 1 solo ciclo do-while.
d) E la visualizzazione del punteggio dove la fai, visto che parlavi di gestire un punteggio??
e) Ultimo ma non meno importante: scrivi e indenta correttamente il codice!
ok sarò ignorante fin che vuoi nel campo della programmazione ma la cosa mi appassiona....dunque dv c'è
cin >> i qui dovrei inserire il num di tentativi poi nel ciclo for si continua a decrementare questo num fino a 0 quindi ho fatto for (i;nt;i--) dv i-- è il decremento....scusa posso capire? se nn ti disturbo troppo hai msn? grazie
Questo è il codice che ho scritto e nn credo sia ancora giusto....ma mi devi ancora risp al quesito precendente...
/* 1) la generazione del numero pseudocasuale
nell'intervallo 1..100.
2) un numero predefinito di tentativi del giocatore.
3) l'assegnazione di un punteggio inversamente
proporzionale al numero di tentativi effettuati. */
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int magic; // numero magico
int guess; // tentativo del giocatore
int i; // num tentativi scelti
int nt=0; // condiz iniz di tentativi
srand();
magic = rand(100); // sceglie un numero a caso
cout << magic; // visualizza num scelto dal computer
cout << " \n Inserisci il numero di tentativi: ";
cin >> i; // inserisci i
for (i;nt;i--) break; // decremento
do {
cout << " Scrivi il tuo numero: \n";
cin >> guess;
if(guess == magic) {
cout << "** Giusto ** ";
cout << magic << " era ora....finalmente!!!\n";
}
else {
cout << "...Mi dispiace, hai sbagliato.";
if(guess > magic)
cout << " Il tuo numero e' troppo alto.\n";
else cout << " Il tuo numero e' troppo basso.\n";
}
} while(guess != magic && --i > 0); // punteggio
cout << "Il tuo punteggio e`: ";
system("pause");
return 0;
}
PER FAVORE ATTENDO UNA RISPOSTA.....se nn consegno sto lavoro doma mi gioco il voto di sistemi e mia ma mi ammazza.....per favore vi prego ditemi se va bn
srand();
magic = rand(100);Nessuna delle due va bene. Ti ho anche indicato all'inizio un thread in cui avevo fatto un esempio completo!
srand() serve per impostare il "seed" del generatore di numeri casuali. Pertanto deve ricevere come argomento un numero che indica il seed. Per questo numero tipicamente si usa il valore ritornato da time(), giusto per dare un valore sempre diverso (ad ogni secondo).
Quindi oltre ad includere <cstdlib> devi anche includere <ctime>
La srand() va messa così:
srand ((unsigned int) time (NULL));
La funzione rand() invece NON ha parametri. Ritorna un valore casuale tra 0 e RAND_MAX. Pertanto se vuoi avere il numero casuale tra un range diverso/particolare, devi fare tu dei calcoli.
Nel caso si voglia avere un range da 1 a 100 compresi, si può fare:
magic = ((int) (rand() / (RAND_MAX+1.0) * 100)) + 1;
for (i;nt;i--) break; // decrementoQuesto non serve a nulla. Il decremento di 'i' l'hai già fatto come predecremento nel while, ed è sufficiente!
Tra l'altro, come ho già detto prima, questo for è inutile. 'nt' l'hai messo a 0 e lo usi solo nel for, pertanto con nt=0, il for termina immediatamente!
cout << "Il tuo punteggio e`: ";Qui ti basta solo più mandare in output il valore di 'i'.
niko_lol
03-05-2007, 17:23
for(int i=10; i < dim; i--)
{
Scrivi il codice che ti serve!
}
for(int i=10; i < dim; i--)Sicuro sicuro?? :D
Comunque il for non è l'ottimale in questo caso. La continuazione del ciclo è basata su 2 condizioni e comunque la richiesta del "guess" va fatta almeno una volta, pertanto vedo meglio il do-while.
niko_lol
03-05-2007, 17:35
Si ok....io lì ho visto che ci sta un for.... e gli ho scritto come si fa un for! poi sta a lui vedere come fare....più programma e + capisce ecc etc! :)
wingman87
03-05-2007, 22:29
Sicuro sicuro?? :D
Comunque il for non è l'ottimale in questo caso. La continuazione del ciclo è basata su 2 condizioni e comunque la richiesta del "guess" va fatta almeno una volta, pertanto vedo meglio il do-while.
E se fosse:
for(int i=10; i<dim && guess!=magic; i--)
non sarebbe comunque ottimale? E' solo per curiosità...
E se fosse:
for(int i=10; i<dim && guess!=magic; i--)
non sarebbe comunque ottimale? E' solo per curiosità...Se ci pensi un attimo 'guess' lo prendi in input dentro il ciclo, quindi che senso ha il test la prima volta??? E poi scusa, 'dim' che valore dovrebbe avere?? Inoltre con i-- vai sempre in decremento e non c'è un test per bloccare ad un certo punto il decremento di 'i'!!! Cioè ... hai capito la questione?
Se proprio si volesse usare un for si dovrebbe fare così e usare un break per uscire dal ciclo:
int tentativi, guess, magic;
...
cin >> tentativi; /* input numero tentativi */
...
for ( ; tentativi > 0; tentativi--)
{
....
cin >> guess; /* input guess */
if (guess == magic)
{
....
break; /* esce dal ciclo */
}
....
}
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.