Problème avec mon code!

Résolu
Kanerian
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013
- 17 déc. 2013 à 11:33
jordane45
Messages postés
35830
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
- 17 déc. 2013 à 16:11
Bonjour, je suis nouvelle ici et j'espère y trouver l'aide que je cherche! Pour l'école, je dois faire un travail assez laborieux à remettre demain. J'ai terminé, sauf qu'il me reste un truc qui bloque complètement!!

Je n'arrive pas à traduire l'algorithme fourni en code... Je ne comprends pas, rien ne fonctionne en ce moment.

Donc si vous pourriez m'aider un peu j'en serais très heureuse! Sans nécessairement me donner la réponse précise, de l'aide serait apprécier, un exemple peut-être? Ou des explications. ^^ Merci!

Voici ce que je dois faire en Javascript!

Fonction sousTotal (caractère materiel, réel piedCarres)
Début
Réel montant, prixavantrabais
Si materiel == bois
prixavantrabais = piedCarres * 7
Si prixavantrabais <= 10 000 alors
montant = prixavantrabais
Sinon si prixavantrabais > 10 000 et <= 15 000 alors
montant = prixavantrabais * 0.95
Sinon si prixavantrabais > 15 000 et <=20 000 alors
montant = prixavantrabais * 0.93
Sinon
montant = prixavantrabais * 0.92
Fin si

Sinon si materiel == brique
prixavantrabais = piedCarres * 9
Si prixavantrabais <= 12 000 alors
montant = prixavantrabais
Sinon si prixavantrabais > 12 000 et <= 17 000 alors
montant = prixavantrabais * 0.95
Sinon si prixavantrabais > 17 000 et <=22 000 alors
montant = prixavantrabais * 0.93
Sinon
montant = prixavantrabais * 0.92
Fin si

Sinon
prixavantrabais = piedCarres * 12
Si prixavantrabais <= 15 000 alors
montant = prixavantrabais
Sinon si prixavantrabais > 15 000 et <= 20 000 alors
montant = prixavantrabais * 0.94
Sinon si prixavantrabais > 20 000 et <=25 000 alors
montant = prixavantrabais * 0.92
Sinon
montant = prixavantrabais * 0.90
Fin si
Fin si
Retourner montant
Fin



Merci beaucoup!

7 réponses

Adrien2p
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
16 juillet 2014
9
Modifié par Adrien2p le 17/12/2013 à 12:44
Bonjour,
Voici un exemple avec le début de ton exercice :

 function sousTot(String Mat, Int PeidCarre)
{
    Double montant ,PrixAvRab;
    if (Mat == Bois)
    {
           PrixAvRab = PiedCarre * 7;
           if (PrixAvRab  <= 10000)
           {
                montant = PrixAvRab;
           }else if (PrixAvRab  > 10000 && PrixAvRab  <= 15000)
           {
                montant = PrixAvRab  * 0.95;
           }
     }
     return montat;
}


Etc...

En espérant avoir pu t'aider.

Cordialement

l'informatique, une passion, un travaille, une détente
1
Adrien2p
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
16 juillet 2014
9
Modifié par Adrien2p le 17/12/2013 à 15:23
Les deux méthodes sont très bien, et les Switch....Case sont très pratique lorsque le nombre de conditions devient important, cela permet une meilleur lecture du code et donc une meilleur maintenabilité.

Cordialement

l'informatique, une passion, un travaille, une détente
1
jordane45
Messages postés
35830
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
Modifié par jordane45 le 17/12/2013 à 15:03
Bonjour,

Plutot que d'utiliser des IF en pagaille... préfère les SWITCH CASE.

Je pense que ce code doit correspondre à tes attentes :


function sousTotal( materiel,PeidCarre){
var prixavantrabais ;
var montant;
var MontrantAvantRabais1;
var MontrantAvantRabais2;
var MontrantAvantRabais3;
var multiplicateur_piedCarres ;
var multiplicateur_montant1;
var multiplicateur_montant2;
var multiplicateur_montant3;

// Initialisation des variables en fonction du matériel...
switch (materiel) {
case "bois":
MontrantAvantRabais1=10000;
MontrantAvantRabais3=15000;
MontrantAvantRabais3=20000;
multiplicateur_piedCarres=7;
multiplicateur_montant1=0.95;
multiplicateur_montant1=0.93;
multiplicateur_montant1=0.92;
break;
case "brique ":
MontrantAvantRabais1=12000;
MontrantAvantRabais2=17000;
MontrantAvantRabais3=22000;
multiplicateur_piedCarres=9;
multiplicateur_montant1=0.95;
multiplicateur_montant1=0.93;
multiplicateur_montant1=0.92;
break;
default: // SI autre..
MontrantAvantRabais1=15000;
MontrantAvantRabais2=20000;
MontrantAvantRabais3=25000;
multiplicateur_piedCarres=12;
multiplicateur_montant1=0.94;
multiplicateur_montant1=0.92;
multiplicateur_montant1=0.90;
break;
}

// Calcul du prix :
prixavantrabais = PeidCarre * multiplicateur_piedCarres;
switch (true) {
case prixavantrabais <= MontrantAvantRabais1:
montant = prixavantrabais;
break;
case prixavantrabais <=MontrantAvantRabais2:
montant = prixavantrabais * multiplicateur_montant1;
break;
case prixavantrabais <=MontrantAvantRabais3:
montant = prixavantrabais * multiplicateur_montant2;
break;
default:
montant = prixavantrabais * multiplicateur_montant3;
break;
}

return montant;
}



Enfin... teste le quand même pour être sur que je ne sois pas passé à côté de quelque chose... (je l'ai fait vite fait donc on est pas à l'abri d'une erreur..)


Edit : Correction sur les MontrantAvantRabais (1.2.3)

Cordialement,
Jordane
0
Kanerian
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

17 déc. 2013 à 15:11
Merci beaucoup pour vos réponses!! Je penses que la réponses que Adrien ressemble plus à ce que je dois faire, mais merci beaucoup aussi Jordane!

Je vais quand même regarder tout ça et essayer ce que sa donne. :) Je veux quand même essayer de comprendre en même temps. :)
0
jordane45
Messages postés
35830
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
17 déc. 2013 à 15:15
La seule différence entre Adrien et moi c'est que lui te l'a proposé à l'aide de IF imbriqués et que moi je te l'ai fait avec des Switch.

Lorsque l'on a plusieurs tests à réaliser, il est préférable d'utiliser des switch
Je t'invite à lire ceci :
http://www.commentcamarche.net/contents/569-javascript-les-structures-conditionnelles
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kanerian
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

17 déc. 2013 à 15:20
Ah! ok! C'est bizarre qu'on nous propose de le faire en if alors s'il y à d'autre technique moins compliqué et plus idéal.
0
jordane45
Messages postés
35830
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
17 déc. 2013 à 15:22
Le IF est la base ( A CONNAITRE ABSOLUMENT).
Après.. on te montrera d'autres méthodes...

Mais en effet, si vous ne l'avez pas encore vu en cours... reste sur les IF. sinon tes profs vont s'appercevoir que le code n'est pas de toi ^^
0
Adrien2p
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
16 juillet 2014
9
17 déc. 2013 à 15:26
je suis d'accord avec JORDAN ^^ reste sur des structures en IF..., mais dans l'idéal et l'optimisation de ton code, propose à ta prof du Switch...Case en lui disant que tu as trouvé cette technique qui à l'aire meilleur ^^, elle verra que tu te seras intéressé :D
0
Kanerian
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

17 déc. 2013 à 15:26
Peut-être que je l'ai vu, mais je ne me souviens pas. Par-contre c'est pas si compliqué quand on regarde ça c'est fou! Oo Je comprends plus avec ça que avec les If. XD Par contre, le seul bout que je ne comprends pas c'est celui-ci.

MontrantAvantRabais1=12000;
MontrantAvantRabais2=17000;
MontrantAvantRabais3=22000;

C'est bien la même chose que ça ??
Si prixavantrabais <= 12 000 alors
montant = prixavantrabais
Sinon si prixavantrabais > 12 000 et <= 17 000 alors
montant = prixavantrabais * 0.95
Sinon si prixavantrabais > 17 000 et <=22 000 alors
montant = prixavantrabais * 0.93
Sinon
montant = prixavantrabais * 0.92



Et dans la méthode avec les If plus haut j'ai bloqué parce que j'ai un foutu plan de mémoire avec les string et que sa me donne une erreur dans la première ligne. loll
0
jordane45
Messages postés
35830
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
Modifié par jordane45 le 17/12/2013 à 15:51
Le premier Switch est pour Initaliser les variables en fonction du Materiel.

Par exemple, pour BRIQUE, les variables seront initalisées ainsi :
MontrantAvantRabais1=12000;
MontrantAvantRabais2=17000;
MontrantAvantRabais3=22000;
multiplicateur_piedCarres=9;
multiplicateur_montant1=0.95;
multiplicateur_montant1=0.93;
multiplicateur_montant1=0.92;

Ces variables sont ensuite utilisées dans le second SWITCH ( qui permet de vérifier où se trouve "prixavantrabais" en fonction des "MontrantAvantRabais".
Et de faire le calcul adapté.
0
Kanerian
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

17 déc. 2013 à 16:03
Merci beaucoup je comprends mieux maintenant. Là j'essaie de faire en sortes que les donnés du formulaire soit prises pour toutes mes fonctions, mais nada.
0
jordane45
Messages postés
35830
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
17 déc. 2013 à 16:06
Là j'essaie de faire en sortes que les donnés du formulaire soit prises pour toutes mes fonctions

Quel Formulaire ?
-> Par contre, il semble que c'est une nouvelle question => Donc il faut créer une nouvelle Discussion.
0
Kanerian
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

17 déc. 2013 à 16:08
ah bon? D'accord. :P Sinon je peux aller te voir en privé??
0
jordane45
Messages postés
35830
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
17 déc. 2013 à 16:11
Il vaut mieux éviter le Privé pour expliquer tes soucis.
D'autres membres du site peuvent avoir un autre regard que moi sur le dev que tu demande... (et parfois meilleur).
De plus, je ne suis pas toujours disponible. Le fait de poster sur le forum directement permet de "toucher" plus de monde.
0
Kanerian
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

17 déc. 2013 à 15:30
ah oui on a bien vu les switch.
0