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

Turbo Pascal Discussion :

[TP] programme "d'intelligence artificielle"


Sujet :

Turbo Pascal

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 113
    Points : 72
    Points
    72
    Par défaut [TP] programme "d'intelligence artificielle"
    Salut
    Je viens de faire un programme d'intelligence artificielle qui devine le nombre auquel vous avez pensé en donnant un indice +, - ou = en donnant le nombre d'essais.
    J'ai fait ceci mais le message s'affiche 3 fois et le calcul reste constant après 7 indices
    svp aidez-moi à le corriger.
    Merci d'avance
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    program jeux ;
     
    uses wincrt;
     
    var
     
    c:char;
    b:integer;
     
    procedure lecture (var c:char;var b:integer);
    begin
    	repeat
       writeln('donnez-moi votre indice +,- ou = :');
    		read(c);
    	until c in ['-','+','='];
    end;
     
     
     
    procedure test (c:char;var b:integer);
    var
     
    x,i:integer;
    begin
     
      b:=50;     x:=50;
     
    writeln(b);
     
    lecture(c,b);
     
    i := 1;
     
    if (c = '=') then
     
    begin
     
    writeln(' jai obtenu la solution en 1 coups!');
     
    end
    		else
    		begin
    				repeat
    			b:= b div 2	;
    			i := i +1 ;
    			if (c = '+') then
    			begin
     
    			x := x + b ;
    			writeln(x);
    			lecture(c,b);
     
    			end
     
    			else
    			begin
     
    			x := x - b;
    			writeln(x);
    			lecture(c,b);
     
    			end;
     
     
    				until (c = '=');
    writeln('j ai obtenu la solution en ',i,' coups!');
    end;
    end;
    begin
    test(c,b);
    end.

  2. #2
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    je voudrais juste corrigé 2 ou 3 choses avant d'aller au fond du code
    Citation Envoyé par gadalla
    je vient de faire un programme d' inteligence artificielle
    Cool(T'as deja programmé un jeu d'echec ?)
    Tu as declare des variables globales et locales avec les memes noms ,pour plus de clareté et eviter des confusions c'est mieux de donner des noms differents
    et du fais des passages en parametre inutiles
    comme ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure lecture (var c:char;var b:integer);
    la variable b n'est pas utiliser dans la procedure
    si c'est pour une lecture c'est plus conseillé d'utiliser une fonction:dans ton tu auras une fonctions du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function lecture:char;
    var c:char;
    begin
        repeat
           write('donnez-moi votre indice +,- ou = :');
           readln(c);
        until c in ['-','+','='];
        lecture:=c
    end;
    en plus utilises readlnplutot
    Apres indentes bien ton code c'est pluq lisible pour tout le monde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (c = '=') then
    begin
        writeln(' jai obtenu la solution en 1 coups!');
    end
    inutile de metre un begin/end si c'est une seule instruction qui est concerné par ton if
    Citation Envoyé par gadalla
    jai ceci mais le message d'affiche 3 fois
    quel message?
    Citation Envoyé par gadalla
    le calcul reste constant apres 7 indice
    pourquoi tu fais çarevois tout ça et poses tes questions
    @++
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    merci pour les conseil tous est claire.
    j a utilises pour redimentionné l'interval de recherche
    et le message qui s'affiche 3 fois c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'donnez-moi votre indice +,- ou = :

  4. #4
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonjour,
    Comme Krachik te la suggéré ; il vaut mieux utiliser readln que read.
    En général, il ne faut jamais mettre read dans une boucle.

    Ton problème de phrase qui se répète est dû au fait que tu utilise read.
    Pour corriger ce problème, il te suffit de reprendre le code que Krachik t’a proposé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    repeat
      write('donnez-moi votre indice +,- ou = :');
      readln(c);
    until c in ['-','+','='];

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    pour la faute de read j ai la corriger mais il le reste un autre probleme
    essayé de chercher le nombre 42 et tu vas voir qu'il se bloque

  6. #6
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonjour,
    Prends le temps de revoir ton algorithme et tu remarqueras qu'il n'y pas de véritable problème.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    désolé mon ami jai verifier et jai rien trouver
    tu peut me précisé ou se trouve la faute

  8. #8
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Salut,
    Je veux bien que tu sois débutant, mais pour progresser en informatique, il faut prendre le temps d’analyser ton algo.
    Ici, si tu observe bien, tu constates tout de suite que le problème est que tu divise ton chiffre par deux à chaque fois qu’il est trop grand.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    est ce que je change la divition sur 4??
    et pourquoi et valeur devient constante apré quelque indice

  10. #10
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    salut,
    Pour résoudre le problème il te suffit par exemple de diviser par 2 quand c’est trop grand est que c’est paire.
    Et quand c’est impaire, tu divise par 2, ensuite tu ajoutes 1.

    Je t’avoue que je n’ai pas voulu me prendre la tête avec ton code alors voici un code dans lequel j’ai juste ajouté le traitement dont je viens de te parler.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    program jeux ;
     
    uses wincrt;
     
    var
     
    c:char;
    b:integer;
     
    procedure lecture (var c:char;var b:integer);
    begin
        repeat
          writeln('donnez-moi votre indice +,- ou = :');
          readln(c);
        until c in ['-','+','='];
    end;
     
     
     
    procedure test (c:char;var b:integer);
    var
     
    x,i:integer;
    begin
     
      b:=50;     x:=50;
     
    writeln(b);
     
    lecture(c,b);
     
    i := 1;
     
    if (c = '=') then
     
    begin
     
    writeln(' jai obtenu la solution en 1 coups!');
     
    end
            else
            begin
                repeat
                  if (b mod 2) = 0 then
                    b:= b div 2
                  else
                    b:= (b div 2) +1 ;
                  i := i +1 ;
                  if (c = '+') then
                  begin
                    x := x + b ;
                    writeln(x);
                    lecture(c,b);
                  end
                  else
                  begin
                    x := x - b;
                    writeln(x);
                    lecture(c,b);
                  end;
                until (c = '=');
    writeln('j ai obtenu la solution en ',i,' coups!');
    end;
    end;
    begin
    test(c,b);
    end.
    Encore une fois prends le temps d'analyser ton algorithme.
    tu peux encore nettement l'améliorer. Tu as de l'aide aussi sur le forum intelligence artificielle

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 113
    Points : 72
    Points
    72
    Par défaut
    merci beacoup

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/01/2015, 08h40
  2. les étapes à suivre pour programmer un jeux d'intelligence artificielle
    Par ochock dans le forum Intelligence artificielle
    Réponses: 10
    Dernier message: 09/01/2011, 17h26
  3. Réponses: 2
    Dernier message: 17/12/2010, 11h49
  4. Réponses: 19
    Dernier message: 03/09/2007, 23h17

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