|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2014
Messaggi: 11
|
[Linguaggio C]Numeri diversi
Buongiorno a tutti!
Dopo i vari dubbi che ho avuto (e risolto) sulla programmazione ad oggetti, ooggi mi ritrovo con un problema che non riesco a risolvere in un piccolo programma che stò cercando di creare con il linguaggio C. Il file in questione è questo: Piccolo programma creato da me So che puo' sembrare una sciocchezza, ma ad un certo punto nel codice, quando vado a rendere casuali i numeri, non riesco a non fare uscire due numeri uguali, mi spiego meglio Escono i numeri: 1 3 1 17 5 3 5 Vorrei invece che l'output fosse: 1 3 17 5 Qualche spunto per riuscire a risolvere questo piccolo difetto? P.S.: Sì lo so che non è solo questo il problema, ma ancora è in fase di "sviluppo" Grazie della vostra attenzione! Ultima modifica di nexus5 : 19-06-2014 alle 12:01. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Sbaglio o hai postato l' eseguibile del tuo programma?
Hai paura che non crediamo a quanto hai scritto? Dai su, scherzo. Pero' non va pubblicato l'eseguibile, visto che non ci conosciamo dobbiamo credere sulla parola che faccia quello che hai detto. Invece magari e' un bel virus o peggio. E poi non possiamo aiutarti, no? Non e' di alcuna utilita'! Metti il sorgente, e' piu' divertente. ciau
__________________
In God we trust; all others bring data |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Jun 2014
Messaggi: 11
|
Mi hanno sempre suggerito di non postare mai il sorgente... ora lo posto
Codice:
#include<stdio.h>
#include<stdlib.h>
int i,ncaratteri;
FILE *testo;
FILE *random;
void leggi_file()
{
char stringa[100][ncaratteri]; int k=1;
testo=fopen("lista.txt","r");
random=fopen("random_lista.txt","w");
printf("******INIZIO******\n\n");
if(testo!=(NULL))
{
for(i=0;i<ncaratteri;i++)
{
fflush(stdin);
fgets(stringa[i],sizeof(stringa),testo);
printf("%d) %s",k,stringa[i]); k++;
}
}
else
printf("Impossibile aprire il file!\n");
printf("\n\nLista generata:\n\n");
for(i=0;i<ncaratteri;i++)
{
k = rand() % ncaratteri;
printf("%d %s",k,stringa[k]);
fprintf(random, "%d - %s\n",ncaratteri, stringa[k]);
}
printf("\n\a********FINE*******\n\n");
}
void scrivirandom_file()
{
char stringa[200][ncaratteri];
for(i=0;i<ncaratteri;i++)
fprintf(random, "%s", stringa[i]);
}
Attendo risposte Ultima modifica di nexus5 : 19-06-2014 alle 12:48. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Difetti non ce ne sono. I numeri casuali funzionano così.
Quindi o ti segni quali numeri sono già usciti e scarti eventualmente quelli che sono doppioni, oppure generi un vettore con un pool di numeri, poi estrai un elemento dal vettore da una posizione casuale. |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jun 2014
Messaggi: 11
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2008
Messaggi: 8406
|
Caso 1:
ogni numero estratto viene aggiunto ad un vettore...prima di aggiungerlo fai una ricerca nel vettore, per vedere se c'è già....puoi mantenere il vettore ordinato per accelerare la ricerca Caso 2: crei un vettore di dimensione N, dove in ogni posizione N c'è il numero N...estrai un numero tra 0 e N-1, controlli se v[rand()] == 0 allora il numero in quella posizione è stato già selezionato e quindi devi estrarre un nuovo numero casuale....altrimenti v[rand()] è il numero scelto e poni v[rand()]=0 |
|
|
|
|
|
#7 | |
|
Junior Member
Iscritto dal: Jun 2014
Messaggi: 11
|
Quote:
La discussione si può chiudere ora devo solo scrivere il codice. Grazie a tutti! |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:58.




















