Pages :
Bonjour
je débute en programmation et algorithme

Je voudrais savoir si vous voyez une erreur dans mon programme :

ma solution :

VAR
    nombre entier, département

DEBUT
    Afficher "Saisir un numero de 2 chiffres qui doit petre compris entre 1 et 99"
    Saisir nombre 2 chiffres
    
    Afficher "Entrer votre département"
    Saisir dept
    Selon dept
    Si (49)
        Afficher "Vous habitez en Maine et Loire"
    Si (85)    
        Afficher "Vous habitez en Vendée"
    Si (44)
        Afficher "Vous habitez en Loire Atlantique"
    Si (53)
        Afficher "Vous habitez en Mayenne"
    Si (73)
        Afficher "Vous habitez en Sarthe"
        
    Sinon
    
    Afficher "Vous n'habitez pas dans les Pays de la Loire"
    
    Fin selon
    
FIN


Merci de votre aide
Modifié par moon28 (12 Dec 2017 - 22:04)
salut peu importe pour le moment on me demande juste d'écrire le pseudo code.
Voila je voulais savoir si personne ne voit une erreur..

merci
Bon, je ne savais pas comment te l'écrire en "français" alors je te l'ai écrit en PHP.
Il manquait dans ton code cette partie là :
a écrit :
tant que la saisie ne correspond pas à ce qui est attendu (par exemple: si on saisit un numéro de 3 chiffres ou alors une chaine de caractères telle que "vingt trois" ou autres...), redemandez la saisie (étape précédente)


<?php

//Affichage du formulaire
echo '
<form action="departement.php" method="get" id="formDepartement">
  <fieldset>
    <label for="departement">Veuillez saisir un numéro de département :</label>
    <input type="number" id="departement" name="departement" /><br/>
    <input type="submit" value="Envoyer" />
  </fieldset>
</form>';

//Si le formulaire a été envoyé, on enregistre la valeur de departement dans la variable $dpt, sinon $dpt est vide (null)
if(isset($_GET['departement']))
  $dpt = $_GET['departement'];
else
  $dpt = null;

$error = false;

//Si le département n'est pas de type numérique, ou dépasse les 2 caractères, ou est inférieur ou égal à 0 => il y a erreur
if(!is_numeric($dpt) || strlen($dpt) > 2 || $dpt <= 0)
  $error = true;

//Si le département n'est pas défini, arrêt du script
if($dpt == null){
  exit;
//S'il y a une erreur, définition du message d'erreur
}elseif($error){
  $msg = 'Numéro de département incorrect';
//Sinon le script continu et défini un message selon le département renseigné
}else{
  switch($dpt){
    case 49:
      $msg = 'Vous habitez en Maine et Loire';
      break;
    case 85:
      $msg = 'Vous habitez en Vendée';
      break;
    case 44:
      $msg = 'Vous habitez en Loire Atlantique';
      break;
    case 53:
      $msg = 'Vous habitez en Mayenne';
      break;
    case 73:
      $msg = 'Vous habitez en Sarthe';
      break;
    default:
      $msg = "Vous n'habitez pas dans les Pays de la Loire";
      break;
  }
}

//Affichage du message
echo '<output form="formDepartement">'. $msg . '</ouput>';

?>

Modifié par taspeur (10 Dec 2017 - 16:16)
moon28 a écrit :
Bonjour
je débute en programmation et algorithme
Je voudrais savoir si vous voyez une erreur dans mon programme :
Voici l'énoncé :
saisir un n° de 2 chiffres qui doit être compris entre 1 et 99
tant que la saisie ne correspond pas à ce qui est attendu (par exemple: si on saisit un numéro de 3 chiffres ou alors une chaine de caractères telle que "vingt trois" ou autres...), redemandez la saisie (étape précédente)
si le n° saisi est 49, affichez "vous habitez en Maine et Loire"
si le n° saisi est 85, affichez "vous habitez en Vendée"
si le n° saisi est 44, affichez "vous habitez en Loire Atlantique"
si le n° saisi est 53, affichez "vous habitez en Mayenne"
si le n° saisi est 73, affichez "vous habitez en Sarthe"
pour les autres nombres, affichez "vous n'habitez pas dans les Pays de Loire"

ma solution :

VAR
    nombre entier, département

DEBUT
    Afficher "Saisir un numero de 2 chiffres qui doit petre compris entre 1 et 99"
    Saisir nombre 2 chiffres
    
    Afficher "Entrer votre département"
    Saisir dept
    Selon dept
    Si (49)
        Afficher "Vous habitez en Maine et Loire"
    Si (85)    
        Afficher "Vous habitez en Vendée"
    Si (44)
        Afficher "Vous habitez en Loire Atlantique"
    Si (53)
        Afficher "Vous habitez en Mayenne"
    Si (73)
        Afficher "Vous habitez en Sarthe"
        
    Sinon
    
    Afficher "Vous n'habitez pas dans les Pays de la Loire"
    
    Fin selon
    
FIN


Merci de votre aide

Une table de hachage devrait suffire...
En PHP :
$dpt = '--';

$map = array(49 => 'Vous habitez en Maine et Loire',
	  85 => 'Vous habitez en Vendée',
	 44 => 'Vous habitez en Loire Atlantique',
	 53 => 'Vous habitez en Mayenne',
	 73 => 'Vous habitez en Sarthe');

$msg = is_numeric($dpt) ? array_key_exists($dpt,$map) ? $map[$dpt] : null : null;

echo '<output form="formDepartement">'. ($msg == null ? "Vous n'habitez pas dans les Pays de la Loire" : $msg) . '</ouput>';

Testé OK sur PHP Tester.
PHP n'est pas mon langage habituel Smiley smile , mais en pseudo langage cela donnerait :
Récupérer variable
Initialisation table clés / valeurs
Récupérer valeur en testant présence clé si numérique
Si valeur présente
    Afficher message
Sinon
    Afficher message par défaut

Bien entendu, il faut remplacer la valeur de $dpt par celle de son choix pour tester les différents cas de figure... et compléter le pseudo code pour relancer la saisie si incorrecte.
Modifié par sepecat (10 Dec 2017 - 16:54)
taspeur a écrit :
Oui, c'est mieux le array que le switch, en effet Smiley cligne

Disons que c'est différent...
De fait, il n'y a pas la plupart du temps la bonne solution et la mauvaise.
Le recours à la Map requiert le test sur le type de valeur / présence ou non dans la table.
L'utilisation du test ternaire n'est par contre pas forcément la plus lisible et certains programmeurs en ont une sainte horreur. Personnellement je l'utilise aujourd'hui à tour de bras en Java... après l'avoir rejetée au tout début.
Le tout est de se sentir à l'aise avec un code et le switch peut très bien faire l'affaire, au prix d'une structure un peu plus longue et d'un risque d'erreur assez classique (que j'exècre également en Java)... l'oubli d'un break en cours de route.
Bref, à chacun de trouver sinon sa voie du moins la tournure qui lui sied le mieux (qu'en termes galants ces choses là sont dites Smiley smile ).
salut

je vous remercie tous les2

oh lala je ne me suis pas rendue compte que j'ai oublié une partie, c'est une erreur de ne pas respecter l’énoncé .

j'ai réécris avec vos remarques et la partie qui manque. je n'ai pas encore commencer à étudier PHP..

VAR
    nombre entier, département

DEBUT
    Afficher "Saisir un numero de 2 chiffres qui doit etre compris entre 1 et 99"
    Saisir nombre 2 chiffres
    
    Tant que la saisie du département n'est pas de type numérique, ou dépasse les 2 caractères, ou est inférieur ou égal à 0
    Afficher " Saisie erronée : recommencer.  "
    Fin tant que
    
    Afficher « Entrer votre département» 
    Saisir département 
    
    selon département 
      Si (49)
          Afficher "Vous habitez en Maine et Loire"
      Si (85)    
          Afficher "Vous habitez en Vendée"
      Si (44)
          Afficher "Vous habitez en Loire Atlantique"
      Si (53)
          Afficher "Vous habitez en Mayenne"
      Si (73)
          Afficher "Vous habitez en Sarthe"   
      Sinon
          Afficher "Vous n'habitez pas dans les Pays de la Loire"
   Fin selon
   
    
FIN

 


voila est ce que c'est mieux?

merci
Modifié par moon28 (11 Dec 2017 - 01:46)
Salut en dehors de tout langage ton dernier algo est tout a fait correct...

ensuite pour tous le reste ça dépendra du langage Smiley cligne
pchlj a écrit :
Salut en dehors de tout langage ton dernier algo est tout a fait correct...

ensuite pour tous le reste ça dépendra du langage Smiley cligne


ok merci beaucoup Smiley cligne
Dans ton pseudo code,

n'ecrit pas les SI à la suite comme ceci :

SI
SI
SI
SI

car il est préférable d'écrire des SI SINON SI
SI 
SINON SI
SINON SI
SINON SI
etc..


Cela est de l'optimisation, car avec les SI SI SI à la suite tous les SI vont être "tester" par l'intérpreteur ou le navigateur, ou l'IDE.. Alors que si tu met des SI SINON SI SINON SI etc... le code ne tester pas les autres si il rentre dans une des conditions.
Tout a fait d'accord avec jencal, j'avoue que moi je l'avais lu comme ça par habitude mais pour ton prof ça va avoir de l'importance Smiley smile
JENCAL a écrit :
Dans ton pseudo code,

n'ecrit pas les SI à la suite comme ceci :

SI
SI
SI
SI

car il est préférable d'écrire des SI SINON SI
SI 
SINON SI
SINON SI
SINON SI
etc..


Cela est de l'optimisation, car avec les SI SI SI à la suite tous les SI vont être "tester" par l'intérpreteur ou le navigateur, ou l'IDE.. Alors que si tu met des SI SINON SI SINON SI etc... le code ne tester pas les autres si il rentre dans une des conditions.


ok jencal, j'ai rectifié selon t remarques ca me donne ca :


VAR
    nombre entier, département

DEBUT
    Afficher "Saisir un numero de 2 chiffres qui doit etre compris entre 1 et 99"
    Saisir nombre 2 chiffres
    
    Tant que la saisie du département n'est pas de type numérique, ou dépasse les 2 caractères, ou est inférieur ou égal à 0 => il y a erreur faire
    Afficher " Saisie erronée : recommencer.  "
    Fin tant que
    
    Afficher « Entrer votre département» 
    Saisir département 
    
    selon département 
      Si (49)
          Afficher "Vous habitez en Maine et Loire"
      Sinon si (85)    
          Afficher "Vous habitez en Vendée"
      Sinon si (44)
          Afficher "Vous habitez en Loire Atlantique"
      Sinon si (53)
          Afficher "Vous habitez en Mayenne"
      Sinon si (73)
          Afficher "Vous habitez en Sarthe"   
      Sinon
          Afficher "Vous n'habitez pas dans les Pays de la Loire"
   Fin selon
   Fin si
   
    
FIN


je crois que c bon?
C'est pour quel SI le Fin si après le Fin selon ?
Il te manque un SI RESULTAT DE TANT QUE OK Smiley smile et la le FIN SI prendra son sens
j'ai corrigé de nouveau, jai l'impression de me repeter... jai mis 2 fois tant que je ne sais pas si c'est correct. car si on dépasse 2 caractere ca fait il manque quelque chose ? voila pourquoi j'ai ajouté un tant que...



VAR
    nombre entier, département

DEBUT
    Afficher "Saisir un numero de 2 chiffres qui doit etre compris entre 1 et 99"
    Saisir nombre 2 chiffres
    
    Tant que la saisie du département n'est pas de type numérique,  ou est inférieur ou égal à 0 => il y a erreur faire
    Afficher " Saisie erronée : recommencer.  "
    Tant que la saisie dépasse 2 caractères si on saisit un numéro de 3 chiffres ou alors une chaine de caractères telle que "vingt trois" ou autres faire
    Afficher " Saisie erronée : recommencer.  "
    Fin tant que
    
    Afficher « Entrer votre département» 
    Saisir département 
    
    selon département 
      Si (49)
          Afficher "Vous habitez en Maine et Loire"
      Sinon si (85)    
          Afficher "Vous habitez en Vendée"
      Sinon si (44)
          Afficher "Vous habitez en Loire Atlantique"
      Sinon si (53)
          Afficher "Vous habitez en Mayenne"
      Sinon si (73)
          Afficher "Vous habitez en Sarthe"   
      Sinon
          Afficher "Vous n'habitez pas dans les Pays de la Loire"
   Fin selon
   Fin si
   Fin si
   Fin si
   Fin si
   Fin si
   
FIN


merci pour votre aide
Salut du jour Smiley cligne

Non non non trop de fin SI
en fait ma question était plutôt même de savoir pourquoi tu en avais déjà un ....

Ton algo est simple

je te le fais rapide pour que tu comprennes après tu détailles


var dep = entrée département
si var > 2 OR not numerique OR < 2
alors afficher "erreur"
sinon
 Si var = 49
  alors afficher "maine et loire"
 Sinon si var = 72
  alors afficher "sarthe"
 etc...
 Sinon afficher "pas pays de la loire"
 fin si
fin si


voilà tout simple
Meilleure solution
saluut

pchlj je te remercie, je patauge un peu avec les fin si, mais je crois avoir compris , donc j'ai essayé" de reprendre, je crois que c'est pas le plus compliqué en programmation lol pour le fin si je me suis basé sur des exemples sur le net

VAR
    nombre entier, département

DEBUT
    Afficher "Saisir un numero de 2 chiffres qui doit etre compris entre 1 et 99"
    Saisir nombre 2 chiffres
    
    Tant que la saisie du département n'est pas de type numérique,  ou est inférieur ou égal à 0 => il y a erreur faire
    Afficher " Saisie erronée : recommencer.  "
    Tant que la saisie dépasse 2 caractères si on saisit un numéro de 3 chiffres  faire
    Afficher " Saisie erronée : recommencer.  "
    Fin tant que
    
    Afficher « Entrer votre département» 
    Saisir département 
    
    selon département 
      Si (49)
          Afficher "Vous habitez en Maine et Loire"
      Sinon si (85)    
          Afficher "Vous habitez en Vendée"
      Sinon si (44)
          Afficher "Vous habitez en Loire Atlantique"
      Sinon si (53)
          Afficher "Vous habitez en Mayenne"
      Sinon si (73)
          Afficher "Vous habitez en Sarthe"   
      Sinon
          Afficher "Vous n'habitez pas dans les Pays de la Loire"
   Fin selon
   Fin si
   Fin si
   
    
FIN


voila c'est obligé de mettre des Fin si , la il y a deux Si , je me trompe pas?

Merci Smiley cligne
en programmation pure Smiley smile et quelque soit le langage cela devient

if(condition){
 faire quelque chose
}elseif(condition){
 faire quelque chose
}else{
 faire quelque chose
}
Pages :