Je n'arrive pas à débugguer mon programme =)
Discutez d'informatique ici !
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 17 Nov 2012, 13:22
Bah le titre est assez clair, mon programme tourne, mais il ne fait pas vraiment ce que j'aimerais qu'il fasse^^ ET je sais pas trop où se situe le problème.
Voilà le code :
- Code: Tout sélectionner
with entrees_sorties; use entrees_sorties;
procedure tab3 is
type tabInteger is array (Integer range 1..100) of Integer;
monTabInteger:tabInteger;
type tabMult3 is array (Integer range 1..100) of Integer;
monTabMult3:tabMult3;
type tabNoMult3 is array (Integer range 1..100) of Integer;
monTabNoMult3:tabNoMult3;
val,cpt,sigma:Integer;
rep:Boolean;
suite:Character;
begin
rep:=TRUE;
cpt:=0;
While (rep = TRUE) loop
put("Entrez la prochaine valeur:");
get(val);
cpt:=cpt+1;
monTabInteger(cpt):=val;new_line;
put("Voulez vous continuer à saisir des nombres (o/n)");
get(suite);
if (suite = 'n') then
rep:= FALSE;
else
rep:= TRUE;
end if;
end loop;
for k in 1..cpt loop
if (monTabInteger(k) mod 3 = 1) then
monTabMult3(k):=monTabInteger(k);
else
monTabNoMult3(k) := monTabInteger(k);
end if;
sigma:=k;
end loop;
put("Le tableau comporte");put(cpt,3);put(" nombres");put("dont");
for a in 1..sigma loop
put(monTabMult3(a),3);
end loop; put(" sont multiples de 3");new_line;
put("et");
for b in 1..sigma loop
put(monTabNoMult3(b),3);
end loop;put(" ne sont pas multiples de 3");
end tab3;
Lorsque je lexécute voici ce qu'il va me retourner par exemple:
- Code: Tout sélectionner
Entrez la prochaine valeur:5
Voulez vous continuer à saisir des nombres (o/n)o
Entrez la prochaine valeur:3
Voulez vous continuer à saisir des nombres (o/n)o
Entrez la prochaine valeur:9
Voulez vous continuer à saisir des nombres (o/n)o
Entrez la prochaine valeur:2
Voulez vous continuer à saisir des nombres (o/n)n
Le tableau comporte 4 nombres dont 150732815262081937352064 0 sont multiples de 3
et 5 3 9 2 ne sont pas multiples de 3
Le but du programme étant de sortir à partir d'un tableau, deux tableaux, un contenant les multiples de 3 du premier tableau, et le second contenant tous les non multiples de 3
EDIT: j'ai repéré une erreur de logique sur la ligne ou je regarde le modulo, je devrais avoir mis mod 3 = 0.
Mais le programme ne se comporte toujours pas de la manière voulu...
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 17 Nov 2012, 15:09
Avec la correction effectuée, voilà le résultat obtenus
- Code: Tout sélectionner
Entrez la prochaine valeur:-3
Voulez vous continuer à saisir des nombres (o/n)o
Entrez la prochaine valeur:4
Voulez vous continuer à saisir des nombres (o/n)o
Entrez la prochaine valeur:-6
Voulez vous continuer à saisir des nombres (o/n)o
Entrez la prochaine valeur:9
Voulez vous continuer à saisir des nombres (o/n)n
Le tableau comporte 4 nombres dont -339406016 -6 9 sont multiples de 3
et 30 4 2938271484 ne sont pas multiples de 3
Vraisemblablement, certaines valeur retournés doivent être l'adresse où la variable a été stocké, mais je vois pas du tout pourquoi j'obtiens un tel résultat.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 13:00
-
par fatal_error » 17 Nov 2012, 17:13
c'est quoi sigma?
la vie est une fête
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 17 Nov 2012, 17:18
fatal_error a écrit:c'est quoi sigma?
C'est une variable que j'ai créer par défaut pour lui donner la valeur de k. Autrement, j'avais un soucis au niveau de la boucle for qui ne veut pas que je réutilise la valeur de k.
Avec for je n'ai pas besoin de déclarer k, or j'ai besoin d'effectuer une opération avec k plus loin dans le programme, et à cet endroit là qui nest pas dans la boucle, k est considéré comme n'étant pas déclaré. J'ai donc tenter de le déclarer, mais à ce moment là, j'ai un autre problème du fait que je le déclare deux fois une fois avant le begin de départ et l'autre fois pour la boucle for...Avec un while j'aurais pas eu ces soucis, mais je le force à utiliser une boucle for pour ce TP.
Bref dans tous les cas sigma = k tout simplement, le nom est peut être pas très bien choisi je l'accorde
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 13:00
-
par fatal_error » 17 Nov 2012, 17:28
Bref dans tous les cas sigma = k tout simplement
Quel est le role de la variable sigma alors.
Au passage, tu noteras que c'est un nommage pourri.
la vie est une fête
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 17 Nov 2012, 17:35
fatal_error a écrit:Quel est le role de la variable sigma alors.
Au passage, tu noteras que c'est un nommage pourri.
J'admet le nom est pourri !
Regarde ce passage de code, première boucle for, je dis pour k allant de 1 à cpt, comme c'est une boucle for je ne dois pas déclarer k avant.
Seconde boucle j'aurais besoin de dire pour a allant de 1 à k. Sauf que ici si je fais ça on me dit que k n'a pas été déclaré...et si je le déclare c'est pour la première boucle que ça coince.
D'où le fait d'affecter la valeur k à une autre variable ici sigma, désolé j'étais en manque total d'inspiration et mettre x comme nom de variable c'était bof, en ayant mis sigma je comprebais un peu l'idée, mais bon apparemment, je changerai le nom --'
- Code: Tout sélectionner
for k in 1..cpt loop
if (monTabInteger(k) mod 3 = 1) then
monTabMult3(k):=monTabInteger(k);
else
monTabNoMult3(k) := monTabInteger(k);
end if;
sigma:=k;
end loop;
put("Le tableau comporte");put(cpt,3);put(" nombres");put("dont");
for a in 1..sigma loop
put(monTabMult3(a),3);
end loop;
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 13:00
-
par fatal_error » 17 Nov 2012, 17:40
Seconde boucle j'aurais besoin de dire pour a allant de 1 à k. Sauf que ici si je fais ça on me dit que k n'a pas été déclaré
je t'invite a afficher la valeur de sigma pour ta seconde boucle
la vie est une fête
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 17 Nov 2012, 17:52
fatal_error a écrit:je t'invite a afficher la valeur de sigma pour ta seconde boucle
Fait, et après test
- Code: Tout sélectionner
Entrez la prochaine valeur:6
Voulez vous continuer à saisir des nombres (o/n)o
Entrez la prochaine valeur:5
Voulez vous continuer à saisir des nombres (o/n)n
Le tableau comporte 2 nombres dontsigma= 2
6sigma= 2
2050496 sont multiples de 3
et 30 5 ne sont pas multiples de 3
Peut être parce que j'affecte la valeur de k à sigma dans la boucle et qu'en sortant de la boucle comme il ne connait plus k, il ne peut plus connaitre sigma ? Mais je trouves quand même ça un peu bizarre.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 13:00
-
par fatal_error » 17 Nov 2012, 17:58
pour i=1 a 10
compteur=i
finpour
afficher compteur
Que vaut compteur?
la vie est une fête
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 17 Nov 2012, 18:04
J'ai trouvé ce qui bloquait rien à voir avec sigma en soit en fait.
SI je commence par rentrer la valeur 6 monTabMult3(sigma) = k=1 := 6
SI je rentre ensuite 5 monTabNoMult3(sigma) = 2 := 5
Donc quand je boucle cest normal que je me retrouve avec une valeur incompréhensible je boucle pour a allant de 1 à sigma = 2 dans ce cas là.
Il va donc m'afficher monTabMult3(sigma) pour sigma = 1 et 2. Or, pour sigma = 2 j'affecte dans un tableau différent, c'est donc normal que la première valeur retourne n'importe quoi vu qu'elle n'a pas été affecté !
Bon me reste plus qu'à essayer de contourner le problème.
Une chose que je vais retenir maintenant, si je plante quelque part ne pas hésiter à tracer mes valeurs !
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
Benjamin
- Membre Complexe
- Messages: 2337
- Enregistré le: 14 Avr 2008, 11:00
-
par Benjamin » 17 Nov 2012, 20:57
Salut,
fatal_error a mis le doigt sur quelque chose que tu n'as pas l'air de réaliser. Tu ne vois pas pourquoi k n'existe plus après ton premier for ?
Il y a une grosse différence entre
- Code: Tout sélectionner
pour k allant de 1 à n
.....
fin pour
pour a allant de 1 à k
........
fin pour
(qui bug naturellement)
et
- Code: Tout sélectionner
pour k allant de 1 à n
.....
pour a allant de 1 à k
........
fin pour
fin pour
Je ne sais pas ce que tu cherches à faire exactement mais je te laisse identifier dans lequel des 2 cas que j'ai montré se trouve ton code actuellement et du coup pourquoi on ne connait plus k.
Sinon, je n'ai pas réussi à identifier le langage que tu utilisais, mais ce dont tu as besoin ici, c'est une commande qui te donne le nombre d'éléments du tableaux. Si ça existe pas, tu étais sur la bonne voie avec ton sigma mais faut le faire évoluer un peu
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 17 Nov 2012, 21:13
Tu ne vois pas pourquoi k n'existe plus après ton premier for ?
Si Benjamin, j'ai bien compris où étais le problème désormais, j'ai rectifié le programme et il marche correctement.
Hum, en plus d'être un as en physique t'es aussi calé en info ?
Encore merci pour la remarque sur le compteur cest ça qui m'a bel et bien fait identifier le problème.
EDIT: C'est le langage ADA.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
Benjamin
- Membre Complexe
- Messages: 2337
- Enregistré le: 14 Avr 2008, 11:00
-
par Benjamin » 17 Nov 2012, 21:31
Alors déjà, je suis pas un as en physique, et en info, je suis pas calé.
Typiquement, j'y connais rien en ADA tu vois ;)
Ok si le programme fonctionne désormais.
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 17 Nov 2012, 21:34
Oui il fonctionne.
ADA ou un autre langage ça revient au même, ADA est simplement plus logique à apprendre en tant que premier langage.
T'es ptêtre pas un as en physique et info mais tu m'as bien aidé pour mon tp quand même, c'est bien d'être modeste, mais faut savoir accepter les compliments :)
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
Benjamin
- Membre Complexe
- Messages: 2337
- Enregistré le: 14 Avr 2008, 11:00
-
par Benjamin » 17 Nov 2012, 21:55
Je voulais apporter un peu d'objectivité, mais je les accepte ;)
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 25 invités