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 :

Gestion de tableau


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut Gestion de tableau
    Salut chers amis,

    Voilà j'ai un petit problème de Pascal que j'ai pas pu résoudre : TPW me montre à chaque fois un message d'erreur ou la fenêtre se ferme spontanément !
    SVP donnez-moi la résolution pour que je puisse corriger mes fautes !
    Merci infiniment !

    Problème

    Ecrire un programme en Pascal permettant de :
    • saisir un tableau T de n (3<n<10) chaînes de caractères commençant chacune par une lettre alphabétique majuscule et supposée contenir au moins une voyelle.
    • ranger dans un tableau R la position de la première lettre voyelle de chaque chaîne de T.
    • trier le tableau R dans un ordre croissant.
    • afficher le tableau R après l'opération du tri.

    A très bientôt !

  2. #2
    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
    Bia,
    Citation Envoyé par zaradacht Voir le message
    salut chers amis,
    voilà j'ai un petit problème de Pascal que j'ai pas pu résoudre, TPW me montre à chaque fois un message d'erreur ou la fenêtre se ferme spontanément!
    svp donnez-moi la résolution pour que je puisse corriger mes fautes!
    merci infiniment!

    problème
    écrire un programme en Pascal permettant de:
    *saisir un tableau T de n(3<n<10) chaînes de caractères commençant chacune par une lettre alphabétique
    majuscule et supposée contenant au moins une voyelle.
    *ranger dans un tableau R la position de la première lettre voyelle de chaque chaîne de T.
    *trier le tableau R dans un ordre croissant.
    *afficher le tableau R après l'opération du tri.
    à très bientôt!
    svp, montre-nous ce que tu as déjà fait.

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut résolution primaire
    la procedure ranger est erronée!

    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
     
    program app2;                                    
    uses wincrt;
    type TAB=array [1..100] of string;
         TAB1=array [1..100] of integer;
    var  n, i, p, x, y:integer;
         T:TAB;
         R:TAB1;
     
    procedure saisie (var n:integer; var T:TAB);
    begin
     repeat
      write ('saisir la taille du tableau ==>');
      readln (n);
     until (n>3) and (n<100);
     writeln;
     for i:=1 to n do
      repeat
       write ('T[', i, ']=');
       readln (T[i]);
      until (T[i][1] in ['A'..'Z']);
    end;
     
     
     
     
    procedure ranger (n: integer; var T:TAB; var R:TAB1);
    var y:boolean;
     
      function posvoy (i:integer; n:integer; T:TAB):integer;
      var j:integer;
      begin                                                                     
       j:=0;
       y:=false;
       repeat
        j:=j+1;                                                                               
        if (T[i][j] in ['a'..'z']) then
        p:=j;
        y:=true;
       until (y=true);
       posvoy:= p;
      end;
     
    begin
     for i:=1 to n do
      begin
      p:= posvoy (i, n, T);
      R[i]:= p;
      end;
    end;      
     
     
     
     
     
     
    procedure tri (n:integer;var R:TAB1);
    var y:boolean;
      procedure permute (var x, y:integer);
      var z:integer;
      begin
       z:=x;
       x:=y;
       y:=z;
      end;
    begin
     y:=false;
     repeat
      for i:=1 to n-1 do
      begin
       if R[i]>R[i+1] then
                          begin
                          permute (R[i], R[i+1]);
                          y:=true;
                          end;
      end;
       n:= n-1;
     until (y=false) or (n=1);
    end;
     
     
     
     
     
    procedure affiche (R:TAB1; n:integer);
    begin
      for i:=1 to n do
       write (R[i]:5);
    end;
     
     
    BEGIN
     saisie (n, T);
     ranger (n, T, R);
     tri (n, R);
     writeln;
     affiche (R, n);
    END.

  4. #4
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    En fait, c'est la pile qui explose. Mais il y a une donnée de l'énoncé dont tu n'as pas tenu compte : le nombre de chaînes du tableau doit être inférieur à 10, alors que tu déclares un tableau pouvant en contenir 100. La pile n'explosera plus.

    Autre chose : l'énoncé dit que tu dois ranger dans le second tableau les indices des premières voyelles. Le test dans la fonction posvoy doit donc être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (T[i][j] in ['a','A','e','E','i','I','o','O','u','U','y','Y']) then
    Tu as déclaré y comme variable de la procédure ranger. Or, cette variable n'est utilisée que dans la fonction posvoy. C'est dans celle-ci que tu dois déclarer y.

    Enfin, tu as écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p:= posvoy (i, n, T);
    R[i]:= p;
    Pourquoi ne pas écrire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    R[i]:= posvoy (i, n, T);
    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]

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Par défaut enfin'!
    merci beaucoup Alcatîz de votre contribution!
    ben j'ai trouvé une solution pour ce problème -du moins j'ai une bonne exécution en Pascal- seulement ça manque ce que vous venez de me citer!

    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
    program app2;                                    
    uses wincrt;
    type TAB=array [1..10] of string;
         TAB1=array [1..10] of integer;
    var  n, i, p, x, y:integer;
         T:TAB;
         R:TAB1;
     
    procedure saisie (var n:integer; var T:TAB);
    begin
     repeat
      write ('saisir la taille du tableau ==>');
      readln (n);
      until (n>3) and (n<10);
     writeln;
     for i:=1 to n do
      repeat
       write ('T[', i, ']=');
       readln (T[i]);
       until (T[i][1] in ['A'..'Z']);
    end;
     
    procedure ranger (n: integer; var T:TAB; var R:TAB1);
     
      function posvoy (i:integer; n:integer; T:TAB):integer;
      var j:integer;
          q:boolean;
          v:string;
      begin
      j:= 0;                                                                    
      repeat
      j:=j + 1;
      v:=T[i];
      q:= false;
        case  v[j] of
        'a', 'e', 'i', 'u', 'y', 'o', 'A', 'E', 'O', 'I', 'Y', 'U':
                                 begin
                                 p:=j;
                                 q:= true;
                                 end;
        end;
      until (q = true);   
       posvoy:= p;
      end;
     
    begin
     for i:=1 to n do
                   begin
                   p:= posvoy (i, n, T);
                   R[i]:= p;
                   writeln (R[i]);
                   end;
    end;      
     
    procedure tri (n:integer;var R:TAB1);
    var y:boolean;
      procedure permute (var x, y:integer);
      var z:integer;
      begin
       z:=x; x:=y; y:=z;
      end;
    begin
     y:=false;
     repeat
      for i:=1 to n-1 do
      begin
       if R[i]>R[i+1] then
                          begin
                          permute (R[i], R[i+1]); y:=true;
                          end;
      end;
       n:= n-1;
     until (y=false) or (n=1);
    end;
     
    procedure affiche (R:TAB1; n:integer);
    begin
      for i:=1 to n do
       write (R[i]:5);
    end;
     
    BEGIN
     saisie (n, T);
     ranger (n, T, R);
     tri (n, R);
     writeln;
     affiche (R, n);
    END.
    le write (R[i]) dans Ranger n'est qu'une vérification!
    veuillez corriger mes erreurs!
    merci infiniment!

Discussions similaires

  1. Gestion de tableau en VBA
    Par lilian65 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/02/2009, 17h37
  2. Gestion de tableau Excel
    Par Abdeslam_Neo dans le forum Excel
    Réponses: 4
    Dernier message: 24/10/2008, 11h20
  3. [WORD+VB6] Gestion de tableau
    Par baptx dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/07/2007, 17h44
  4. [WINDEV11] Gestion de tableau de structure
    Par shensi dans le forum WinDev
    Réponses: 3
    Dernier message: 18/06/2007, 16h45
  5. [Tableau][Base]Création d'une classe de gestion de tableau
    Par mariogarcia dans le forum Collection et Stream
    Réponses: 40
    Dernier message: 05/11/2005, 01h19

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