IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

[TP] Problème de conversion de base


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 113
    Par défaut [TP] Problème de conversion de base
    Bonjour,
    je viens de faire un programme qui permet de transformer une base donnée en une autre base.
    L'idée que j'ai utilisée est de convertir chaque nombre en décimal puis le diviser sur la base désirée.
    Mais ça n'a pas marché.
    SVP aidez-moi à corriger ce programme ou donnez-moi une autre idée.
    Merci d'avance

    Voilà mon programme
    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
    program base;
    uses wincrt;
    type
    tab=array[1..100] of integer;
    var
    t:tab;
    b1,b2,c,result:integer;
    ch:string;
    procedure lecture(var b1:integer;var b2:integer;var ch:string);
    begin
    writeln('donner la base a transferé');
    readln(b1);
    writeln ('donner la base auqelle  vous aller transformé');
    readln(b2)  ;
    writeln('donner le chiffre');
    readln (ch);
    end;
     
     
    procedure som( ch:string;b1:integer);
    var
      i, L, poid,Result : integer ;
    begin
      L := Length(Ch) ;
      Poid := 1 ;
      Result := 0 ;
      for i := L downto 1 do
      begin
        Result := Result + ( Ord(Ch[i]) - Ord('0') ) * Poid ;
        Poid := Poid * b1 ;
      end ;
    end ;
     
    procedure divi(b1:integer;var result:integer) ;
    var
      i,c : integer ;
    begin
      c := 0 ;
     repeat
      c:=c+1;
      t[i]:= result mod b1;
      result:=result div b1;
      until result =0  
     
    end;
    procedure affichage(t:tab;c:integer);
    var
    i:integer;
    begin
    for i:= c downto 1 do
    if t[i] in [1..9] then write (t[i])
    else write(chr(ord('A')+t[i]-10) );
    end;
     
    begin
    lecture(b1,b2,ch);
    som(ch,b1);
    divi(b1,result);
    affichage(t,c);
    end.

  2. #2
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    bonjour
    Citation Envoyé par gadalla
    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
     
    program base;
    uses wincrt;
    type
           tab=array[1..100] of integer;
    var
       t:tab;
       b1,b2,c,result:integer;
       ch:string;
    procedure lecture(var b1:integer;var b2:integer;var ch:string);
    begin
       writeln('donner la base a transferé');
       readln(b1);
       writeln ('donner la base auqelle vous aller transformé');
       readln(b2) ;
       writeln('donner le chiffre');
       readln (ch);
    end;
     
     
    procedure som( ch:string;b1:integer);
    var
        i, L, poid,Result : integer ;
    begin
       L := Length(Ch) ;
       Poid := 1 ;
       Result := 0 ;
       for i := L downto 1 do
       begin
            Result := Result + ( Ord(Ch[i]) - Ord('0') ) * Poid ;
            Poid := Poid * b1 ;
       end ;
    end ;
     
    procedure divi(b1:integer;var result:integer) ;
    var
       i,c : integer ;
    begin
        c := 0 ;
        repeat
           c:=c+1;
           t[i]:= result mod b1;
           result:=result div b1;
        until result =0
    end;
    procedure affichage(t:tab;c:integer);
    var
       i:integer;
    begin
        for i:= c downto 1 do
        if t[i] in [1..9] then write (t[i])
        else write(chr(ord('A')+t[i]-10) );
    end;
     
    begin
       lecture(b1,b2,ch);
       som(ch,b1);
       divi(b1,result);
       affichage(t,c);
    end.
    la prochaine fois pense à la balise "# code"
    et indentes bien ton code
    qu'est ce qui n'a paas marché ?

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Aik,

    Je n'ai pas lu en détail, mais ta procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure som( ch:string;b1:integer);
    ne renvoie aucun résultat.

    Donc, regarde de son côté.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 113
    Par défaut reponse pour le probleme
    merci baucoup pour vos repense et je veut ajouter que mon probleme est que le programme n'est pas executable

    merci a tous

  5. #5
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    si ton programme n'est pas executable alors essaie de relever les erreurs que le compilateur te dit et corriges les petit à petit
    @+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 113
    Par défaut repnonse sur question
    merci d'avoir lit mon message mais je veut te dire que l'ecriture de mon programme est correcte et lexiction se fait paticiel
    @+

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Aik,

    Citation Envoyé par gadalla
    merci pour avoir lit mon message
    je veut ajouter que l'exection du programme se fait mais elle se bolque au cour de calqule
    peutetre il ya une faite dans l'algoritheme
    avp aider moi a la corigé
    @+
    Lis-tu les réponses qu'on te fait ?

    Citation Envoyé par droggo
    Aik,

    Je n'ai pas lu en détail, mais ta procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure som( ch:string;b1:integer);
    ne renvoie aucun résultat.

    Donc, regarde de son côté.
    En regardant, tu verras au moins une cause qui implique que ça ne marche pas.

    Comme d'habitude, du coup je n'ai pas regardé le reste, ni les détails.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 113
    Par défaut salut a tous
    salut a tous
    jai modifier mon programme mais rien de nouveau
    quelle zst la solution
    @+

    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
    program base;
    uses wincrt;
    type
    tab=array[1..100] of integer;
    var
    t:tab;
    b1,b2,c,result:integer;
    ch:string;
    procedure lecture(var b1:integer;var b2:integer;var ch:string);
    begin
    writeln('donner la base a transferé');
    readln(b1);
    writeln ('donner la base auqelle  vous aller transformé');
    readln(b2)  ;
    writeln('donner le chiffre');
    readln (ch);
    end;
     
     
    procedure som( ch:string;b1:integer);
    var
    ta:tab;
      i,n,l,  poid,Result : integer ;
    begin
      l := Length(Ch) ;
     if ch[i] in ['0'..'9'] then
     begin
     
     ta[i]:= ord(ch[i])-ord('0');
     end
     else
     begin
     ta[i]:= ord(ch[i])-ord('7');
     end;
     result:=0; poid:=1;
     for i:= l downto 1 do
     result:= ta[i] * poid;
     poid:=poid * b1;
     end;
     
     
     
    procedure divi(b1:integer;var result:integer) ;
    var
      i,c : integer ;
    begin
      c := 0 ;
     repeat
      c:=c+1;
      t[i]:= result mod b1;
      result:=result div b1;
      until result =0  
     
    end;
    procedure affichage(t:tab;c:integer);
    var
    i:integer;
    begin
    for i:= c downto 1 do
    if t[i] in [1..9] then write (t[i])
    else write(chr(ord('A')+t[i]-10) );
    end;
     
    begin
    lecture(b1,b2,ch);
    som(ch,b1);
    divi(b1,result);
    affichage(t,c);
    end.

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Lano,

    Citation Envoyé par gadalla
    salut a tous
    jai modifier mon programme mais rien de nouveau
    quelle zst la solution
    Fais-nous une belle présentation du code, ça compte, et surtout

    tiens compte des réponses.

    Deux fois déjà je t'ai déjà signalé au moins un problème dans ton code, tant qu'il ne sera pas résolu, ça ne marchera pas.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 113
    Par défaut voici le progamme executable
    merci pour tout ce qui a m'aider et vois mon programme



    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
    program base;
    uses wincrt;
    type
    tab=array[1..100] of integer;
    var
    b1,b2,s,c:integer;
    ch:string;
    t:tab;
                {  **** procedure lecture   ****}
    procedure lecture(var b1:integer;var b2:integer;var ch:string);
    begin
    writeln ('donner la base auqelle  vous aller transformé');
    	readln(b2)  ;
    writeln('donner la base de laquelle transferé');
    	readln(b1);
    writeln('donner le chiffre');
    	readln (ch);
    end;
    		 {  ****   procedure som , elle permet de convertir un nombre donné à la
    			  base dicimale     ****   }
    procedure som( ch:string;b1:integer; var s:integer);
    var
    c:char;
    n,i,l,p:integer;
    begin
    	s:=0;p:=1;
    	l := Length(Ch) ;
    for i := l  downto 1 do
    begin
    	c:= upcase(ch[i]);
    if c in ['0'..'9'] then
    	begin
    		n:= ord(c)-ord('0');
    	end
    else
    	begin
    		n:= ord(c)-ord('7');
    	end;
    		s:= s+(n*p)  ;
    		p:=p* b1;
    end;
    end;
    	   {****  procedure divi , elle permet la divition du nombre décimale
    							sur b2 puis de l'affiché          ***}
    procedure divi (b2:integer; var s:integer);
    var
       i,c:integer;
       t:tab;
    begin
       	c :=0;
    repeat
       	c:=c+1;
    		t[c]:= s mod b2;
    		s:=s div b2;
    until s=0;
    write('le chiffre devient:');
    for i:= c downto 1 do
    	if t[i] in [0..9] then write(t[i]:2 )
       else write (chr(ord('A')+t[i] -10):2)
    end;
    begin
    lecture (b1,b2,ch);
    som(ch,b1,s);
    divi(b2,s);
     
    end.

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Kaj,

    Tu l'as dit toi-même, mis en forme comme je te l'ai montré, c'est mieux

    Donc, un p'tit effort pour la mise en forme ? Ce n'est pas difficile, il suffit de le faire au fur et à mesure que tu écrit ton code, en revenant corriger si le code est modifié, surtout pour les modifications d'imbrication des blocs.

    Sais-tu qu'il existe des function en plus des procedure ?

    Je n'aime pas ce type de procédure, avec une variable de type basique passée par adresse juste pour y mettre un résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure som( ch:string;b1:integer; var s:integer);
    alors qu'on peut faire une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function som(const ch:string;b1:integer) : integer;
    Le const pour le paramètre ch évitant une copie locale, ainsi que la modification par "inadvertance" de cette chaîne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de conversion en base decimale
    Par BABBAGE dans le forum Débuter
    Réponses: 2
    Dernier message: 09/05/2012, 20h43
  2. problème de conversion de base
    Par robertstephanie dans le forum Access
    Réponses: 1
    Dernier message: 24/04/2006, 14h12
  3. Problème de conversion 3DS->.X
    Par JBernn dans le forum DirectX
    Réponses: 5
    Dernier message: 08/04/2004, 19h08
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo