Bonjour après mes questions sur les pointeurs je me suis lancé dans les listes : bonne nouvelle ca fonctionne mais j'ai un erreur qui apparait lorsque je recherche une valeur voila mon code :
une petite simulation :
Code ADA : Sélectionner tout - Visualiser dans une fenêtre à part
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 WITH text_io;, Unchecked_Deallocation, Ada.Numerics.Discrete_Random; USE text_io;; PROCEDURE Ptr IS subtype Nbnb IS Integer RANGE 1..10; PACKAGE Randnb IS NEW Ada.Numerics.Discrete_Random(Nbnb); USE Randnb; PACKAGE Rand IS NEW Ada.Numerics.Discrete_Random(integer); USE Rand; TYPE Couple; TYPE Liste IS ACCESS Couple; TYPE Couple IS RECORD Valeur : Integer; Suivant : Liste; END RECORD; -- PROCEDURE Free IS NEW Unchecked_Deallocation(Couple, Liste); --specification FUNCTION Ajout (L : IN Liste; Valeur : Integer) RETURN Liste; --ajout une valeur dans la liste FUNCTION Position (L : IN Liste; Valeur : Integer) RETURN Integer; --calcul la position de la valeur dans la liste FUNCTION Longueur(L : Liste) RETURN Integer;--calcul la longueur de la liste PROCEDURE Affiche_Liste(L : IN Liste);--affiche la liste --corps FUNCTION Ajout(L : IN Liste; Valeur : Integer) RETURN Liste IS BEGIN RETURN NEW Couple'(Valeur, L); END Ajout; FUNCTION Position (L : IN Liste; Valeur : Integer) RETURN Integer IS Pos : Integer := 1; K : Liste := L; BEGIN WHILE (K /= null) and then (K.All.Valeur /= Valeur) LOOP Pos := Pos + 1; K := K.All.Suivant; END LOOP; RETURN Pos; END Position; FUNCTION Longueur(L : Liste) RETURN Integer IS Long : Integer := 0; K : Liste := L; BEGIN WHILE K /= NULL LOOP Long := Long +1; K := K.All.Suivant; END LOOP; RETURN Long; END Longueur; PROCEDURE Affiche_Liste(L : IN Liste) IS K : Liste := L; BEGIN WHILE K /= NULL LOOP Put ((K.All.Valeur), 3); K:= K.All.Suivant; END LOOP; END Affiche_Liste; L : Liste; G : rand.Generator; Gnb : randnb.Generator; Val : Integer; conti : character := 'o'; BEGIN Reset(G); Reset (Gnb); while (conti = 'o') loop --pour tester les random ;) FOR I IN 1 .. random (gnb) LOOP L := Ajout (L, Random (G) mod 10 + 1); END LOOP; Put_Line ("Valeur contenu dans la liste :"); Affiche_Liste (L); New_Line (2); Put ("Longueur : "); Put (Longueur (L), 1); New_Line; Put ("Saisir une valeur pour avoir sa position : "); Get (Val); --demande de la valeur a chercher Put ("Position : "); Put (Position (L, val), 1); New_Line; loop --boucle pou continuer new_line(2); put ("voulez-vous continuer a simuler ? "); get (conti); exit when (conti = 'o') or (conti = 'O') or (conti = 'n') or (conti = 'N'); end loop; end loop; END Ptr;
Valeur contenu dans la liste :
3 3 4 7 6 2 4
Longueur : 7
Saisir une valeur pour avoir sa position : 8
Position : 8 => problème il n'y a pas de 8 et de position 8
voulez-vous continuer a simuler ? o
Valeur contenu dans la liste :
7 3 8 3 2 3 5 10 3 3 4 7 6 2 4
Longueur : 15
Saisir une valeur pour avoir sa position : 12
Position : 16 => problème il n'y a pas de 12 et il n'y a que 15 valeurs pas 16
voulez-vous continuer a simuler ? o
Valeur contenu dans la liste :
4 8 9 7 3 8 3 2 3 5 10 3 3 4 7 6 2 4
Longueur : 18
Saisir une valeur pour avoir sa position : 10
Position : 11 => là je ne pense pas qu'il y est un probleme
Je suppose que le problème vient d'une condition manquante mais je ne vois pas laquelle, pouvez-vous m'aider ?
Partager