aide pascal - Programmation
Marsh Posté le 06-06-2001 à 15:01:28
pour le point n° 2 :
alea:=min+ent(random*(max+1-min))
doit te donner un nombre compris entre min et max (inclus)
Pour le 1, je cherche 5 min
A+
Marsh Posté le 06-06-2001 à 15:03:12
je ne crois pas qu'une telle fonction existe. il semble plutôt s'agir d'effectuer manuellement cette conversion (et vive les divisions!!!).
Marsh Posté le 06-06-2001 à 15:12:46
bah c pas bien difficile de convertir un nb déci en bin.
Tu fais des divisions successives par 2 et tu gardes le quotient qqpart (0 ou 1). Ensuite tu affiches cette suite de chiffre et basta!
Marsh Posté le 06-06-2001 à 15:18:31
Comme l'a dit prettysmile, cette fonction n'existe pas. Elle s'écrit facilement sans division :
définir 8 bytes :
Const
B1 = 0001; {00000001 en binaire}
B2 = 0002; {00000010 en binaire}
B3 = 0004; {00000100 en binaire}
B4 = 0008; {00001000 en binaire}
...
B8 = 0128; {10000000 en binaire}
if(Variable AND B8) <> 0 imprime 1 sinon imprime 0;
if(Variable AND B7) <> 0 imprime 1 sinon imprime 0;
...
if(Variable AND B2) <> 0 imprime 1 sinon imprime 0;
if(Variable AND B1) <> 0 imprime 1 sinon imprime 0;
Dans tes tests tu peux bien sur créer une variable texte au lieu d'imprimer directement
Tu peux également faire un tableau de bytes
ce qui donnera :
texte:='';
for i:= 8 downto 1 do
begin
if (Variable AND B[i]) <> 0 then texte=texte+'1' else texte := texte + '0';
end;
A+
[edit]--Message édité par JPA--[/edit]
Marsh Posté le 06-06-2001 à 15:20:04
tiens un ex: pour 15
15 div 2 = 7 , 15%2 = 1
bon tu as le quotient (7) et le reste (1)
ben tu fais 7 div 2 = 3 , 7%2 = 1
ensuite 3 div 2 = 1 , 3%2 = 1
bon ben tu as un quotient < 2 donc tu arrêtes et tu affiches à l'écran :
1111.
Voilà, j'essaie de trouver un algo fastoche ensuite j'te le file.
Marsh Posté le 06-06-2001 à 15:31:30
bon tu fais un truc du style :
writeln ('entrez le nb à convertir');
readln (nb);
quot := nb;
rest := 0;
while (quot >= 2) do
{
quot := (quot div 2);
rest := (quot % 2);
write (rest);
if (quot == 1) then
write ('1');
}
ça c'est un peu batard mais ça marche pour les nb impairs.
pour les nb pairs c différent ex: 8 c 1000
J'vis fait une fonction qui traitait bien les 2 mais à chaud peut pas te répondre.
Marsh Posté le 06-06-2001 à 15:36:06
Je viens d'éditer mon post qui comportait des erreurs.
J'ai pas testé, mais je pense que celà marche
A+
Marsh Posté le 06-06-2001 à 15:36:42
ben en fait c la même chose, m'en étais pas rendu compte, au fait div c'est la commande qui effectue une division entière, et % celle qui te donne le reste de la division entière.
Marsh Posté le 06-06-2001 à 15:37:23
bounga.. je crois ke ta oublié ke c par puissance de 2
moi je suis pour la technique de jpa...
et hop, une boucle...
Marsh Posté le 06-06-2001 à 15:59:40
ben justement 2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
15 = (2^0 + 2^2 + 2^3 + 2^4) = 1111
je ne dis pas que la méthode de jpa n'est pas bonne, j'essaie de donner un truc le plus simple possible. A ce que je sache, quand on t'apprends à convertir un nombre deci en nombre binaire, on te dis de faire des divisions successives par 2, c sur quoi je me base :
quot := 15;
rest := 0;
1)
quot = 7
rest = 1
2)
quot = 3
rest = 1
3)
quot = 1
rest = 1
et à la fin tu as 1111
le pb c'est que les chiffres sont affichés à l'envers donc on fait comme jpa :
on crée un tableau de longueur 8 nommé binar qu'on initialise à 0, ensuite on fait :
bon tu fais un truc du style :
writeln ('entrez le nb à convertir');
readln (nb);
quot := nb;
rest := 0;
i:=1;
while (quot >= 1) do
{
quot := (quot div 2);
rest := (quot % 2);
binar[i] := rest;
i := i+1;
}
for i=8 downto 1 do
write (binar[i];
il me semble que ça marche comme ça.
[edit]--Message édité par Bounga69--[/edit]
Marsh Posté le 06-06-2001 à 16:38:36
voici une solution qui doit marche aussi et qui se rapproche des solutions deja proposée...
Code :
|
Marsh Posté le 06-06-2001 à 16:43:23
darkoli a écrit a écrit : voici une solution qui doit marche aussi et qui se rapproche des solutions deja proposée... sauf qu'elle est tres courte (peu de lignes).
|
Marsh Posté le 06-06-2001 à 16:45:30
C'est à mon sens la solution la plus élégante.
Bravo Darkoli !
Marsh Posté le 06-06-2001 à 18:11:57
je vous remercie tous.je vais essayer la methode de darkoli qui me semble la + clair.merci.@+
Marsh Posté le 06-06-2001 à 14:45:21
existe t-il (dans turbo pascal) une fonction, procedure ou instruction qui permette de convertir des nombres decimal en nombre binaire car j'ai un exercice a faire qui me demande :
Ecrire une fonction qui recoit en parametre un entier inferieur a 256 et retourne son equivalent binaire.
a l'execution, vous devrez obtenir sur l'ecran:
Entrz un nombre decimal <256 :255
Equivalent decimal: 11111111
Voulez vous continuez ? (o/n) :
Voici un autre exo
Ecrire une fonction utilisant la fonction predefinie RANDOM pour retourner un entier aleatoire compris entre 2 limites (min,max) passees en parametres.
Testez la fonction en generant 1000 nombres aleatoires compris entre 1 et 10 et en affichant le nombre de fois que chaque nombre est sorti.
Sur l'ecran, vous obtiendrez, par exemple :
1:98
2:104
3:87
...
...
10:99
Vous disposez pour ecrire ce programme de la fonction predefinie RANDOM .Cette fonction qui s'utilide sans argument (cas tout a fait exceptionnel) delivre comme resultat un reel compris entre 0 et1 .
Vous avez lz droit d'ecrire:
alea:= RANDOM;
alea etant une varible de type reel.
Quelqu'un pourrait m'expliquer la fonction RANDOM.comment fait-on pour definir les 2 limites.comment fait-on pour avoir des nombres 1;2;3;4;....10..1001025 alors que random nous fournit des nombres compris entre 0 et 1?MERCI
Je demande de l'aide car je suis des cours a distance en turbo-pascal et ces cours sont loin de tous expliquer .merci