|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
|
[c] aiutino stesura codice
questo frammento che segue dovrebbe simulare una gara tra 4 macchinine random, il fatto è che dovrebbero arrivare tutte ad esempio alla colonna 50 e farmarsi li! invece se metto la condizione del while <50 visualizza solo le prime mosse, se la aumento tipo a 500 avanza e non capisco con che criterio! non è che mi date una mano?
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> int main() { int i,j; int posizioni[4]={0,0,0}; srand (time(NULL)); do { system("cls"); for (i=0;i<4;i++) { posizioni[i]+=rand()%4; for (j = 0; j < (posizioni[i]); j++) { printf(" "); } printf("%d\n",i); } Sleep(300); } while (posizioni[i]<200); system("pause"); return 0; } inoltre vorrei sapere come assegnare il numero della macchinina che è arrivata prima a una variabile!
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit Ultima modifica di mto89 : 27-10-2008 alle 21:29. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 1237
|
Codice:
int posizioni[4]={0,0,0,0};
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Devi cambiare la condizione di uscita, così come è ora dovrebbe dare anche errore perché vai a leggere un elemento dell'array che non esiste. Tu vuoi uscire quando tutti hanno raggiunto il traguardo, cioè quando tutte le posizioni (dalla zero alla tre) sono maggiori (o maggiori-uguali) del traguardo.
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
|
Quote:
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
|
no se metto >50 va avanti senza fine! ho modificato così:
#include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> int main() { int i,j; int posizioni[4]={0,0,0,0}; // Posizioni cavalli int flag=0; // Variabile di verifica arrivo int k =0; int traguardo=20; // colonna di arrivo int winner=0; // Numero vincitore srand (time(NULL)); while (flag!=1) { system("cls"); for (i=0;i<4;i++) { posizioni[i]+=rand()%3; for (j=0; j<(posizioni[i]); j++) { printf(" "); } printf("%d\n",i); } Sleep(300); for (k=0;k<4;k++); // verifica macchine da 1 a 4 { if (posizioni[k]>=traguardo) { flag=1; winner=k; } } } printf("ha vinto %d",winner); system("pause"); return 0; } Facendo cosi appare la prima serie random di valori e si ferma! Ma proprio non capisco il perchè! mi sapete aiutare?
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit Ultima modifica di mto89 : 28-10-2008 alle 15:13. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 1237
|
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int main()
{
int i,j;
int posizioni[4]={0,0,0,0};
srand (time(NULL));
while (posizioni[0] < 50 && posizioni[1] < 50 && posizioni[2] < 50 && posizioni[3] < 50){
system("cls");
for (i=0;i<4;i++){
posizioni[i]+=rand()%4;
for (j = 0; j < (posizioni[i]); j++)
printf(" ");
printf("%d\n",i);
}
Sleep(300);
}
system("pause");
return 0;
}
Cosa non ti torna di preciso? |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
|
tenta e ritenta ecco la versione finale che funziona e segnala correttamente chi vince alla lnea del traguardo.
Pero c'è un grosso problema: io vorrei sapere anche chi è arrivato secondo, terzo e quarto, insomma tutta la classifica, però proprio non riesco a farlo andare! mi sapreste consigliare? inoltre se avete notato se ad esempio sia la macchina 2 che 3 arrivano oltre il traguardo la vittoria è assegnata ovviamente a quella più vicina alla fine del ciclo ovvero la 3! questo programma simula un gioco di corse in c. Lo avevo proposto in altra vesta giorni fa. Vorrei sapere come modificare questo codice in modo che venga visualizzato l'intero ordine di arrivo, inoltre che venga gestito il pari merito. #include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> int main() { int i,j; int posizioni[4]={0,0,0,0}; // Posizioni auto int flag=0; // Variabile di verifica arrivo int traguardo=8; // colonna di arrivo int winner=0; // Numero vincitore srand (time(NULL)); while (flag!=1) { system("cls"); for (i=0;i<4;i++) { posizioni[i]+=rand()%3; for (j=0; j<(posizioni[i]); j++) { printf(" "); } printf("%d\n",i); if (posizioni[i]>=traguardo) { flag=1; winner=i; } } Sleep(300); } printf("ha vinto %d\n",winner); system("pause"); return 0; }
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 1237
|
Togli quel
Codice:
winner = i; Fatto questo, fuori dal while metti un blocco di if che valuti l'ordine relativo degli elementi del vettore posizioni in modo da stabilire un ordine e quindi la classifica che cercavi. Ad esempio un frammento può essere Codice:
if(posizioni[0] > posizioni[1] && posizioni[1] > posizioni[2] && posizioni[2] > posizioni[3]) winner = 0; |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
|
grazie della'iuto, infatti ho notato che il winner non funzia!
Però avevo avuto pure io l'idea del controllo if alla fine, solo che dovrei elencare ogni singola possibilità, a me serve invece qualcosa di più "snello", in quanto il numero di macchine che partecipano possa essere aumentato senza dover riscrivere righe di codice, pensavo tipo a un controllo con un array, ma non ho avuto idee, confido in voi!
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Fai una funzione a parte che lavori su un array generico di n elementi.
PS: quando posti il codice usa il tag [code] così mantieni l'indentazione |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
|
Quote:
Perchè comunque in una funzione devo fare per forza in modo che ci sia un numero sempre uguale di macchine vero?
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 1237
|
Potresti usare questo algoritmo che è semplice semplice, modificandolo opportunamente per mantenere una relazione tra gli identificatori delle automobili e gli elementi di posizioni.
http://www.personal.kent.edu/~rmuham...ectionSort.htm |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:34.





















