|
| 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 » | |
22-09-2013, 14.11.40 | #16 | |||
Newbie
Registrato: 20-09-2013
Messaggi: 12
|
Rif: [c/c++] BATTAGLIA NAVALE
Quota:
Quota:
Quota:
ho modificato in modo seguente: nel secondo if ho messo al posto di q<1, q<0 e appena finito if delle navi da 3 mettevo q--, così diventava vero, ma le coord prendeva nel prossimo ciclo, la stessa cosa per le navi da 2, un altra cosa era il ciclo for nel if,mi son scordato di rimettere a posto la lin caso la nave fosse idonea, e nel if dendro il for, controllava il spazio a dx e sx della nave ma non il centro, ecco un'altro errore. ma dopotutto non ho ottenuto i risultati che volevo perchè le navi si toccano lo stesso, per il codeblock, non l'ho utilizzato mai, è buono come programma? Ha un debug decente? o è come dev? che è in pratica un notepad con compilatore ma senza debug? In caso se ti da errori, mi potresti dire che errori sono? (segmentazione, runtime o scrittura)? così magari li rivedo Vi allego ultima rev. del programma (compilata e parte) Codice:
#include <conio.h> #include <stdio.h> #include <time.h> #include <stdlib.h> //battaglia navale #define max 10 int main(){ srand((unsigned)time(NULL)); int matrice[max][max]; int ma,a,i,j,q,t,d,c,h,l,m; char ch; do{ l=m=0; //azzero queste var. ogni ciclo q=1;t=2;d=3; //resetto quantità navi rimaste for(i=0;i<=max;i++){ //inizializzo la matrice for(j=0;j<=max;j++){ matrice[i][j]=0; } } for(a=0;a<6;a++){ if(q>0){ //questo non è cambiato c=4; ma=max-c; l=rand() %ma; m=rand() %ma; printf("4 %d %d\n\n",l,m); q--; } if((q<0)&&(t>0)){ //q diventa <0 e non <1 c=3; ma=max-c; l=rand() %ma; m=rand() %ma; printf("3 %d %d\n\n",l,m); int w=1; while(w!=0){ for(int q=0;q<(c+2);q++){ if((matrice[l-1+q][m+1]||matrice[l-1+q][m-1]||matrice[l-1+q][m])==1){ //aggiungo l'osservazione della posizione della nave e non solo lati l=rand() %ma; m=rand() %ma; printf("3 for %d %d\n\n",l,m); w=1; q=0; } else w=0; l++; //incremento la l per proseguire il scansionamento } l=l-(c+2); //decremento la l all' originale } t--; } q--; //decremento la q così ho la nave da 4 inserita in questo ciclo e le altre in altri 5 if((q<0)&&(t<0)&&(d>0)){ //funzione analoga con sia q che t<0 e non 1 c=2; ma=max-c; l=rand() %ma; m=rand() %ma; printf("2 %d %d\n\n",l,m); int w=1; while(w!=0){ for(int q=0;q<(c+2);q++){ if((matrice[l-1+q][m+1]||matrice[l-1+q][m-1]||matrice[l-1+q][m])==1){ l=rand() %ma; m=rand() %ma; printf("2 for %d %d\n\n",l,m); w=1; q=0; } else w=0; l++; } l=l-(c+2); } d--; } if(t==0)t--; //se t=0 allora decrementa così nel prossimo ciclo comincia con le navi da 2 h=0; while(h<c){ matrice[l][m]=1; l++; h++; } c=0; } for(i=0;i<max;i++){ for(j=0;j<max;j++){ if(matrice[i][j]==0)printf("~~");//printf("%d",matrice[i][j]); else printf("||"); } printf("\n"); } printf("\n"); ch=getch(); } while(ch!=13); } E GRAZIE A TUTTI D'AIUTO |
|||
22-09-2013, 14.35.22 | #17 |
Forum supporter
Global Moderator
Registrato: 23-08-2007
Messaggi: 2.704
|
Rif: [c/c++] BATTAGLIA NAVALE
Mi dà l'errore segmentation fault sempre lì:
while(h<lunghezzanave) { tavolodagioco[l][m]=1; con l=18 e m=0 Per quello dicevo che forse ho dimenticato qualche tuo cambiamento. Codeblocks ha il debug integrato... |
22-09-2013, 14.51.44 | #18 |
Forum supporter
Global Moderator
Registrato: 23-08-2007
Messaggi: 2.704
|
Rif: [c/c++] BATTAGLIA NAVALE
Forse ho sbagliato qualcosa (compilavo come c++ invece che come c, e c'era un altro errorino), ora non dà errori.
Questo è quello che esce: Dopo che premo tre volte un tasto, dal quarto in poi escono solo le "onde". Premendo il tasto invio, il programma termina senza errori. |
22-09-2013, 16.35.17 | #19 | |
Forum supporter
WT Expert
Registrato: 13-03-2005
Loc.: Ultima stella a destra
Messaggi: 2.809
|
Rif: [c/c++] BATTAGLIA NAVALE
Quota:
Comunque no, i cicli While, Do...While e For...Next ci sono sempre stati in C (senza non potresti fare molto quando lavori in array monodimensionali e multidimensione visto che non esiste l'equivalente del GoTo...). La vera forza del C++ è la programmazione a oggetti... ma questa è tutta un'altra storia...
___________________________________
L'uomo ha attraversato un'evoluzione complessa, dal DOS a Windows 7. Poi ... tutto è vago. |
|
22-09-2013, 17.33.49 | #20 |
Newbie
Registrato: 20-09-2013
Messaggi: 12
|
Rif: [c/c++] BATTAGLIA NAVALE
xilo76 anche dev ha debug integrato ma non funziona granché, e quali altri errori ti dava? E cmq quello mio funziona all'infinito ma se premo invio si crasha...
ecco una copia del file in esecuzione: Codice:
3 for 2 4 3 5 2 3 for 3 1 2 4 3 2 for 5 3 2 2 2 2 for 5 3 2 for 4 5 2 6 0 2 for 3 2 2 for 7 4 2 for 3 6 2 for 6 4 2 for 4 7 ~~~~||~~~~~~~~~~~~~~ ~~~~||~~~~~~~~~~~~~~ ~~~~||~~||~~~~~~~~~~ ~~||||~~||~~~~~~~~~~ ~~||~~~~||||~~||~~~~ ~~||~~||~~||~~||~~~~ ~~~~~~||~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ 4 2 4 3 0 3 3 for 3 4 3 for 2 6 3 3 2 2 1 7 2 for 1 6 2 for 7 6 2 for 1 4 2 for 6 0 2 for 6 7 2 for 3 5 2 for 7 4 2 for 2 5 2 for 4 0 2 6 6 2 for 1 2 2 for 4 0 2 for 2 4 2 for 2 7 2 for 1 6 2 for 3 1 2 for 3 4 2 for 6 1 2 for 1 2 2 for 1 3 2 for 6 4 2 for 0 0 2 for 4 2 2 for 3 4 2 for 5 4 2 6 7 2 for 6 2 2 for 2 1 2 for 6 0 2 for 4 2 2 for 0 0 2 for 4 1 2 for 4 0 2 for 1 2 2 for 5 5 2 for 4 5 2 for 7 0 2 for 2 5 2 for 7 0 2 for 6 6 2 for 0 0 2 for 6 3 2 for 3 3 2 for 4 7 ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~||~~||~~~~~~ ~~~~||~~||~~||~~~~~~ ||~~||~~||~~||||~~~~ ||~~||~~||~~~~||~~~~ ~~~~~~~~||~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ 4 0 3 3 4 3 3 for 0 2 3 for 0 3 3 for 5 3 3 for 3 4 3 3 0 2 6 7 2 for 1 2 2 for 1 2 2 for 0 5 2 for 3 2 2 6 5 2 for 4 2 2 7 5 2 for 1 0 2 for 3 5 2 for 4 7 ~~~~~~||~~~~~~~~~~~~ ~~~~~~||~~~~~~~~~~~~ ~~~~~~||~~~~~~~~~~~~ ||~~||||||~~~~~~~~~~ ||~~||~~||~~~~||~~~~ ||~~||~~||~~~~||~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ 4 1 0 3 2 2 3 5 2 3 for 2 0 3 for 1 3 3 for 0 1 3 for 1 4 2 5 0 2 for 6 2 2 for 2 7 2 6 2 2 for 2 3 2 for 3 1 2 for 3 5 2 4 0 2 for 2 0 2 for 6 7 2 for 3 3 2 for 7 3 2 for 5 0 ~~~~~~~~~~~~~~~~~~~~ ||~~~~~~||~~~~~~~~~~ ||~~||~~||~~~~||~~~~ ||~~||~~||||~~||~~~~ ||~~||~~~~||~~~~~~~~ ||~~~~~~~~~~~~~~~~~~ ||~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ 4 4 1 3 0 3 3 for 6 0 3 for 0 3 3 0 2 3 for 2 4 2 2 7 2 6 0 2 for 6 6 2 for 1 6 2 for 2 4 2 for 0 7 2 for 4 6 2 5 2 2 for 3 7 2 for 4 5 2 for 0 7 2 for 7 5 2 for 1 5 2 for 5 7 ~~~~~~||~~~~~~~~~~~~ ~~~~~~||~~~~~~~~~~~~ ~~~~~~||||~~~~||~~~~ ~~~~~~~~||~~~~||~~~~ ~~||~~~~||~~||~~~~~~ ~~||~~~~~~~~||||~~~~ ~~||~~~~~~~~~~||~~~~ ~~||~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ retalvintendi con le struct, class ecc? Tipo java... |
22-09-2013, 18.44.21 | #21 |
Forum supporter
Global Moderator
Registrato: 23-08-2007
Messaggi: 2.704
|
Rif: [c/c++] BATTAGLIA NAVALE
C keywords
Differences between c and c++ Non mi dà alcun errore. Solo che a video mi dà quel risultato al mio msg precedente. Il programma dovrebbe essere uguale al tuo, solo che io ho cambiato i nomi delle variabili: |
22-09-2013, 22.21.21 | #22 |
Newbie
Registrato: 20-09-2013
Messaggi: 12
|
Rif: [c/c++] BATTAGLIA NAVALE
si è lo stesso, ma il problema non è che dopo 4 volte si blocca (anche se a me non lo fa), ma il problema è che le navi rimangono attacate...
|
22-09-2013, 22.30.07 | #23 |
Forum supporter
Global Moderator
Registrato: 23-08-2007
Messaggi: 2.704
|
Rif: [c/c++] BATTAGLIA NAVALE
Beh, stesso programma, errori diversi...
O il mio programma è diverso dal tuo (magari ho sbagliato a copiare qualcosa), oppure lo stesso programma dà due diversi problemi. Mi sa che ho copiato male qualcosa, perché ho notato ora che alcune onde mancano (nel mio esempio di sopra). Un'altra cosa che non capisco sono i numeri che escono: cosa rappresentano? (se sono buoni da giocare, dillo ) |
23-09-2013, 10.11.06 | #24 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Rif: [c/c++] BATTAGLIA NAVALE
Scusa ma, a parte il fatto che non allinea, ecc,ecc...
Se esegui il codice (l'ultimo che hai postato) sembra funzionare fino ad un certo punto, poi non stampa più ne l'acqua ne le navi. Capisci bene che, se il tutto è all'interno di un ciclo do...while e che questo ciclo continua all'infinito fino alla pressione del tasto invio, dovrebbe stampare la griglia ed i valori delle variabili ad ogni pressione del tasto differente da ASCII 13. Cio significa che le condizioni di if che hai specificato, ad un certo punto non sono più verificate, proprio perchè le variabili sotto controllo continuano ad incrementarsi all'interno del ciclo do...while. Devi stare attento proprio a questo: Devi tenere traccia dei valori delle variabili ed a quelli che acquisiscono all'interno delle iterazioni che gli fai eseguire. C'è poi un altro problema dovuto alla pressione del tasto invio che non deve assolutamente fornire errori in uscita... Considerato che la funzione main (corpo principale) non acquisisce nessun parametro dalla linea di comando e non ritorna alcun valore, il modo corretto di scrivere il codice è: Codice:
main(void){ }
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
23-09-2013, 13.52.54 | #25 |
Forum supporter
WT Expert
Registrato: 13-03-2005
Loc.: Ultima stella a destra
Messaggi: 2.809
|
Rif: [c/c++] BATTAGLIA NAVALE
Sono molti i linguaggi orientati agli oggetti: per nominarne solo alcuni, C++, C#, VB.NET, Java, Ruby, Delphi, Simula ... AutoIt ...
Per farla breve, un linguaggio orientato agli oggetti è la panacea se lo conosci e lo usi con cognizione di causa: molti si ostinano a dire che C++ è un'evoluzione di C per il fatto che molte parole chiave sono le medesime, ma di fatto chi vuol programmare in C++ (e nei linguaggi orientati agli oggetti in generale) deve "orientarsi" mentalmente ad una filosofia di programmazione non lineare e dinamica. Ovviamente puoi programmare in top-down anche con C++, ma poi non meravigliarti se, per popolare un array ad albero del contenuto di un HD, a chi usa un linguaggio object oriented basta scrivere una funzione ricorsiva di 30-40 linee... A questi due link trovi un buon "volo" sul C++... http://www.di.unisa.it/professori/au...LASD/l_C++.pdf http://www.html.it/guide/guida-c2/
___________________________________
L'uomo ha attraversato un'evoluzione complessa, dal DOS a Windows 7. Poi ... tutto è vago. Ultima modifica di retalv : 23-09-2013 alle ore 13.56.02 |
25-09-2013, 13.14.08 | #26 |
Newbie
Registrato: 20-09-2013
Messaggi: 12
|
Rif: [c/c++] BATTAGLIA NAVALE
xilo76 allora sarà che hai copiato male qualcosa
LoryOne ti riferisci al prog. di xilo76 ? retalv ok, grazie mille. Ma ritornando al problema mio, chi sa dirmi cosa può essere per il fatto delle navi troppo vicine, la condizione del if dovrebbe essere giusta no? |
25-09-2013, 13.58.41 | #27 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Rif: [c/c++] BATTAGLIA NAVALE
Il programma di xilo76 ha modificato il nome delle variabili, non il flusso del programma, quindi in pratica è identico al tuo.
C'è già qualcosa che non va quando premi invio alla prima esecuzione...
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
25-09-2013, 14.39.42 | #28 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Rif: [c/c++] BATTAGLIA NAVALE
C'è sempre quel qualcosa che non va, anche se elimini il do...while ed il getch.
Incrementi e decrementi variabili, ma alcune di quelle variabili equivalgono all'indice degli elementi di una matrice bidimensionale...
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
25-09-2013, 22.16.55 | #29 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Rif: [c/c++] BATTAGLIA NAVALE
Buongiorno ragazzo. (Salute a te se leggi ora )
Codice:
#include <stdio.h> #include <stdlib.h> #define max 10 int main(void){ int c[max][max],i,j; //for(i=0;i<=max-1;i++) for(j=0;j<=max-1;j++) c[i][j]=i; for(i=0;i<max;++i) for(j=0;j<max;++j) c[i][j]=i; //-->cambia questa riga con la precedente printf("i=%i j=%i\n",i,j); //for(i=0;i<=max-1;i++) printf("elemento matrice: %i valore :%i\n",i+1,c[i][i]) for(i=0;i<max;++i) printf("elemento matrice: %i valore :%i\n",i+1,c[i][i]); //-->cambia questa riga con la precedente printf("\nHello world!\n"); //system("pause"); --> questo è per Windows, cioè richiama pause del command.com. return 0; } Nell'esempio precedente, molto simile al tuo, i 10 elementi iniziano da 0 e finiscono a 9. Infatti: Elemento 1 valore 0 indice 0 Elemento 2 valore 1 indice 1 Elemento 3 valore 2 indice 2 Elemento 4 valore 3 indice 3 Elemento 5 valore 4 indice 4 Elemento 6 valore 5 indice 5 Elemento 7 valore 6 indice 7 Elemento 8 valore 7 indice 8 Elemento 9 valore 8 indice 9 Elemento 10 valore 9 indice 10 Come vedi, se gli elementi sono 10 partendo da 0, l'ultimo ha valore 9, ossia 10-1. Se esegui il codice sopra riportato, il principio dovrebbe esserti chiaro, ma fai molta attenzione: In entrambi i casi sia i sia j valgono 10, ma cosa succede alla matrice bidimensionale nel ciclo for ? Entrambe le due variabili definiscono i valori degli elementi uguali a quello dell'indice, ma in un caso l'ultimo elemento viene definito prima dell'incremento, nell'altro dopo. Sebbene possa sembrare ininfluente, direi che non lo è proprio: i++ e ++i, così come j++ e ++j sono legate a due condizioni differenti nello stesso ciclo for per non incorrere in errori di segmentazione. Sotto Linux, l'esecuzione del programmino in entrambe le versioni fornisce: Process returned 0 (0x0), il che è corretto. Sotto Windows, non da alcun problema di segmentation fault. Confermi ? Ci siamo ? Quando si dice che bisogna imparare con semplici script, non si parla a vanvera. Detto questo, rivedi il tuo codice per far sparire l'errore e compila in C, non in C++. Chiudo.
___________________________________
Practice feeds Skill,Skill limits Failure,Failure enhances Security,Security needs Practice |
27-09-2013, 17.56.15 | #30 |
Newbie
Registrato: 20-09-2013
Messaggi: 12
|
Rif: [c/c++] BATTAGLIA NAVALE
Aspetta, ma se l'indice e valori sono separati allora come fa ad alternarsi?
E come può essere che lo stesso programma da 2 problemi diversi? |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
Problemi Battaglia navale 3d Microforum | mimmo77 | Masterizzazione Giochi Games | 6 | 27-12-2012 04.03.03 |
La grande battaglia dei super eroi! | Sbavi | Chiacchiere in libertà | 83 | 27-02-2009 11.43.39 |
battaglia navale in c# | Joy&Lu | Programmazione | 3 | 01-09-2008 16.08.58 |
[C/C++] Battaglia Navale in C | Alhazred | Programmazione | 549 | 21-06-2007 14.51.14 |
[C] Battaglia Navale (versione client server) in Linux | Nanri | Programmazione | 11 | 06-08-2005 15.50.27 |