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 :

Opérations sur un tableau


Sujet :

Turbo Pascal

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Opérations sur un tableau
    Bonjour,

    le but de l'exercice c'est d'éliminer tous les caractères non alphabétiques et puis d'afficher les chaînes non vides à côté de leurs indices.

    C'est ce que j'ai fait mais le programme se bloque, se ferme et affiche "General protection fault " (après avoir rempli le tableau).
    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
    program nbc;
    uses wincrt ;
    type
    tab =array[1..20]of string ;
    var
    t:tab;
    n:integer;  ch:string;
     
     
    procedure saisie (var n:integer ; var t:tab);
    var i:integer;
    begin 
     
    writeln('donner n ');
    readln(n);
    for i :=1 to n do
    begin
    writeln('donner t [',i,']');
    readln(t[i]);
      end;end;
     
     
    function eli(var ch: string ):string;
    var j:integer;
    begin 
    j:=1;
    repeat
    if not(upcase (ch[j]) in ['A'..'Z'])
    then  begin                  
    delete(ch,j,1);
    end;
    j:=j+1;
    until (j=length(ch));
    end;
     
     
     
    procedure fin (t:tab; var ch :string);
    var i:integer;
    begin
    for i :=1 to n
    do begin
    eli(ch);
    ch:=eli(ch); writeln( ch) ; end;
    if ch<>''
    then  begin
    writeln (ch,i);
    end;
     end;
     
     
     
     begin
     saisie(n,t);
     fin(t,ch);
     end.

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    quelle est la valeur de "ch" quand tu appelles "fin(t, ch)" ?

    à quoi sert le paramètre "t" dans la procédure "fin" ?

    je pense que tu ne maîtrise pas la portée des variables: pourquoi "n" est un paramètre de "saisie" mais pas de "fin" ?

    NB: ces questions sont là pour te pointer les erreurs dans ton programme, moi je connais la réponse

  3. #3
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour,

    Comme je l'ai écrit dans un précédent message, la partie du code qui modifie la chaîne est fausse.
    ( sans parler de toutes les autres incorrections du programme )

    Code rectifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     j:=1;
     repeat
           if not(upcase (ch[j]) in ['A'..'Z'])
              then delete(ch,j,1)
              else j:=j+1;
     until (j > length(ch));

Discussions similaires

  1. Opérations sur tableau
    Par GGelec dans le forum C
    Réponses: 7
    Dernier message: 06/07/2012, 18h28
  2. Opération complexe sur un tableau
    Par laloune dans le forum Langage
    Réponses: 6
    Dernier message: 02/02/2012, 23h19
  3. [XL-2007] Opérations (+,-, ..) sur variables tableau
    Par bob3333 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/04/2011, 15h41
  4. Réponses: 8
    Dernier message: 16/03/2008, 21h02
  5. [VB6]opération sur un tableau complet en une seule fois?
    Par marco62118 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/05/2006, 12h50

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