Convertir programme delphi en programme vb

Signaler
Messages postés
4
Date d'inscription
vendredi 22 février 2008
Statut
Membre
Dernière intervention
8 avril 2008
-
Messages postés
14765
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 janvier 2021
-
salut a tous ,s'il vous plait :
j'ai un programme en language  delphi et je veux le convrtir en language vb.net
le programme est:
<li>program Hamming;
</li><li>uses SysUtils;
</li><li></li><li>(* ========================================================= *)
</li><li>(* *)
</li><li>(* Méthode de Hamming: transmission de données sans erreur *)
</li><li>(* © Tanguy Altert, http://altert.family.free.fr/ *)</li><li>(* *)
</li><li>(* Août 2005 *)
</li><li>(* *)
</li><li>(* ========================================================= *)
</li><li></li><li>{$APPTYPE Console}
</li><li></li><li>const BPower : array[0..7] of byte = (1, 2, 4, 8, 16, 32, 64, 128);
</li><li>BinChar : packedarray[boolean] of char = '01';
</li><li>Separator = '=============================================';
</li><li></li><li>type THData = string[8];
</li><li></li><li>var Texte : string;
</li><li></li><li>Orn : byte;
</li><li>BinMem : string;
</li><li>BinBuff : string;
</li><li>BinDump : string;
</li><li>BinHamg : string;
</li><li></li><li>ModifCount : integer;
</li><li></li><li>HammingIn : array[1..4] of boolean;
</li><li>HammingOut : array[1..8] of boolean;
</li><li></li><li>idx, pw : integer;
</li><li>bool : boolean;
</li><li>s : string;
</li><li>WillRepair : boolean;
</li><li></li><li>(***************************************************************************)
</li><li>(* Cette partie simule un correspondant distant recevant les données. *)
</li><li>(* Le corps principal du programme n'est pas censé pouvoir modifier *)
</li><li>(* directement les variables suivantes (d'où l'utilisation de procédures *)
</li><li>(* telles que SetRepair. Cela simule des conversations sur un réseau. *)
</li><li></li><li>var PackCount, ErrorCount : integer;
</li><li>HMsg : string;
</li><li>DoRepair : boolean;
</li><li></li><li>procedure RevTransf;
</li><li>begin</li><li>HammingIn[1]:=HammingOut[1] xor HammingOut[2] xor HammingOut[5];
</li><li>HammingIn[2]:=HammingOut[3] xor HammingOut[4] xor HammingOut[6];
</li><li>HammingIn[3]:=HammingOut[1] xor HammingOut[3] xor HammingOut[7];
</li><li>HammingIn[4]:=HammingOut[2] xor HammingOut[4] xor HammingOut[8];
</li><li>end;
</li><li></li><li>procedure SetRepair(State:boolean);
</li><li>begin</li><li>DoRepair:=State;
</li><li>end;
</li><li></li><li>procedure Init;
</li><li>begin</li><li>PackCount:=0;
</li><li>ErrorCount:=0;
</li><li>DoRepair:=false;
</li><li>HMsg:='';
</li><li>end;
</li><li></li><li>procedure Send(Data:THData);
</li><li>var Sgn : byte;
</li><li>EBit : byte;
</li><li>i : integer; //la variable de boucle doit être locale</li><li>label ReCheck;
</li><li>begin</li><li>inc(PackCount);
</li><li></li><li>//CONVERTISSONS LE SIGNAL REÇU EN TABLEAU DE BOOLÉENS</li><li>for i:=1 to 8 do</li><li>HammingOut[i]:= Data[i]='1';
</li><li></li><li>ReCheck:
</li><li>RevTransf;
</li><li></li><li>//REPÉRONS LA SIGNATURE (EN BINAIRE INVERSÉ)</li><li>Sgn:=0;
</li><li>for i:=1 to 4 do</li><li>Sgn:=Sgn+ Ord(HammingIn[i]) * BPower[i-1];
</li><li></li><li>//CORRECTION DU SIGNAL [1, 2, 4, 8, 16, 32, 64, 128]</li><li>case Sgn of</li><li>0 {0000}: EBit:=0; //le signal est OK !</li><li>1 {1000}: EBit:=5;
</li><li>2 {0100}: EBit:=6;
</li><li>4 {0010}: EBit:=7;
</li><li>5 {1010}: EBit:=1;
</li><li>6 {0110}: EBit:=3;
</li><li>8 {0001}: EBit:=8;
</li><li>9 {1001}: EBit:=2;
</li><li>10 {0101}: EBit:=4;
</li><li>else EBit:=0; //pas de correction possible</li><li>end;
</li><li></li><li>if EBit>0 then</li><li>begin</li><li>inc(ErrorCount);
</li><li>WriteLn(' Erreur sur le bit N°',EBit,' du paquet N°',PackCount,' envoyé');
</li><li>if DoRepair then</li><li>begin</li><li>HammingOut[EBit]:=not HammingOut[EBit]; //le HammingIn a juste servi comme détecteur d'erreur et pas comme le décompilé du HammingOut</li><li>goto ReCheck;
</li><li>end;
</li><li>end;
</li><li></li><li>//MÉMORISATION DU PAQUET</li><li>for i:=1 to 4 do</li><li>HMsg:=HMsg+ BinChar[HammingOut[i]];
</li><li>end;
</li><li></li><li>procedure Final;
</li><li>var i : integer;
</li><li>begin</li><li>WriteLn('Le correspondant a reçu ',PackCount,' paquets, soit ',8*PackCount,' bits.');
</li><li>case ErrorCount of</li><li>0: WriteLn('Aucune erreur n''a été détectée.');
</li><li>1: WriteLn(ErrorCount,' erreur a été détectée.');
</li><li>else WriteLn(ErrorCount,' erreurs ont été détectées.');
</li><li>end;
</li><li>WriteLn;
</li><li>WriteLn('Le message binaire reçu est :');
</li><li>WriteLn(HMsg);
</li><li>WriteLn;
</li><li>WriteLn('Il correspond au message original suivant :');
</li><li></li><li>//ON DECODE LE DUMP BINAIRE</li><li>BinBuff:=HMsg;
</li><li>Texte:='';
</li><li>repeat</li><li>BinMem:=Copy(BinBuff,1,8);
</li><li>Orn:=0;
</li><li>for i:=1 to 8 do</li><li>Orn:=Orn + BPower[i-1]*StrToInt(BinMem[i]);
</li><li>Texte:=Texte + Chr(Orn);
</li><li>Delete(BinBuff,1,8);
</li><li>until BinBuff='';
</li><li>WriteLn(Texte);
</li><li>end;
</li><li></li><li>(* *)
</li><li>(* *)
</li><li>(* *)
</li><li>(**************************************************************************)
</li><li></li><li>label ReDo;
</li><li>begin</li><li>//TITRE</li><li>WriteLn('Méthode de Hamming : transmission de données sans erreur');
</li><li>WriteLn(Separator);
</li><li>WriteLn;
</li><li></li><li>//SAISIE DU TEXTE</li><li>ReDo:
</li><li>SetRepair(false);
</li><li>WriteLn('Saisissez le texte à transmettre virtuellement :');
</li><li>ReadLn(Texte);
</li><li></li><li>//DUMP BINAIRE</li><li>BinDump:='';
</li><li>for idx:=1 to Length(Texte) do</li><li>begin</li><li>Orn:=Ord(Texte[idx]);
</li><li>for pw:=0 to 7 do</li><li>BinDump:=BinDump + BinChar[Orn and BPower[pw]>0];
</li><li>//ATTENTION: c'est un dump binaire inversé, c'est à dire que 2^0 se trouve à gauche et 2^7 à droite</li><li>end;
</li><li>WriteLn;
</li><li>WriteLn(Separator);
</li><li>WriteLn('L''anti-dump binaire associé est :');
</li><li>WriteLn(BinDump);
</li><li></li><li>//TRAITEMENT DU SIGNAL</li><li>BinHamg:='';
</li><li>BinBuff:=BinDump;
</li><li>repeat</li><li>//on traite les données par 4 bits (c'est pourquoi on a dumpé en binaire)</li><li>BinMem:=Copy(BinBuff,1,4);
</li><li>for idx:=1 to 4 do</li><li>HammingIn[idx]:= BinMem[idx]='1';
</li><li></li><li>//transformation mathématique</li><li>HammingOut[1]:=HammingIn[1];
</li><li>HammingOut[2]:=HammingIn[2];
</li><li>HammingOut[3]:=HammingIn[3];
</li><li>HammingOut[4]:=HammingIn[4];
</li><li>HammingOut[5]:=HammingIn[1] xor HammingIn[2];
</li><li>HammingOut[6]:=HammingIn[3] xor HammingIn[4];
</li><li>HammingOut[7]:=HammingIn[1] xor HammingIn[3];
</li><li>HammingOut[8]:=HammingIn[2] xor HammingIn[4];
</li><li></li><li>//constitution du signal de sortie et effacement du premier paquet de 4 bits situé au début</li><li>for idx:=1 to 8 do</li><li>BinHamg:=BinHamg + BinChar[HammingOut[idx]];
</li><li>Delete(BinBuff,1,4);
</li><li>until BinBuff='';
</li><li></li><li>WriteLn;
</li><li>WriteLn('Le signal de Hamming associé est :');
</li><li>WriteLn(BinHamg);
</li><li></li><li>//Naturellement, le dump de Hamming est deux fois plus lourd que le dump binaire.</li><li>//Il reste quand même un avantage: il est possible de réparer le signal s'il y a</li><li>//des erreurs, ce que ne permet pas un simple dump binaire.</li><li></li><li>//POSSIBILITE DE MODIFIER LE DUMP</li><li>WillRepair:=false;
</li><li>WriteLn;
</li><li>WriteLn('Le but de ce code est de détecter les erreurs de transmission.');
</li><li>WriteLn('Vous pouvez modifier quelques bits de Hamming, mais vous allez');
</li><li>WriteLn('vous faire griller lors de la réception (sauf s''il y a');
</li><li>WriteLn('compensation des erreurs)...');
</li><li>WriteLn;
</li><li>Write ('Voulez-vous modifier des bits ? (oui/non) ');
</li><li>ReadLn(s);
</li><li>if LowerCase(s)='oui' then</li><li>begin</li><li>WriteLn;
</li><li>WriteLn('Tapez "-1" pour arrêter. Sachez qu''il y a ',Length(BinHamg),' bits dans le message...');
</li><li>ModifCount:=0;
</li><li>bool:=false;
</li><li>repeat</li><li>Write(' Bit N°');
</li><li>ReadLn(idx);
</li><li>if (idx=-1) or (idx>Length(BinHamg)) then</li><li>bool:=true
</li><li>else</li><li>begin</li><li>BinHamg[idx]:=BinChar[not boolean(StrToInt(BinHamg[idx]))];
</li><li>inc(ModifCount);
</li><li>end;
</li><li>until bool;
</li><li>WriteLn;
</li><li>WriteLn(ModifCount,' bits du signal ont été modifiés...');
</li><li>WriteLn;
</li><li>WriteLn(Separator);
</li><li>WriteLn('Le signal de Hamming est maintenant celui-ci :');
</li><li>WriteLn(BinHamg);
</li><li></li><li>if ModifCount>0 then</li><li>begin</li><li>WriteLn;
</li><li>WriteLn('Vous avez la possibilité d''activer le correcteur d''erreur.');
</li><li>Write ('Souhaitez-vous le faire ? (oui/non) ');
</li><li>ReadLn(s);
</li><li>WillRepair:= LowerCase(s)='oui';
</li><li>end;
</li><li>end;
</li><li></li><li>//ENVOI DU MESSAGE</li><li>WriteLn;
</li><li>WriteLn(Separator);
</li><li>Init;
</li><li>SetRepair(WillRepair);
</li><li>BinBuff:=BinHamg;
</li><li>repeat</li><li>Send(Copy(BinBuff,1,8));
</li><li>Delete(BinBuff,1,8);
</li><li>until BinBuff='';
</li><li></li><li>//FINALISATION DU TRAITEMENT ET PURGE DE LA MEMOIRE</li><li>WriteLn;
</li><li>WriteLn(Separator);
</li><li>Final;
</li><li>BinMem:='';
</li><li>BinBuff:='';
</li><li>BinDump:='';
</li><li>BinHamg:='';
</li><li></li><li>//POSSIBILITE DE RECOMMENCER</li><li>WriteLn;
</li><li>WriteLn(Separator);
</li><li>Write('Souhaitez-vous recommencer ce test très convaincant ? (oui/non) ');
</li><li>ReadLn(s);
</li><li>if LowerCase(s)='oui' then</li><li>begin</li><li>for idx:=1 to 5 do</li><li>WriteLn;
</li><li>goto ReDo;
</li><li>end;
</li><li>end.</li>

1 réponse

Messages postés
14765
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 janvier 2021
151
Bonjour

Tu peux faire un détour par ce topic :
http://www.vbfrance.com/infomsg_CONVERTIR-PROJET-DELPHI-VB-EXPRESS_1061564.aspx

ps : penses à indenté ton code, parce que là c'est illisible.

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site