Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Free Pascal
Free Pascal Le compilateur Pascal multiplateforme
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/09/2012, 13h32   #1
praetis
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : janvier 2012
Messages : 4
Points : 0
Points : 0
Par défaut Générer des nombres entiers aléatoires dans un tableau et trier celui-ci

Bonjour

j'aimerais effectuer un programme qui génère automatiquement 40 nombres entiers dans un tableau, compris entre 1 et 30, mais j'aimerais les trier par ordre croissant et afficher à nouveau le tableau juste en dessous.

Merci.

Pour l'instant j'ai
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var   tab : array[1 .. 40] of integer;
      num,tri,temp:integer;
 
 
begin
  writeln('-----------------------');
  writeln('tableau des entiers.');
  writeln('-----------------------');
 
  randomize;
 
  for num := 1 to 40 do
    begin
      tab[num] := random(30);
      write(tab[num]:8);
 
 
    end;
praetis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2012, 15h25   #2
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
Joe,

En clair, tu n'as rien.

Les algorithmes de tri ne manquent pas, et il faut - au moins - quelques secondes pour trouver.
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2012, 08h19   #3
batyann811
Membre éprouvé
 
Homme
Inscription : janvier 2010
Messages : 223
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2010
Messages : 223
Points : 451
Points : 451
Citation:
Envoyé par droggo Voir le message
Joe,

En clair, tu n'as rien.

Les algorithmes de tri ne manquent pas, et il faut - au moins - quelques secondes pour trouver.
Rhooooo... Ce n'est pas très serviable ni amical de répondre ainsi alors que la question a déjà été traitée il y a peu ici.
batyann811 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2012, 10h54   #4
praetis
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : janvier 2012
Messages : 4
Points : 0
Points : 0
oui mais je vois pas trop lequel prendre a votre avis?
praetis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2012, 11h01   #5
M.Dlb
Rédacteur/Modérateur
 
Avatar de M.Dlb
 
Inscription : avril 2002
Messages : 2 275
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2002
Messages : 2 275
Points : 3 383
Points : 3 383
Facile à mettre en oeuvre, le tri à bulles !
__________________
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal
M.Dlb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 02h20   #6
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 687
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 687
Points : 1 002
Points : 1 002
Citation:
Envoyé par batyann811 Voir le message
alors que la question a déjà été traitée il y a peu ici.
Joli morceau de code, que j'ajoute à mon catalogue d'exemples.

C'est donc ça, la méthode de Monte-Carlo ? En somme ça revient à essayer toutes les combinaisons jusqu'à ce qu'on tombe sur la bonne. En outre je ne vois pas bien ce qu'on gagne en produisant les combinaisons dans un ordre aléatoire. Ne pourrait-on pas se dispenser des appels à la fonction random en suivant un ordre rationnel ?

En attendant, j'aime encore mieux faire comme ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TrierTableau(var T: TableauATrier);
var
  I, J, N: Integer;
  Temp: TableauATrier;
begin
  N := 0;
  I := 0;
  repeat
    for J := Low(T) to High(T) do if T[J] = I then begin
	                                             Inc(N);
                                                     Temp[N] := T[J];
                                                   end;
    Inc(I);
  until (N = TailleTableau);
  T := Temp;
end;
__________________
L'Art est long et le Temps est court.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 08h27   #7
batyann811
Membre éprouvé
 
Homme
Inscription : janvier 2010
Messages : 223
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 40
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2010
Messages : 223
Points : 451
Points : 451
Citation:
Envoyé par Roland Chastain Voir le message
En outre je ne vois pas bien ce qu'on gagne en produisant les combinaisons dans un ordre aléatoire.
Justement on y gagne rien. C'est juste une méthode stupide mais qui marche (en général) pour trier un tableau.
Néanmoins ça répond parfaitement au problème de praetis. Au pire, il a juste à changer l'algo de tri, par le tien par, exemple.
batyann811 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 09h23   #8
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 687
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 687
Points : 1 002
Points : 1 002
Merci pour ta réponse et pour les liens.
__________________
L'Art est long et le Temps est court.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2012, 20h57   #9
EtherOS
Membre habitué
 
Avatar de EtherOS
 
Homme Lionel Tidjon
Etudiant Polytechnicien
Inscription : juillet 2012
Messages : 51
Détails du profil
Informations personnelles :
Nom : Homme Lionel Tidjon
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2012
Messages : 51
Points : 110
Points : 110
Par défaut Proposition

je vais juste completer ton code :
Je vais d'abord declarer une procedure TRI_INSERT celle-ci sera de preference par insertion (pour sa simplicite):

Code :
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
Uses Crt; {contient les procedures Clrscr , GotoXY et Textcolor}
Const ValMax = 40;
Type  T_Array : array[1 .. ValMax] of Integer;
Procedure TRI (var Tab : T_array; Nb_Elts : Integer);
{ Objectif :  Tri par ordre croissant d'un vecteur des nombres reels par le tri 
 par insertion }
{ Input : le tableau Tab non trie}
{Output : le tableau Tab trie}
Var lower, upper :integer;
         value : reel;
Begin (*TRI_INSERT*)
        For lower := 2 To Nb_Elts Do
             Begin
                     value := Tab[lower];
                      upper := lower;
                       While (upper >1) And (Tab[upper-1] > value) Do
                            Begin
                                    Tab[upper]:= Tab[upper-1];
                                      upper:= upper - 1;
                            End;
                            Tab[upper] := value;
             End;
End; (* TRI_INSERT *)

{--------------------------Programme Principal --------------------------------------- }
 Var   count,srand :integer;
         T : T_Array;
Begin
 Clrscr;
  Randomize;
  srand = 30;
  For  count := 1 To ValMax Do
    Begin
      T[count] := Random(srand);
       Textcolor (10);
    GotoXY(2+count,10);Write (T[count]:8);
    End;
   TRI_INSERT (T,Valmax);
   For  count := 1 To ValMax Do
    Begin
       Textcolor(14);
       GotoXY (2+count,14);Write (T[count]:8);
      End; 
      Readln;
End.
EtherOS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h39.


 
 
 
 
Partenaires

Hébergement Web