|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
29-11-2014, 16.08.20 | #1 |
Newbie
Registrato: 29-11-2014
Messaggi: 5
|
[c/c++] Life
Codice:
#include <iostream> #include <stdlib.h> using namespace std; main () { int n, c, rl, cl, m, p=0, cc, f=0; char a[10][10]; for (n=0; n<10; n++) { for (c=0; c<10; c++) { a[n][c]='_'; } } for (n=0; n<10; n++) { for (c=0; c<10; c++) { if (c==9) cout << a[n][c] << "|" << endl; else cout << a[n][c] << "|"; } } cout << "Quanti Virus vuoi inserire?" << endl; cin >> m << endl; do{ cout << "Inserisci Riga e Colonna (Da 1 a 10): "; cin >> rl >> cl; rl--; cl--; a[rl][cl]='*'; p++; } while (p>m); for (n=0; n<10; n++) { for (c=0; c<10; c++) { if (c==9) cout << a[n][c] << "|" << endl; else cout << a[n][c] << "|"; } } cout << "Quante generazioni vuoi osservare?" << endl; cin >> cc; while (f<cc) { for(n=0; n<10; n++) { for(c=0; c<10; c++) { if (n==0 && c==0) { if(a[n][c+1]=='*' && a[n+1][c]=='*' && a[n+1][c+1]=='*') a[n][c]='*'; else a[n][c]=='_'; } else { if (n==0 && c<9) { if((a[n][c-1]=='*' || a[n][c+1]=='*') && (a[n-1][c-1]=='*' || a[n-1][c]=='*') && a[n][c-1]=='*') a[n][c]=='*'; else a[n][c]=='_'; } if (n==0 && c==9) { if(a[n+1][c]=='*' && a[n+1][c-1]=='*' && a[n][c-1]=='*') a[n][c]='*'; else a[n][c]=='_'; } if (c==0 && n<9) { if((a[n-1][c]=='*' || a[n-1][c+1]=='*') && (a[n][c+1]=='*' || a[n+1][c]=='*') && a[n+1][c+1]=='*') a[n][c]=='*'; else a[n][c]=='_'; } if (c==0 && n==9) { if(a[n+1][c]=='*' && a[n+1][c+1]=='*' && a[n][c+1]=='*') a[n][c]='*'; else a[n][c]=='_'; } if (c==9 && n==9) { if(a[n-1][c]=='*' && a[n-1][c-1]=='*' && a[n][c-1]=='*') a[n][c]='*'; else a[n][c]=='_'; } if (n>0 && n<9 && c>0 && c<9) { if ((a[n-1][c-1]=='*' || a[n-1][c]=='*') && (a[n-1][c+1]=='*' || a[n][c-1]=='*') || (a[n][c+1]=='*' || a[n+1][c-1]=='*') && (a[n-1][c]=='*' || a[n-1][c+1])) a[n][c]='*'; else a[n][c]='_'; } } } } f++; } for (n=0; n<10; n++) { for (c=0; c<10; c++) { if (c==9) cout << a[n][c] << "|" << endl; else cout << a[n][c] << "|"; } } system ("PAUSE"); } grazie in anticipo |
29-11-2014, 17.52.44 | #2 |
Forum supporter
Global Moderator
Registrato: 23-08-2007
Messaggi: 2.704
|
Rif: [c/c++] Life
L'errore è abbastanza chiaro.
Non gradisce l'operatore << nella stessa riga dove c'è CIN. Codice:
cin >> m << endl; |
30-11-2014, 10.24.21 | #3 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Rif: [c/c++] Life
Nella riga immediatamente superiore a quella segnalata dal compilatore come errore, hai immesso:
Codice:
cout << "Quanti Virus vuoi inserire?" << endl; In pratica, dopo aver scritto a schermo (stdout) pone il cursore all'inizo della nuova riga. Quando utilizzi cin (stdin), fai in modo che l'operatore >> imponga all'istruzione di input di accettare il parametro che imposti. Tale parametro deve essere prima immesso, poi processato. Codice:
cin >> m << endl; Codice:
cin >> rl >> cl; * Cio ha attinenza con le macchine da scrivere.
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
30-11-2014, 10.51.27 | #4 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Rif: [c/c++] Life
Fai attenzione all off by 1 error che, liberamente tradotto, vuol dire "Sei fuori di uno".
Quando iteri (for, do ... while) sugli elementi di un array mono o multidimensionali, tutto dipende dal valore dell'indice del primo elemento: Esso comincia da zero oppure da 1 ? Te lo dico perchè è un errore comunissimo e può avere conseguenze a dir poco sorprendenti nel momento stesso in cui lo si sfrutta in input. Un'ultima cosa: main(), si aspetta un valore di default in return. Definiscilo.
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
07-12-2014, 14.51.03 | #5 |
Newbie
Registrato: 29-11-2014
Messaggi: 5
|
Rif: [c/c++] Life
scusate se vi rompo ancora, conoscete il giochino del life?! ho un problemino, sembra che non mi conteggi la d e non la incrementi. per questo non mi crea nuovi "virus". come posso risolvere? mi sto scervellando da troppo .-.
Codice:
#include <iostream> #include <stdlib.h> using namespace std; main () { int n=0, c=0, rl=0, cl=0, m=0, p=0, cc=0, f=0, d=0; char a[10][10], b[10][10]; for (n=0; n<10; n++) { for (c=0; c<10; c++) { a[n][c]='_'; b[n][c]='_'; } } for (n=0; n<10; n++) { for (c=0; c<10; c++) { if (c==9) cout << a[n][c] << "|" << endl; else cout << a[n][c] << "|"; } } cout << endl << "Gioco Life Creato da One Piece Power." << endl << endl; cout << "Quanti Virus Vuoi Inserire?\t"; cin >> m; do{ cout << endl << "Inserisci Riga e Colonna (Da 1 a 10): "; cin >> rl >> cl; rl--; cl--; a[rl][cl]='*'; p++; } while (p<m); for (n=0; n<10; n++) { for (c=0; c<10; c++) { if (c==9) cout << a[n][c] << "|" << endl; else cout << a[n][c] << "|"; } } cout << endl << "Quante generazioni vuoi osservare? \t"; cin >> cc; while (f<cc) { for(n=0; n<10; n++) { for(c=0; c<10; c++) { if (n==0 && c==0) { if(a[n][c+1]=='*' && a[n+1][c]=='*' && a[n+1][c+1]=='*') b[n][c]='*'; else { if(a[n][c+1]=='_' && a[n+1][c]=='_' && a[n+1][c+1]=='_') b[n][c]=='_'; else b[n][c]=a[n][c]; } } if (n==0 && c==9) { if(a[n+1][c]=='*' && a[n+1][c-1]=='*' && a[n][c-1]=='*') b[n][c]='*'; else { if(a[n+1][c]=='_' && a[n+1][c-1]=='_' && a[n][c-1]=='_') b[n][c]=='_'; else b[n][c]=a[n][c]; } } if (c==0 && n==9) { if(a[n+1][c]=='*' && a[n+1][c+1]=='*' && a[n][c+1]=='*') b[n][c]='*'; else { if(a[n+1][c]=='_' && a[n+1][c+1]=='_' && a[n][c+1]=='_') b[n][c]=='_'; else b[n][c]=a[n][c]; } } if (c==9 && n==9) { if(a[n-1][c]=='*' && a[n-1][c-1]=='*' && a[n][c-1]=='*') b[n][c]='*'; else { if(a[n-1][c]=='_' && a[n-1][c-1]=='_' && a[n][c-1]=='_') b[n][c]=='_'; else b[n][c]=a[n][c]; } } d=0; if (n==0 && c>0 && c<9) { if(a[n][c-1]=='*') d++; if(a[n][c+1]=='*') d++; if(a[n+1][c-1]=='*') d++; if(a[n+1][c]=='*') d++; if(a[n+1][c+1]=='*') d++; if(d<2 || d>3) b[n][c]=='_'; if(d==3) b[n][c]=='*'; if(d==2) b[n][c]=a[n][c]; } d=0; if (c==0 && n>0 && n<9) { if(a[n-1][c]=='*') d++; if(a[n-1][c+1]=='*') d++; if(a[n][c+1]=='*') d++; if(a[n+1][c]=='*') d++; if(a[n+1][c+1]=='*') d++; if(d<2 || d>3) b[n][c]=='_'; if(d==3) b[n][c]=='*'; if(d==2) b[n][c]=a[n][c]; } d=0; if (n>0 && n<9 && c>0 && c<9) { if(a[n-1][c-1]=='*') d++; if(a[n-1][c]=='*') d++; if(a[n-1][c+1]=='*') d++; if(a[n][c-1]=='*') d++; if(a[n][c+1]=='*') d++; if(a[n+1][c-1]=='*') d++; if(a[n+1][c]=='*') d++; if(a[n+1][c+1]=='*') d++; if(d<2 || d>3) b[n][c]=='_'; if(d==3) b[n][c]=='*'; if(d==2) b[n][c]=a[n][c]; } d=0; } } for(n=0; n<10; n++) { for(c=0; c<10; c++) { a[n][c]=b[n][c]; b[n][c]='_'; } } f++; } for (n=0; n<10; n++) { for (c=0; c<10; c++) { if (c==9) cout << a[n][c] << "|" << endl; else cout << a[n][c] << "|"; } } cout << endl << "Credits by One Piece Power" << endl; cout << "http://onepiecepowerforum.forumfree.it/" << endl << endl << endl; system ("PAUSE"); return 0; } |
07-12-2014, 17.47.22 | #6 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Rif: [c/c++] Life
Nel debug controlli ad ogni if il valore della variabili e controlli che siano corrette.
Esegui un blocco alla volta fino a quando tutto funziona.
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
08-12-2014, 10.38.51 | #7 |
Newbie
Registrato: 29-11-2014
Messaggi: 5
|
Rif: [c/c++] Life
In sostanza vuoi dire che devo ricontrollare i singoli blocchi? Quelli credo siano giusti.
Oppure vuoi dire che devo far fare al programma una sola istruzione per volta? (Tipo un if alla volta) |
08-12-2014, 11.48.16 | #8 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Rif: [c/c++] Life
Devi rivederli tutti gli if e ricontrollare tutte le variabili che utilizzi nei cicli for, a cominciare da quando hai ottenuto il numero delle generazioni.
La prima volta che utilizzi d la poni uguale a zero, poi continui ad incrementarla, ma al primo if Codice:
if(d<2 || d>3) Inoltre, visto che i valori in input sono basati su riga e colonna ed ogni riga ed ogni colonna devono essere compresi tra 0 e 9 (ossa tra 1 e 10), controlla che i valori di rl e cl ricadano all'interno del range.
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
08-12-2014, 14.19.01 | #9 |
Newbie
Registrato: 29-11-2014
Messaggi: 5
|
Rif: [c/c++] Life
Ok allora ricontrollo tutti gli if ed il for.
Comunque, se nessuna casella e' uguale a * allora d sara' minore di due. Non capisco cos e' sbagliato. Le coordinate le faccio inserire da 1 a 10 e poi le diminuisco di 1 per farle rientrare nell array. Credo vada bene, oppure no? Scusa ma non sono tanto bravo con ste cose... nella mia testa tutto funziona xD |
09-12-2014, 07.58.22 | #10 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Rif: [c/c++] Life
Scusa, errore mio, ho mal interpetato.
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
09-12-2014, 15.44.21 | #11 |
Newbie
Registrato: 29-11-2014
Messaggi: 5
|
Rif: [c/c++] Life
Ok sono in crisi. Perche' non mi accetta quegli if? Ho ricontrollato tutto. Spezzando il programma in sottocontrolli tutto funziona. Li unisco ma non funzionano. Perche? Sto impazzendo .-.
|
10-12-2014, 18.39.44 | #12 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Rif: [c/c++] Life
Beh è un po il problema di molti, ma non di tutti.
Difficile che non funzioni quando hai spezzato in moduli, testato ognuno ed infine assemblato il tutto e non è una questione di complessità perchè qualunque software complesso è spezzabile in moduli a se stanti. Ogni singola istruzione del linguaggio è stata testata a fondo e fa esattamente quello che deve. Sei sicuramente tu che la usi in modo errato. Adesso ti consiglio di procedere in questo modo: dopo il primo Codice:
d=0; if (n==0 && c>0 && c<9) if(a[n][c-1]=='*') d++; Codice:
d=0; if(a[n][c-1]=='*') d++; printf("d=%i quando n=%i, c=%i ed a[%i][%i]=%c\n",d,n,c,n,c-1,a[n][c-1]); ecc, ecc printf("------------------------------------------------------------\n" //o se preferisci usa cout Controlla i valori. Cambia colonna al solo virus (riga uno, colonna due) ed una sola generazione Controlla i valori. Se tutto torna, allora procedi oltre Immetti due virus su stessa riga. Controlla i valori.
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
Remove XP End of Life 1.0 | WinTricks | News SOFTWARE | 0 | 14-07-2014 00.49.25 |
Second Life? Un Flop! | Robbi | Archivio News Web | 10 | 09-08-2007 10.06.33 |
La Farnesina su Second Life | Robbi | Archivio News Web | 0 | 13-03-2007 09.06.54 |
Second Life, come la vita reale | Macao | Segnalazioni Web | 1 | 13-09-2006 10.30.16 |
(BS+spedizione!) PC DVDROM HALF LIFE 2 nuovo imballato!!! | djlorenz | Mercatino Usato | 0 | 14-08-2005 21.37.41 |