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 :

Modification de la taille d'un tableau


Sujet :

Turbo Pascal

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 227
    Par défaut Modification de la taille d'un tableau
    Salut à tous,
    Je traite le pb suivant:pour un tableau donné, insérer entre chaque deux élts leur somme te afficher le résultat.
    Pour cela, j'ai besoin de faire un décalage des valeurs dans le tableau avant insertion.
    Comment est ce que je peux le faire???

  2. #2
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Par défaut
    Bonsoir,

    Le plus simple est de déclarer un autre tableau qui aura 1,5 fois la taille du tableau à traiter dans lequel tu copieras chaque duplet de valeurs et sa somme.

    Il faut utiliser pour ce faire une boucle (rappelons que la variable de boucle n'est normalement pas modifiable en Pascal même si Turbo laisse passer cette faute) qui va lire deux cases, puis les copier dans le nouveau tableau, calculer la somme puis la copier dans la case suivante jusqu'à ce que le compteur soit arrivé à la fin du premier tableau.

    Un indice (c'est le cas de le dire) : il faut deux compteurs qui vont être incrémentés de manière différente.

  3. #3
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Par défaut
    Bonsoir,

    Citation Envoyé par adrian07 Voir le message
    Salut à tous,
    Je traite le pb suivant:pour un tableau donné, insérer entre chaque deux élts leur somme te afficher le résultat.
    Citation Envoyé par richard Voir le message
    Bonsoir,
    calculer la somme puis la copier dans la case suivante jusqu'à ce que le compteur soit arrivé à la fin du premier tableau.
    Ton idée est correcte, mais elle ne répond pas exactement au problème posé. Voici une solution parmi d'autres, qui devrait fonctionner :
    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
     
    Lire(tailleTableau1);
    Lire(tableau1);
     
    tableau2[1] = tableau1[1];
    tailleTableau2 = 2;
    Pour i allant de 2 à tailleTableau1
      valeur1 = tableau1[i - 1];
      valeur2 = tableau1[i];
      tableau2[tailleTableau2] = valeur1 + valeur2;
      tableau2[tailleTableau2 + 1] = valeur2;
      tailleTableau2 = tailleTableau2 + 2;
    FinPour
     
    Afficher(tableau2);
    --
    Wachter

  4. #4
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Par défaut
    Je ne comprends pas : ma solution fonctionne très bien : voici le code (que j'ai compilé et testé) et me semble répondre au problème posé (voir affichage en fin d'exécution.

    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
    program TableauSomme;
     
    {exercice :  pour un tableau donné, insérer entre chaque deux élts leur somme et afficher le résultat.}
     
    VAR   TableauInitial  : Array [1..10] of integer;
             TableauFinal : Array [1..15] of integer;
             CompteurInitial, CompteurFinal,i : integer;  
    Begin
     
        CompteurInitial := 1;
        CompteurFinal :=1;
        {initialisation TableauInitial}
        For i:=1 to 10 do
            Begin 
            TableauInitial[i]:= i;
             End;
     
        Repeat 
           Begin
           TableauFinal[Compteurfinal]:=TableauInitial[CompteurInitial];
           TableauFinal[CompteurFinal+1]:=TableauInitial[CompteurInitial+1];
           TableauFinal[CompteurFinal+2]:=TableauInitial[CompteurInitial] + TableauInitial[CompteurInitial+1];
           CompteurInitial:= CompteurInitial +2;
           CompteurFinal:= CompteurFinal + 3;
            end;
           Until CompteurInitial = 11;
     
     
        Writeln(' Le tableau Final est : ');
            For i:=1 to 15 DO
                Begin
                Write(' | ',TableauFinal[i]);
                end;
                  Write(' |');
     
        Readln;
        Writeln;
     
    End.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 227
    Par défaut
    Les deux prog fonctionnent bien mais le résultat n'est pas celui que je cherche...
    Voici un exemple:
    Tableau donné: [ 1 2 3 7 ]
    Tableau donné: [ 1 3 2 5 3 10 7 ]
    Le programme de Wachter est le plus correct, sauf que pour l'affichage...
    Voci sa traduction en Pascal:

    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
     
    program val;
    uses wincrt;
    var
    T1,T2:array[1..100] of integer;
    i,j,taille,v1,v2,n:integer;
    begin
    readln(n);
    for i:=1 to n do
    begin
       readln(T1[i]);
    end;
    writeln(' ');
     
    T2[1]:=T1[1];
    taille:=2;
    For j:=2 to n do
    begin
       v1:=T1[j-1];
       v2:=T1[j];
       T2[taille]:=v1+v2;
       T2[taille+1]:=v2;
       taille:=taille+2;
    end;
    for i:=1 to taille do
    begin
       writeln(T2[i]);
    end;
    end.
    le programme de Wachter affiche:
    [ 1 3 2 5 3 10 7 0 ]
    Il y a bien à la fin du tab une case de plus qui content zéro....

  6. #6
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Par défaut
    Exact, je n'avais pas lu le "entre", shame on me ...

    Voici le code corrigé (correction mineure):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TableauFinal[Compteurfinal]:=TableauInitial[CompteurInitial];
    TableauFinal[CompteurFinal+1]:=TableauInitial[CompteurInitial] + TableauInitial[CompteurInitial+1]; {placer la somme ENTRE les deux valeurs}
    TableauFinal[CompteurFinal+2]:=TableauInitial[CompteurInitial+1];

    Ainsi la somme sera en effet intercalée entre les deux valeurs. Ton programme possède un Bug latent ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
    T1,T2:array[1..100] of integer;
    i,j,taille,v1,v2,n:integer;
    begin
    readln(n);
    for i:=1 to n do
    T2 doit être déclaré comme ayant 1,5 fois la taille de T1. Dans ton exemple, si n>=67 c'est le plantage assuré. Si on ne connaît pas la taille de T1 à l'avance il faut utiliser des tableaux dynamiques.

  7. #7
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Par défaut
    Bonjour,

    Citation Envoyé par adrian07 Voir le message
    le programme de Wachter affiche:
    [ 1 3 2 5 3 10 7 0 ]
    Il y a bien à la fin du tab une case de plus qui content zéro....
    Bah, cette case de plus était prévue pour recevoir la prochaine somme, et puisque on est arrivé à la fin du tableau, elle ne sert à rien. Et puis, je t'ai laissé le soin d'écrire le code correspondant à Afficher(tableau2).
    Code Pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i :=1 to tailleTableau2 - 1 do
      write(tableau2[i]);
    Citation Envoyé par richard Voir le message
    Exact, je n'avais pas lu le "entre", shame on me ...
    Si tu avais pris le temps de lire ce que j'ai mis en gras plus haut, tu t'aurais rendu compte plus tôt !

    --
    Wachter

  8. #8
    Membre chevronné
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 475
    Par défaut
    Bonjour,

    Citation Envoyé par Wachter Voir le message

    Si tu avais pris le temps de lire ce que j'ai mis en gars plus haut, tu t'aurais rendu compte plus tôt !

    Wachter
    J'aurais dû faire une vérification de TYPE

    J'avoue ma faute, mais la correction à faire dans le code était quand même mineure ... (cf infra)

Discussions similaires

  1. Modification de la taille d'un tableau 3D avec realloc
    Par Bobsleigh dans le forum Débuter
    Réponses: 8
    Dernier message: 10/11/2009, 21h01
  2. Changer la taille d'un tableau déjà initialisé
    Par totofweb dans le forum C++
    Réponses: 2
    Dernier message: 25/07/2004, 15h55
  3. taille d'un tableau
    Par monstour dans le forum ASP
    Réponses: 3
    Dernier message: 24/06/2004, 15h16
  4. Taille maximum de tableau en Delphi
    Par yannick37 dans le forum Langage
    Réponses: 5
    Dernier message: 03/03/2004, 13h18
  5. qbasic : taille d'un tableau
    Par clood200 dans le forum Basic
    Réponses: 2
    Dernier message: 16/09/2003, 07h26

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