A voir également:
- Tri fusion pascal
- Turbo pascal download - Télécharger - Édition & Programmation
- My pascal - Télécharger - Édition & Programmation
- Tri excel - Guide
- Display fusion - Télécharger - Divers Utilitaires
- Fusion pdf - Guide
2 réponses
c'est peut etre que tu as alloue 366 Releves!!!! c'est trooop!! essaye toujours d'allouer au plus 10 elements (surtout si ils sont du type enregistrement ou chaines de caracteres). c'est un defaut pour le pascal. mais je vous propose une autre fonction recursive qui tri par fusion, un tableau des entiers, vous pouvez le modifier!
procedure fusionner_rec (var t:tab; tmp:tab; deb,fin:integer);
var m:integer;
procedure fusion (var t:tab; tmp:tab; d,m,f:integer);
var i,j,k:integer;
begin
i:=d;
j:=m+1;
for k:=d to f do
if ((j>f) or ((j<=m) and (t[i]<t[j]))) then
begin
tmp[k]:=t[i];
i:=i+1
end
else
begin
tmp[k]:=t[j];
j:=j+1;
End;
for k:=d to f do
t[k]:=tmp[k];
end;
begin
if deb<fin then
begin
m:=(deb+fin) div 2;
fusionner_rec(t,tmp,deb,m);
fusionner_rec(t,tmp,m+1,fin);
fusion(t,tmp,deb,m,fin);
end;
end;
procedure fusionner_rec (var t:tab; tmp:tab; deb,fin:integer);
var m:integer;
procedure fusion (var t:tab; tmp:tab; d,m,f:integer);
var i,j,k:integer;
begin
i:=d;
j:=m+1;
for k:=d to f do
if ((j>f) or ((j<=m) and (t[i]<t[j]))) then
begin
tmp[k]:=t[i];
i:=i+1
end
else
begin
tmp[k]:=t[j];
j:=j+1;
End;
for k:=d to f do
t[k]:=tmp[k];
end;
begin
if deb<fin then
begin
m:=(deb+fin) div 2;
fusionner_rec(t,tmp,deb,m);
fusionner_rec(t,tmp,m+1,fin);
fusion(t,tmp,deb,m,fin);
end;
end;
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
7 mai 2011 à 23:53
7 mai 2011 à 23:53
Il n'y a aucune raison que la borne 366 de l'array pose problème...
Par contre j'aimerais bien savoir ce que sont les directives {R} et {M} pour savoir si elles n'opéreraient pas une action de recopie auquel cas modifier le tableau est inutile !
Sinon il faudrait regarder le code en détail mais il va falloir mettre des commentaires en particulier sur les valeurs des très nombreuses variables...
Par contre j'aimerais bien savoir ce que sont les directives {R} et {M} pour savoir si elles n'opéreraient pas une action de recopie auquel cas modifier le tableau est inutile !
Sinon il faudrait regarder le code en détail mais il va falloir mettre des commentaires en particulier sur les valeurs des très nombreuses variables...
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
8 mai 2011 à 00:41
8 mai 2011 à 00:41
Ça dépend des compilateurs...
Personnellement avec Dev-Pascal je peux utiliser des variables qui atteignent 4Go de données.
Donc puisque le string est représenté par 256 octets, je peux avoir un tableau avec 8 388 863 string !!!
Et avec le type Releve (codé sur 38 octets), on peut avoir un tableau de 56 512 765 Releves...
Alors avoir 366 ça ne devrait pas poser de problème... Ou alors changez de compilateur !!!
Personnellement avec Dev-Pascal je peux utiliser des variables qui atteignent 4Go de données.
Donc puisque le string est représenté par 256 octets, je peux avoir un tableau avec 8 388 863 string !!!
Et avec le type Releve (codé sur 38 octets), on peut avoir un tableau de 56 512 765 Releves...
Alors avoir 366 ça ne devrait pas poser de problème... Ou alors changez de compilateur !!!