Petite aide C#

  • Partenaires

Utilisateurs qui regardent le poste (Total: 0, Members: 0, Invité: 0)

Statut
La discussion n'est pas ouverte à d'autres réponses
tamarajtm

tamarajtm

Level 3
Level 2
Level 1
22 Mai 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();

 
Dernière édition:
Evaelis

Evaelis

La Voix de la Sagesse
Level 5
Level 4
Level 3
Level 2
Ancien staff
Level 1
28 Avr. 2010
22,929
465
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
 
R

ragnarock

Level 4
Level 3
Level 2
Level 1
22 Mars 2010
193
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

tamarajtm

Level 3
Level 2
Level 1
22 Mai 2010
122
1
924
Evaelis à dit:
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 à dit:
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 ?

 
Dernière édition:
R

ragnarock

Level 4
Level 3
Level 2
Level 1
22 Mars 2010
193
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.
 
Dernière édition:
tamarajtm

tamarajtm

Level 3
Level 2
Level 1
22 Mai 2010
122
1
924
ragnarock à dit:
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 ...

 
Cyrion

Cyrion

._.
Level 5
Level 4
Level 3
Level 2
Ancien staff
Level 1
8 Juil. 2010
2,523
2
944
www.bufferoverflow.fr
Tu pourrais au moins ne pas centrer ton code , car sans indentation , c'est chiant à lire.
 
tamarajtm

tamarajtm

Level 3
Level 2
Level 1
22 Mai 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: ?​
 
Dernière édition:
R

ragnarock

Level 4
Level 3
Level 2
Level 1
22 Mars 2010
193
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.
 
Dernière édition:
Statut
La discussion n'est pas ouverte à d'autres réponses