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 :

Procédures de menu de choix


Sujet :

Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de dyala
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    81
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 81
    Par défaut Procédures de menu de choix
    salut à tous
    salut à tous
    j 'ai un fichier d'enregistrement ou chaque enregistrement contient une phrase de type chaine et ta= taille de la phrase
    je doit faire un menu qui contient les chioxs suivants:

    menu
    1/création
    2/afficher la phrase la plus longue
    3/Tri du fichier par taille
    4/nombre de phrases palindromes
    5/afficher le fichier
    6/quitter
    choix:
    le probléme j'utilise des procedures pour effectuer le choix mais la procedure de tri et l'affichage ne marche pas
    merci d'avance.
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
    program fichier ;
    uses wincrt;
    type chaine =record
         ph :string;
         ta :integer;
          end;
     
     
     
         var f: file of chaine;
          c:chaine;
     
          paly:boolean;
       ta,n, i, tamax,phrase:integer;
         phrasemax:string;
     
         procedure creation(n:integer);
         begin
         tamax:=0;
     
         assign(f,'nom');
         rewrite(f);
         for i:= 1 to n do
         begin
         writeln('inserer la phrase');
         readln(c.ph);
         c.ta:= length(c.ph);
         write(f,c);
         end;
         end;
          procedure plus_longue;
          begin
         reset(f);
         while not eof (f) do
             begin
               read(f,c);
               if c.ta>tamax then
                    begin
                         tamax:= c.ta;
                         phrasemax:= c.ph;
                    end;
             end;
         write ('la phrase la plus longue est',phrasemax);
         end;
         procedure palyndrome( paly:boolean);
         begin
         reset(f);
         readln(c.ph);
         readln(c.ta);
         paly  := true;
         i:=1;
     
         while i<=ta div 2  do
         begin
         if paly= true then
         if c.ph[i]=c.ph[ta-i+1] then
         i:=i+1;
     
         end;
     
     
         procedure tri(t:tab); 
        var t:array[1..20] of c;
          nb :integer;
     
          begin
          nb:=1;
          reset(f);
          while not eof(f) do
          t[nb]:=(f,c);
     
     
        nb :=nb +1;
        end;
        for i:= 1 to nb-1 do
        for j:= i+1 to nb do
        begin
        if t[i].ta <t[j].ta then
        begin
        ta :=t[i];
        t[i]:=t[j];
        t[j]:=ta;
        end;
        procedure affichage ;
        begin
        assign(f);
        reset(f);
        while not eof(f) do
        begin
        read (f,ta);
        write(c.phrase);
        write(c.ta);
        end;
        close(f);
        end;
        BEGIN
     
    ch:=0;
     
    while ch<>8 do
       begin
     
       clrscr;
       for i:=1 to 30 do begin gotoxy(i,1);write('*');end;
       for i:=1 to 18 do begin gotoxy(1,i);write('*');gotoxy(30,i);write('*');end;
       for i:=1 to 30 do begin gotoxy(i,18);write('*');end;
         gotoxy(12,3);writeln('MENU:');
         gotoxy(5,5);writeln('1/ creation de fichier');
         gotoxy(5,6);writeln('2/ la phrase la plus long');
         gotoxy(5,7);writeln('3/ le nombre de mots palyndrome');
         gotoxy(5,8);writeln('4/ tri de fichier par taille');
         gotoxy(5,9);writeln('5/ affichage');
         gotoxy(5,10);writeln('6/ quitter');
     
         writeln;
         gotoxy(10,15);write('CHOIX :  ');
              readln(ch);
         writeln;
          gotoxy(1,20);
            case ch of
            1:creation(n);
            2:plus _long;
            3:palyndrome(paly);
            4:tri(t);
            5:affichage;
            6:quitter;
            end;
        writeln;
      end;
     
    readln;
    END.

  2. #2
    Membre éprouvé
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Par défaut
    Bonjour,

    déjà, visiblement, tu ne connais pas l'indentation (c'est une vraie torture de lire ce prog). Ensuite, merci de préciser ce qui ne marche pas. Tu ne peux pas compiler? le programme produit un résultat que tu n'avais pas prévu?

  3. #3
    ALT
    ALT est déconnecté
    Membre Expert
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 344
    Par défaut
    Ta procédure fonctionne peut-être (faudrait voir) mais tu ne peux pas le savoir puisque les modifications faites à ton tableau restent dans la proc. (passage du tableau par valeur).

    Si tu veux récupérer ton tableau trié, il faut que tu passes ton tableau par variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure tri(var t:tab);
    Sans compter que ça m'a l'air bien compliqué pour un simple tri...

    D'autre part, ton code est très mal indenté, ce qui le rend difficile à suivre.
    Enfin, entre les procédures n'hésite pas à mettre des lignes blanches, pour bien les séparer.
    Ça aussi, ça améliore la clarté du code.
    Tout ça aide aussi au débogage : on repère plus facilement une erreur dans un code lisible.

    Bon courage.

  4. #4
    Expert confirmé

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

    Plusieurs remarques :

    - ton code ne compile pas, et forcément ne peut pas marcher.

    - En le mettant en forme correctement, tu verras d'où viennent certaines erreurs.
    Il y a entre autres des blocs begin..end ouverts et pas fermés, ce qui met le bor*el.

    D'autre part, pourquoi ce type ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type
      chaine = record
        ph: string;
        ta : Integer;
      end;
    Car soit tu utilises des string du Pascal standard, c'est à dire des chaines qui font au maximum 255 caractères, et en occupent 256, car l'indice 0 contient la longueur effective, et tu n'as pas besoin du champ ta,
    soit tes strings sont des AnsiString ou équivalent, et elles aussi connaissent leur longueur effective, mais ton fichier de type string ne fonctionnera pas, car on ne stocke pas ainsi des AnsiString.

    Dans la procédure creation, tu ouvres le fichier en écriture, bien, mais tu ne le refermes pas ==> comportement indéfini.
    D'ailleurs, apparemment tu oublies régulièrement de fermer le fichier.

    Voilà ce que j'ai repéré en jetant un coup d'oeil très rapide.

  5. #5
    Membre éprouvé
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Par défaut
    wow, trois réponses en même temps! Voilà ce qui s'appelle un sujet populaire

Discussions similaires

  1. Menu déroulant, Choix multiples fixes
    Par drayog dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/03/2011, 16h57
  2. Menu au choix dans une forms
    Par Pacman23 dans le forum Forms
    Réponses: 2
    Dernier message: 29/04/2010, 10h46
  3. Graphique selon un menu de choix
    Par tokosai dans le forum Excel
    Réponses: 8
    Dernier message: 17/07/2008, 17h07
  4. Menu déroulant choix multiples
    Par Maestro57 dans le forum Langage
    Réponses: 3
    Dernier message: 26/06/2007, 18h47
  5. Menu déroulant choix
    Par dunbar dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/07/2006, 13h16

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