|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
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"); } |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
1)Guarda qui per generare il numero:
http://www.cplusplus.com/reference/c...dlib/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? |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
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.... |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
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 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".
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Ok grazie mille...semmai vi faccio sapere se qualcosa nn va....ciao ciao
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
ciao....potresti dirmi in linguaggio c++ cm si mette il punto 3? (assegnazione di un punteggio inversamente proporzionale al numero di tentativi effettuati)..grazie
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
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. Codice:
int magic, guess;
int tentativi = 10;
do {
cout << "Scrivi il tuo numero: ";
......
} while (guess != magic && --tentativi > 0);
cout << "Il tuo punteggio e`: " << tentativi;
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Codice PHP:
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
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!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
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 |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
Questo è il codice che ho scritto e nn credo sia ancora giusto....ma mi devi ancora risp al quesito precendente...
Codice PHP:
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 264
|
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
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
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; Questo 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! Qui ti basta solo più mandare in output il valore di 'i'.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Mar 2007
Messaggi: 276
|
for(int i=10; i < dim; i--)
{ Scrivi il codice che ti serve! } |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Sicuro sicuro??
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.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Mar 2007
Messaggi: 276
|
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!
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Quote:
Codice:
for(int i=10; i<dim && guess!=magic; i--) |
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Se proprio si volesse usare un for si dovrebbe fare così e usare un break per uscire dal ciclo: Codice:
int tentativi, guess, magic;
...
cin >> tentativi; /* input numero tentativi */
...
for ( ; tentativi > 0; tentativi--)
{
....
cin >> guess; /* input guess */
if (guess == magic)
{
....
break; /* esce dal ciclo */
}
....
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:36.



















