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 :

Fonction menu


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Fonction menu
    bonjour chers programmeurs, me voilà maintenant confrontée à un tp concernant les fonction et procédures. jusqu'ici tt va bien... le hic est que la derniere question est de creer une fonction menu permettant de choisir parmi les actions(fonctions/procédures )déclarees auparavant. j'ai tenté une fonction utilisant un case of qui determinerait l'action à faire en fonction d'une entree utilisateur mais ça ne marche pas... si qqn a une idee...
    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
    program chaine_caracteres;
     
    var
    s1,s1SousChaine,s2souschaine:string;
     
    procedure saisirChaine(var s:string);
    begin
     repeat
      writeln('entrez une chaine de caracteres inférieure à 255');
      readln(s);
     until (length(s)<=255)and (length(s)<>0);
    end;
     
    procedure ecrireChaine (var s:string);
    begin
     writeln(s);
    end;
     
    function SousChaine (var s,sSousChaine:string):boolean;
    begin
     repeat
      writeln('entrez une sous chaine de ',s);
      readln(sSousChaine);
     until length(sSousChaine)<>0;
     if pos(sSouschaine, s)<>0 then
      SousChaine:=true
     else Souschaine:=false;
     writeln(souschaine);
    end;
     
    function nbOccurences (s,sSousChaine:string):integer;
    var
     temp:integer;
    begin
    nbOccurences:=0;
    repeat
     writeln('entrez une sous chaine de ',s,'pour en connaitre le nbr d''occurences');
     readln(sSousChaine);
    until length(sSousChaine)<>0;
    if pos(sSouschaine, s)<>0 then
      begin
      nbOccurences:=nbOccurences+1;
      repeat
       temp:= pos(sSouschaine, s);
       delete (s,1,temp + length (ssouschaine) );
       if pos(sSouschaine, s)<>0 then
        nbOccurences:=nbOccurences+1;
       until pos(sSouschaine, s)=0;
      end;
      writeln (nbOccurences);
      readln;
    end;
     
    function suppressionSousChaine(var s,sSousChaine:string):string;
    var
      nbrSuppression:integer;
        begin
        repeat
         writeln('entrez la sous chaine de ',s,' que vous souhaitez supprimer');
         readln(ssouschaine);
        until length(ssouschaine)<>0;
        nbrsuppression:=0;
        repeat
         delete(s,pos(sSousChaine,s),length(ssousChaine));
         nbrSuppression:=nbrSuppression+1;
        until
           pos(sSousChaine,s)=0;
        writeln('la nouvelle chaine de caracteres est: ',s,' et ',ssousChaine,' a ete supprimé ',nbrsuppression,' fois ');
           readln;
        end;
     
     function remplaceSousChaine(var s,sSousChaine1,sSousChaine2:string):string;
      var
      i,temp,long:integer;
      prefixe,suffixe:string;
        begin
        repeat
         writeln('entrez la sous chaine de ',s,' que vous souhaitez remplacer');
         readln(ssouschaine1);
        until length(ssouschaine1)<>0;
        i:=0;
        repeat
          i:=i+1;
          temp:=pos(sSousChaine1,s);
          long:= length(ssousChaine1);
          prefixe:=copy(s,1,temp-1);
          suffixe:=copy(s,temp+long,length(s)-temp-long+1);
          delete(s,temp,long);
          repeat
            writeln('entrez la ',i,'  souschaine de remplacement');
            readln(ssouschaine2);
          until length(ssouschaine2)<>0;
          s:=prefixe+ssouschaine2+Suffixe;
        until pos(sSousChaine1,s)=0;
        remplacesouschaine:=s;
        writeln('la nouvelle chaine de caracteres est: ',remplacesouschaine);
        readln;
        end;
     
    function menu:integer;
     begin
     repeat
      writeln('entrez l''action désirée:1 pour saisie d''une chaine, 2 pour écriture d''une chaine, 3 pour recherche d''une sous chaine,4 pour nombre d''occurences,5 pour suppression d''une sous chaine,et 6 pour remplacement d''une souschaine');
      readln(menu);
      until (menu=1) or (menu=2) or  (menu=3) or (menu=4) or  (menu=5) or (menu=6);
      case menu of
      1: saisirChaine(s1);
      2: ecrireChaine(s1);
      3: writeln (souschaine);
      4: writeln(nbOccurences);
      5: writeln(suppressionSousChaine);
      6: writeln (remplaceSousChaine);
      end;
     end;
     
    begin
    menu;
     
      readln;
    end.

    ps: soyez indulgents svp, je sais que je ne suis pas une lumiere en programmation, je n'ai nul besoin qu'on me le rappelle...

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut héhé finalemnt...j'en suis venue à bout
    l'inspiration m'est venue... j'ai corrigé mon programme si qqn a envie de s'amuser en le lisant (avouez que vous ne pouvez pas vous empecher de dénigrer les novices comme moi!) je le met. à une prochaine peut etre!
    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
    program chaine_caracteres;
     
    var
    s1,s1SousChaine,s2souschaine:string;
     
    procedure saisirChaine(var s:string);
    begin
     repeat
      writeln('entrez une chaine de caracteres inférieure à 255');
      readln(s);
     until (length(s)<=255)and (length(s)<>0);
    end;
     
    procedure ecrireChaine (var s:string);
    begin
     saisirchaine(s);
     writeln('la chaine de caracteres est: ',s);
    end;
     
    function SousChaine (var s,sSousChaine:string):boolean;
    begin
     repeat
      ecrireChaine (s);
      writeln('entrez une sous chaine de ',s);
      readln(sSousChaine);
     until length(sSousChaine)<>0;
     if pos(sSouschaine, s)<>0 then
      SousChaine:=true
     else Souschaine:=false;
     end;
     
    function nbOccurences (s,sSousChaine:string):integer;
    var
     temp:integer;
    begin
    nbOccurences:=0;
    saisirChaine(s);
    repeat
     writeln('entrez une sous chaine de ',s,'pour en connaitre le nbr d''occurences');
     readln(sSousChaine);
    until length(sSousChaine)<>0;
    if pos(sSouschaine, s)<>0 then
      begin
      nbOccurences:=nbOccurences+1;
      repeat
       temp:= pos(sSouschaine, s);
       delete (s,1,temp + length (ssouschaine) );
       if pos(sSouschaine, s)<>0 then
        nbOccurences:=nbOccurences+1;
       until pos(sSouschaine, s)=0;
      end;
      writeln (nbOccurences);
      readln;
    end;
     
    function suppressionSousChaine(var s,sSousChaine:string):string;
    var
      nbrSuppression:integer;
        begin
        saisirchaine(s);
        repeat
         writeln('entrez la sous chaine de ',s,' que vous souhaitez supprimer');
         readln(ssouschaine);
        until (length(ssouschaine)<>0) and (pos(ssouschaine,s)<>0);
        nbrsuppression:=0;
        repeat
         delete(s,pos(sSousChaine,s),length(ssousChaine));
         nbrSuppression:=nbrSuppression+1;
        until
           pos(sSousChaine,s)=0;
        suppressionSousChaine:=s;
        writeln(ssousChaine,' a ete supprimé ',nbrsuppression,' fois ');
           readln;
        end;
     
     function remplaceSousChaine(var s,sSousChaine1,sSousChaine2:string):string;
      var
      i,temp,long:integer;
      prefixe,suffixe:string;
        begin
        saisirchaine(s);
        repeat
         writeln('entrez la sous chaine de ',s,' que vous souhaitez remplacer');
         readln(ssouschaine1);
        until (length(ssouschaine1)<>0) and (pos(sSousChaine1,s)<>0);
        i:=0;
        repeat
          i:=i+1;
          temp:=pos(sSousChaine1,s);
          long:= length(ssousChaine1);
          prefixe:=copy(s,1,temp-1);
          suffixe:=copy(s,temp+long,length(s)-temp-long+1);
          delete(s,temp,long);
          repeat
            writeln('entrez la ',i,'  souschaine de remplacement');
            readln(ssouschaine2);
          until length(ssouschaine2)<>0;
          s:=prefixe+ssouschaine2+Suffixe;
        until pos(sSousChaine1,s)=0;
        remplacesouschaine:=s;
        readln;
        end;
     
    function menu:integer;
     begin
     repeat
      writeln('entrez l''action désirée:1 pour saisie d''une chaine, 2 pour écriture d''une chaine, 3 pour recherche d''une sous chaine,4 pour nombre d''occurences,5 pour suppression d''une sous chaine,et 6 pour remplacement d''une souschaine,0 pour sortir');
      readln(menu);
      until (menu=0)or(menu=1) or (menu=2) or  (menu=3) or (menu=4) or  (menu=5) or (menu=6);
      case menu of
      0: exit;
      1: saisirChaine(s1);
      2: ecrireChaine(s1);
      3: writeln (souschaine(S1,s1souschaine));
      4: writeln(nbOccurences(s1,s1SousChaine));
      5: writeln(suppressionSousChaine(s1,s1SousChaine),' est la nouvelle chaine de caracteres');
      6: writeln(remplaceSousChaine(s1,s1SousChaine,s2SousChaine),' est la nouvelle chaine de caracteres');
      end;
     end;
     
    begin
    repeat
    menu;
    until (menu=0) ;
     
      readln;
    end.

  3. #3
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    bonjour et bienvenue
    Citation Envoyé par débutantepascal
    avouez que vous ne pouvez pas vous empecher de dénigrer les novices comme moi!
    qui à parler de denigrer une novice?(c'est toi )
    ensuite pour ton code je trouve super pour une novice de bien indenté ton code c'est cool
    juste des petits trus à ameliorer comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    repeat
          ..................................
    until (menu=1) or (menu=2) or  (menu=3) or (menu=4) or  (menu=5) or (menu=6);
      case menu of
    qui pourrait etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      repeat
               .........................
      until menu in[1..6];
      case menu of
    bravo et bonne continuation
    @+
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut reponse a krachik
    merci beaucoup pour le raccourci!!! c'est plus élégant!
    à une prochaine fois

  5. #5
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonjour,
    J’ai un peux relu ton code, et il me semble qu’il y a quelque élément à corriger.

    je ne sais pas quel compilateur tu utilises mais, en tout cas, sous FreePascal, ton code est impossible à compiler.

    Quand une fonction ne retourne pas un résultat immédiat, il est préférable de créer une variable intermédiaire.
    Quand tu écris dans ta fonction menu readln(menu), until menu = ... ou case menu of , tu fais en fait un appel récursif à ta fonction, or ce n’est pas ce pas ce que tu veux faire.

    Dans la fonction menu, si l’utilisateur choisit 0, alors tu fais, exit ; c’est inutile piusque de toute façon ta structure de contrôle case est le dernier élément de ta fonction (donc de toute façon tu quittes la fonction).
    De plus, quand tu veux quitter prématurément une fonction en utilisant exit, il est préférable de retourner une valeur au préalable.

    Dans le corps du programme, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    repeat
      menu ;
    until menu = 0 ;
    il est préférable d’enregistrer le choix de l’utilisateur.
    comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var choix : INTEGER;
    begin
    repeat
      choix:= menu;
    until (choix=0) ;
    Mais si tu ne veux pas réutiliser le choix de l’utilisateur, ou que tu veux faire une économie de mémoire, tu peux faire une boucle vide, comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    repeat
    until menu = 0;
    +
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if pos(sSouschaine, s)<>0 then
      SousChaine:=TRUE
    else Souschaine:=FALSE;
    ceci se résume à écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SousChaine:= pos(sSouschaine, s)<>0;
    cc:
    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
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    program chaine_caracteres;
     
    var
      s1,s1SousChaine,s2souschaine:STRING;
     
    procedure saisirChaine(var s:STRING);
    begin
      repeat
        writeln('entrez une chaine de caracteres inférieure à 255');
        readln(s);
      until (length(s)<=255) and (length(s)<>0);
    end;
     
    procedure ecrireChaine (var s:STRING);
    begin
      saisirchaine(s);
      writeln('la chaine de caracteres est: ',s);
    end;
     
    function SousChaine (var s,sSousChaine:STRING):boolean;
    begin
      repeat
        ecrireChaine (s);
        writeln('entrez une sous chaine de ',s);
        readln(sSousChaine);
      until length(sSousChaine)<>0;
    {  if pos(sSouschaine, s)<>0 then
        SousChaine:=TRUE
      else Souschaine:=FALSE; }
      SousChaine:= pos(sSouschaine, s)<>0;
    end;
     
    function nbOccurences (s,sSousChaine:STRING):INTEGER;
    var
      resu ,
      temp : INTEGER;
    begin
      resu:= 0;
      saisirChaine(s);
      repeat
        writeln('entrez une sous chaine de ',s,'pour en connaitre le nbr d''occurences');
        readln(sSousChaine);
      until length(sSousChaine)<>0;
      if pos(sSouschaine, s)<>0 then
      begin
        resu:= resu+1;
        repeat
          temp:= pos(sSouschaine, s);
          delete (s,1,temp + length (ssouschaine) );
          if pos(sSouschaine, s)<>0 then
          resu:= resu+1;
        until pos(sSouschaine, s)=0;
      end;
      nbOccurences:= resu;
    end;
     
    function suppressionSousChaine(var s,sSousChaine:STRING):STRING;
    var
      nbrSuppression:INTEGER;
    begin
      saisirchaine(s);
      repeat
        writeln('entrez la sous chaine de ',s,' que vous souhaitez supprimer');
        readln(ssouschaine);
      until (length(ssouschaine)<>0) and (pos(ssouschaine,s)<>0);
      nbrsuppression:=0;
      repeat
        delete(s,pos(sSousChaine,s),length(ssousChaine));
        nbrSuppression:=nbrSuppression+1;
      until
      pos(sSousChaine,s)=0;
      suppressionSousChaine:=s;
      writeln(ssousChaine,' a ete supprimé ',nbrsuppression,' fois ');
    end;
     
    function remplaceSousChaine(var s,sSousChaine1,sSousChaine2:STRING):STRING;
    var
      i,temp,long:INTEGER;
      prefixe,suffixe:STRING;
    begin
      saisirchaine(s);
      repeat
       writeln('entrez la sous chaine de ',s,' que vous souhaitez remplacer');
       readln(ssouschaine1);
      until (length(ssouschaine1)<>0) and (pos(sSousChaine1,s)<>0);
      i:=0;
      repeat
        i:=i+1;
        temp:=pos(sSousChaine1,s);
        long:= length(ssousChaine1);
        prefixe:=copy(s,1,temp-1);
        suffixe:=copy(s,temp+long,length(s)-temp-long+1);
        delete(s,temp,long);
        repeat
          writeln('entrez la ',i,'  souschaine de remplacement');
          readln(ssouschaine2);
        until length(ssouschaine2)<>0;
        s:=prefixe+ssouschaine2+Suffixe;
      until pos(sSousChaine1,s)= 0;
      remplacesouschaine:=s;
      readln;
    end;
     
    function menu : INTEGER;
    var
      resu : INTEGER;
    begin
      repeat
        writeln('entrez l''action désirée:');                // retour à la ligne pour
        writeln('  1 pour saisie d''une chaine,');           // une meilleure lisibilité
        writeln('  2 pour écriture d''une chaine,');
        writeln('  3 pour recherche d''une sous chaine,');
        writeln('  4 pour nombre d''occurences,');
        writeln('  5 pour suppression d''une sous chaine,');
        writeln('  6 pour remplacement d''une souschaine,');
        writeln('  0 pour sortir');
      readln(resu);
      until resu in [0..6];
      case resu of
     { 0: begin                  // de toute façon on quitte la fonction
          menu:= resu;
          exit;
         end; }
      1: saisirChaine(s1);
      2: ecrireChaine(s1);
      3: writeln (souschaine(S1,s1souschaine));
      4: writeln(nbOccurences(s1,s1SousChaine));
      5: writeln(suppressionSousChaine(s1,s1SousChaine),' est la nouvelle chaine de caracteres');
      6: writeln(remplaceSousChaine(s1,s1SousChaine,s2SousChaine),' est la nouvelle chaine de caracteres');
      end;
      menu:= resu;
     end;
     
    var choix : INTEGER;
    begin
     
    repeat
      choix:= menu; // On enregistre le choix de l'utilateur.
    until (choix=0);
     
    { Autre possibilité : (On n'enregistre pas le choix)
    repeat
    until menu = 0;
    }
    writeln('A bientot');
    readln;
    end.
    Bon courage pour la continuation.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut réponse à ultima
    merci beaucoup pour ces précisions!!!! rien n'est jamais parfait, j'aime apprendre à améliorer.

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

Discussions similaires

  1. Appel fonction menu
    Par Ctesias dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 19/01/2012, 10h54
  2. Problème avec la fonction menu
    Par About dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 03/08/2007, 10h30
  3. [Oracle 8i] extraction de fonction menu
    Par Titouf dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/01/2007, 17h10
  4. [débutant] modifier une page en fonction d'un menu
    Par Hastur dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/07/2005, 13h29
  5. Fonctions via menu excel
    Par djid72 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/03/2005, 11h44

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