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