je vous remercie tous.je vais essayer la methode de darkoli qui me semble la + clair.merci.@+
darkoli
merci JPA :D
JPA
C'est à mon sens la solution la plus élégante.
Bravo Darkoli ! :jap:
darkoli
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).
Code :
n:byte; // c'est le nombre entre 0..255
i:integer;
s:string[8]; // je crois que c'est comme ca que ca s'ecrit mais j'ai un doute
for i:=8 downto 1 do
begin
s[i]=chr(48 + (n and 1));
n:=n shr 1;
end;
writeln('Equivalent decimal: '+s);
darkoli
voici une solution qui doit marche aussi et qui se rapproche des solutions deja proposée...
Code :
n:byte; // c'est le nombre entre 0..255
i:integer;
s:string[8]; // je crois que c'est comme ca que ca s'ecrit mais j'ai un doute
for i:=8 downto 1 do
begin
s[i]=chr(48 + (n and 1));
n:=n shr 1;
end;
writeln('Equivalent decimal: '+n);
Bounga69
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]
wouatouwouatou
bounga.. je crois ke ta oublié ke c par puissance de 2 :D
moi je suis pour la technique de jpa...
et hop, une boucle...
Bounga69
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.
JPA
Je viens d'éditer mon post qui comportait des erreurs. J'ai pas testé, mais je pense que celà marche
A+
Bounga69
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.
Bounga69
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.
JPA
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}
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]
Bounga69
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!
prettysmile
je ne crois pas qu'une telle fonction existe. il semble plutôt s'agir d'effectuer manuellement cette conversion (et vive les divisions!!!). :D
JPA
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+
cobra1000000
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