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

Langage Pascal Discussion :

[LG]Probleme avec une fonction


Sujet :

Langage Pascal

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 118
    Points : 64
    Points
    64
    Par défaut [LG]Probleme avec une fonction
    Je voudrais écrire ceci :
    Écrire en pascal (sous Delphi) une fonction decibase
    description : transforme un nombre(nb) décimal en son équivalent dans une base b
    paramètres in : le nombre entier et la base
    Résultat : une chaine représentant le nombre en base b
    CU: 1<b<37 et l'entier nb > -1

    mais j'ai quelque probleme alor si quelqu'un avait un alogorithme, il pourrait me le passer
    Merci d'avance

  2. #2
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Quels sont ces problèmes ?
    Qu'as-tu déjà tenté ?
    Où est-ce que ça coince ?
    As-tu fais une recherche sur le forum ? (Cette réponse là, je la connais déjà...)

    Nous ne sommes pas là pour résoudre les exercices donnés

    Merci de consulter les règles du forum.

    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    J'arrive a le faire en base 2 mais c'est pour les autres bases que je n'y arrive pas je ne sais pas ou mettre le reste de la division pour avoir a la fin une chaine de nombre

  4. #4
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Il faut se servir d'une chaîne de caractères pour stocker le nombre dans la nouvelle base.
    Pour ça, on récupère les restes de chacune des divisions successives et on les insère dans la chaîne "par le haut", autrement dit en faisant comme ça:
    Et ce à chaque étape...

    Les restes s'obtiennent avec mod, le nouveau dividende avec div

    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Merci

    Voici l'algorithme de la fonction qui transforme une nombre décimal en base 2 :

    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
    function decibase1 &#40;CONST nbre,base&#58;cardinal&#41;&#58;cardinal;
    var i,valeur,reste,nbre1&#58;cardinal;
    begin
    i&#58;=0;
    valeur&#58;=0;
    nbre1&#58;=nbre;
    while &#40;nbre1<>0&#41; do
     begin
      reste&#58;=nbre1 mod 2;
      nbre1&#58;=nbre1 div 2;
       if&#40;&#40;reste=1&#41; or &#40;reste=0&#41;&#41; then
        valeur&#58;=valeur + puissance&#40;10,i&#41;;
        i&#58;=i+1;
      end&#123;while&#125;;
    decibase1&#58;=valeur;
    end&#123;decibase&#125;;
    Je voudrais généraliser pour n'importe qu'elle base compris entre 1 et 37
    Ici je ne peut qu'aller que jusque 1023 pour que ce soit afficher en binaire correctement, au dessus ca ne marche plus
    Merci d'avance

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Puissance est une fonction definie comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function puissance&#40;x&#58; integer; y&#58; integer&#41;&#58;cardinal;
    var
      i,p&#58; integer;
    begin
      p &#58;= 1;
      for i &#58;= 1 to y do
       begin
        p &#58;= p * x;
       end&#123;for&#125;;
      puissance &#58;= p;
    end&#123;puissance&#125;;

  7. #7
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut

    Tu stockes un nombre binaire dans un entier ? C'est original... Généralement, on se sert d'une chaîne de caractères (string). Sans ça, comment veux-tu coder les chiffres hexadécimaux (particulièrement A, B, ..., F) ?

    Utilise donc une chaîne, ce sera plus simple. Ton algo a l'air correct en l'observant rapidement.

    Au passage, le test Reste égal à 0 ou 1 est inutile. Reste ne peut valoir autre chose ! Quand tu divises un nombre par deux, tu peux difficilement avec un reste supérieur à 1...

    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 118
    Points : 64
    Points
    64
    Par défaut
    Je sais mais je n'arrive pas a le faire.
    Si tu pouvais me donner des astuces comment faire ca serait sympa
    Merci d'avance

Discussions similaires

  1. Probleme avec une fonction de calcul d'un age
    Par dondano dans le forum Langage
    Réponses: 1
    Dernier message: 27/04/2007, 12h50
  2. Réponses: 5
    Dernier message: 25/09/2006, 12h06
  3. Réponses: 7
    Dernier message: 16/08/2006, 11h55
  4. [C#] probleme avec une fonction recursive
    Par K_!!! dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/08/2006, 19h22
  5. probleme avec une fonction enable() toute simple !!
    Par K_!!! dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/05/2006, 16h10

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