[ amanteo @ 11.03.2009. 13:07 ] @
Tekst zadatka:

Organizovati pomocu FOR I petlje isporuku dzakova deterdzenta od 16,17 i 21 kg kupcu
kome treba tacno 185 kg.Dzakovi se ne smeju cepati.

Molim vas ukoliko neko dobije resenje zadatka da odgovori kodom u Pascal-u,
mora se koristiti FOR I petlja,to je glavni uslov.

Hmmmm....
[ savkic @ 11.03.2009. 14:14 ] @
Ne očekuj da neko reši tvoj domaći zadatak. Ako imaš nekih konkretnih nedoumica sa svojim rešenjem, izloži ih i neko će pokušati da pomogne.
[ Nikolavlasotince @ 14.03.2009. 23:44 ] @
Poslednjih godinu dana, cim udjen na es, ja vidim novi topic u kome pise: "E, imam domaci, evo vam text zadatka i uradite mi..." Mislim da je i za vas bolje da se potrudite da resite to sami, pa kad zapne negde, da pitate za pomoc... Ili ako ne ide uopste kazi kako si razmisljao i dobices neki hint za resavanje.... A ovako cak i ne verujem da ce neko da pomogne....


P. S. Objasni malo bolje taj zadatak....
[ mr.zhile @ 15.03.2009. 12:14 ] @
>


Care ovde ti je mnogo bitnija matematika nego Pascal...ovo se resava za pola
minuta uz matematicku potporu...a matematika se ne uci na formuima...
Mucini glavom

--0016367ed4e16bb30204652746dc
Content-Type: text/html; charset=ISO-8859-5
Content-Transfer-Encoding: quoted-printable

<br><br><div class="gmail_quote">15. ���� 2009. 00.44, Nikolavlasotince <span dir="ltr">&lt;<a href="mailto:[email protected]">[email protected]</a>&gt;</span> �� �������/��:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Poslednjih godinu dana, cim udjen na es, ja vidim novi topic u kome pise: &quot;E, imam domaci, evo vam text zadatka i uradite mi...&quot; Mislim da je i za vas bolje da se potrudite da resite to sami, pa kad zapne negde, da pitate za pomoc... Ili ako ne ide uopste kazi kako si razmisljao i dobices neki hint za resavanje.... A ovako cak i ne verujem da ce neko da pomogne.... <br>

<br>
P. S. Objasni malo bolje taj zadatak....<br><font color="#888888">
<br>
--<br>
<a href="http://www.elitesecurity.org/p2226499" target="_blank">http://www.elitesecurity.org/p...<div></div><div class="h5"><br>
<br>
Prijave/odjave: <a href="http://www.elitesecurity.org/liste" target="_blank">http://www.elitesecurity.org/liste</a><br>
<br>
Ne menjajte sledece dve linije ukoliko odgovarate putem emaila!<br>
esauth:357710:6765ebf8d4ffc2da29ce95a4177bc262<br>
[ amanteo @ 24.03.2009. 13:43 ] @
Hvala na kritikama,prihvatio sam zamerke i potrudio se da bih dosao do sledeceg:

Code:

program ForI16;
 
{dodela ulaznih vrednosti konstantama}

const
a=16;
b=17;
c=21;
s:integer=185;

var
i,j,sumaC,sumaB,
ostatak1,ostatak2,
Na,Nb,Nc:integer;  {Na,Nb i Nc broj ponavljanja a,b i c}

begin
 Na:=0;
 Nb:=0;
 Nc:=0;
 
{ispitivanje da li je S deljivo sa nekim od kandidata}
 if s mod a = 0 then
 Na:=s div a else
   if s mod b = 0 then
   Nb:=s div b else
     if s mod c = 0 then
     Nc:=s div c
         else

           begin
             for i:=(s div c) downto 0 do   {max broj vrednosti c unutar sume S}
             begin
             sumaC:=i*c;
             ostatak1:=s-sumaC;        {ostatak do S}
               if ostatak1 mod a = 0 then
               Na:=ostatak1 div a else
                 if ostatak1 mod b = 0 then
                 Nb:=ostatak1 div b else
                  begin
                   for j:= (ostatak1 div b) downto 0 do
                   sumaB:=j*b;
                   ostatak2:=ostatak1-sumaB; {ostatak do ostatak1}
                    if ostatak2 mod a = 0 then
                    Na:=ostatak2 div a;
                    Nb:=j;
                    Nc:=i;
                  end;
               end;
            end;
 writeln('Na=',Na);
 writeln('Nb=',Nb);
 writeln('Nc=',Nc);
 readln
end.

Mislim da sam dobro postavio algoritam ali resenje nakon izvrsenja programa nije u redu i glasi:
Na=5 Nb=0 Nc=0.
Nadam se da mi mozete pomoci oko nalazenja greske,ja se ubih trazeci je vec 3 nedelje,
izvinjavam se na nekorektnosti zbog neiskustva...

[ djoka_l @ 24.03.2009. 14:18 ] @
Baš si zakomplikovao. Pošto je prošlo 20 godina od kada sam poslednji put pisao u Paskalu, evo ga rešenje u C:

Code:

#include <stdio.h>

int main() {

  int i,j,k;
  int a=16;
  int  b=17;
  int c=21;
  int s=185;

  for(i=0; i<=s/c; i++)
    for(j=0; j<=s/b; j++)
      for(k=0; k<=s/a; k++)
        if( (a*k+b*j+c*i) == s ) printf("Rezultat: 16*%d + 17*%d + 21*%d = 185\n", k,j,i);
}

i rezultat:
Code:

Rezultat: 16*2 + 17*9 + 21*0 = 185
Rezultat: 16*6 + 17*4 + 21*1 = 185
Rezultat: 16*1 + 17*5 + 21*4 = 185
Rezultat: 16*5 + 17*0 + 21*5 = 185
Rezultat: 16*0 + 17*1 + 21*8 = 185


U for petljama, deljenje je celobrojno jer su varijable deklarisane kao celobrojne. Posle prvog uspešnog if-a program može i da se završi, ukoliko nisu potrebna sva rešenja.

Ako ti je jasan program, možeš da ga "prepevaš" na Pascal.
[ amanteo @ 25.03.2009. 06:47 ] @
Auuuhh covece,pokricu se zvucnicima i necu se pojavljivati na forumu duuuugo!!!
Hvala ti puno Djole,moram reci da mi je takvo resenje prvo palo na pamet, ali
mada vezbam Paskal vec nekoliko meseci i trudim se i sa algoritmima,
ocigledno nisam dobro shvatio mogucnosti sa for I petljom,nemam sigurnosti a jos uvek
ni dovoljno zivaca.Mislio sam da...ma mislio sam ja...!
Kakva jednostavnost:
Code:

program forI16;

const
a=16;
b=17;
c=21;
s=185;

var
i,j,k:integer;

begin
for i:=0 to s div c do
 for j:=0 to s div b do
   for k:=0 to s div a do
     begin
      if (i*c+j*b+k*c) = s then
        begin
        writeln('Potrebna je sledeca kolicina dzakova :');
        writeln('a: ',k,' b: ',j,' c: ',i);
        readln
        end;
     end;
end.               

Hvala jos jednom neizmerno,samo,sad sam potpuno razocaran u sebe.
[ amanteo @ 25.03.2009. 06:57 ] @
Pardon,hvala naravno i svima koji mi nisu pomogli,sad znam i zasto.
Zbog jednakog IQ sa George Bush-om!
[ devetkamp @ 09.03.2013. 15:19 ] @
Jel moze pomoc oko zadatka, u pitanju je pascal:
Odstampati sve delioce unetog broja n.
Unapred zahvalan.
[ savkic @ 09.03.2013. 17:18 ] @
> Jel moze pomoc oko zadatka, u pitanju je pascal: Odstampati sve delioce unetog broja n. Unapred zahvalan.

Svrha domaćih zadataka je da sam savladaš neko gradivo, nemoj samo tražiti gotovo rešenje, potrudi se malo. Kreni da radiš pa pitaj ako ti u nekom delu zapne.
[ drvlada75 @ 09.03.2013. 17:56 ] @
Evo resenja, mada i ja mislim kao i @savkic
Sa druge strane, da li je zadatak bas tako formulisan?

PROGRAM DELIOCI;
VAR
c,br:LONGINT;
BEGIN

WriteLn('Unesite broj');

Readln (br);

FOR c:=1 TO br DO
BEGIN
IF (br MOD c)=0 THEN
BEGIN
writeln (c);
END;

END;
END.
[ devetkamp @ 10.03.2013. 10:34 ] @
Ok. tako glasi zadatak, i koliko vidim to je tacno resenje. Probao sam i sam da radim, medjutim, nije mi islo od ruke. Ja sam samo ispitivao da li je neki broj delitelj broja n, ali nikako nisam znao kako da ih odstampam. Programiranje mi ne ide od ruke, studiram matematiku, i ovo je jedini ispit koji odstupa zapravo od matematike. Vidim da ovo resenje radi, ali sam ne bih dosao to toga. Ne razumem ni u cemu je fora. Zasto 3 begina, kako da prepoznam sta treba da stavim? ako moze neki savet ili slicno, bio bih zahvalan?
[ devetkamp @ 10.03.2013. 10:56 ] @
Evo jos jednog problema:
2. Odstampati tablicu mnozenja do 10.

program tablica;
var i,j:integer
begin

for i:=1 to 10 do
for j:=1 to 10 do

writeln('i*j=' , i*j);
end.

Sta ne valja?
[ Lawd @ 10.03.2013. 12:31 ] @
Moderatori, molim, obrišite ovaj post.
[ drvlada75 @ 10.03.2013. 12:43 ] @
Auh, nemoguce da vam bas nista nisu pokazali na vezbama.
Prvi zadatak mora da ima tri Begina zato sto se prvi stavlja na pocetku samog programa, drugi ti je u okviru FOR petlje i treci je u okviru IF naredbe.
Sto se tice drugog zadatka, odmah mozes pri kompajliranju da procitas sta ne valja.
Na kraju drugog reda nisi stavio ; zatim For petlju nisi dobro uradio i na kraju writeln nece moci tako da radi.

program tablica;
var i,j:integer;
begin
for i:=1 to 10 do
begin
for j:=1 to 10 do
begin
writeln(i,'*',j,'=',i*j);
end;
end;
end.
[ Rapaic Rajko @ 10.03.2013. 19:39 ] @
Hmmm...

Za gornji primer begin-end za for petlje nije potreban ;). Zasto? Zato sto je unutar petlji samo JEDNA naredba. A kad MORA begin, i sta uopste znaci ta rec? Znaci "pocetak sekvence" a end oznacava "kraj sekvence". Sta je sad pa sekvenca - to je slozena naredba, odnosno naredba koja se sastoji od vise naredbi. Filozofija pascala je "sve je jedna naredba, odnosno sekvenca"; zato i program(body) pocinje i zavrsava sa begin...end; i on je nista drugo nego slozena naredba :).

Znam da je malo komplikovano za pocetnika, medjutim ovo je vazno razumeti, u pitanju je bitan koncept na kojem pociva struktuirano programiranje. Evo primer koda sa detaljnim tumacenjem:

Code:

  for i:=1 to 10 do
    for j:=1 to 10 do
      writeln('i*j=' , i*j);


Posmatrajmo prvo donju for petlju (po j), unutar nje se nalazi samo jedna komanda - writeln(). Zato unutar te petlje nije potreban begin-end par. Posmatrajmo sada gornju for petlju (po i), unutar nje je takodje samo jedna naredba, unutrasnja for petlja koju smo upravo gledali; zato ni za nju ne treba begin-end par. Obratiti paznju da je za spoljasnju petlju naredba writeln potpuno nevidljiva ;).

A pogledajmo sad ovako nesto:

Code:

  for i:=1 to 10 do
    for j:=1 to 10 do
    begin
      writeln(j=', j);
      writeln('i*j=' , i*j);
    end;


Sada u unutrasnjoj petlji imamo DVE naredbe radvojene semicolonom (;); jasno je da ih moramo staviti unutar begin-end para, jer to je upravo sekvenca. Ali za spoljasnju petlju, i dalje se vidi samo unutrasnja for petlja, dakle i dalje samo jedna naredba.

I, finale:

Code:

  for i:=1 to 10 do
  begin
    writeln(i=', i);
    for j:=1 to 10 do
    begin
      writeln(j=', j);
      writeln('i*j=' , i*j);
    end;
  end;


Za ovo (verujem) vec ni ne treba komentar :).

Pozz

P.S. Lakse je pratiti diskusiju ako se koristi tag code za source, pogledati s leve strane editora za poruke.