Forum programmation
 
AccueilPortailFAQRechercherS'enregistrerMembresGroupesConnexion

Partagez | 
 

 Exercice Cinq Etoiles (A vos PC)

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2, 3
AuteurMessage
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Sam 24 Mar - 23:45

Je ne sais pas si elle est optimle ou non, car je dois la comparer à une autre solution ou bien j'ai un nombre maximum d'itérations.
En tout cas, voici mon code et dites moi si elle est optimale ou non :
Code:
program ex_abcd;
uses wincrt;

var a,b,c,d,nb:integer;

begin
  nb:=0;
  for a:=1 to 9 do
    for b:=a to 9 do
      for c:=1 to 9 do
        for d:=c downto a do
          if ((10*a+b)*(10*c+d)=(10*b+a)*(10*d+c))AND(a<>b)AND(c<>d)AND(a<>d)AND(b<>c) then
              begin
                inc(nb);
                writeln((10*a+b),'*',(10*c+d),'=',(10*b+a),'*',(10*d+c));
              end;

 writeln(nb);
               
end.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 14:01

Ton programme est rèussi il délivre bien les solutions demandées cependant il fait 1155 itérations pour trouver les 14 résultats. Il est possible de faire mieux.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 15:15

Voici une autre variante de ce code :
Code:
program ex_abcd;
uses wincrt;

var a,b,c,d:integer;

begin
for a:=1 to 9 do
 for c:=a to 9 do
  for b:=c downto a do
  for d:=c downto a do    if((10*a+b)*(10*c+d)=(10*b+a)*(10*d+c))AND(a<>b)AND(c<>d)AND(a<>d)AND(b<>c)then                writeln((10*a+b),'*',(10*c+d),'=',(10*b+a),'*',(10*d+c));           
end.


Cette fois il ne fait que 825 itérations.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 15:24

J'ai trouvé une solution avec uniquement 120 itérations.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 15:33

Avec un peu de réflexion tu constatera qu'il y'a des boucles inutiles...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 16:18

J'ai trouvé une autre solution qui fait seulement 30 itérations... C'est génial.

Code:
program ex_abcd;
const v : array [1..7] of integer = (1,2,3,4,6,8,9);
var a,b,c,d,cpt,cpt1:integer;
    v1, v2, v3, v4 : integer;
begin
  clrscr;
  cpt := 0; cpt1 := 0;
  for a:=1 to 4 do
    for b:=a+1 to 5 do
      for c:=b+1 to 7 do begin
          d:= (v[a]*v[c]) div v[b];
          cpt := cpt + 1;
          v1 := (10*v[a]+v[b]); v2 := (10*v[c]+d);
          v3 := (10*v[b]+v[a]); v4 := (10*d+v[c]);
          if ((v1*v2)=(v3*v4)) and (b<>c) and (a<>b) and (d<>v[c]) then begin
            cpt1 := cpt1 + 1;
            writeln(v1,' * ',v2,' = ',v3,' * ',v4);
          end;
      end;
  Writeln(cpt:4,cpt1:4);
  readln;
end.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 16:32

Voici une solution qui ne fait que 64 itérations :
Code:
program ex_abcd;
uses wincrt;

var a,b,c,d:integer;

begin
for a:=1 to 4 do
  for b:=a+1 to a+4 do
  for d:=a+1 to a+4 do
    begin
      c:=b*d div a;
      if(c<=9)AND(a*c=b*d)AND(a<>b)AND(c<>d)AND(a<>d)AND(b<>c)then
          writeln((10*a+b),'*',(10*c+d),'=',(10*b+a),'*',(10*d+c));
    end;               
end.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 16:52

Il y'a une chose que tu n'as pas expliqué :
- pourquoi avoir utilisé cette formule : c := b*d div a ?
- pourquoi b et d sont-ils identiques ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 17:01

Je ne sais pas s'il est possible de descendre en dessous de 30 itérations !!!

J'ai essayé de réduire le nombre d'itération de ta solution çà a donné 30 itérations...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 17:11

J'explique ma solution étant donné la propriété suivante:
(10*a+b)*(10*c+d)=(10*b+a)*(10*d+c)
On remarque que le développement donne :
99*a*c = 99*b*d <==> a*c = b*d

On remarque aussi que les nombres 5 et 7 ne font pas partie des solutions car :
5*c = 5*d (d'où a devra être égal à b)
7*c = 7*d (d'où a devra être égal à b)
tandis que :
2*c = 4*d ou 6*d ou 8*d (a <> b, c et d aussi)

Dans ma solution j'ai donc écraté ces deux nombre (5 et 7).

Les boucles sont ajustés selon les résultats escomptés.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 17:31

En fait Manianis, on a trouvé la même solution, mais, toi tu as enlevé le 5 et le 7. C'est la seule différece.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 17:56

Maintenant, j'attends une solution pour le jeu sudoku.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 27
Date d'inscription : 17/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 18:47

Désolé ces jours ci j'étais occupé.
Je vais y travailler, et inchallah tu auras ma solution d'ici demain.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Dim 25 Mar - 19:01

Ok pas de problèmes...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Contenu sponsorisé




MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   

Revenir en haut Aller en bas
 
Exercice Cinq Etoiles (A vos PC)
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 3 sur 3Aller à la page : Précédent  1, 2, 3
 Sujets similaires
-
» Petit exercice autout du GRID
» "Etoiles" pour les grades forums.
» Exercice d'arpèges et d'accords sur Coldplay
» Exercice MG accordéon accompagnement Boléro
» Exercice de mémoire?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum programmation :: Programmation :: Delphi & Pascal :: Pascal :: Exercices-
Sauter vers: