OVH Cloud OVH Cloud

un generateur de nombre aleatoire sous DOS

18 réponses
Avatar
Sébastien WILLEMIJNS
hello,

je recherche un programme DOS en ligne de comande qui donne un nombre
(si possible) entier au pif entre X et Y style

C:\>number 16 32
18

C:\>number 16 32
28

C:\>number 16 32
23

C:\>

j'ai l'esquisse d'un programme "trouver le nombre"
http://www.paulgriffiths.net/program/c/guessersrc.html

mais je m'y connais pas en language C ni pour le compiler ni pour
le modifier, qui pourrait me faire et me l'envoyer par mail

merci




--
Sébastien WILLEMIJNS, France
www.willemijns.com
www.nntpeng.willemijns.com (FAQ about open NNTP servers)

10 réponses

1 2
Avatar
benoitB
hello,

je recherche un programme DOS en ligne de comande qui donne un nombre
(si possible) entier au pif entre X et Y style

C:>number 16 32
18

C:>number 16 32
28

C:>number 16 32
23

C:>

j'ai l'esquisse d'un programme "trouver le nombre"
http://www.paulgriffiths.net/program/c/guessersrc.html

mais je m'y connais pas en language C ni pour le compiler ni pour
le modifier, qui pourrait me faire et me l'envoyer par mail

merci




& un mail à l'auteur ?


Avatar
B
Une suggestion, si QBASIC est disponible sur ton système...
Crée le fichier HAZAR.BAT, et mets-y ça :

@echo off
if rien%2==rien goto aide
if %1==%2 goto aide

echo RANDOMIZE TIMER>hazar.bas
echo PRINT VAL("%1") + CINT(RND * (VAL("%2") - VAL("%1")))>>hazar.bas
SYSTEM>>hazar.bas
qbasic /run hazar
del hazar.bas
goto end

:aide
echo.
echo usage : hazar [entier] [entier]
echo les deux nombres doivent être différents
echo.
echo exemple : HAZAR 10 30
echo.

:end




J'espère que ça répond à ce dont tu as besoin.

-bruno-




"Sébastien WILLEMIJNS" a écrit dans le message de
news:dbmgem$2378$
hello,

je recherche un programme DOS en ligne de comande qui donne un nombre
(si possible) entier au pif entre X et Y style

C:>number 16 32
18

C:>number 16 32
28

C:>number 16 32
23

C:>

j'ai l'esquisse d'un programme "trouver le nombre"
http://www.paulgriffiths.net/program/c/guessersrc.html

mais je m'y connais pas en language C ni pour le compiler ni pour
le modifier, qui pourrait me faire et me l'envoyer par mail

merci




--
Sébastien WILLEMIJNS, France
www.willemijns.com
www.nntpeng.willemijns.com (FAQ about open NNTP servers)


Avatar
B
c'est pas "SYSTEM>>hazar.bas" mais "echo SYSTEM>>hazar.bas". Petit oubli,
désolé.

-bruno-


"B" a écrit dans le message de
news:

Une suggestion, si QBASIC est disponible sur ton système...
Crée le fichier HAZAR.BAT, et mets-y ça :

@echo off
if rien%2==rien goto aide
if %1==%2 goto aide

echo RANDOMIZE TIMER>hazar.bas
echo PRINT VAL("%1") + CINT(RND * (VAL("%2") - VAL("%1")))>>hazar.bas
SYSTEM>>hazar.bas
qbasic /run hazar
del hazar.bas
goto end

:aide
echo.
echo usage : hazar [entier] [entier]
echo les deux nombres doivent être différents
echo.
echo exemple : HAZAR 10 30
echo.

:end




J'espère que ça répond à ce dont tu as besoin.

-bruno-


Avatar
AG
Sébastien WILLEMIJNS wrote:
mais je m'y connais pas en language C ni pour le compiler ni pour
le modifier, qui pourrait me faire et me l'envoyer par mail


#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main(int argc, char * argv[])
{
int a = atoi(argv[1]);
int b = atoi(argv[2]);
int c = a>b ? a:b;
int d = a<b ? a:b;

if(argc!=3) printf("usage : hazard.exe n1 n2");
srand(time(NULL));
printf("%dn",(int)(((double)rand())/RAND_MAX*(c-d)+0.5)+d);
return 0;
}

par contre, faut le compiler tout seul, je ne peux pas le faire pour toi.


tu le mets dans un fichier hazard.c

et puis

gcc -o hazard.exe hazard.c

AG, dépanneur.

Avatar
Brat'ac
Sébastien WILLEMIJNS a couché sur son écran :
hello,

je recherche un programme DOS en ligne de comande qui donne un nombre
(si possible) entier au pif entre X et Y style

C:>number 16 32
18


Bonjour
Dans une fenêtre de commandes ( cmd de XP ou W2K mais pas sous win9X)
le batch suivant permet de trouver un nombre aléatoire entre deux bornes
Le seul problème c'est que plus l'écart entre les deux nombres est réduit plus c'est
long voir très long si écart réduit au max.
ça doit être améliorable.


--------------------- copie on --------------------------
@echo off
set ale IF (%1)==() GOTO USAGE
IF (%2)==() GOTO USAGE
:: ------------------------
:debut
set /A ale=%random%
if /I %2 LEQ %ale% goto debut
if /I %1 GEQ %ale% goto debut
goto FIN
:USAGE
echo Entrez deux valeurs de 0 a 32767 separées par un espace
echo le premier doit etre inferieur au deuxieme
echo EX: nom-du-batch 45 245
:FIN
echo La valeur final du nombre est : %ale%
--------------------------- copie off ------------------
GS



--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com

Avatar
Sébastien WILLEMIJNS
On Thu, 21 Jul 2005 10:49:59 +0200, AG wrote:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main(int argc, char * argv[])
{
int a = atoi(argv[1]);
int b = atoi(argv[2]);
int c = a>b ? a:b;
int d = a<b ? a:b;

if(argc!=3) printf("usage : hazard.exe n1 n2");
srand(time(NULL));
printf("%dn",(int)(((double)rand())/RAND_MAX*(c-d)+0.5)+d);
return 0;
}


merci de ton petit programme mais il crash avec le gcc de cygwin
je suis a l'instant en train de recuperer la 4.01 de GCC puis j'irais
me battre avec les bz2 pour essayer de recuperer les binaires compilés
:)

Exception: STATUS_ACCESS_VIOLATION at eipa0C5FD0
eax73F144 ebx000000 ecx000000 edx000000 esi401050
edi00000A
ebp73ECD8 esp73ECC0 program=C:GCCBINGCD.EXE, pid 357129,
thread main
cs6F ds77 es77 fsL07 gs00 ss77
Stack trace:
Frame Function Args
0073ECD8 610C5FD0 (0073F144, 00000000, 00000000, 0000000A)
0073ECF8 610C6158 (00000000, 00000000, 0000000A, 610042FE)
0073ED18 610C20C0 (00000000, 610E21A0, 00000000, 00401075)
0073ED68 0040108A (00000001, 00B90200, 00B90090, 610A5E22)
0073EE58 61004DD2 (0073EE70, FFFFFFFF, 00000000, 00000000)
0073FE08 6100594F (00000000, 00000000, 00000000, 00000000)
End of stack trace


--
Sébastien WILLEMIJNS, France
www.willemijns.com
www.nntpeng.willemijns.com (FAQ about open NNTP servers)

Avatar
AG
Sébastien WILLEMIJNS wrote:

On Thu, 21 Jul 2005 10:49:59 +0200, AG wrote:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main(int argc, char * argv[])
{
int a = atoi(argv[1]);
int b = atoi(argv[2]);
int c = a>b ? a:b;
int d = a<b ? a:b;

if(argc!=3) printf("usage : hazard.exe n1 n2");
srand(time(NULL));
printf("%dn",(int)(((double)rand())/RAND_MAX*(c-d)+0.5)+d);
return 0;
}



merci de ton petit programme mais il crash avec le gcc de cygwin
? pas chez moi en tout cas. Si tu veux le faire marcher sous dos, il te

faut un compilo msdos. Tu ne pourras pas le faire marcher sous dos si tu
compiles avec cygwin. Et encore, quand tu parles de msdos, tu veux dire
une fenêtre dos, ou bien le vrai systeme d'exploitation ? Parce que si
en fait c'est juste une "fenetre dos", et que t'es sous Windows, faut un
compilo windows.

AG, dubitatif.


Avatar
Eric Lévénez
Le 21/07/05 10:49, dans <42df5f16$0$22531$, « AG »
a écrit :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main(int argc, char * argv[])
{
int a = atoi(argv[1]);
int b = atoi(argv[2]);


Les 2 lignes du dessus peuvent planter si argc n'est pas >= 3. Sans argument
il y a des chances que argv[1] soit à NULL, et donc le atoi va partir dans
les choux.

int c = a>b ? a:b;
int d = a<b ? a:b;

if(argc!=3) printf("usage : hazard.exe n1 n2");


Là argc est testé, mais trop tard car on a déjà planter le programme voire
la machine. De plus même si les paramètres sont mauvais ont continue, ce qui
n'est pas bien. En enfin il n'y a pas de n, et le message peut ne pas être
affiché sur la console (en fait il le sera car on a un printf plus loin dans
le code avec le n final.

srand(time(NULL));


C'est bien le time(), mais hélas avec les machines actuelles on peut lancer
des milliers de fois un programme dans la même seconde et donc time a des
chances d'être identique à chaque fois. Le générateur de nombre donnera
toujours la même séquence si on s'en sert pour par exemple emplir un fichier
de nombres. Il faudrait introduire une notion de numéro de processus (ça
existe sous DOS ?) dans le calcul.

printf("%dn",(int)(((double)rand())/RAND_MAX*(c-d)+0.5)+d);


Un truc étonnant avec mon GCC 4 est que la ligne du dessus retourne toujours
la même valeur. Par contre si juste après la ligne srand je rajoute un
appel a un rand(), le printf marche bien. Là je ne comprends pas.

return 0;
}


--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Avatar
Sébastien WILLEMIJNS
On Thu, 21 Jul 2005 17:51:45 +0200, AG wrote:


merci de ton petit programme mais il crash avec le gcc de cygwin


? pas chez moi en tout cas. Si tu veux le faire marcher sous dos, il te


sous une fenetre DOS ca me suffit ;)

oups, il crashe quand aucun argument n'est mis apres la ligne de
commande... sinon oui il marche... merci.

--
Sébastien WILLEMIJNS, France
www.willemijns.com
www.nntpeng.willemijns.com (FAQ about open NNTP servers)


Avatar
Sébastien WILLEMIJNS
On Thu, 21 Jul 2005 18:14:46 +0200, Eric Lévénez
wrote:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char * argv[])
{
int a = atoi(argv[1]);
int b = atoi(argv[2]);


Les 2 lignes du dessus peuvent planter si argc n'est pas >= 3. Sans argument
il y a des chances que argv[1] soit à NULL, et donc le atoi va partir dans
les choux.


c exact sans argument il crashe...

int c = a>b ? a:b;
int d = a<b ? a:b;

if(argc!=3) printf("usage : hazard.exe n1 n2");


Là argc est testé, mais trop tard car on a déjà planter le programme voire
la machine. De plus même si les paramètres sont mauvais ont continue, ce qui
n'est pas bien. En enfin il n'y a pas de n, et le message peut ne pas être
affiché sur la console (en fait il le sera car on a un printf plus loin dans
le code avec le n final.

srand(time(NULL));


C'est bien le time(), mais hélas avec les machines actuelles on peut lancer
des milliers de fois un programme dans la même seconde et donc time a des
chances d'être identique à chaque fois. Le générateur de nombre donnera
toujours la même séquence si on s'en sert pour par exemple emplir un fichier
de nombres. Il faudrait introduire une notion de numéro de processus (ça
existe sous DOS ?) dans le calcul.


je l'ai fait bouclé "a fond" et c'est exact... mais cela me suffit...

97778
66778
66778
66778
66778
66778
66778
35779
35779
35779
35779
35779
35779
4779
4779
4779
4779
4779
4779
73779
73779
73779
73779
[...]


--
Sébastien WILLEMIJNS, France
www.willemijns.com
www.nntpeng.willemijns.com (FAQ about open NNTP servers)


1 2