Ha, super, il semble que j'ai eu des pbs avec mon précedent compte mais c'est bien moi.
Bonjour blacksad988,
Merci pour la réponse, je vais enfin pouvoir avancer dans ce petit problème, Le but pour le moment est la réalisation d'une application qui reçoit deux valeurs digitales sous forme de mots 8 bits et qui nous affiche ces deux valeurs et pour commencer mon prog par un bout, j'ai écider de prendre le problème dans ce sens, l'évolution du programe sera la saisie de deux valeurs ex : un U := 130V et un I := 15 A,au final je veux afficher la puissance apparente du montage ensuite le but est de tranmètre au montage deux autres valeurs par le biais de deux mots de 8 bits.
c'est vrai que mon code est écris un peu bizard, mais j'écris depuis peu, j'ai commencé par faire un organigrame sur un bout de papier, "façon de parler", recencer mes variables et traduire tout celà en Ada.
Certes c'est peu être pas la bonne solution mais il faut apprendre alors...
Il faut écrire des progs qui tournent.
J'ai débuter mon code par traiter le cas des Intégers, car il me faudra des floats en affichage plus tard.
Mon code débute ainsi :
with Text_Io;
use Text_Io;
with Ada.Integer_Text_Io;
use Ada.Integer_Text_Io;
with Ada.Float_Text_Io; -- Plus tard
use Ada.Float_Text_Io; -- Plus tard
procedure Convert_Bit is
subtype num is Integer range 0..255;
nb : num;
subtype Bit is Integer range 0..1;
Bit1 : Bit := 0;
Bit2 : Bit := 0;
Bit3 : Bit := 0;
Bit4 : Bit := 0;
Bit5 : Bit := 0;
Bit6 : Bit := 0;
Bit7 : Bit := 0;
Bit8 : Bit := 0;
type Tab_Bit is array (Integer range 0 .. 7) of Bit;
T1 : Tab_Bit ;
T2 : Tab_Bit ;
T3 : Tab_Bit ;
T3_Temp : Tab_Bit ;
-- T1 := (Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7, Bit8);
-- T2 := (Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7, Bit8);
-- T3 := (Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7, Bit8);
-- T3_Temp := (Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7, Bit8);
Je ne sais pas si il est bien de tout énumérer,
voila il y a peut être de choses !!!?
une fonction qui convertit mon num en tableau de bits :
function Convert ( nb : Integer )
return Tab_Bit is
T : Tab_Bit;
Nb : integer;
begin
I := 0;
Nb := nb;
while Nb /= 0 loop
T1(I) := Nb mod 2;
Nb := Nb / 2;
I := I + 1;
end loop;
return T(I);
End with;
end Convert;
Je pense que c'est ça,
la logique n'a pas été trop dificile mais c'est la syntaxe que je ne maitrise pas...
Voilà une fonction qui fait l'adition des deux tabs dans une autre, alors la j'ai des questions...
Surtout que se pose la des pbs de syntaxe que je ne connais pas encore.
J'ai mis des points pour dire que bit8 appartient à T1 donc j'ai mis T1.bit8 en Ada c'est pas ça ?
la Logique doit être bonne sauf que je ne sais sur une variable que faire
T3.Bit1 :=1.
function Add_Tab_Bit (
Tab1,
Tab2 : Tab_Bit )
return Tab_Bit is
Add_Tab : Add_Tab_Bit;
begin
if T1.Bit8 := 1 and T2.Bit8 := 1 then
T3.Bit8 := 0;
T3_Temp.Bit7 := 1;
elsif
T1.Bit8 := 0 and T2.Bit8 := 0 then
T3.Bit8 := 0;
else
T3.Bit8 := 1;
end if;
end if; -- il semblerait possible de traiter ces blocs par un moyen du genre T1.Bit."Previous" celà devrait être possible il me semble
if T1.Bit7 := 1 and T2.Bit7 := 1 and T3_Temp.Bit7 := 1 then
T3.Bit7 := 1;
T3_Temp.Bit6 := 1;
elsif
T1.Bit7 := 1 and T2.Bit7 := 1 and T3_Temp.Bit7 := 0 then
T3.Bit7 := 0;
T3_Temp.Bit6 := 1;
elsif
T1.Bit7 := 0 and T2.Bit7 := 0 and T3_Temp.Bit7 := 1 then
T3.Bit7 := 1;
elsif
T1.Bit7 := 0 and T2.Bit7 := 0 and T3_Temp.Bit7 := 0 then
T3.Bit7 := 0;
else
T3.Bit7 := 1;
end if;
if T1.Bit6 := 1 and T2.Bit6 := 1 and T3_Temp.Bit6 := 1 then
T3.Bit6 := 1;
T3_Temp.Bit5 := 1;
elsif
T1.Bit6 := 1 and T2.Bit6 := 1 and T3_Temp.Bit6 := 0 then
T3.Bit6 := 0;
T3_Temp.Bit5 := 1;
elsif
T1.Bit6 := 0 and T2.Bit6 := 0 and T3_Temp.Bit6 := 1 then
T3.Bit6 := 1;
elsif
T1.Bit6 := 0 and T2.Bit6 := 0 and T3_Temp.Bit6 := 0 then
T3.Bit6 := 0;
else
T3.Bit6 := 1;
end if;
if T1.Bit5 := 1 and T2.Bit5 := 1 and T3_Temp.Bit5 := 1 then
T3.Bit5 := 1;
T3_Temp.Bit4 := 1;
elsif
T1.Bit5 := 1 and T2.Bit5 := 1 and T3_Temp.Bit5 := 0 then
T3.Bit5 := 0;
T3_Temp.Bit4 := 1;
elsif
T1.Bit5 := 0 and T2.Bit5 := 0 and T3_Temp.Bit5 := 1 then
T3.Bit5 := 1;
elsif
T1.Bit5 := 0 and T2.Bit5 := 0 and T3_Temp.Bit5 := 0 then
T3.Bit5 := 0;
else
T3.Bit5 := 1;
end if;
if T1.Bit4 := 1 and T2.Bit4 := 1 and T3_Temp.Bit4 := 1 then
T3.Bit4 := 1;
T3_Temp.Bit3 := 1;
elsif
T1.Bit4 := 1 and T2.Bit4 := 1 and T3_Temp.Bit4 := 0 then
T3.Bit4 := 0;
T3_Temp.Bit3 := 1;
elsif
T1.Bit4 := 0 and T2.Bit4 := 0 and T3_Temp.Bit4 := 1 then
T3.Bit4 := 1;
elsif
T1.Bit4 := 0 and T2.Bit4 := 0 and T3_Temp.Bit4 := 0 then
T3.Bit4 := 0;
else
T3.Bit4 := 1;
end if;
if T1.Bit3 := 1 and T2.Bit3 := 1 and T3_Temp.Bit3 := 1 then
T3.Bit3 := 1;
T3_Temp.Bit2 := 1;
elsif
T1.Bit3 := 1 and T2.Bit3 := 1 and T3_Temp.Bit3 := 0 then
T3.Bit3 := 0;
T3_Temp.Bit2 := 1;
elsif
T1.Bit3 := 0 and T2.Bit3 := 0 and T3_Temp.Bit3 := 1 then
T3.Bit3 := 1;
elsif
T1.Bit3 := 0 and T2.Bit3 := 0 and T3_Temp.Bit3 := 0 then
T3.Bit3 := 0;
else
T3.Bit3 := 1;
end if;
if T1.Bit2 := 1 and T2.Bit2 := 1 and T3_Temp.Bit2 := 1 then
T3.Bit2 := 1;
T3_Temp.Bit1 := 1;
elsif
T1.Bit2 := 1 and T2.Bit2 := 1 and T3_Temp.Bit2 := 0 then
T3.Bit2 := 0;
T3_Temp.Bit1 := 1;
elsif
T1.Bit2 := 0 and T2.Bit2:= 0 and T3_Temp.Bit2 := 1 then
T3.Bit2 := 1;
elsif
T1.Bit2 := 0 and T2.Bit2 := 0 and T3_Temp.Bit2 := 0 then
T3.Bit2 := 0;
else
T3.Bit2 := 1;
end if;
if T1.Bit1 := 1 and T2.Bit1 := 1 and T3_Temp.Bit1 := 1 then
T3.Bit1 := 1;
T3_Temp.Bit1 := 1;
elsif
T1.Bit1 := 1 and T2.Bit1 := 1 and T3_Temp.Bit1 := 0 then
T3.Bit6 := 0;
T3_Temp.Bit1 := 1;
elsif
T1.Bit1 := 0 and T2.Bit1 := 0 and T3_Temp.Bit1 := 1 then
T3.Bit1 := 1;
elsif
T1.Bit1 := 0 and T2.Bit1 := 0 and T3_Temp.Bit1 := 0 then
T3.Bit1 := 0;
else
T3.Bit1 := 1;
end if;
return T3(Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7, Bit8);
end Add_Tab_Bit;
En effet c'est le cas du dépassement de pile, T3_Temp.Bit1 := 1; mon prog devrait utiliser cette donnée.
j'ai fais aussi une fonction qui me retourne un entier à partir d'un enregistrement de mes tableaux
Maintenant avec la logique ça donne ça ...
function Bit_vers_num (
T1,
T2,
T3,
T3_Temp : Tab_Bits )
return num Is
B_num1 : num;
B_num2 : num; -- ne peut on faire un objet unique qui travaille suivant les trois cas ?
B_num3 : num;
Begin
If T1(Bit1) := 1 Then -- l'écriture de tous les T(bit) on depuis été réécris en T.Bit n , je pense que ça doit être ça ???
B_num1 := 128;
ElsIf T1(Bit2) := 1 Then
B_num1 := B_num1 + 64;
ElsIf T1(Bit3) := 1 Then
B_num1 := B_num1 + 32;
ElsIf T1(Bit4) := 1 Then
B_num1 := B_num1 + 16;
ElsIf T1(Bit5) := 1 Then
B_num1 := B_num1 + 08;
ElsIf T1(Bit6) := 1 Then
B_num1 := B_num1 + 04;
ElsIf T1(Bit7) := 1 Then
B_num1 := B_num1 + 02;
ElsIf T1(Bit8) := 1 Then
B_num1 := B_num1 + 01;
End If;
If T2(Bit1) := 1 Then
B_num2 := 128;
ElsIf T2(Bit2) := 1 Then
B_num2 := B_num2 + 64;
ElsIf T2(Bit3) := 1 Then
B_num2 := B_num2 + 32;
ElsIf T2(Bit4) := 1 Then
B_num2 := B_num2 + 16;
ElsIf T2(Bit5) := 1 Then
B_num2 := B_num2 + 08;
ElsIf T2(Bit6) := 1 Then
B_num2 := B_num2 + 04;
ElsIf T2(Bit7) := 1 Then
B_num2 := B_num2 + 02;
ElsIf T2(Bit8) := 1 Then
B_num2 := B_num2 + 01;
End If;
If T3(Bit1) := 1 Then
B_num3 := 128;
ElsIf T3(Bit2) := 1 Then
B_num3 := B_num3 + 64;
ElsIf T3(Bit3) := 1 Then
B_num3 := B_num3 + 32;
ElsIf T3(Bit4) := 1 Then
B_num3 := B_num3 + 16;
ElsIf T3(Bit5) := 1 Then
B_num3 := B_num3 + 08;
ElsIf T3(Bit6) := 1 Then
B_num3 := B_num3 + 04;
ElsIf T3(Bit7) := 1 Then
B_num3 := B_num3 + 02;
ElsIf T3(Bit8) := 1 Then
B_num3 := B_num3 + 01;
End If;
Return B_num1 , B_num2 , B_num3;
End Bit_vers_num;
et un début de programme, pas fini encore mais je pense que tout n'est pas fini, il y a des fautes dans tous les sens si ça se trouve.
I : Integer;
J : Integer;
Nb1 : Integer;
Nb2 : Integer;
begin
Put ("Entrez U (Volts) : " );
Get (Nb1);
num := (Nb1);
if num < 0 then
Put ("Défaut nombre négatif: essayez encore une fois" );
exit;
else
do
(Convert ( num ));
for I in Integer range '0' .. '7' loop
Put (Tab1(I));
end if;
New_Line;
Put ("Entrez I (Ampères) : " );
Get (Nb2);
num := (Nb2);
if num < 0 then
Put ("Défaut nombre négatif: essayez encore une fois" );
exit;
else
do
Convert ( num );
for J := 0 .. 7 loop
Put (Tab2 (I));
end if;
end Convert_Bit;
maintenant je dois faire évoluer ce code vers la saisie de mots de 8 bits
et enregistrer ces mots dans Tab 1 et 2.
Voilà, ha! j'oubliais, je vais faire un bout de code pour la puissance là pour commencer je vais faire ma multiplication en bas, après on fera une fonction.
mais j'écris comme un cochon, d'autres dirons " le cours" mais oui ...
j'ai pas trouvé...
pas bien cherché non plus...
Merci pour tes conseils,