Turbo pascal

Résolu/Fermé
suz - 28 sept. 2008 à 11:25
shikamaroux Messages postés 538 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 22 février 2013 - 7 janv. 2012 à 13:23
Bonjour,
jai besoin de savoir comment je peux faire car jai telecharge turbo pascal le pb le clavier de correspond pas aux caractere ecrits
A voir également:

3 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
1 oct. 2008 à 10:13
Voici une unité qui permet de modifier la console et la rendre compatible avec le clavier français (elle intègre aussi un affichage du numéro de l'erreur lorsque le programme s'arrête brusquement, et un compteur qui affiche à la fin la durée totale d'exécution du programme).
Il est important que le fichier qui contient le code porte le même nom que celui qui suit "unit" au tout début du code (tel quel le fichier serait donc KX.pas)
Pour que cette unité puisse être appelée facilement par un autre programme, il faut la placer avec les autres unités pré-installées de Turbo Pascal (par exemple moi c'est dans C:\Program Files\Pascal\units\KX.pas) il n'y aura alors plus qu'à faire "uses KX;" au début du code de ton programme pour appeler l'unité et utiliser son contenu.
unit KX;

interface

implementation

uses dos;

////////////////////////////////////////////////////////////////////////////////
// Cette partie de l'unité modifie les caractères lisibles de la console
// Il y aura alors adéquation entre le clavier français et l'affichage à l'écran
////////////////////////////////////////////////////////////////////////////////

type Table=array[0..255] of char;
     Driver=procedure(var t:TextRec);

var RawInput,RawOutput:Driver;
    InTable,OutTable:Table;

procedure Assoc(i,c: integer);
begin
   InTable[c]:=chr(i);
   OutTable[i]:=chr(c);
end;

procedure InitTables;
var i:integer;
begin
   for i:=0 to 127 do
   begin
      InTable[i]:=chr(i);
      OutTable[i]:=chr(i);
   end;
   for i:=128 to 255 do
   begin
      InTable[i]:=chr(128);
      OutTable[i]:=chr(177);
   end;
   Assoc(160,255); //  
   Assoc(161,173); // ¡
   Assoc(162,189); // ¢
   Assoc(163,156); // £
   Assoc(164,207); // ¤
   Assoc(165,190); // ¥
   Assoc(166,221); // ¦
   Assoc(167,245); // §
   Assoc(168,249); // ¨
   Assoc(169,184); // ©
   Assoc(170,166); // ª
   Assoc(171,174); // «
   Assoc(172,170); // ¬
   Assoc(173,240); // ­
   Assoc(174,169); // ®
   Assoc(175,238); // ¯
   Assoc(176,248); // °
   Assoc(177,241); // ±
   Assoc(178,253); // ²
   Assoc(179,252); // ³
   Assoc(180,239); // ´
   Assoc(181,230); // µ
   Assoc(182,244); // ¶
   Assoc(183,250); // ·
   Assoc(184,247); // ¸
   Assoc(185,251); // ¹
   Assoc(186,167); // º
   Assoc(187,175); // »
   Assoc(188,172); // ¼
   Assoc(189,171); // ½
   Assoc(190,243); // ¾
   Assoc(191,168); // ¿
   Assoc(192,183); // À
   Assoc(193,181); // Á
   Assoc(194,182); // Â
   Assoc(195,199); // Ã
   Assoc(196,142); // Ä
   Assoc(197,143); // Å
   Assoc(198,146); // Æ
   Assoc(199,128); // Ç
   Assoc(200,212); // È
   Assoc(201,144); // É
   Assoc(202,210); // Ê
   Assoc(203,211); // Ë
   Assoc(204,222); // Ì
   Assoc(205,214); // Í
   Assoc(206,215); // Î
   Assoc(207,216); // Ï
   Assoc(208,209); // Ð
   Assoc(209,165); // Ñ
   Assoc(210,227); // Ò
   Assoc(211,224); // Ó
   Assoc(212,226); // Ô
   Assoc(213,229); // Õ
   Assoc(214,153); // Ö
   Assoc(215,158); // ×
   Assoc(216,157); // Ø
   Assoc(217,235); // Ù
   Assoc(218,233); // Ú
   Assoc(219,234); // Û
   Assoc(220,154); // Ü
   Assoc(221,237); // Ý
   Assoc(222,232); // Þ
   Assoc(223,225); // ß
   Assoc(224,133); // à
   Assoc(225,160); // á
   Assoc(226,131); // â
   Assoc(227,198); // ã
   Assoc(228,132); // ä
   Assoc(229,134); // å
   Assoc(230,145); // æ
   Assoc(231,135); // ç
   Assoc(232,138); // è
   Assoc(233,130); // é
   Assoc(234,136); // ê
   Assoc(235,137); // ë
   Assoc(236,141); // ì
   Assoc(237,161); // í
   Assoc(238,140); // î
   Assoc(239,139); // ï
   Assoc(240,208); // ð
   Assoc(241,164); // ñ
   Assoc(242,149); // ò
   Assoc(243,162); // ó
   Assoc(244,147); // ô
   Assoc(245,228); // õ
   Assoc(246,148); // ö
   Assoc(247,246); // ÷
   Assoc(248,155); // ø
   Assoc(249,151); // ù
   Assoc(250,163); // ú
   Assoc(251,150); // û
   Assoc(252,129); // ü
   Assoc(253,236); // ý
   Assoc(254,231); // þ
   Assoc(255,152); // ÿ
end;

procedure CookedOutput(var f:textrec);
var i:integer;
begin
   for i:=0 to f.bufpos-1 do
      f.buffer[i]:=OutTable[ord(f.buffer[i])];
   RawOutput(f);
end;

procedure CookedInput(var f:textrec); [IOCheck];
var i: integer;
begin
   RawInput(f);
   for i:=0 to f.bufend-1 do
      f.buffer[i]:=InTable[ord(f.buffer[i])];
end;

procedure RedirectIO(var InText,OutText:text);
begin
   RawInput:=Driver(TextRec(InText).InOutFunc);
   TextRec(InText).InOutFunc:=@CookedInput;
   RawOutput:=Driver(TextRec(OutText).InOutFunc);
   TextRec(OutText).InOutFunc:=@CookedOutput;
   TextRec(OutText).FlushFunc:=@CookedOutput;
end;

procedure Install_Screen;
begin
   InitTables;
   RedirectIO(input,output)
end;

////////////////////////////////////////////////////////////////////////////////
// Cette partie de l'unité affiche (à la fin) le temps d'exécution du programme
// En cas d'erreur lors de l'exécution, le numéro d'erreur est également affiché
////////////////////////////////////////////////////////////////////////////////

type ProcType=procedure;

var OldProc:ProcType;
    r1:real;

function RealOfGetTime:real;
var h,m,s,c:word;
begin
   GetTime(h,m,s,c);
   result:=h*3600+m*60+s+real(c)/100;
end;

procedure ToDoAtExit;
var r,r2:real;
begin
   Exitproc:=OldProc;
   r2:=RealOfGetTime;
   r:=r2-r1;
   if r<0 then r:=r+24*3600;
   writeln;
   if ErrorAddr=nil then write('Fin du programme')
                    else write('Erreur ',ExitCode);
   write('. Temps d''exécution : ',r:0:2,' secondes');
   readln;
end;

procedure Install_Time;
begin
   OldProc:=ProcType(ExitProc);
   ExitProc:=@ToDoAtExit;
end;

begin
   r1:=RealOfGetTime;
   Install_Screen;
   Install_Time;
end.
Voici un petit programme de test qui montre bien le problème que résoud cette unité :
program Accents; uses KX;

begin
writeln('àâä éèêë ìîï òôö ùûü ÿ');
end.
Je pense que cette unité à résolu ton problème, sinon dis moi où ça coince...
4
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
30 sept. 2008 à 13:41
Il y a une méthode pour modifier la console et afficher les bons caractères et elle fait appel à des connaissances qui ne sont pas celles de novices (il faut bidouiller à l'intérieur de la console)
La méthode la plus simple est d'éviter d'utiliser des accents dans tes writeln et readln...
Remarque : si tu utilise un readln(s) en mettant des accents, il n'y aura pas de changement dans le writeln(s) c'est à dire que si tu ne fais pas de traitement sur s, les accents seront conservés...
0
shikamaroux Messages postés 538 Date d'inscription jeudi 2 juillet 2009 Statut Membre Dernière intervention 22 février 2013 227
7 janv. 2012 à 13:23
-1