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  Suivant
AuteurMessage
Chaker
Administrateur
Administrateur
avatar

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

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 10:58

Et j'aimerais vraiment voir ta solution sans utiliser les compteurs.
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)   Ven 23 Mar - 11:01

Le nombre d'entier impair est calculé de la façon suivante :
ne = (n div 10) * 4 ; Si n = 50 alors ne = 20 entiers impairs j'ai simplement vérifié

Pour les villes tu pourra utiliser un repère orthonormé surlequel tu marquera les coordonnées de tes villes puis tu les saisira :
v1
x : 0
y : 0
v2
x : 1
y : 1
v3
x : 0.5
y : 0
v4
x : 0
y : 1

le trajet sera alors : v1, v3, v2, v4, v1
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)   Ven 23 Mar - 11:04

chakerbh a écrit:
Et j'aimerais vraiment voir ta solution sans utiliser les compteurs.
J'ai vérifié que ma solution utilisant les tableaux fourni un résultat incomplet ceci est due à une stratégie non adaptée.
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 : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 11:14

manianis a écrit:

J'ai vérifié que ma solution utilisant les tableaux fourni un résultat incomplet ceci est due à une stratégie non adaptée.
Donc on peut dire que c'est moi qui avais raison !!


Voilà ce qu'a donné l'éxécution avec les villes que tu m'as donné :
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)   Ven 23 Mar - 11:22

Non c'est ma stratégie qui était incorrecte donc elle ne fournissait pas toutes les solutions.

Félicitations c'est le résultat escompté. Comment tu as fais ?
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 : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 11:33

Je vais expliquer ma stratégie :

La premiére chose à laquelle j'ai penssé c'est les structures de données à utiliser, j'ai choisi une structure facile à utiliser : un tableau d'enregistrement et voici la déclaration :
Code:
type TVille=record
              Nom:string[30];
              X:real;
              Y:real;
              Depart,Visited:boolean;
            end;
    TVilles=array[1..10]of TVille;
var Villes:TVilles;

Puis j'ai voulu faire le plus facile avant d'aborder le plus difficile, j'ai fais donc une procédure pour saisir les nom des villes et leurs coordonnées.
Ensuite j'ai pensé à utiliser une fonction qui calculerait la distance entre deux villes :
Code:
function distance(Villes:TVilles;p1,p2:integer):real;
  begin  distance:=sqrt(sqr(Villes[p1].X-Villes[p2].X)+sqr(Villes[p1].Y-Villes[p2].Y));
  end;

Et en fin, une procédure qui chercherait la ville suivante à visiter(que je garderais pour plus tard) en fonction de la distance entre elle et la ville actuelle.
J'ai fait appel à cette procédure jusquà ce que la ville à visiter soit celle du départ.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

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

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 11:44

Et toi comment tu as résolu cet exercice ?
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)   Ven 23 Mar - 11:45

Bons choix. C'est a peu prés la même idée que j'avais utilisé sauf que je n'avais pas utilisé de flags (visited, depart) pour marquer les villes visitées et la ville de départ.
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 : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 11:52

Bref, voici mon code :
Code:
program etoil4;
uses wincrt;

type TVille=record
              Nom:string[30];
              X:real;
              Y:real;
              Depart,Visited:boolean;
            end;

    TVilles=array[1..10]of TVille;

var Villes:TVilles;
    ind,n:integer;

procedure Remplir(var Villes:TVilles;n:integer);
  var i:integer;
  begin
    for i:=1 to n do
      begin
        writeln('  *) Ville N°',i);
        write('        Nom = ');readln(Villes[i].nom);
        write('        X= ');readln(Villes[i].X);
        write('        Y= ');readln(Villes[i].Y);
        Villes[i].Visited:=false;
        Villes[i].Depart:=false;
      end;
      writeln;
  end;

function distance(Villes:TVilles;p1,p2:integer):real;
  begin
    distance:=sqrt(sqr(Villes[p1].X-Villes[p2].X)+sqr(Villes[p1].Y-Villes[p2].Y));
  end;

procedure suivant(var Villes:TVilles;var ind,n:integer);
  var i,suiv:integer;
      d:real;
  begin

    d:=-1;
    suiv:=ind;
    for i:=1 to n do
      if not Villes[i].Visited then
        if (distance(Villes,ind,i)<d)OR(d<0) then
            begin
              suiv:=i;
              d:=distance(Villes,ind,i);
            end;

    if d>0 then ind:=suiv
    else begin
          i:=1;
          while NOT Villes[i].Depart do inc(i);
          ind:=i;
        end;

  end;

BEGIN

  ind:=1;
  n:=4;
  Remplir(Villes,n);
  Villes[ind].Depart:=True;
  Villes[ind].Visited:=True;
  write(Villes[ind].Nom);
  repeat
    suivant(villes,ind,n);
    Villes[ind].Visited:=True;
    write(' ==> ',Villes[ind].Nom);
  until (ind=1);

END.



Et j'attend le tien Wink
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)   Ven 23 Mar - 12:00

Voici le mien :

Code:
program voyageur_de_commerce;
const MAX_COUNT = 20;
type  coord = record
        x, y : real;
        pos  : integer;
      end;

      tab_coord = array [1..MAX_COUNT] of coord;

procedure saisie_n(var n : integer);
begin
  repeat
    Write('Entrer n [1..', MAX_COUNT,'] : ');
    Readln(n);
  until (n > 0) and (n <= MAX_COUNT);
end;

procedure saisie_tab(n : integer ; var t : tab_coord);
var i : integer;
begin
  for i:=1 to n do begin
    Writeln('Point ', i);
    Write('x : '); Readln(t[i].x);
    Write('y : '); Readln(t[i].y);
    t[i].pos:=i;
  end;
end;

function distance(p1, p2 : coord):real;
begin
  distance := sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y));
end;

procedure permuter(var p1, p2 : coord);
var interInt : integer;
    interRe : real;
begin
  interInt := p1.pos;
  p1.pos := p2.pos;
  p2.pos := interInt;
 
  interRe := p1.x;
  p1.x := p2.x;
  p2.x := interRe;
 
  interRe := p1.y;
  p1.y := p2.y;
  p2.y := interRe;
end;

procedure chercher_chemin(n : integer ; var t : tab_coord);
var i, j, min : integer;
begin
  for i:=2 to n-1 do begin
    min := i;
    for j:=i + 1 to n do begin
      if (distance(t[i-1], t[j]) < distance(t[i-1], t[min])) then min := j;
    end;
   
    if (i <> min) then permuter(t[min], t[i]);
  end;
end;

procedure afficher_parcours(n : integer ; var t : tab_coord);
var i : integer;
begin
  Writeln; Writeln('Le voyageur visite les villes dans l''ordre suivant ');
  for i:=1 to n do
    Write(t[i].pos, ', ');
  Writeln(t[1].pos);
end;


var n : integer;
    t : tab_coord;
begin
  Writeln('Programme du voyageur de commerce');
  Writeln;
 
  Writeln('Le nombre de villes');
  saisie_n(n);
 
  Writeln; Writeln('Coordonnees des villes');
  saisie_tab(n, t);
 
  chercher_chemin(n, t);
  afficher_parcours(n, t);
 
  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 : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 12:09

Merci Manianis, c'est vraiment un bon exercice.
Tu n'en as pas d'autres de ce genre ?
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)   Ven 23 Mar - 12:58

Avant tout je vais poster l'exercice 5 étoiles. Il s'agit d'une ébauche de la solution. Elle est correcte je l'ai vérifié. Si tu veux tu pourras aussi la vérifier.

Code:
program cinq_etoiles_2;
const nmax = 200;
      nmc = (nmax div 10) * 4;
type ttab = array [1..nmc] of integer;

procedure saisie(var n : integer);
begin
  repeat
    Write('Entrer un multiple de 10 ( <=', nmax, ') : ');
    Readln(n);
  until (n mod 10 = 0) and (n > 0) and (n <= nmax);
end;

procedure aff_somme(n, nc : integer ; var t : ttab);
var i : integer;
begin
  for i:=1 to nc do begin
    Write(2 * t[i] + 1:3);
    if (i <> nc) then Write('+') else Write(' = ');
  end;
  Writeln(n);
end;

procedure init_vars(n : integer ; var nc : integer ; var kmax : integer);
var i : integer;
begin
  nc := (n div 10) * 4; (* 4 cases pour n = 10 ; 8 cases pour n = 20, etc. *)
  kmax:= (n - nc) div 2; (* nc + 2.k = n <==> k = (n - nc) / 2 *)
end;

procedure init_tab(nc, kmax, stval : integer ; var t : ttab);
var i, j, re : integer;
begin
  t[1] := stval;
  re := kmax - stval;
 
  i := 2;
  while (re > 0) do begin
    if (re > t[i - 1]) then t[i] := t[i - 1] else t[i] := re;
    re := re - t[i];
    i := i + 1;
  end;
 
  for j:= i to nc do t[j] := 0;
end;

procedure tab_suiv(kmax : integer ; var change : boolean; var t : ttab);
var i, j, k, s : integer;
begin
  i := kmax;
  while (t[i] = 0) and (i > 2) do i := i - 1;
 
  change := false;
  if (t[i] > 1) then begin
    t[i] := t[i] - 1;
    i := i + 1;
    t[i] := t[i] + 1;
    change := true;
  end else begin
    j := i;
    while (t[j] = 1) and (j > 2) do j := j - 1;
   
    if (t[j] > t[i]) then begin
      t[j]:=t[j] - 1;
     
      s := kmax;
      for k:=1 to kmax do
        if (k <= j) then s := s - t[k]
        else begin
          if (s > t[k - 1]) then t[k] := t[k-1] else t[k] := s;
          s := s - t[k];
        end;
      change := true;
    end;
  end;
end;

var n, nc, kmax, i : integer;
    cpt : longint;
    t : ttab;
    change : boolean;
begin
  saisie(n);
  init_vars(n, nc, kmax);
  cpt := 0;
 
  for i:=1 to kmax do begin
    init_tab(nc, kmax, i, t);
    aff_somme(n, nc, t);
    cpt := cpt + 1;
   
    repeat
      tab_suiv(kmax, change, t);
      if (change) then begin
        aff_somme(n, nc, t);
        cpt := cpt + 1;
      end;
    until (not change);
  end;
 
  Writeln('Somme trouves (n = ', n ,'): ', cpt);
           
  Readln;
end.
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)   Ven 23 Mar - 14:36

Tu aurais remarqué dans le programme du voyageur de commerce que j'ai utilisé
une structure contenant les coordonnées de la ville (x, y)
ainsi que son numéro (pos)
ensuite j'effectue un tri par sélection sur le tableau des villes pour trouver le parcours du commerçant ceci pour éviter de tester la distance entre la ville courante et les villes déjà visitées.
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)   Ven 23 Mar - 14:41

Tu veux un autre exercice de ce types !
Eh bien voilà un autre classé quatre étoiles :
exercice
On remarque que :
12x42 = 21x24
12x63 = 21x36
12x84 = 21x48
Il y'a 14 produits qui vérifient la propriété :
(10.a+b).(10.c+d) = (10.b+a).(10.d+c)
où a <> b et c<> d
Ecrire un programme qui fait sortir tous ces entiers.

- Le problème dans cet exercice n'est pas de trouver les 14 produits mais de proposer la solution la plus optimale.
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 : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 15:33

D'abord est ce que a,b,c et d sont comrpis entre 1 et 9 ?
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)   Ven 23 Mar - 21:05

Evidemment
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 : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 22:09

J'ai encore quelques questions :

  1. Est ce que le couple (a,b) peut prendre les deux valeurs (5,9) et (9,5) ?
    Ou bien on ne compte que l'un des deux couples ?
  2. Est ce que cette situation est valable : (a,b)=(5,9) et (c,d)=(9,5) ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

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

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 22:18

Voici mon premier essai :





Est ce que cette éxécution est correcte ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 22:27

comme je vois c juste, j'ai pas trouvé la meme resultat, mon programme se bloque lorsque je fais l'execution


est ce que on va utiliser une Matrice?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

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

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 22:33

Non Mohamed on ne va pas utiliser une matrice.
Essaye de repenser à l'exercice cinq étoiles.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 22:41

chakerbh a écrit:
Non Mohamed on ne va pas utiliser une matrice.
Essaye de repenser à l'exercice cinq étoiles.


j'ai deja fais l'exercice 5 etoile, franchement ma solution ne marche pas, alors j'ai copier la solution manianis

mais avec l'exercice 4 etoile ça marche pour la premiere foie et apres mo programme plante le système, je vais essayer de le faire sur Delphi
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
benha21
utilisateur professionnel
utilisateur professionnel
avatar

Nombre de messages : 349
Age : 31
Date d'inscription : 28/01/2007

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 22:44

Je vois que ça bosse dur dur ici, continuez comme ça les amis!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://benha21.skyblog.com
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: Exercice Cinq Etoiles (A vos PC)   Ven 23 Mar - 23:25

et enfin Chaker j'ai trouver la solution de l'exercice 5 etoile cheers

pour l'exercice 4 etoile tjr la meme probleme, est ce cous avez une idée
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)   Sam 24 Mar - 12:01

mtcs a écrit:
et enfin Chaker j'ai trouver la solution de l'exercice 5 etoile cheers

pour l'exercice 4 etoile tjr la meme probleme, est ce cous avez une idée
On veut voir tes solutions mtcs car cela nous enrichit énormément. Ta solution peut nous donner de nouvelles idées.
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)   Sam 24 Mar - 12:05

Pour l'exercice abcd oui c'est çà l'affichage chakerbh. Mais est-ce que ta solution est optimale ?

Quel est le nombre de boucles que fait ton programme pour donner les solutions.

Concernant le couple (5,9) tu aurais remarqué que ce couple ne figure pas dans les 14 solutions fournies par ton programme.
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 2 sur 3Aller à la page : Précédent  1, 2, 3  Suivant
 Sujets similaires
-
» Petit exercice autout du GRID
» Exercice d'arpèges et d'accords sur Coldplay
» Exercice MG accordéon accompagnement Boléro
» Exercice de mémoire?
» Kate Moss - Photofiltre débutant

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