Bonjour!
Je propose une discussion à l'usage des débutants autour de l'écriture binaire.
Il n'est pas mauvais, de temps en temps, de revenir aux choses fondamentales dont on n'a pas toujours une connaissance très distincte. Par exemple, je viens d'apprendre ce que veut dire le mot bit. Je ne le savais pas, et peut-être ne suis-je pas le seul dans ce cas. Ça veut dire binary digit, c'est-à-dire un chiffre binaire.
Dès lors j'ai pu comprendre (enfin je crois) ce que c'était qu'un octet! J'en étais si content que j'en ai fait un programme.
@Paul TOTH
J'ai inséré la modification que tu m'avais montrée, mais je ne suis pas venu à bout de la comprendre. C'est pourquoi j'ai conservé les deux versions de la fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100 (*--------------------------------------------------------------------------*) (* Etude à l'usage des débutants: *) (* Ecriture binaire et écriture décimale *) (* d'un nombre compris entre 0 et 255, *) (* pour comprendre ce qu'est un octet. *) (*--------------------------------------------------------------------------*) program Octet; uses Crt; type TOctetChaine = string[8]; (*--------------------------------------------------------------------------*) (* 1. De l'écriture décimale à l'écriture binaire *) (*--------------------------------------------------------------------------*) function ByteToOctet(b: Byte): TOctetChaine; const temp: TOctetChaine = ''; begin repeat if (b mod 2 = 1) then temp := '1' + temp else temp := '0' + temp; b := b div 2; until b=0; ByteToOctet := temp; end; (*--------------------------------------------------------------------------*) (* 2. De l'écriture binaire à l'écriture décimale *) (*--------------------------------------------------------------------------*) (* version longue *) function DeuxPuissance(n: Byte): LongInt; var i: Byte; temp: LongInt; begin if n=0 then temp:=1 else begin if n=1 then temp:=2 else begin temp:=2; for i:=2 to n do temp:=2*temp; end; end; DeuxPuissance := temp; end; function OctetToByte(o: TOctetChaine): Byte; var i, temp: Byte; begin temp:=0; for i := Length(o) downto 1 do begin if o[i] = '1' then temp := temp + DeuxPuissance(Length(o)-i); end; OctetToByte := temp; end; (* version courte *) function OctetToByte2(o: TOctetChaine): Byte; var i, temp: Byte; begin temp := 0; for i := 1 to Length(o) do begin temp := 2 * temp; if o[i] = '1' then Inc(temp); end; OctetToByte2 := temp; end; (*--------------------------------------------------------------------------*) (* Programme principal *) (*--------------------------------------------------------------------------*) begin TextBackground(Blue); ClrScr; TextColor(White); WriteLn; WriteLn('Binaire(77) = ', ByteToOctet(77)); WriteLn; WriteLn('Decimale(''1001101'') = ', OctetToByte('01001101')); WriteLn; WriteLn('Decimale(''1001101'') = ', OctetToByte2('01001101')); ReadKey; end.
Partager