Problème avec mon code! [Résolu]

Signaler
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013
-
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
-
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

Messages postés
53
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
16 juillet 2014
9
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
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
16 juillet 2014
9
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
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
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
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

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. :)
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
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
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

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.
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
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 ^^
Messages postés
53
Date d'inscription
jeudi 14 février 2013
Statut
Membre
Dernière intervention
16 juillet 2014
9
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
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

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
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
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é.
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

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.
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
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.
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

ah bon? D'accord. :P Sinon je peux aller te voir en privé??
Messages postés
32986
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2021
351
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.
Messages postés
13
Date d'inscription
mardi 17 décembre 2013
Statut
Membre
Dernière intervention
18 décembre 2013

ah oui on a bien vu les switch.