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 12-07-2004, 17.47.41   #166
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da P8257 WebMaster
Prova ad usare "%c" e stampare la riga carattere per carattere...
La mia paura è che non avendo precedentemente inizializzato l'array i suoi campi restino "sporchi", come posso inizializzarlo però?
Va bene così?
Codice:
for(i=0;i<numeroNavi;i++){
   mArray[i].colonna = ' ';
   mArray[i].riga = 0;
}
Alhazred non è collegato   Rispondi citando
Vecchio 12-07-2004, 18.42.37   #167
NS-1
Hero Member
 
L'avatar di NS-1
 
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
NS-1 promette bene
...visto che diverse volte hai utilizzato in modo "strano" la & (e commerciale), vorrei dirti che:

- quando passi un vettore non hai bisogno di mettere la & se devi puntare direttamente al primo dei suoi elementi...

- la & serve per passare l'inirizzo di memoria di una variabile.

infatti:
char *ptrCarattere = &Stringa[6] // assegni al puntatore l'indirizzo

spero di esserti stato d'aiuto..
___________________________________

...ad ogni alba sorgerà il tuo profumo
NS-1 non è collegato   Rispondi citando
Vecchio 12-07-2004, 18.51.53   #168
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Non è "paura".. è certezza.. che siano sporche se non le inizializzi esplicitamente .. e questo vale anche per tutte le variabili che userai ..

Il codice postato è corretto... naturalmente mArray deve avere "numeroNavi" elementi.

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 13-07-2004, 11.12.38   #169
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Non riesco proprio a farmi stampare i valori corretti delle righe, allego tutto il codice aggiornato.
Il codice che dovrebbe stampare colonna e riga è alla fine di AggiornaCampo.
Alhazred non è collegato   Rispondi citando
Vecchio 13-07-2004, 11.29.33   #170
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
La riga di stampa corretta è questa:

Codice:
printf("\n\r%c - %d ", mArray[n].colonna, mArray[n].riga);
Perché usi l'operatore '&' .. la printf non ha bisogno dell'indirizzo di memoria dell'oggetto ... è questo che da problemi .. oltre al fatto che vada stampato con "%c" e non con "%s"...

Usi sempre tanti puntatori e tante referenze ... attenzione ..

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 13-07-2004, 11.47.21   #171
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Se tolgo quei puntatori, in esecuzione ottengo il messaggio "... la memoria non poteva essere Read!"

Edit: con l'istruzione da te proposta il messaggio d'errore non appare più, ma la riga è sempre uguale a -35
Alhazred non è collegato   Rispondi citando
Vecchio 13-07-2004, 11.54.26   #172
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Ecco la versione corretta della "posizionnanavi' che ora gestisce le colonne e valorizza correttamente il t_mossa .. sostituiscila nel codice e, se ti va, commenta le modifiche che ho apportato.
Attenzione perché non ho gestito il solito 13, occupatene tu, quando l'utente batte INVIO per saltare l'inserimento della seconda cifra delle righe...

Codice:
void PosizionaNavi(){
   int Count = numeroNavi, nave = 1;
   char c_col = ' ';
   char c_raw = ' ';
   char coorx[3];
   char tmpStr[3];
   coorx[0] = '\0';
   tmpStr[0] = '\0';

   for(i=0;i<numeroNavi;i++) {
      mArray[i].colonna = ' ';
      mArray[i].riga = 0;
   }

   printf("Inserire le coordinate per %i navi.\n",numeroNavi);
   
   while(Count > 0) {
   printf("Nave %i:    Colonna_", nave);
      
      // A-J
      while((c_col < 65) || (c_col > 74)) // invio = conferma
         c_col = getch();
      coorx[0] = c_col;
      
      mArray[nave-1].colonna = coorx[0];
      printf("%c    Riga_", c_col);
      c_col = ' '; // reset

      // 0-9
      while(((c_raw < 48) || (c_raw > 57))) // invio = conferma
         c_raw = getch();
      printf("%c", c_raw);
      tmpStr[0] = c_raw;
      c_raw = ' '; // reset
		
      // 0-9 o ENTER per non dare coordinata a cifra singola
      while(((c_raw < 48) || (c_raw > 57)) && (c_raw != 13)) // invio = conferma
         c_raw = getch();
      printf("%c", c_raw);
      tmpStr[1] = c_raw;
      c_raw = ' '; // reset
      printf("\n\r");		
      mArray[nave-1].riga = atoi(tmpStr);
      Count --;
      nave++;
   }
}
Bye

Ultima modifica di P8257 WebMaster : 13-07-2004 alle ore 12.10.33
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 13-07-2004, 11.55.35   #173
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Quota:
Alhazred ha scritto:
Se tolgo quei puntatori, in esecuzione ottengo il messaggio "... la memoria non poteva essere Read!"

Edit: con l'istruzione da te proposta il messaggio d'errore non appare più, ma la riga è sempre uguale a -35
Era un problema della posizionanavi, che ho corretto....

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 13-07-2004, 12.05.17   #174
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
ERRATA CORRIGE

... Non preoccuparti del "13".. viene gestito correttamente, se insirisci righe ad una sola cifra...

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 13-07-2004, 12.15.59   #175
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Ok, grazie
Alhazred non è collegato   Rispondi citando
Vecchio 13-07-2004, 15.54.45   #176
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Ho pensato che un giocatore potrebbe ripensare alla posizione di una nave, quindi vorrei chiedere alla fine una conferma sulle posizioni inserite, se il giocatore risponde di sì si va avanti, altrimenti viene ripetuta la richiesta di inserimento delle coordinate.
Ho provato a scrivere questo codice, ma credo di avere dei problemi nella gestione della risposta. Ho provato utilizzando un while come per le coordinate, ma non mi riesce, poi ho scritto questo e non funziona lo stesso
Codice:
while(!corretto){
		while(Count > 0) {
			printf("Nave %i:    Colonna_", nave);
      
			// A-J
			while((c_col < 65) || (c_col > 74))
				c_col = getch();
				coorx[0] = c_col;
      
			mArray[nave-1].colonna = coorx[0];
			printf("%c    Riga_", c_col);
			c_col = ' '; // reset

		    // 0-9
			while(((c_raw < 48) || (c_raw > 57)))
				c_raw = getch();
			printf("%c", c_raw);
			tmpStr[0] = c_raw;
			c_raw = ' '; // reset
		
			// 0-9 o ENTER per non dare coordinata a cifra singola
			while(((c_raw < 48) || (c_raw > 57)) && (c_raw != 13))
                           c_raw = getch();
			printf("%c", c_raw);
			tmpStr[1] = c_raw;
			c_raw = ' '; // reset
			printf("\n\r");		
			mArray[nave-1].riga = atoi(tmpStr);
			Count --;
			nave++;
		}
		printf("Confermi le posizioni delle navi? (S/N) ");
		conferma = getchar();
		if((conferma != 'N') || (conferma != 'S'))
			do {
				fflush(stdin);
				printf("\nConfermi le posizioni delle navi? (S/N) ");
				conferma = getchar();
			}while((conferma != 'N') || (conferma != 'S'));
		if(conferma == 'S')
			corretto = TRUE;
                  else{
                       for(i=0;i<numeroNavi;i++) {
			mArray[i].colonna = ' ';
			mArray[i].riga = 0;
			}
                       Count = numeroNavi;
                       navi = 1;
                  }
	}
l'inizio è uguale a quello postato in precedenza.

Ultima modifica di Alhazred : 13-07-2004 alle ore 16.03.47
Alhazred non è collegato   Rispondi citando
Vecchio 13-07-2004, 16.17.25   #177
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Mi stavo impicciando con l'uso dei comparatori, ho risolto.
Alhazred non è collegato   Rispondi citando
Vecchio 13-07-2004, 17.55.35   #178
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Ho scritto questa funzione che controlla se si sono inserite una o più volte le stessa coordinate in modo che si debbano inserire necessariamente tutte posizioni diverse per le navi:
Codice:
BOOL Ripetizioni(){
	int n = 2;
	int quante = 0;
	BOOL esiste = FALSE;
	//Controlla la 1° coordinata con le seguenti 4
	for(n = 2; n<numeroNavi; n++)
		if(mArray[0].colonna == mArray[n].colonna && mArray[0].riga == mArray[n].riga)
			quante++;
	n = 2;
	//Controlla la 2° coordinata con le seguenti 3
	for(n = 2; n<numeroNavi; n++)
		if(mArray[1].colonna == mArray[n].colonna && mArray[1].riga == mArray[n].riga)
			quante++;
	n = 3;
	//Controlla la 3° coordinata con le seguenti 2
	for(n = 3; n<numeroNavi; n++)
		if(mArray[2].colonna == mArray[n].colonna && mArray[2].riga == mArray[n].riga)
			quante++;
	//Controlla la 4° coordinata con la 5°
	if(mArray[3].colonna == mArray[4].colonna && mArray[3].riga == mArray[4].riga)
		quante++;

	if(quante > 0) esiste = TRUE;
	return(esiste);
}
Funziona, ma vorrei renderla parametrica in base a quanto vale numeroNavi, ovvero in base a quante navi si devono inserire sul campo. Così come l'ho scritta dovrei modificarla se aumentassi o diminuissi numeroNavi.
Come posso fare?

Ultima modifica di Alhazred : 13-07-2004 alle ore 18.38.20
Alhazred non è collegato   Rispondi citando
Vecchio 14-07-2004, 09.09.58   #179
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Per renderla parametrica dovresti utilizzare un'array di appoggio che incrementi ogni volta .. memorizzando in essa le coordinate correnti da controllare ed utilizzando un unico ciclo ... personalmente la vedo poco efficento come soluzione.. ti consiglio di controllarle al momento dell'inserimento.. nella "posizionaNavi" bastano un paio di righe di codice per farlo...

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 14-07-2004, 10.59.03   #180
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Credo anch'io che mettere il controllo direttamente in PosizionaNavi sia meglio, stavo solo cercando un modo di non impantanarmi troppo con i cicli while.
Alhazred 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
La grande battaglia dei super eroi! Sbavi Chiacchiere in libertà 83 27-02-2009 10.43.39
battaglia navale in c# Joy&Lu Programmazione 3 01-09-2008 15.08.58
Il Signore degli Anelli - La Battaglia per la terra di mezzo Darth Maul Masterizzazione Giochi Games 0 01-09-2006 18.16.18
[C] Battaglia Navale (versione client server) in Linux Nanri Programmazione 11 06-08-2005 14.50.27

Orario GMT +2. Ora sono le: 15.58.10.


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.