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

Pascal Discussion :

Nombres en toutes lettres : comment optimiser mon programme ? [Non suivi]


Sujet :

Pascal

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Nombres en toutes lettres : comment optimiser mon programme ?
    Salut tout le monde
    Je viens de chercher une autre methode pour remplacer la mienne qui est trop longue. Voici l'énoncé :
    Traduire en toute lettre un entier naturel composé de deux chiffres au maximum.
    voici ma méthode :
    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
     
    program moyenne;
    uses wincrt ;
    var nomb : integer ;
         lettre : string ;
    begin
    readln (nomb) ;
    case nomb of
     0  : lettre := 'Zero' ;
     1  : lettre := 'Un' ;                                        
     2  : lettre := 'Deux' ;
     3  : lettre := 'Trois' ;
     4  : lettre := 'Quatre' ;
     5  : lettre := 'Cinq' ;
     6  : lettre := 'Six' ;
     7  : lettre := 'Sept' ;
     8  : lettre := 'Huit' ;
     9  : lettre := 'Neuf' ;
    10 : lettre := 'Dix' ;
    11 : lettre := 'Onze' ;
    12 : lettre := 'Douze' ;
    ............
    99 : lettre := 'Qutre vingnt et dix neuf' ;
    else lettre := 'Erreur';
    end;
    writeln (lettre);
    end.
    voila . c'est trop long d'ecrire 99 nombres en toute lettre.

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Points : 751
    Points
    751
    Par défaut
    Ben suffit de mettre un test sur le premier et le deuxieme chiffre.

    tu laisses les chiffres de 0 a neuf pour le chiffre de droite

    pour le chiffre de gauche, si yen a pas tu mets rien

    si yen a un tu mets un truc du genre :

    si c'est 2 > "vingt"
    si c'est 3 > "trente"

    et tu assembles les 2 bouts. il n'y a que pour 11 12 13 14 15 16 que ca coince..

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 308
    Points
    4 308
    Par défaut
    Oui et pour les soixantes dix, et quatre-vingt dix... Tu peux utiliser septante et nonante
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  4. #4
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Avec Octante ou Huitante pour quatre vingt, le français deviendra enfin aussi logique que les autres langues.

  5. #5
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut Re:
    L'an dérnier notre prof nous a donner un exercice comme ca je l'ai travailler à ma façon si ca peut t'aider
    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
    program chiffreetdeslettres;
    uses crt,dos;
    var
           a:integer;
           s:string;
    function tran(nombre:integer):string;
          begin
    
    if nombre=0 then tran:='zero'; if nombre=1 then tran:='un'; if nombre=2 then tran:='deux'; if nombre=3 then tran:='trois'; if nombre=4 then tran:='quatres'; if nombre=5 then tran:='cinques'; if nombre=6 then tran:='six'; if nombre=7 then tran:='sept'; if nombre=8 then tran:='huit'; if nombre=9 then tran:='neuf';
    end; begin write('Entrer votre chiffre'); read(s); val(s,a); case s[1] of '0':write(tran(a)); '1':begin case s[2] of '1':write('onze'); '2':write('douze'); '3':write('treze'); '4':write('quatorze'); '5':write('quinze'); '6':write('seize'); '7':write('dix sept'); '8':write('dix huit'); '9':write('dix neuf'); end; end; '2':begin val(s[2],a);write('vingt et ',tran(a));end; '3':begin val(s[2],a);write('trente et ',tran(a));end; '4':begin val(s[2],a);write('qurente et ',tran(a));end; '5':begin val(s[2],a);write('cinquante et ',tran(a));end; '6':begin val(s[2],a);write('soixante et ',tran(a));end; '7':begin val(s[2],a);write('soixante dix et ',tran(a));end; '8':begin val(s[2],a);write('quantre vingt et ',tran(a));end; '9':begin val(s[2],a);write('qautre vingt dix et ',tran(a));end; else write('erreur'); end; readln; readln; end.
    j'espére que ça t'aidera @+
    et vint le 20siècle et l'homme se mit à réflechir comme la machine auteur: diden138
    Langage: Pascal,OCaml,Delphi,c/c++.
    Langages web:Xhtml,Css,Php/Mysql,Javascript,Actionscript 2.0
    Plate forme:Windows XP Pro SP2./Red Hat 9.0/SUSE 10.2
    Config :Intel P4 3.2GHZ,2MO cach,512 RAM.
    Outils:Tp7,objective caml,Delphi 6 perso, C++builder 6,Visual C++ Express edition sous win,code-block sous linux(Ubuntu) .

  6. #6
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    @diden138: Que retourne ton programme pour n=20 ? "vingt et zéro" ?

    Il existe quelques règles (et exception) concernant l'écriture des nombres en Français. Ces règles sont très bien expliquées ici :
    http://www.leconjugueur.com/frlesnombres.php

    Il est très intéressant (et pas très difficile) d'étendre le programme aux grands nombres (milliers, millions, milliards) en rendant le programme récursif de manière à afficher, par exemple: "deux cent quatre-vingts mille six cents".
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    et si on declare des et des tableaux constantes au lieux des variables
    ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    t = array [0..9] of string ('zero','un','deux','trois','qutre','....','neuf') ;
     
    puis
    writeln (T[a mod 10]) ;
    est ce que on peut le resoudre de cette façon ?
    je veux une solution

  8. #8
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Bonjour,
    Citation Envoyé par h.Cemu.Orka
    je veux une solution
    Une recherche sur les forums t'aurait apporté des éléments de réponse :
    http://www.developpez.net/forums/sho...hlight=lettres
    http://www.developpez.net/forums/sho...hlight=lettres
    ... il y en a peut-être d'autres.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  9. #9
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Je repartirais de l'exemple de Diden138 en enlevant les "et " derrière les dizaines (vingt, trente)... Il n'y a que si le chiffre des unités est 1 qu'il faut le mettre.

    vingt et un mais pas vingt et deux

  10. #10
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut Re:
    Bonjour,
    Ecoute moi bien si tu veux construire un programme qui te traduira ce que tu veux(meme 20 miliard ) en toutes lettre il n y'a pas milles solutions tu dois créer trois fonctions
    1ere fonction->elle te fais le décomposition de ton nombre en chaine arithmétique ex:1856=1*1000+8*100+5*10+6
    2eme fonction->elle te simplifi ta chaine arithmétique si tu a un zéro elle l'elimine (biensur en cas de +) si tu a un 1 ellle te l'elimine (biensur en cas de *) si tu a 3*20 elle le simplifie en 60 ,5*10=50
    3eme fonction->elle te traduit ta chaine arithmétique simplifié
    commençon d'abors par la premiére pour cette décomposition qui parait évidente pour un humain qui a étudié les math heureusement qu'il ya des régles pour faire cela
    avant de commencer quand j'ecrie pui ca veut dire puissance ok
    si n est dans [1..59] alors inc_nbr(n)=(n/10)*10+le rest ;
    si n est dans [60..99] alors inc_nbr(n)=(n/20)*20+le rest;
    si n >=100 alors inc_nbr(n)=(n/100)*100+inc_nbr(le rest);
    si n>=1000 alors inc_nbr(n)=inc_nbr(n/1000)*1000+inc_nbr(inc_nbr(le rest));
    meme chose avec un million puis un milliard
    2eme fonction
    elle doit te faire la simplification
    1*10=10
    20*1=20
    .....
    5+0=5
    3eme et dérnière fonction elle lit tous simplement ta chaine arithmétique , tu déclare comme constante dans ton programme tous les chiffre 1,2,3,4,5,6,7,8,9,10,20,30,40,50,60 ,100,1000,1000000,1000000000
    un deux,...vingt trente quarent cinquante soixante,cent,milles,million,milliard
    aprés c'est ta fonction qui fait tout elle compose un chiffre composé à partir de chiffres simple ex:
    inc_nbr(2356)=(2356/1000)*1000+3*100+5*10+6
    simplification->2*1000+3*100+50+6
    et ca te donne deux milles troi cent cinquante six
    une petite indication les fonctions mo et div te seront trés utils
    on peut pas faure tout à ta place

    Voici un lien d'un exemple en Delphi mais c'est la même chose, tu peux même utiliser cette unité en Pascal mais il vaudrait mieux que tu essayes de résoudre le problème par toi-même :
    http://delphi.developpez.com/faq/?pa...ier-en-lettres
    Tiens-nous au courant @+
    et vint le 20siècle et l'homme se mit à réflechir comme la machine auteur: diden138
    Langage: Pascal,OCaml,Delphi,c/c++.
    Langages web:Xhtml,Css,Php/Mysql,Javascript,Actionscript 2.0
    Plate forme:Windows XP Pro SP2./Red Hat 9.0/SUSE 10.2
    Config :Intel P4 3.2GHZ,2MO cach,512 RAM.
    Outils:Tp7,objective caml,Delphi 6 perso, C++builder 6,Visual C++ Express edition sous win,code-block sous linux(Ubuntu) .

Discussions similaires

  1. Comment optimiser mon programme
    Par fouedou77 dans le forum C
    Réponses: 2
    Dernier message: 29/06/2009, 10h51
  2. [Fortran 95] Comment exécuter mon programme ?
    Par silver2 dans le forum Fortran
    Réponses: 1
    Dernier message: 15/01/2007, 17h15
  3. Réponses: 6
    Dernier message: 04/08/2006, 12h24
  4. [sql]convertion d'un nombre en toute lettre
    Par imedg dans le forum Oracle
    Réponses: 102
    Dernier message: 31/03/2006, 12h05
  5. [C#] Comment optimiser mon constructeur ?
    Par blbird dans le forum C#
    Réponses: 2
    Dernier message: 19/01/2006, 15h41

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