IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

procédure et paramètre


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 29
    Points : 6
    Points
    6
    Par défaut procédure et paramètre
    bonjour

    Pourriez vous m'aider pour cet exercice?

    Le but est d’écrire la procédure change qui reçoit en paramètre le montant de la monnaie à rendre (en francs*) ainsi que le vecteur Argent décrit plus bas, et qui affiche le nombre de billets et/ou pièces correspondants.
    Le vecteur argent contient toutes les valeurs existantes des billets et/ou pièces dans l’ordre décroissant :
    Argent={500 ;200 ;100 ;50 ;20 ;10 ;5 ;2 ;1 ;0,5 ;0,2 ;0,1 ;0,05}
    Il existe bien sûr beaucoup de solutions .Le but est d’afficher la solution minimale ( rendre le moins de billets et/ou pièces possibles).
    Exemple : pour 492,23F vous devez afficher :
    2*200F+1*50F+2*20F+1*2F+1*0,2F+1*0,05F
    (rendre 492,23 suppose rendre 492,25 car il n’existe pas de plus petite pièce que 0,05F)
    Vous avez à votre disposition la fonction Arrondi qui reçoit en paramètre un montant et qui retourne le montant arrondi au 5 centimes supérieur.Exemple:Arrondi(25,12) va retourner 25,15.

    Merci d'avance

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Jai,

    Oui, on peut t'aider.

    MAIS on ne fera pas ton travail à ta place.

    Donc, montre-nous où tu en es, explique-nous ce qui te bloque ...
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 29
    Points : 6
    Points
    6
    Par défaut
    Bon, voici ce que j'ai crû comprendre qu'il fallait faire ... (je vous prie d'excuser mon niveau médiocre )

    montant=1321,85;Argent={500 ;200 ;100 ;50 ;20 ;10 ;5 ;2 ;1 ;0,5 ;0,2 ;0,1 ;0,05}
    (si on suppose que l'on affiche pas les quantités nulles).
    2*500+0*200+2*100+1*50+2*20+2*10+1*5+2*2+2*1+1*0,5+1*0,2+1*0,1+1*0,05

    Pouvez vous m'aider SVP?

  4. #4
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Bonjour,
    Vous avez à votre disposition la fonction Arrondi qui reçoit en paramètre un montant et qui retourne le montant arrondi au 5 centimes supérieur.Exemple:Arrondi(25,12) va retourner 25,15.
    une petite piste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    arrondi(492.23)=492.25

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    492.25 div 500 = 0 ; reste = 492.25;
    492.25 div 200 = 2 ; reste = 92.25;
    92.25 div 100 = 0 ; reste = 92.25;
    92.25 div 50 = 1 ; reste = 42.25;
    42.25 div 20 = 2 ; reste = 2.25;
    2.25 div 10 = 0 ; reste = 2.25;
    2.25 div 5 = 0 ; reste = 2.25;
    2.25 div 2 = 1 ; reste = 0.25;
    0.25 div 1 = 0 ; reste = 0.25;
    0.25 div 0.5 = 0 ; reste = 0.25;
    0.25 div 0.2 = 1 ; reste = 0.05;
    0.05 div 0.1 = 0 ; reste = 0.05;
    0.05 div 0.05 = 1 ; reste = 0 ==> STOP
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 29
    Points : 6
    Points
    6
    Par défaut
    où fais-tu évoluer Montant dans ton algorithme ?

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Ben c'est évident : à chaque étape, il reprend le reste de l'opération précédente.

    Le procédé est pratiquement le même que lorsque tu veux convertir un nombre quelconque dans une base donnée.

  7. #7
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 29
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Montant (réel, saisi)
    Arrondi (fonction E: réel, S: entier, défini ailleurs)
    Montant_Arrondi (entier, calculé)
     
    Si Montant = 0 Alors
    Quitter Pour
    Fin Si
    Fin Pour
    Fin

  8. #8
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Le plus important, c'est de comprendre le problème. ensuite essayer de trouver un approche de résolution et enfin trouver un moyen de traduire l'approche en algo.
    Citation Envoyé par dominiqu Voir le message
    où fais-tu évoluer Montant dans ton algorithme ?
    Ce que j'ai proposé n'a rien d'un algorithme ce n'est qu'une approche de résolution, à partir de là essayez de proposer une solution sous forme d'algorithme et on vous aidera par la suite.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  9. #9
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 29
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Montant (réel, saisi)
    Arrondi (fonction E: réel, S: entier, défini ailleurs)
    Montant_Arrondi (entier, calculé)
    Vecteur (tableau d'entiers, défini ailleurs)
    Quantité (entier, calculé)
    Résultat (tableau [1 .. taille vecteur][2] d'entiers, calculé)
     
    Procedure_Change(E: Montant_Arrondi: entier, S: Résultat: tableau[][] d'entiers)
        Pour i de 1 à taille(Vecteur) Faire
            Quantité ← Montant_Arrondi DIV Vecteur[i]
            Montant ← Montant MOD Vecteur[i]
     
            Ajouter à Resultat: [Quantité, Vecteur[i]]
     
            Si Montant = 0 Alors
                Quitter Pour
            Fin Si
        Fin Pour
     
        Renvoyer Resultat
    Fin Procédure

  10. #10
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    C'est déjà pas mal, cependant j'ajouterai quelques remarques :

    1.
    Le but est d’écrire la procédure change qui reçoit en paramètre le montant de la monnaie à rendre (en francs*) ainsi que le vecteur Argent décrit plus bas, et qui affiche le nombre de billets et/ou pièces correspondants.
    Il n'est pas demander de stocker les résultats dans un vecteur comme vous le faites:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Procedure_Change(E: Montant_Arrondi: entier, S: Résultat: tableau[][] d'entiers)
     
    ...
    Ajouter à Resultat: [Quantité, Vecteur[i]]
    ...
    un simple affichage suffit, de plus le montant,la fonction arrondi ainsi que le vecteur argent ont des valeurs réelles non pas entières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Procedure_Change(E: Montant: réel)
    ...
    ecrire("Nombre de billets/pieces de ",Vecteur[i],"Franc :",Quantité)
    ...
    2. Attention aux variables!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Quantité ← Montant_Arrondi DIV Vecteur[i]
            Montant ← Montant MOD Vecteur[i]
    vous utilisez ici deux variables : montant et montant_arrondi, Or une seule est nécessaire, la variable montant sera arrondi avant d'entrer dans la boucle.


    3. On utilise généralement la boucle pour lorsque le nombre d'itérations est connu au préalable, ce qui n'est pas le cas ici. Je conseille plutôt d'utiliser une boucle répéter jusqu'à ce que le montant atteigne 0.

    4. En pratique les opérateurs div et mod prennent des paramètres entiers, ce qui n'est pas le cas dans votre algo, mieux vaut alors les ecrire manuellement, ou sinon, on pourrait par exemple changer d'échelle, en multipliant le montant ainsi que les éléments du vecteur par 100 de telle sorte à n'avoir que des valeurs entières
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  11. #11
    Futur Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 29
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    début
    afficher("saisir le nombre de billets et/ou pièce)
    saisir (nombre)
    afficher (nombre div500,"billet(s) de 500")
    nombre <-nombre mod 500
    afficher (nombre div200,"billet(s) de 200")
    nombre<-nombre mod 200
    afficher (nombre div100,"billet(s) de 100")
    nombre<-nombre mod 100
    afficher(nombre div50,"billet(s) de 50")
    nombre<-nombre mod50
    afficher(nombre div20,"billet(s) de 20")
    nombre<-nombre mod20
    afficher(nombre div10,"pièce(s) de 10")
    nombre<-nombre mod10
    afficher(nombre div5,"pièce de 5")
    nombre<-nombre mod5
    afficher(nombre div2,"pièce de 2")
    nombre<-nombre mod2
    afficher(nombre div1,"pièce de 1")
    nombre<-nombre mod1
    afficher(nombre div0,5,"pièce de 0,5")
    nombre<-nombre mod0,5
    afficher(nombre div 0,2,"pièce de 0,2")
    nombre <-nombre mod0,2
    afficher(nombre div 0,1,"pièce de 0,1")
    nombre<-nombre mod 0,1
    afficher<-(nombre div0,05,"pièce de 0,05")
    nombre<-nombre mod 0,05
    0=>stop
    Fin

  12. #12
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Cette dernière version semble pas mal.

    A mon avis, il manque l'utilisation de la fonction "Arrondi" en début d'algorithme.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. [C#] Procédures stockées - Paramètres "null"
    Par aymron dans le forum ASP.NET
    Réponses: 1
    Dernier message: 16/12/2005, 17h06
  2. [Débutant]Procédure avec paramètres entrée / sortie
    Par jeromejanson dans le forum Langage
    Réponses: 13
    Dernier message: 10/10/2005, 08h30
  3. Comment passer une procédure en paramètre ?
    Par gudul dans le forum Langage
    Réponses: 4
    Dernier message: 30/09/2005, 13h57
  4. Passage d'un type procédure en paramètre par défaut
    Par Floverdoz dans le forum Langage
    Réponses: 1
    Dernier message: 22/07/2005, 17h48
  5. Passer une procédure en paramètre ?
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 24/10/2003, 12h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo