Telefonino.net network
 
| 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 » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 29-11-2014, 17.08.20   #1
Mugiwara
Newbie
 
Registrato: 29-11-2014
Messaggi: 5
Mugiwara promette bene
[c/c++] Life

salve, ho un problema con il gioco del life in c++. sapreste aiutarmi? piu' che altro mi da un errore che non ho mai visto..

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");
}
messaggio errore che non trovo:



grazie in anticipo
Mugiwara non è collegato   Rispondi citando
Vecchio 29-11-2014, 18.52.44   #2
xilo76
Forum supporter
Global Moderator
 
Registrato: 23-08-2007
Messaggi: 2.704
xilo76 è conosciuto da tuttixilo76 è conosciuto da tuttixilo76 è conosciuto da tuttixilo76 è conosciuto da tutti
Rif: [c/c++] Life

L'errore è abbastanza chiaro.
Non gradisce l'operatore << nella stessa riga dove c'è CIN.
Codice:
cin >> m << endl;
xilo76 non è collegato   Rispondi citando
Vecchio 30-11-2014, 11.24.21   #3
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Rif: [c/c++] Life

Nella riga immediatamente superiore a quella segnalata dal compilatore come errore, hai immesso:
Codice:
cout << "Quanti Virus vuoi inserire?" << endl;
L'operatore << passa la stringa tra doppi apici all'istruzione cout ed aggiunge a tale stringa endl che viene interpretato come * carriage return line feed.
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;
Qui tenti di appendere qualcosa che ancora non è stato definito; E' un po come dire che il pc esegue una operazione per volta ed attende l'input dell'utente prima di procedere.
Codice:
cin >> rl >> cl;
Qui accetta ben due parametri ancora da definire come valore dall'utente prima di procedere, ma non ammette che siano modificati prima di averli ottenuti.

* Cio ha attinenza con le macchine da scrivere.
___________________________________

Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice
LoryOne non è collegato   Rispondi citando
Vecchio 30-11-2014, 11.51.27   #4
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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
LoryOne non è collegato   Rispondi citando
Vecchio 07-12-2014, 15.51.03   #5
Mugiwara
Newbie
 
Registrato: 29-11-2014
Messaggi: 5
Mugiwara promette bene
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;
}
grazie infinite
Mugiwara non è collegato   Rispondi citando
Vecchio 07-12-2014, 18.47.22   #6
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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
LoryOne non è collegato   Rispondi citando
Vecchio 08-12-2014, 11.38.51   #7
Mugiwara
Newbie
 
Registrato: 29-11-2014
Messaggi: 5
Mugiwara promette bene
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)
Mugiwara non è collegato   Rispondi citando
Vecchio 08-12-2014, 12.48.16   #8
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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)
come può essere <2, anche se messo in or con un valore probabile ?
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
LoryOne non è collegato   Rispondi citando
Vecchio 08-12-2014, 15.19.01   #9
Mugiwara
Newbie
 
Registrato: 29-11-2014
Messaggi: 5
Mugiwara promette bene
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
Mugiwara non è collegato   Rispondi citando
Vecchio 09-12-2014, 08.58.22   #10
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Rif: [c/c++] Life

Quota:
Inviato da Mugiwara Visualizza messaggio
Comunque, se nessuna casella e' uguale a * allora d sara' minore di due. Non capisco cos' e' sbagliato.
Scusa, errore mio, ho mal interpetato.
___________________________________

Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice
LoryOne non è collegato   Rispondi citando
Vecchio 09-12-2014, 16.44.21   #11
Mugiwara
Newbie
 
Registrato: 29-11-2014
Messaggi: 5
Mugiwara promette bene
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 .-.
Mugiwara non è collegato   Rispondi citando
Vecchio 10-12-2014, 19.39.44   #12
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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++;
scrivi così:
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
Immetti un solo virus (riga uno, colonna uno) ed una sola generazione
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
LoryOne non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Remove XP End of Life 1.0 WinTricks News SOFTWARE 0 14-07-2014 01.49.25
Second Life? Un Flop! Robbi Archivio News Web 10 09-08-2007 11.06.33
La Farnesina su Second Life Robbi Archivio News Web 0 13-03-2007 10.06.54
Second Life, come la vita reale Macao Segnalazioni Web 1 13-09-2006 11.30.16
(BS+spedizione!) PC DVDROM HALF LIFE 2 nuovo imballato!!! djlorenz Mercatino Usato 0 14-08-2005 22.37.41

Orario GMT +2. Ora sono le: 12.52.23.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.