Petite aide C#

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Status
Not open for further replies.

tamarajtm

Membre actif
May 22, 2010
122
1
924
Bonjour,

Je débute à la programmation en C#, j'essaie actuellement de faire une méthode qui fais une liste de multiple de deux chiffres (par exemple 3 et 5) entre 1 et 100.

Ensuite il calcule les même multiples des deux chiffres et renvoie le résultat.

C'est en faite un tp donnée dans le siteduzero pour la programmation C# pour débutant, c'est le tp : Calcules en Boucle.

Je ne voudrais pas regardé la correction sachant quel ne m'aiderais pas a me creusé la mémoire et travailler moi même.

Se que je vous demande c'est de m'expliquer juste ou est l'erreur et non pas de me faire une correction, voici le code :

static int CalculMultiple(int f, int g) /* f et g sont les multiples
choisie ( dans notre exemple
c'est 3 et 5 )*/
{
int i = 0;
int e = 0;
int resultat = 0;

while (i <= 100 && e <= 100)
{
i += f;
e += g;

if (i == e) /* C'est possible dans un while de mettre
juste un if ?*/
{
resultat = i + e; /* On calcule i et e si on voit que i
== e. */
}
}

return resultat; // On retourne le resultat.


Voila, le problème c'est que après avoir essayé la méthode je me retrouve avec comme résultat : 0 (testé avec les chiffres 3 et 5).

D’ailleurs, je ne sais pas si c'est possible de mettre un if dans un while le problème viens surement d'ici ?

Merci d'avance a se qui m'aiderons !

Edite :

Voici se que j'ai mis dans le main :

int Multiple = CalculMultiple(3,5);
Console.WriteLine(Multiple);
Console.Read();

 
Last edited:

Evaelis

La Voix de la Sagesse
V
Ancien staff
Apr 28, 2010
22,949
468
1,699
Valhalla
ton e doit changer en ex ou autre, il peut y avoir un blocage au niveau du e as exception du coup
Sinon le code marche, seulement je ne vois pas en quoi ça calcul les multiples puisque ça retourne un string et non un array
 

ragnarock

Membre actif
Mar 22, 2010
194
0
917
Le problème qu'il y a c'est que i n'est jamais égal à e. Tu peux très bien mettre un if (ou autre) dans une boucle while. Mais là ça retourne 0 car résultat n'est jamais assigné sauf au début quand tu le mets à 0.
 

tamarajtm

Membre actif
May 22, 2010
122
1
924
Evaelis said:
ton e doit changer en ex ou autre, il peut y avoir un blocage au niveau du e as exception du coup
Sinon le code marche, seulement je ne vois pas en quoi ça calcul les multiples puisque ça retourne un string et non un array
.

Normalement la méthode retourne pas un string, resultat = int donc un entier. Par contre array c'est quoi ? :O

ragnarock said:
Le problème qu'il y a c'est que i n'est jamais égal à e. Tu peux très bien mettre un if (ou autre) dans une boucle while. Mais là ça retourne 0 car résultat n'est jamais assigné sauf au début quand tu le mets à 0.
.

Si si, un moment ou l'autre i devrait être égale à e, comme par exemple 15 qui est dans les multiples de 3 et 5 mais peut être que le problème viens de mon code ?

Moi je voulais que le if vérifie si i == e et que si c'est le cas il calcule donc par exemple arrivé a 15 sa calcule.


Edit :

Je viens de comprendre ou est le problème, par exemple avec 15 qui est un multiple de 5 et 3, le problème est que pour les multiples de 3 on fait 3,6,9,12,15, donc on fait la boucle 4 fois mais avec 5 ou fait 5,10,15, donc moins, il faudrait que sa le face au même moment mais se n'est pas le cas.

Que faudrait-il faire pour régler cette erreur ?

 
Last edited:

ragnarock

Membre actif
Mar 22, 2010
194
0
917
Nope, car dans ta boucle tu les fait avancer les 2 à la fois :

au premier passage dans la boucle : i = 3, e = 5;
2ème : i = 6, e = 10;
3ème : i = 9, e = 15;
4ème : i = 12, e = 20;
5ème : i = 15, e = 25;


Tu comprends pourquoi i ne vaudra jamais e ^^



(J't'ai quand même mis une solution (juste du texte, pas de code), si tu veux pas y regarder, appuies pas sur le spoiler =D)
Ce que tu peux faire, c'est stocker les multiple des 2 nombres dans 2 listes et ensuite tu compare les 2 listes pour trouver les multiples.
 
Last edited:

tamarajtm

Membre actif
May 22, 2010
122
1
924
ragnarock said:
Nope, car dans ta boucle tu les fait avancer les 2 à la fois :

au premier passage dans la boucle : i = 3, e = 5;
2ème : i = 6, e = 10;
3ème : i = 9, e = 15;
4ème : i = 12, e = 20;
5ème : i = 15, e = 25;


Tu comprends pourquoi i ne vaudra jamais e ^^



(J't'ai quand même mis une solution (juste du texte, pas de code), si tu veux pas y regarder, appuies pas sur le spoiler =D)

Le problème c'est que je sais pas comment faire pour faire une liste avec des multiples de n'importe quel chiffre entre 1 et 100.
Tout se que je peux faire moi pour l'instant c'est le faire moi même avec seulement certains chiffres et sa serais bien trop long ...

 

tamarajtm

Membre actif
May 22, 2010
122
1
924
Pardon j'ai pas fais attention au code :S ...

Edit :

J'ai réussis a faire la liste après avoir relu mes leçons. J'essaie quelques trucs encore voir si tout est bon pour la méthode, je vous mettras au courant si tout est bon !​

---------- Message ajouté à 21h05 ---------- Le message précédent était à 20h59 ----------

Bon voila maintenant j'ai un autre problème, j'ai vérifier la correction qui était beaucoup plus simple que sur quoi j'étais entrain de faire, voici la correction :​

static int CalculSommeIntersection()
{
List<int> multiplesDe3 = new List<int>();
List<int> multiplesDe5 = new List<int>();

for (int i = 3; i <= 100; i += 3)
{
multiplesDe3.Add(i);
}
for (int i = 5; i <= 100; i += 5)
{
multiplesDe5.Add(i);
}

int somme = 0;
foreach (int m3 in multiplesDe3)
{
foreach (int m5 in multiplesDe5)
{
if (m3 == m5)
somme += m3;
}
}
return somme;
}

Je l'ai testé elle fonctionne parfaitement, le problème c'est que ce n'est que avec les multiples de 3 et 5.

Or moi je veux avec des multiples que je choisirais, sinon la méthode ne sert pas a grand chose.

Pour cela, j'ai fais ceci :​

static int CalculMultiple(int f, int g)
{

int i = 0;
int j = 0;
int resultat = 0;


while(i < 100 && j < 100)
{
i += f;
List<int> MultipleF = new List<int>();
MultipleF.Add(i);
j += g;
List<int> MultipleG = new List<int>();
MultipleG.Add(j);

foreach (int m3 in MultipleF)
{
foreach (int m5 in MultipleG)
{
if (m3 == m5)
resultat += m3;
}
}


}


return resultat;


Maintenant le problème c'est que sa retourne 0 comme résultat à chaque fois. Pourtant j'ai pas grand chose qui change juste le début pour pouvoir mettre des chiffres au hasard.

D'ou viens le problème :svp: ?​
 
Last edited:

ragnarock

Membre actif
Mar 22, 2010
194
0
917
ça devient un peu "trop" je trouve toutes ces boucles pour juste ça..

Tu peux prendre leur solution et remplacer les 3 & 5 par des variables :
static int CalculSommeIntersection(int f, int g)
{
List<int> multiples1 = new List<int>();
List<int> multiples2 = new List<int>();

for (int i = f; i <= 100; i += f)
{
multiples1.Add(i);
}
for (int i = g; i <= 100; i += g)
{
multiples2.Add(i);
}

int somme = 0;
foreach (int m1 in multiples1)
{
foreach (int m2 in multiples2)
{
if (m1 == m2)
somme += m1;
}
}
return somme;
}




Une des erreur qu'il y a dans ton code c'est qu'à chaque fois tu recrée les listes, donc elles se vident à chaque fois. Faut les déclarer avant le While et pas dedans. Et aussi sortir les 2 foreach du while, qui vont après normalement.
 
Last edited:
Status
Not open for further replies.