[problémes avec turbo pascal]

Fermé
charlok_homse - 13 sept. 2005 à 23:12
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 28 juin 2008 à 17:57
Salut!

Voici le programme que j'ai écrit dans Turbo Pascal:


program MetreEnFeet;

uses wincrt;

var
a:real;
b:real;

begin
write ('Donnez la longueur en mètre: ');
readln(a);
b:= a*3.2808 ;
write ('La longueur en feet est: ' ,b);

end.


Problémes:
1-Comment éviter le "E+0.." qui s'affiche aprés plusieur zéros du résultat?
2-Qu'est ce que je dois faire pour que l'utilisateur ne devient plus obliger de fermer le programme et l'ouvrire de nouveau pour donner une autre longeur en Métre à convertire en Feet?
3-Comment faire pour que l'apuis sur "entrer" ferme le programme?

Merci d'avance.
A voir également:

4 réponses

Salut,
pour la 1ère question,
déclarer a comme entier, il exsiste une autre méthode même si a est real mais je en me rappel pas.
pour la 2 ème et la 3 ème question.
vous ajoutez une boucle repeat
repeat
...
wrtite("voullez vous continuer (o/n) : ");
readln(c);
until c="n" or readkey =13
je ne suis pas certain popur la 3ème je sais que entrer =13 mais avec "" ou pas,readkey ou key?
Bonne chance.
Merci
0
salut charlot,
j'espère avoir compris tes questions...
pour la première question (au niveau de l'affichage):
il suffit de introduire la séquence ":2:8" juste après b...alors ton avant dernière ligne sera
"write ('La longueur en feet est: ' ,b:2:8); "...

pour la 2 ème question:
vous ajoutez une boucle,en précisant le nombre de longuers que tu veux convertir...par exemple je supose que tu as cinq longueurs à convertir tu peux faire ceci:

for i:=1 to 5 do {attention il faut declarer i comme entier}
begin
write ('Donnez la longueur en mètre: ');
readln(a);
b:= a*3.2808 ;
write ('La longueur en feet est: ' ,b:2:8);
end.


pour la troisième :
il faut inclure l'instruction suivante "readln;" juste avant le dernier "end"( donc elle sera l'avnt dernière instruction)

je te souhaite bonne chance "y sepa que la vida es un constante anàlisis de casos"...ADIOS
0
Voici une suggestion de programme complet qui t'apportera satisfaction (j'espère !) si t'as encore besoin...

Au pire, ça servira aux autres !

Pour régler le problème du xxxxx+E, j'isole la partie entière et la partie décimale de la variable 'Pieds' (qui est de type Real, bien sûr) dans deux variables 'Pieds_Entier' et 'Pieds_Décimales'. C'est pas forcément le mieux à faire, mais c'est simple et a marche bien.
A noter que 'Pieds_Décimales' contient jusqu'à 6 chiffres, vu qu'on multiplie la partie décimale par 1.000.000. Ceci peut bien sur etre changé à ta guise.

TextColor sert à fixer la couleur du texte, c'est plus joli et surtout plus lisible !

Pour le reste, se reporter à l'aide de turbo pascal.

Voili :


PROGRAM METRES_EN_PIEDS;
Uses Crt;

Var
Pieds : Real;
Pieds_Entier, pieds_Decimales : LongInt; { Parties entières et décimales du résultat en pieds }
Metres : Real; { Valeur en mètres }
Touche : Char; { Touche pressée }


BEGIN
Repeat
ClrScr;
TextColor(7);
Write('Valeur en mêtres à convertir : ');
TextColor(11);
Readln(Metres);
Pieds := Metres*3.2808;
Pieds_Entier := Trunc( Int( Pieds ) );
Pieds_Decimales := Round( Frac( Pieds )*1000000 );
TextColor(7);
Write('Valeur en pieds : ');
TextColor(12);
Writeln(Pieds_Entier, ',', Pieds_Decimales );
Writeln;
TextColor(8);
Writeln('Appuyez sur une touche pour continuer - Echap pour quitter');
Touche := ReadKey;
Until Touche=#27;
END.

>PunkarA<
0
je suis etudiant en info et j'ai pas fais le cour sur les tableaux en turbo pascal.
je cherche donc un cours sur les tableaux et tout autre consepte de turbo pascal.
merci d'avance!
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
28 juin 2008 à 17:40
Sur un exemple :

var T:array[1..50] of real;

T est un tableau de 50 cases (allant de 1 à 50) chacune contenant une valeur de type real
Pour accéder à la valeur (de type real) de la case n°9 on écrit T[9].
Remarque le type peut être n'importe quoi (même un autre array).

Attention, dans [1..50], 1 et 50 doivent être fixés, c'est à dire qu'on ne peut pas faire ce genre de choses :
readln(min);
readln(max);
var t:array[min..max] of real;
Petite variante :

var T:array[1..50,1..32] of real;

On écrira alors T[9,17] pour accéder à la valeur...

Avec ça tu sais à peu près tout ce qui est nécessaire de savoir sur les tableaux...
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
28 juin 2008 à 17:57
Voici un programme type :
program Exemple;

const Nmax=10;

type Tableau=array[1..Nmax] of integer;

procedure InitialiserTableau(var T:Tableau); // le 'var' est très important !
var i:integer;                              // 1. pour modifier le contenu de T
begin                                      // 2. pour éviter de ralentir le programme
     for i:=1 to Nmax do
         T[i]:=0; // toutes les cases sont initialisées à 0
end;

procedure RemplirTableau(var T:Tableau);
var i:integer;
begin
     for i:=1 to Nmax do
         begin
         write('Valeur de la case ',i:3,' : ');
         readln(T[i]);
         end;
end;

procedure AfficherTableau(T:Tableau);
var i:integer;
begin
     for i:=1 to Nmax do
         begin
         write('Valeur de la case ',i:3,' : ');
         writeln(T[i]);
         end;
end;

var T:Tableau;
begin
InitialiserTableau(T);
RemplirTableau(T);
AfficherTableau(T);
end.
0