Se connecter / S'enregistrer
Votre question

Incompréhension d'un algo en Pascal [resolu]

Tags :
  • Programme
  • Logiciels
Dernière réponse : dans Logiciels
15 Juillet 2006 11:34:49

Bonjour à tous,

Je cherche à résoudre un problème de combinatoire
me donnant le nombre de possibilité de décomposer 185€ avec des billets de 5,10,20 et 50€..

Voici l'algorithme qu'on m'a proposé sur un autre site en Pascal mais malheureusement je n'arrive pas à le faire tourner et je ne connais vraiment pas le Pascal...!

Si qqun sais me donner qqs explications sur le programme en lui-même svp...

Merci !

Code :

procedure TForm3.Button1Click(Sender: TObject);
var
r,n,m,t,u : integer;
s1,s2,s3,s4,s : string;
begin
Memo1.Clear;
for n := 0 to 38 do
for m := 0 to 19 do
for t:= 0 to 10 do
for u := 0 to 4 do
begin
r := 5*n+10*m+20*t+50*u;
if r = 185 then
begin
s := '';
s1 := '';
s2 := '';
s3 := '';
s4 := '';
if n <> 0 then s1 := '5.'+inttostr(n);
if m <> 0 then s2 := '10.'+inttostr(m);
if t <> 0 then s3 := '20.'+inttostr(t);
if u <> 0 then s4 := '50.'+inttostr(u);

if s1 <> '' then s := s1;
if (s2 <> '') and (s <> '') then
s := s+'+';
if (s2 <> '') then s := s+s2;
if (s3 <> '') and (s <> '') then
s := s+'+';
if (s3 <> '') then s := s+s3;
if (s4 <> '') and (s <> '') then
s := s+'+';
if (sa <> '') then s := s+s4;
memo1.Lines.Add('185='+s);
end;
end;
end;

Autres pages sur : incomprehension algo pascal resolu

15 Juillet 2006 11:38:42

Voici le msg d'erreur correspondant :

error 85: ";" expected.


Merci !
15 Juillet 2006 11:53:01

Salut,
j'ai fait un peu de pascal dans mes douces années de prepa il y a deux ans.
D'apres l'erreur, il semble qu'une instruction ne se termine pas par le ; de rigueur en pacal.
Cependant, jene vois pas laquelle...

Sinon, si c'est juste la resolution de ce probleme qui t'interesse, il semble assez simple pour etre resolu a la main (je suis en train d'essayer :)  ).

Si tu cherches a trouver un algo pour resoudre de maniere plus generale, ca doit pas etre tres complique non plus. L'idee la plus simple me parait de tester toutes les combinaisons des billets et d'incrementer un compteur lorsque une combinaison donnee donne la somme voulue.

Si t'as d'autres questions, n'hesite pas.

Bonne journée
Contenus similaires
15 Juillet 2006 11:55:36

Salut,

Oui ce n'est que la résolution de ce problème qui m'interesse rien de plus !

Je suis également entrain d'essayer de faire autre chose en C (que je connais déjà un peu mieux)..

Mais si tu as un algo à me proposer ca m'interesse au plus haut point !

Merci !
15 Juillet 2006 12:05:53

Bon, la resolution sur papier prends des dimensions trop importantes... :-)
l'algo en revanche est simple (basé sur l'idée donnée plus haut):
Je te donnes la structure, apres tu n'as plus qu'a traduire dans un langage que tu connais bien...


variables: i, n50, n20, n10, n5
algo:
i=0;
for n50=0 to 3
for n20=0 to 9
for n10=0 to 18
for n5=0 to 37
if n50*50+n20*20+n10*10+n5*5=185 then i=i+1;


ensuite tu fermes les boucles for, et ta variable i contient le nombre de solutions normalement.
15 Juillet 2006 12:28:34

J'ai exactement le même algo que j'ai convertit en C !

Le seul prob c'est que la solution donnée est 3363 hors la vraie solution est 187 !

Je me penche donc sur l'erreur mais merci du coup de main !
15 Juillet 2006 12:34:29

C'est bon maintenant !

Un simple oubli d'initialisation de la variable de comptage à zéro !

Enfin c'était pas encore trop grave lol

A la prochaine !
15 Juillet 2006 12:37:15

ravi d'avoir pu aider.
n'oublie pas de mettre [resolu] dans le titre de ton post

bonne journée
21 Mai 2007 20:36:48

damboy a dit :
Voici le msg d'erreur correspondant :

error 85: ";" expected.


Merci !

pour moi mon ami tu dois mettre la procedure dans un programme principale et dimunie les begin dans la procedure[]
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS