Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Logiciels de bureau

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;
Lassé par la pub ? Créez un compte

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

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 !

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.

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[]
Lassé par la pub ? Créez un compte
Tom's guide dans le monde