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

C++ Discussion :

traduire un programme en pascal en c++


Sujet :

C++

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Coll�gien
    Inscrit en
    Janvier 2015
    Messages
    1
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activit� : Coll�gien

    Informations forums :
    Inscription : Janvier 2015
    Messages : 1
    Par d�faut traduire un programme en pascal en c++
    Bonjour,j'ai essay� de traduire un programme qui a ete ecrit en langage pascal en langage c++, mais,il ne marche pas.pouvez vous detecter des erreurs s'il y en a.
    c est un programme qui convertit un nombre entier en toutes lettres.

    code pascal:
    Code pascal : 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
    70
    71
    72
    function NombreEnLettres(n : integer) : string;
    Const
      unite : array[1..16] of string  = ('un','deux','trois','quatre','cinq','six',
                                         'sept','huit','neuf','dix','onze','douze',
                                         'treize','quatorze','quinze','seize');
      dizaine : array[2..8] of string = ('vingt','trente','quarante','cinquante',
                                         'soixante','','quatre-vingt');
      coefs : array[0..3] of string   = ('cent','mille','million','milliard');
    Var
      temp    : string;
      c, d, u : byte;
      coef    : byte;
      i       : word;
      neg     : boolean;
    Begin
      If n = 0 then
        begin
        result := ' zero';
        exit;
        end;
     
      result := '';
      neg := n < 0;
      If neg then n := -n;
     
      coef:=0;
      Repeat
        u:=n mod 10; n:=n div 10; {Récupère unité et dizaine}
        d:=n mod 10; n:=n div 10; {Récupère dizaine}
        If d in [1,7,9] then
          begin
          Dec(d);
          Inc(u,10);
          end;
        temp := '';
        if d > 1 then
          begin
          temp := ' ' + Dizaine[d];
          if (d < 8) and ((u = 1) or (u = 11)) then
            temp := temp + ' et';
          end;
        if u > 16 then
          begin
          temp := temp + ' ' + unite[10];
          Dec(u,10);
          end;
        if u > 0 then temp := temp + ' ' + unite[u];
        If (result = '') and (d = 8) and (u = 0) then result := 's';
        result := temp + result;
     
        c := n mod 10; n := n div 10; {Récupère centaine}
        If c > 0 then
          begin
          temp := '';
          if c > 1 then temp := ' ' + unite[c] + temp;
          temp := temp + ' ' + coefs[0];
          If (result = '') and (c > 1) then result := 's';
          result := temp + result;
          end;
     
        if n > 0 then
          begin
          Inc(coef);
          I := n mod 1000;
          If (i > 1) and (coef > 1) then result := 's' + result;
          If i > 0 then result := ' ' + coefs[coef] + result;
          If (i = 1) and (coef = 1) then Dec(n);
          end;
      until n = 0;
      result := Trim(result);
      if neg then result := 'moins ' + result;
    End;



    code c++

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<math.h>
    #include <stdlib.h>
     
     
     
     
    char NombreEnLettres( int n ){
         char unite[][20]    = {"un","deux","trois","quatre","cinq","six",
                                   "sept","huit","neuf","dix","onze","douze",
                                   "treize","quatorze","quinze","seize"};
          char dizaine[][20]   = {"vingt","trente","quarante","cinquante",
                                         "soixante","soixante-dix","quatre-vingt"};
         char coefs[][20]     = {"cent","mille","million","milliard"};
     
       long unsigned int number ;
       char* temp;    
       int c, d, u  ;
       int coef    ;
       int i        ;
       char result ;
     
     
     if (n == 0) 
        result = ' zero';
      result = '';
     
      coef=0;
      do {
        u= n % 10; n=n / 10; 
        d=n % 10; n=n / 10; 
        if ((d=1)&&(d=7)&&(d=9)) 
     
          d--;
          u=u+10;
     
        temp = '';
        if (d > 1){
     
          temp = ' ' + dizaine[d];
          if ((d < 8) && ((u = 1) || (u = 11)))
            temp = temp + ' et';}
     
        if (u > 16)
     
          temp = temp + ' ' + unite[10][20];
          u=u-10;
     
        if (u > 0)  temp = temp + ' ' + unite[u][10];
        if ((result = '') && (d = 8) && (u = 0)) { result = 's';
        result = 'temp' + result ;}
     
        c = n % 10; n = n / 10; 
        if (c > 0){
     
          temp = '';
          if (c > 1) { temp = ' ' + unite[c][20] + temp;
          temp = temp + ' ' + coefs[0][20];}
          if ((result = '') && (c > 1))  {result = 's';
          result = 'temp' + result;}
          }
     
        if (n > 0) {
     
          coef++;
          i = n % 1000;
          if ((i > 1)&& (coef > 1))  result = 's' + result;
          if (i > 0)  result = ' ' + coefs[coef][20] + result;
          if ((i = 1) && (coef = 1))  n-- ;
          }
      }while (n = 0);
     
    }
    main(){
         int n;
        printf ("entrer un nombre");
        scanf("%d",&n);   
        return NombreEnLettres( n );
        getch();
    }

  2. #2
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Je n'ai pas tout lu, mais globalement, si tu veux manipuler des chaines de caract�res en C++, utilise std::string, c'est bien moins casse-gueule que des tableaux de char... De m�me, il est plus s�r d'utiliser des vector que des tableaux (ne serait-ce que parce qu'en debug, ils vont t'indiquer si tu d�passes les bornes).

    Code Pascal : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    unite : array[1..16] of string  = ('un','deux','trois','quatre','cinq','six',
                                         'sept','huit','neuf','dix','onze','douze',
                                         'treize','quatorze','quinze','seize');
    Devient donc :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::vector<std::string> unite = {"un", "deux", /*....*/ "seize"};
    Et
    Code Pascal : S�lectionner tout - Visualiser dans une fen�tre � part
    result := temp + result;
    Devient :
    (alors que l'�quivalent � base de char* est proprement horrible � �crire).
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  3. #3
    Membre �m�rite

    Homme Profil pro
    Non disponible
    Inscrit en
    D�cembre 2012
    Messages
    478
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Non disponible

    Informations forums :
    Inscription : D�cembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par d�faut
    Bonjour, pour completer un peut ce qu'a dit JolyLoic;

    Les chaines de caract�res sont repr�sent�es par "...".

    La fonction (avec un return pour renvoyer l'objet) sera du style :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    std::string nombreEnLettres(int n)
    {
        std::string temp;
        ....
        return temp;
    }
    Ainsi que le main en c++ :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>//Librairie à utiliser pour le mode console
    int main()
    {
        int n;
        std::cout << ("entrer un nombre") << std::endl;//Pour afficher du texte
        std::cin >> n;//Récuperer du texte
        std::cout << "Le nombre est : " << nombreEnLettres( n );//Utiliser la fonction et afficher le résultat
        return 0;//L'inévitable return 0;
    }
    Edit : Ajout du "int" au main, merci droggo !

  4. #4
    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
    Tuo,
    Citation Envoy� par PilloBuenaGente Voir le message
    Ainsi que le main en c++ :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>//Librairie à utiliser pour le mode console
    main()
    {
        int n;
        std::cout << ("entrer un nombre") << std::endl;//Pour afficher du texte
        std::cin >> n;//Récuperer du texte
        std::cout << "Le nombre est : " << nombreEnLettres( n );//Utiliser la fonction et afficher le résultat
        return 0;//L'inévitable return 0;
    }
    Pour vraiment aider, il faudrait respecter le standard.

    Ici, tu as bien rappel� "return 0;//L'in�vitable return 0;",
    mais ce return ne correspond pas � la d�finition "main()".


  5. #5
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    en fait si, mais seulement parce que main est implicitement suppos�e retourner un int, pour cause d'�tre main.
    Mais c'est un warning syst�matique.

    Et en plus, la norme pr�vois que ce return pr�cis puisse �tre omis

Discussions similaires

  1. Traduire un programme Pascal en c++
    Par atuuh dans le forum C++
    R�ponses: 9
    Dernier message: 15/04/2015, 14h35
  2. Mon site sur la programmation en Pascal
    Par darrylsite dans le forum Contribuez
    R�ponses: 6
    Dernier message: 18/11/2008, 19h17
  3. Traduire un programme C++ en delphi
    Par delphibou dans le forum Langage
    R�ponses: 27
    Dernier message: 17/03/2008, 12h34
  4. Comment traduire un programme C++ en C ?
    Par Djimson dans le forum C
    R�ponses: 2
    Dernier message: 20/05/2006, 01h41
  5. Traduire un programme
    Par cjacquel dans le forum Windows
    R�ponses: 1
    Dernier message: 17/05/2006, 12h41

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