Je n'arrive pas à débugguer mon programme =)

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

Je n'arrive pas à débugguer mon programme =)

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 l’exé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 !



Avatar de l’utilisateur
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 !

Avatar de l’utilisateur
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 :)

Avatar de l’utilisateur
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 n’est 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 !

Avatar de l’utilisateur
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 :)

Avatar de l’utilisateur
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 !

Avatar de l’utilisateur
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 :)

Avatar de l’utilisateur
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 !

Avatar de l’utilisateur
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 :)

Avatar de l’utilisateur
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 c’est 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 ;)

Avatar de l’utilisateur
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 c’est ç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.

Avatar de l’utilisateur
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 ;)

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 25 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite