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 :

Exercice sur une chaîne de caractères


Sujet :

Turbo Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut Exercice sur une chaîne de caractères
    Salut à tous !
    Voilà, il faut que je fasse un programme qui saisit une chaîne de caractères et en affiche une autre comme suit :
    si la chaine saisie est turbo, le programme affichera :
    • to
    • tubo
    • turrbo
    • turburbo
    • turboturbo

    Bon voilà ma solution mais elle ne marche pas !
    Veuillez m'indiquer mon erreur si elle est dans le raisonnement ou la syntaxe ou même, si vous avez une autre solution, elle sera la bienvenue !
    Ah j'ai oublié, la résolution doit comporter au moins deux modules !

    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
    program chaine;
    uses wincrt;
    var ch:string;
        ch3:string;
     
    procedure saisie(var ch1:string);
    begin
    write('donner la chaine:');
    read(ch1);     
    end;
    procedure trans(ch1:string; var ch2:string);
    var i,j:integer;
    begin
    i:=0;
    ch2:='';
    for j:=length(ch1) downto 1 do
    i:=i+1;
    ch2[i]:=ch1[i];
    ch2[j]:=ch1[j];
    write(ch2);
    end;
    begin
    saisie(ch);
    trans(ch,ch3);
    end.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Jio,
    Citation Envoyé par mah00
    salut a tous!
    voila,il faut ke je fasse un programme ki saisie une chaine de caractere et en affiche une autre comme suit:
    si la chaine saisite est turbo,le programme affichera:
    to
    tubo
    turrbo
    turburbo
    turboturbo

    bon voila ma solution,mais elle ne marche pa!
    Veuillez m'indiquer mon erreur si elle est dans le raisonnement ou la syntaxe ou meme si vous avez une autre sulution elle sera la bienvenue!
    ah j'ai oublié,la résolution doit comporter au moin deux modules!
    solution:
    J'avoue ne pas bien comprendre ce qu'il faut sortir comme résultat.

    Si l'entrée est le mot écrit en vert, il faut sortir tous les mots en rouge ?

    Je ne vois pas non plus ce que veut signifier la phrase en bleu.

    Pour mettre ton code en valeur, pense à l'encadrer avec les balises [ code][/ code], sans les espaces, qui ne sont là que pour invalider ces balises
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    oui il faut sortir les mots en rouge un par un
    et pour la phrase en bleue,c'est que la resolution doit comporter comme je l'ai fait des procédure et des foncnctions qu'on doit créer.
    j'espere avoir bien expliquer.
    Je passe le bac pratique informatique le lundi et ca fait partie de ma revision!

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    je crois que ton erreur vient du fait que tu essayes de tout faire d'un coup, ce qui fait que le programme ne donne pas du tout ce que tu souhaites.

    Pour faire ça, je te conseillerais de faire une fonction qui retourne les n premiers caractères d'une chaîne et une autre qui retourne les n derniers.

    Et, dans un second temps, tu appelles ces deux fonctions dans une boucle qui allant de 1 à la taille de ton mot et tu concatènes les 2 résultats.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    si je fais comme tu m'a dis,le programme va me renvoyer "turboobrut" et ce n'est pa ca que je veux.quoique peut etre que je n'ai pas compris ce que tu ma dis!
    si c'est possible essaye de me le rediger,meme la la boucle dont tu me parle.

  6. #6
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Quand je disais de retourner les n derniers caractères, je voulais dire dans l'ordre de lecture usuel, donc pas avec un downto.

    Pour le faire, utilise une variable que tu fais commencer à taille - n + 1 et que tu incrémentes de 1 jusqu'à taille. Tu lis donc les n derniers caractères dans l'ordre.

    Et là j'ai pas le temps d'écrire le programme, bien que ce ne soit pas long du tout.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    juste une question,qu'est ce que ca veut dire quand il me dit : "data segment too large"?
    et c'est ok pour ta proposition,je vais l'essayer et te tiendre au courant.
    merci

  8. #8
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    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 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour,
    Citation Envoyé par mah00
    juste une question,qu'est ce que ca veut dire quand il me dit : "data segment too large"?
    Réponse dans la FAQ : http://pascal.developpez.com/faq/?pa...ment-too-large

    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 à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    bon,c'est hier que j'ai trouvé la solution.
    voila mon travail:
    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
    program chaine;
    uses wincrt;
    var ch:string;
        r:string;
        i,j:integer;
        t:array [1..50] of string;
    procedure saisie(var ch1:string);
    begin
    write('donner la chaine:');
    read(ch1);     
    end;
     
    procedure trans(ch1:string;i1:integer; var r:string);
    var  j1,j2:string;
    begin
    j1:=j1+ch1[i1];
    j2:=ch1[length(ch1)-i1+1]+j2;
    r:=j1+j2;
    end;
     
    begin
    saisie(ch);
    for i:=1 to length(ch) do
     begin
      trans(ch,i,r);
      t[i]:=r;
    end;
     
    for j:=1 to length(ch) do
     writeln(t[j]);
    end.
    Merci a tous ceux qui ont bosser dessus!

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Lao,

    Leitmotiv : prends la peine de mettre ton code en forme correctement.

    Avec l'habitude, ça deviendra automatique, et tu verras que ça te simplifiera la vie (de programmeur).

    Problème ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure trans(ch1:string;i1:integer; var r:string);
    var  j1,j2:string;
    begin
    j1:=j1+ch1[i1];
    Utilisation de j1, variable locale non initialisée. Si ça a marché, c'est que tu es malchanceux.

    Ici, c'est édité

    Ayant mis ton code en forme, et l'ayant lu un peu plus en détail, je doute qu'il donne le résultat escompté.

    Et maintenant, vérifié:

    En entrant la chaine "turbo", j'obtiens en sortie:

    to
    ub
    bu
    ot
    ce qui est loin de ce qu'on veut
    Si les cons volaient, il ferait nuit à midi.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    il est indispensable de l'initialiser?
    Ce n'est pas une chaine vide par défaut?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    ah bon!!moi j'ai exactement ce que je veux!!
    je te réecris le code et essaye encore


    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
    program chaine;
    uses wincrt;
    var ch:string;
        r:string;
        i,j:integer;
        t:array [1..50] of string;
    procedure saisie(var ch1:string);
    begin
    write('donner la chaine:');
    readln(ch1);     
    end;
     
    procedure trans(ch1:string;i1:integer; var r:string);
    var  j1,j2:string;
    begin
    j1:=j1+ch1[i1];
    j2:=ch1[length(ch1)-i1+1]+j2;
    r:=j1+j2;
    end;
     
    begin
    saisie(ch);
    for i:=1 to length(ch) do
     begin
      trans(ch,i,r);
      t[i]:=r;
    end;
     
    for j:=1 to length(ch) do
     writeln(t[j]);
    end.

  13. #13
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Kal,
    Citation Envoyé par mah00
    il est indispensable de l'initialiser?
    Ce n'est pas une chaine vide par défaut?
    Il faut toujours initialiser les variables, en particulier les variables locales à une fonction, qui normalement ne sont jamais initialisées par le compilateur (mais ça peut arriver pour certains compilateurs).

    Ne pas compter sur les éventuelles initialisations d'un compilateur, ça donne de très mauvaises habitudes : le jour ou tu utiliseras un compilateur qui ne fait pas les mêmes, tu passeras probablement du temps à comprendre ce qui se passe.

    Comment cela peut-il marcher ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure trans(ch1:shortstring;i1:integer; var r:shortstring);
    var  j1,j2:shortstring;
    begin
    j1:=j1+ch1[i1];
    j2:=ch1[length(ch1)-i1+1]+j2;
    r:=j1+j2;
    end;
    - utilisation de variables chaine non initialisées

    - aussi bien pour j1 que pour j2, tu ne mets qu'un caractère dans la chaine

    édité

    Là-dedans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure saisie(var ch1:shortstring);
    begin
      write('donner la chaine:');
      read(ch1);
    end;
    Je crois t'avoir déjà dit de ne pas utiliser Read pour lire des données au clavier, car c'est s'exposer à des surprises, généralement désagréables.
    Si les cons volaient, il ferait nuit à midi.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    sauf que cette procedure je l'ai mise dans une boucle dans le programme principale donc elle est rempli et affichée a chaque fois.
    Et je ne mens pa quand je dis que ca marche!!lol

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par droggo
    Je crois t'avoir déjà dit de ne pas utiliser Read pour lire des données au clavier, car c'est s'exposer à des surprises, généralement désagréables.
    tu as raison voila je l'ai modifié

  16. #16
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hao,
    Citation Envoyé par mah00
    sauf que cette procedure je l'ai mise dans une boucle dans le programme principale donc elle est rempli et affichée a chaque fois.
    Et je ne mens pa quand je dis que ca marche!!lol
    Désolé, mais tes variables locales ne doivent pas suivre. Si elles le font, c'est par hasard.
    Elles sont locales, donc le programme principal ne doit pas compter qu'elles conservent leurs valeurs.

    Si ça marche, c'est que tu es malchanceux, au sens de : "le programme fonctionne alors qu'il est faux", donc tu ne vois pas le bug, qui est pourtant là.

    A titre d'exercice, essaye de l'exécuter avec FreePascal, sous Lazarus, ou directement, d'ailleurs.
    Si les cons volaient, il ferait nuit à midi.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    la procedure va me sortir r qui est la concatenation de j1 et j2.Et puisque je donne a cette procedure , dans le programme principale l'indice pour la chaine et que la chaine et de suite affiché.
    Donc il faut que ces variables changent de valeurs pour que le programme les affiche aprés chaque modifications!
    Et je ne comprends pas comment ca peut marcher mais par hazard !!!

  18. #18
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Gio,
    Citation Envoyé par mah00
    la procedure va me sortir r qui est la concatenation de j1 et j2.Et puisque je donne a cette procedure , dans le programme principale l'indice pour la chaine et que la chaine et de suite affiché.
    Donc il faut que ces variables changent de valeurs pour que le programme les affiche aprés chaque modifications!
    Et je ne comprends pas comment ca peut marcher mais par hazard !!!
    Oui, par hasard, je répète et confirme.

    Si tu utilisais les variables locales comme elles doivent l'être, c'est à dire en les initialisant, tu verrais où tu vas.

    D'ailleurs, comme je te l'ai déjà dit, compile et exécute avec Lazarus.
    Déjà, tu verras les Warnings que freePascal va te sortir, et regarde le résultat de l'exécution.

    Les variables locales sont créées dans la pile, et rien ne garantit qu'elles se retrouvent au même endroit entre 2 appels d'une procédure.

    Têtu, hein
    Je peux te garantir que si un de mes élèves me donnait un tel programme en réponse à un exercice, et surtout s'il insistait après que je lui aie expliqué ce qui ne va pas, il se retrouverait avec une note trop faible pour être représentée par les Real de Pascal.
    Si les cons volaient, il ferait nuit à midi.

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    si tu le dis,on va pas te contredire encore!!
    Sauf que je n'ai pas Lazarus et Freepascal donc je ne peux pas faire ce que tu me demande...Bienque j'ai essayé avec différentes chaines.Mais bon j'apprend,si je savais deja tout je ne serais pas la entrain de demander votre aide!
    Merci Monsieur

  20. #20
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Lio,
    Citation Envoyé par mah00
    si tu le dis,on va pas te contredire encore!!
    Sauf que je n'ai pas Lazarus et Freepascal donc je ne peux pas faire ce que tu me demande...Bienque j'ai essayé avec différentes chaines.Mais bon j'apprend,si je savais deja tout je ne serais pas la entrain de demander votre aide!
    Merci Monsieur
    Je n'ai pas dit qu'il te fallait tout connaître !

    Il est bien clair que nous avons tous débuté un jour.

    Mais il te faut apprendre à tenir compte des réponses.

    Ton programme est faux. Point.

    Faut-il que je te le dise en chinois avec l'accent breton ?

    Pour Lazarus, c'est gratuit et facilement téléchargeable.
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. [8.2] Reverse sur une chaîne de caractères
    Par JYves dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 25/04/2008, 00h58
  2. Test sur une chaîne de caractères
    Par ThunderBolt_ dans le forum Général VBA
    Réponses: 4
    Dernier message: 27/06/2007, 06h37
  3. recherche sur une chaîne de caractères
    Par bogsy15 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/07/2006, 12h01
  4. Tri sur une chaîne de caractères contenant des nombres
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2006, 11h52
  5. Requête sur une chaîne de caractères
    Par Hakunamatata dans le forum Langage SQL
    Réponses: 9
    Dernier message: 02/04/2006, 18h27

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