Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Pascal] Remplir un tableau aleatoirement

Sujet résolu
10 décembre 2011 à 13:55:09

Bon voilà je suis planté sur cet exercice d'algorithme depuis ce matin j'ai pas pu le résoudre. J’espère qu'il y aura un bon programmeur pour m'aider à le faire.
Cordialement.

Voilà l'exercice 3 et désolé pour la qualité du scan c'est fais avec un cellulaire. J'ai pas un scanner numerique.
Image utilisateur
  • Partager sur Facebook
  • Partager sur Twitter
10 décembre 2011 à 19:23:58

Bonsoir,

Pour utiliser les nombres aléatoires:

var val:integer;
begin
    Randomize;
    val := random(100); // Entier entre 0 et 99 
    Writeln(val);
    Readln;
    end.


Pour ton tableau de 5 à 20 cases:
val := 5 + random(16); // Somme de 5 + un nombre entre 0 et 15


Le tableau résultant:
monTableau : Array[0..val] of Integer;


Pour les nombres pairs/impairs:
if( val mod 2 = 1) then
    Writeln('Impair') 
else
    Writeln('Pair');


Voilà, tu as les bases pour faire ton exo.

Le reste n'est que parcours de tableau et tests si pair/impair. Et concaténer des valeur dans un string n'est pas bien compliqué...

Pseudo code:
Je génère la taille de mon tableau
Je remplis mon tableau de nombres à 2 chiffres ==> entre 10 et 99
Variable boolean touspairs = false
Variable boolean tousimpairs = false

Pour toutes les cases d'indice impair de mon tableau
    chaine = chaine + valeur
    si chiffre pair alors tousimpairs = false
    si chiffre impair alors touspairs = false

Afficher chaine puis "tous pairs", "tous impairs" ou "suite de pairs et d'impairs" suivant les valeurs de nos deux booléens
  • Partager sur Facebook
  • Partager sur Twitter
11 décembre 2011 à 0:08:53

Le plus compliqué c'est que tu dois mettre les tableaux dont l'indice est impair dans une chaine ch PUIS et le plus compliqué de voir chiffre par chiffre si c'est pair ou impair c'est ca le plus compliqué

Voila mon essai mais c'est faux bien sur
program k;
uses crt;
type
  tab = array[1..15] of integer ;
var
  ch1,ch : string;
  t : tab;
  a,i,n : integer;
begin
  repeat
     writeln('saisir n ');
     readln(n);
  until (5<n) and (n<20);
  randomize;
  for i:=1 to n do
   begin
     if ((t[i] mod 2) = 1) then
      begin
        str(t[i],ch1);
        ch := t[i];
      end;
   end;
   i:=0;
   repeat
    i:=i+1;
    if (a[i] := (a[i] mod 2 = 0)) then
     begin
       str(a,ch);
       writeln('ch = ',ch,'la chaine est fournee que par des chiffres impair');
     end
     else writeln('ch = ',ch,'la chaine est fournee par des chiffres impair et pair');

   until (a[i] := (a[i] mod 2 = 0));
end.


et cela je crois pas que c'est juste en pascal (on peut définir sa capacité que par des entiers)

monTableau : Array[0..val] of Integer;

  • Partager sur Facebook
  • Partager sur Twitter
11 décembre 2011 à 0:59:05

Excuse moi pour la confusion entre les chiffres contenus dans les cases de tableau impaires et la chaines uniquement composée de chiffres impairs.

Voilà la solution en Delphi (vu que je n'ai pas de compilo Pascal sous la main :p ):
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

const
  tabSize = 10;

var
  tab: Array [0 .. tabSize - 1] of Integer;
  i: Integer;
  chaine: String;
  allImpairs: Boolean;

begin
  try
    chaine := '';
    allImpairs := true;
    Randomize;
    for i := 0 to tabSize - 1 do
    begin
      tab[i] := 10 + random(89); // 10 à 99);
    end;

    i := 1;
    while (i < tabSize) do
    begin
      chaine := chaine + IntToStr(tab[i]);
      i := i + 2;
    end;

    for i := 1 to Length(chaine) - 2 do
    // Vérifie si ta chaine ne commence pas par un espace car la mienne en a un.
    begin
      if ((StrToInt(chaine[i]) mod 2) = 0) then
      begin
        allImpairs := false;
      end;
    end;

    if allImpairs then
    begin
      Writeln('La chaine ' + chaine +
        ' est constituée uniquement de chiffres impairs');
    end
    else
    begin
      Writeln('La chaine ' + chaine +
        ' est constituée de chiffres pairs et impairs');
    end;

    { TODO -oUser -cConsole Main : Insérer du code ici }
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Writeln('Done');
  Readln;

end.
  • Partager sur Facebook
  • Partager sur Twitter
11 décembre 2011 à 10:33:52

C'est très serviable et gentille de vous que vous avez pris de votre temps pour me répondre à une telle vitesse et une telle justesse mais moi ce que je veux c'est programme en pascal j'ai lu le code j'ai latéralement rien compris :-( J'y connais rien en Delphi même si il y a des commandes semblables à celles de Pascal.
Cordialement, et merci



EDIT : J'ai passé toute la journée sur cet exercice mais en vain. Le programme se lance mais ne fais pas ce que je veux (je crois que le probléme viens du random)

program Bonjour;
uses
  WinCrt; 
type
 tab = array[1..15] of integer;
var
 t : tab;
 i,n,a,e : integer;
 ch,ch1 : string;
 pair,pairr : boolean;
begin
randomize;
 repeat
  Writeln('ecrire n');
  readln(n);               
 until (n>5) and (n<20); 


randomize;
 for i := 1 to n do
  t[i] := 10 + random(89);
  writeln(t[i]);

 pair := false;

 for i := 1 to n do
  begin 
   if t[i] in [2,4,6,8,10,12,14,16,18,20] then
     begin
      pair := true;
     end;
  end;

 if pair = true then
  begin
   str(t[i],ch);
   ch1 := ch; 
  end;

  

  pairr := false;
  if (pos('1',ch) or pos('3',ch) or pos('5',ch) or pos('7',ch) or pos('9',ch)) in [1..20] then
   pairr := true ;

  if pairr = true then
   begin
    writeln('ch : "',ch,ch1,'" compose par pair et impair');
   end
   else writeln('ch : "',ch,ch1,'"compose que des impair');  


end.


RESULTAT DE L'EXECUTION :
Affichage de t[i] : (un seul nombre 95 par exemple alors que j'ai mis n = 6)
Affichage de ch : vide ""
  • Partager sur Facebook
  • Partager sur Twitter
11 décembre 2011 à 17:54:41

Pas besoin d'avoir peur de Delphi. :)

Delphi = Pascal + surcouche objet + VCL (pas besoin de savoir ce qu'est la VCL).

Donc, tout ce qu'on peut faire un Pascal, on le fait en Delphi puisque le code Delphi est écrit en Pascal (si on met de côté les ajouts mentionnés au début).

Il y a juste ça à modifier (ça ne correspond à rien en Pascal) :
{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;


Je vais donc commenter mon code petit à petit histoire que tu le comprennes mieux:

const
  tabSize = 10;

var
  tab: Array [0 .. tabSize - 1] of Integer;
  i: Integer;
  chaine: String;
  allImpairs: Boolean;

On initialise/déclare la taille de notre tableau (ici 10 éléments numérotés de 0 à 9) + un entier + la chaine à afficher ainsi que notre booléen pour "tous impairs".
Rien de bien sorcier donc...

chaine := '';
    allImpairs := true;
    Randomize;
    for i := 0 to tabSize - 1 do
    begin
      tab[i] := 10 + random(89); // 10 à 99);
    end;


On initialise notre booléen et on remplit notre tableau avec des nombres aléatoires compris entre 10 et 99.

i := 1;
    while (i < tabSize) do
    begin
      chaine := chaine + IntToStr(tab[i]);
      i := i + 2;
    end;

On parcours les cases impaires du tableau (cases 1, 3, 5...) et on met leur contenu dans chaine.
IntToStr prend en paramètre un entier et retourne la représentation de cet entier sous forme de string car on ne peut pas concaténer une chaine et un entier en Pascal.
Par exemple, le chiffre 10 sera transformé en un string contenant les caractères 1 et 0.

for i := 1 to Length(chaine) - 2 do
    // Vérifie si ta chaine ne commence pas par un espace car la mienne en a un.
    begin
      if ((StrToInt(chaine[i]) mod 2) = 0) then
      begin
        allImpairs := false;
      end;
    end;


Un string étant en fait un tableau de caractères, on peut accéder à un caractères en particulier comme si on manipulait un tableau.
Lenght(machaine) renvoie la longueur d'un string.
Dans ce cas, il se trouve que ma chaine à un espace au début. C'est étrange. C'est pourquoi je commence à l'indice 1 et jusqu'à Lenght(chaine) - 2.
StrToInt fait le contraire de IntToStr. La chaine "10" sera transformée en nombre 10. Par contre StrToInt('toto') enverra une erreur à l'exécution.

Et donc pour chaque chiffre de la chaine, je regarde son modulo à 2. En effet, si X mod 2 = 0, alors X est pair, si X mod 2 = 1, alors X est impair vu que le modulo est le reste de la division entière (ici division par 2).
Donc, si on trouve au moins un chiffre pair, on met allImpairs à false.

if allImpairs then
    begin
      Writeln('La chaine ' + chaine +
        ' est constituée uniquement de chiffres impairs');
    end
    else
    begin
      Writeln('La chaine ' + chaine +
        ' est constituée de chiffres pairs et impairs');

J'affiche juste la phrase selon que l'on a des chiffres impairs ou pairs.

A toi d'adapter ton code si tu souhaites réutiliser le mien.

if t[i] in [2,4,6,8,10,12,14,16,18,20] then
     begin
      pair := true;
     end;
  end;

Code faux car t[i] est compris entre 10 et 99. Utilise le modulo pour tester pair/impair.
  • Partager sur Facebook
  • Partager sur Twitter
14 décembre 2011 à 21:55:01

Probléme résolu. Merci Fumble pour votre aide :-) et désolé pour le retard
  • Partager sur Facebook
  • Partager sur Twitter
29 avril 2014 à 6:03:22



Écrire un programme qui remplit aléatoirement un tableau de 10
entiers compris entre 0..10; Construire un
autre tableau qui contient respectivement les occurrences des nombres du premier tableau (nombre
de fois de son apparition). Afficher les deux tableaux.
Exemple
:
Tableau des nombres
1 5 1 9 1 3 10
4 8 4
Tableau des occurrences
3 1 3 1 3 1 1 2 1 2
Voici mon code  mais je n'arrive pas a terminer .J ai besoin d aide s.v.P.
 const Max=10;
    var
  tab: array [0..10]  of integer;
  tab1:array [0..10]  of integer;
  i,cpt:integer;
begin
 writeln ('=======tableau 1==========');
 randomize;
 for i:=1 to Max do tab[i]:= random(100);
 for i:=1 to Max do write( tab[i],' ');
 writeln;
 writeln ('=======tableau 2==========');
 for i:=1 to Max do
 if tab1[i]=tab[i] then inc(cpt) ;
 write(tab1[i], '-');
 write(cpt);

  readln;
 readln;



end.

-
Edité par lolo_b64 29 avril 2014 à 6:06:18

  • Partager sur Facebook
  • Partager sur Twitter
18 novembre 2016 à 18:55:22

je veux ecrire un programme qui me permette de saisie un entier n et puis remplire un tableaux avec n entier et en suites afficher juste les entier pair, mais la j'ai une p'tite problème  

program ex;
uses wincrt;
type
  tab=array [1..10] of integer;
  var
    t:tab;
    n:integer;
procedure saisie (var n:integer);
begin
  repeat
    writeln('saisir n');
    readln(n);
    until (n >= 5);
    end;
    procedure remplire (var t:tab;n:integer);
    var
      i:integer;
      begin
        for i:=1 to n do
        writeln(t[i]);

        end;
procedure affiche (var t:tab ; n:integer);
var
  i:integer;
  begin
    for i:=1 to n div 2 do
    writeln(t[i]);
    end;
begin
  saisie(n);
  remplire(t,n);
  affiche(t,n);
  end.


  • Partager sur Facebook
  • Partager sur Twitter
8 décembre 2016 à 22:32:24

aminekhadraoui1 a écrit:

je veux ecrire un programme qui me permette de saisie un entier n et puis remplire un tableaux avec n entier et en suites afficher juste les entier pair, mais la j'ai une p'tite problème  

program ex;
uses wincrt;
type
  tab=array [1..10] of integer;
  var
    t:tab;
    n:integer;
procedure saisie (var n:integer);
begin
  repeat
    writeln('saisir n');
    readln(n);
    until (n >= 5);
    end;
    procedure remplire (var t:tab;n:integer);
    var
      i:integer;
      begin
        for i:=1 to n do
        writeln(t[i]);

        end;
procedure affiche (var t:tab ; n:integer);
var
  i:integer;
  begin
    for i:=1 to n div 2 do
    writeln(t[i]);
    end;
begin
  saisie(n);
  remplire(t,n);
  affiche(t,n);
  end.


Tu n'as pas rempli le tableaux, t'as voulu afficher son contenu dans la procedure remplire normalement c'est comme ça qu'il faut faire pour remplir un tableau correctement :

procedure remplire (var t:tab; n:integer); 
var i : integer; 
begin 
 for i:=1 to n do 
  begin 
   t[i] := i; 
  end; 
end;

   



  • Partager sur Facebook
  • Partager sur Twitter
5 avril 2018 à 18:34:20

ecrire un programme pascal permettent de remplir un vecteur V par 20 prenoms  p demande a l' utilisateur a travers un meunu de choix le type du recherche a appliquer sur vecteur pour recherche si prénom
  • Partager sur Facebook
  • Partager sur Twitter
2 septembre 2019 à 18:56:37

Écrire un programme qui permet de remplir un tableau de 10 entiers 

  • Partager sur Facebook
  • Partager sur Twitter
2 septembre 2019 à 19:48:26

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter