Probléme en algorithme

Bonjour,
svp j ai besoi a votre aide pour trouver une solutin a cette exercice
************
soit v1 et v2 deux tableaux d entier de taille n (n est impair)
ecrire un algorithme permettant le trnsfert des element de v1 dans v2 selon le principe suivant:
les element de rang impair de v1 sont rangés dans v2 en ordre inverse en comencant par la fin de v2 et les element de rangés pair de v1 sont rangés dans v2 dans le méme prdre.
/////
exemple:
v1 10 12 20 25 30
v2 12 25 30 20 10

merci de me répondre c trés important
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  1. Une petite remarque:

    Les commentaires en pascal sont { } et non pas /* */.
    1. /* Ce programme ne gère pas des cas particuliers ni exceptions */
      /* Ce code n'est pas testé! */

      Program monProgramme;

      const
      /* Definit la taille maximale */
      tailleMax = 100;
      var
      /* Declaration des compteur */
      cpt, cpt1, cpt2: Integer;

      /* la taille des tableaux */
      n: Integer;

      /* Les deux tableaux */
      v1, v2: array [1..tailleMax] of Integer;

      /* Booleen pour les boucles */
      b: Boolean;

      /* Une variable pour les boucles FOR */

      /* Le programme */
      Begin

      b := false;

      /* une petite boucle qui garantit une taille n < tailleMax */

      while (not(b)) do
      begin
      writeln("Faites entrer la taille des tableaux:");
      readln(n);
      if ((n<tailleMax) and (i mod 2 =1)) then b := true;
      end;

      /* Remplissage de v1 */

      for i:=1 to n do
      readln(v1[i]);

      cpt1 := 1; /* Curseur pour les positions paires */
      cpt2 := n; /* Curseur pour les positions impaires */

      for cpt:= 1 to n do /* Traitement case par case */
      begin
      if (i mod 2 = 0) then
      begin /* Position paire */
      v2[cpt2] = v1[cpt]; /* On met la valeur à la fin */
      cpt2 := cpt2 - 1; /* On decremente pour le faire pointer sur une case vide */
      end
      else
      begin
      v2[cpt1] := v1[cpt]; /* On met la valeur au debut */
      cpt1 := cpt1 + 1; /* On incrementer pour le faire pointer sur une case vide */
      end;
      end;

      /* Affichage du resultat */

      for i:=1 to n do
      writeln(v2[i];
      /* Fin */
      end.
      1. merci mé j v une algorithme compléte svp + traduction en pascal
        merci**
        1. Tu peux facilement creer une boucle et tu manipule deux curseurs:

          en Pascal cela donne:

          cpt1 := 1;
          cpt2 := n;

          for cpt:= 1 to n do
          begin
          if (i mod 2 = 0) then
          begin
          v2[cpt2] = v1[cpt];
          cpt2 := cpt2 - 1;
          end
          else
          begin
          v2[cpt1] := v1[cpt];
          cpt1 := cpt1 + 1;
          end;
          end;
          1. Voici l'algorithme:

            Algorithme ex;

            Variables:
            v1,v2,temp:tableau de 1 à N d'entiers;
            i:entier;
            Constantes N=...;

            Début
            temp <= v1
            Pour i de 1 à N faire v1[i] <= v2[N-i];
            v2 <= temp;
            Fin.
            1. 1. Tu balaye v1 de 2 en 2 en commençant au 2ème élément et transfère ce que tu trouves dans la case suivante de v2
              2. Tu balaye v1 de -2 en -2 en commençant par le dernier élément de rang impair et transfère ce que tu trouves dans la case suivante de v2

              C'est tout !