Boucles while et for

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Boucles while et for

Messagepar maurice » Mardi 29 Mars 2011, 20:24

Bonsoir, les deux codes suivants sont censés donner le même résultat. Je préfèrerais la version avec while, mais je en sais pas ou est le problème !
Pourrez vous m'éclairer ?

Version avec for :

164332dbae92d122186e04484c4a1423.png

Code: Tout sélectionner
unitsize(0.5cm);

string alph="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

int[] clef_chiffree(string clef, string alphabet=alph) {
int[] ent;
int r=-1;
for (int j=0; j<length(clef); ++j) {
for (int k=0; k<length(alphabet); ++k) {
if (substr(clef, j, 1)==substr(alphabet, k, 1))
{r=k;}

}
ent[j]=r;
}
return ent;
}

string clef="MATH";
int[] a=clef_chiffree(clef);
for (int k=0; k<4; ++k) label(format("%i",a[k]), (k,-k));


Version avec while :

5304258ff3eaa88e2dc843e1df37ebc0.png

Code: Tout sélectionner
unitsize(0.5cm);

string alph="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

int[] clef_chiffree(string clef, string alphabet=alph) {
int[] ent;
int r=-1;
for (int j=0; j<length(clef); ++j) {
int k=0;
do {
if (substr(clef, j, 1)==substr(alphabet, k, 1))
{r=k;}
else {k=k+1;}
}
while (r==-1);
ent[j]=r;
}
return ent;
}

string clef="MATH";
int[] a=clef_chiffree(clef);
for (int k=0; k<4; ++k) label(format("%i",a[k]), (k,-k));



C'est sans doute une erreur de débutant programmeur mais bon !
Merci

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Méga-utilisateur
 
Messages: 399
Inscription: Jeudi 25 Mars 2010, 13:49
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Boucles while et for

Messagepar OG » Mardi 29 Mars 2011, 20:32

1fa57b365925f17e513d2ee34dac4730.png

Code: Tout sélectionner
unitsize(0.5cm);

string alph="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

int[] clef_chiffree(string clef, string alphabet=alph) {
int[] ent;
int r=-1;
for (int j=0; j<length(clef); ++j) {
int k=0;
r=-1;
do {
if (substr(clef, j, 1)==substr(alphabet, k, 1))
{r=k;}
else {k=k+1;}
}
while (r==-1);
ent[j]=r;
}
return ent;
}

string clef="LEGOUVERNEMENTMENT";
int[] a=clef_chiffree(clef);
for (int k=0; k<a.length; ++k) label(format("%i",a[k]), (k,-k));



O.G.
OG
Modérateur
 
Messages: 2278
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Boucles while et for

Messagepar Tunaki » Mardi 29 Mars 2011, 20:36

Bonjour,

Je ne connais pas Asymptote mais je passais par là donc j'en profite pour te répondre. Le problème vient de ta condition pour rester dans le while. Après le premier tour de ta boucle sur $j$, tu as forcément $r\ne -1$ et donc tu ne peux plus entrer dans ta boucle "while" (tout du moins, une seule fois puisque tu utilises do...while, mais tu ne boucleras pas).
Tu devrais plutôt faire
Code: Tout sélectionner
do{k++;}while(!substr(clef, j, 1)==substr(alphabet, k, 1));
ent[j]=k;

Comme ça, en plus, tu n'as plus besoin de variable temporaire $r$.
Tunaki
Giga-utilisateur
 
Messages: 660
Inscription: Mardi 12 Décembre 2006, 18:03
Statut actuel: Post-bac | Ecole d'ingénieur

Re: Boucles while et for

Messagepar maurice » Mardi 29 Mars 2011, 21:24

Tunaki a écrit: Le problème vient de ta condition pour rester dans le while. Après le premier tour de ta boucle sur $j$, tu as forcément $r\ne -1$ et donc tu ne peux plus entrer dans ta boucle "while" (tout du moins, une seule fois puisque tu utilises do...while, mais tu ne boucleras pas).


Bon sang !!! Mais c'est bien sur !!!

Tunaki a écrit:Tu devrais plutôt faire
Code: Tout sélectionner
do{k++;}while(!substr(clef, j, 1)==substr(alphabet, k, 1));
ent[j]=k;

Comme ça, en plus, tu n'as plus besoin de variable temporaire $r$.

Merci beaucoup à Tunaki pour son explication et à OG pour avoir exhibé l'erreur de mon code !!!

On ne s'improvise pas programmeur !

maurice
Dernière édition par maurice le Mardi 29 Mars 2011, 21:25, édité 1 fois.
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Méga-utilisateur
 
Messages: 399
Inscription: Jeudi 25 Mars 2010, 13:49
Statut actuel: Actif et salarié | Enseignant

Re: Boucles while et for

Messagepar GMaths » Mardi 29 Mars 2011, 21:25

Il me semble que ceci est .... ..... (il suffit de décoder pour le savoir :-))

21f876f127133efcff72144e712f86b5.png

Code: Tout sélectionner
unitsize(0.5cm);
string alph="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string clef="PLUSCOURT";
for(int j=0; j<length(clef); ++j) {
label(format("%i",find(alph,substr(clef,j,1),pos=1)),(j,-j));
}
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Boucles while et for

Messagepar maurice » Mardi 29 Mars 2011, 21:30

GMaths a écrit:Il me semble que ceci est .... ..... (il suffit de décoder pour le savoir :-))


Oui, mais je veux pouvoir réutiliser cette liste plus tard d'où le int[]. Je n'avais pas pensé à utiliser find, c'est à creuser ....

Merci

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Méga-utilisateur
 
Messages: 399
Inscription: Jeudi 25 Mars 2010, 13:49
Statut actuel: Actif et salarié | Enseignant

Re: Boucles while et for

Messagepar GMaths » Mardi 29 Mars 2011, 21:44

maurice a écrit:Oui, mais je veux pouvoir réutiliser cette liste plus tard d'où le int[]. Je n'avais pas pensé à utiliser find, c'est à creuser ....

Il suffit de demander :

d15d4ddd844fe75afde53501e322c3e9.png

Code: Tout sélectionner
unitsize(0.5cm);
string alph="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string clef="PLUSCOURT";
int[] a;
for(int j=0; j<length(clef); ++j) {
a.push(find(alph,substr(clef,j,1),pos=1));
label(format("%i",a[j]),(j,-j));
}
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Boucles while et for

Messagepar maurice » Mardi 29 Mars 2011, 21:47

Bonsoir et merci !

Efficacité, sobriété !!!
Je crois que ca m'être utile !
encore merci

Maurice
Asymptote :
----> Démarrage rapide : http://cgmaths.fr/Atelier/Asymptote/Asymptote.html
----> Documentation 3D : http://www.mathco.tuxfamily.org et si ça ne marche pas, essayez la version pdf
maurice
Méga-utilisateur
 
Messages: 399
Inscription: Jeudi 25 Mars 2010, 13:49
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité