Se connecter / S'enregistrer
Votre question

arrive pas a resoudre probleme (tableaux, ADA)

Tags :
  • Programmation
Dernière réponse : dans Programmation
16 Novembre 2005 21:57:39

salut a tous,
je doit faire un caré qui range les nombre en ordre croissant de gauche ->droite, haut-> bas (normal).

Mais le message d'erreur que me reourne ADA :
"too many subscripts in array reference"

mon truc :



begin

m:=1;
n:=1;

saisietab(tab);
affiche(tab);



For I in 1..4 loop
for J in 1..4 loop
for K in I..4 loop
if K=I then
for L in J..4 loop
if Tab(K,L)<Tab(i,j) then
Tab(M,N):=Tab(K,L);
end if;
end loop;
else for L in 1..4 loop
if Tab(K,L)<Tab(i,j) then
Tab(M,N):=Tab(K,L);
end if;
end loop;
end if;
end loop;
n:=n+1;
end loop;
m:=m+1;
end loop;

end compte_rendu;


M,N--> place petite valeure, I,J --> parcours total, K,L --> parcours total dela plus nouvelle petite valeure (case1, 2 , 3...) a la derniere case

j'espere que vous avez compris et vous remercie beaucoups.
mathieu

Autres pages sur : arrive resoudre probleme tableaux ada

17 Novembre 2005 01:35:08

heu desole bon peut etre que c'est l'heure qui passe il qu'il se fait tard mais j'ai pas compris ton probleme enfin ce que tu dois optenir et dit moi aussi en quelle langage tu programmes voir si tu peux m'envoyer ta source ou dessiner ton point de depart ainsi que ce que tu veux optenir aller bye a plus peut etre
17 Novembre 2005 01:48:42

Vu le message, à priori ton tableau tab n'a pas assez d'éléments. Il faudrait que tu nous donnes les fonctions saisietab() et affichetab()

Mes notions d'ADA sont très loin, mais si je ne me trompe, toute variable doit être déclarée. Donc donne aussi les déclarations de toutes les variables que tu utilises, et surtout Tab
Contenus similaires
17 Novembre 2005 07:32:19

je dois avoir ca : 1 2 3 4
............................5 6 7 8
............................9 10 11 12
............................13 14 15 16

je pense avoir tous les elements :


procedure Compte_Rendu is


I,J,K,L,m,n:Integer;
type ttab is array (1..4) of Integer;
Tab:Ttab;



procedure Saisietab (T : out ttab) is
begin
for I in 1..4 loop
for J in 1..4 loop
Get(t(i,j));
end loop;
end loop;
end Saisietab;

procedure Affiche(T: in ttab) is
begin
for I in 1..4 loop
for J in 1..4 loop
Put(T(I,J),3);
end loop;
New_Line;
end loop;
end Affiche;



begin

m:=1; -- case ou on place la plus petite valeure : case 1 puis case 2 3 4...
n:=1;

saisietab(tab);
affiche(tab);



For I in 1..4 loop --
for J in 1..4 loop -- i,j : pacours total
for K in I..4 loop
if K=I then -- si K a la ligne I et J a la colonne 2 : ne pas regader la colonne 1
for L in J..4 loop -- K,L :p arcours partiel de la position d eI,J vers la fin (compare la case en cours a la plus petite precedente

if Tab(K,L)<Tab(i,j) then -- si plus petite
Tab(M,N):=Tab(K,L); -- alors la Nieme case ou on place les petite valeures prend sa valeures
end if;
end loop;
else for L in 1..4 loop
if Tab(K,L)<Tab(i,j) then
Tab(M,N):=Tab(K,L); -- pareil
end if;
end loop;
end if;
end loop;
n:=n+1; -- Nieme case qui recoit la petite valeure : on pase a la suivante
end loop;
m:=m+1; -- pareil
end loop;




end compte_rendu;
17 Novembre 2005 14:22:45

Désolé pour toi, mais il va falloir sérieusement revoir ton algo

Plusieurs choses déjà :
- utilises 2 tableaux : 1 avec les valeurs à trier, 1 vide qui va recevoir les valeurs triées
Tab(M,N):=Tab(K,L);
Tu écrases la valeur (m,n) par la valeur (k,l) ! Comme elle n'a pas encore été traitée, tu la perds pour de bon
- n=n+1
Cette valeur est la cause de ton erreur. Tu l'incrémentes dans un for de 1 à 4, c'est bon. Mais quand tu sors de ce for, tu es dans un autre for de 1 à 4 qui utilise à nouveau n. n passe donc la fois suivante de 5 à 8. Et ADA n'aime pas. Il faut réinitialiser n à 1 à chaque fois que tu sors du for

Mais c'est loin d'être suffisant. L'algo en soit est un peu à la rue (désolé mais c'est bien le cas).

Une piste : plutôt que de t'embêter avec un tableau à 2 dimensions, dis-toi bien que ce genre de tableau n'est qu'une autre représentation d'un tableau à 1 seule dimension, bien plus facile à trier (un bubblesort par ex).

Ex :
[[1, 13, 3, 10], [8, 5, 12, 15], [16, 14, 4, 9], [7, 6, 11, 2]]
->
[1, 13, 3, 10, 8, 5, 12, 15, 16, 14, 4, 9, 7, 6, 11, 2]
Après le tri
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
->
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
17 Novembre 2005 14:55:29

resalut, après avoir retourner le probleme, essayer ta solution (qui ne me conviens pas car je veut ptrouver ma valeure avec I et J)

en fait (lol) ...non pas lol, c'est tros bete,

"too many reference" --> je mettait des valeures dans TAB(I,J) alors que je n'avais declaré que tab(I) (une dimension).


c'est bete hein....?

encore desolé pour cette grosse erreur qui m' moi aussi fait perdre beaucoups de temps


merci encore
mathieu
*-------*
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS