[ bratovuk @ 23.03.2007. 19:58 ] @
Zadatak:
Napisati program za izracunavanje n-tog stepena celog broja a.

Resenje: ( Iz Cabarkapine knjige..)
Code:

program stepen(input,output);
  var a,n,i,stepen:integer;
  begin 
     readln(a,n);
     stepen:=1;
     i:=1;
     while i<=n do
         begin
            stepen:=stepen*a;
            i:=i+1;
          end;
        writeln('stepen=', stepen);
      readln;
    end.


Pitanja:
1) zbog cega se dodeljuje vrednost: stepen:=1; i i:=1?
2) zbog cega se pise: while i<=n do?
3) zasto je sad stepen:=stepen*a?
4) zasto je i:=i+1?

PS. Ostalo znam
PS2. Nemojte mi reci da je pascal najlaksi jezik?!?...(ps3..postajem depresivan,krenuo sam pre mesec dana da ucim T pascal, mnogo sporo napredujem, jel to normalno?)

Hvala svima unapred.......
[ X Files @ 23.03.2007. 21:38 ] @
Citat:

1) zbog cega se dodeljuje vrednost: stepen:=1; i i:=1?

stepen:=1 je takozvana inicijalna vrednost za množenje, jer bi u suprotnom,
unutar brojača stepen:=stepen*a, trenutne rezultate množio sa NULOM i ne
bi ništa postigao, rezultat bi ostao NULA.

Citat:

2) zbog cega se pise: while i<=n do?

To je uslov koji obezbeđuje petlji da se vrti dok god je ispunjen (i<=n).
i se uvećava u svakom prolazu dok god ne bude veći od N kada se izlazi iz petlje.

Citat:

3) zasto je sad stepen:=stepen*a?

Ovo je isto kao kod brojača, vrednost sa desne strane se dodeljuje levoj strani.

Citat:

4) zasto je i:=i+1?

To je brojač koji se uvećava, i dovodi do vrednosti kada se izlazi iz petje.

Ovo je malo nejasno jer se moglo postići i sa FOR petljom, prirodnije. To je verovatno
bio neki primer za WHILE.
[ bratovuk @ 25.03.2007. 10:30 ] @
Citat:
To je verovatno
bio neki primer za WHILE.


...upravo tako!.. Hvala X Files na detaljima :)!
[ Wajda.W @ 27.03.2007. 11:20 ] @
koliko se meni cini to je samo za vrednosti n>=0
treba dodati uslov sa grananjem za n>=0 i n<0
posle izracunavanja stepena. nesto ovako:

Code:

.
.
.
while i<=n do
         begin
            stepen:=stepen*a;
            i:=i+1;
          end;
if(n<0) than stepen:=1/stepen;
writeln('stepen=', stepen);
      readln;
    end.

mozda ima gresaka jer se bas ne doznam mnogo u pascal
[ bratovuk @ 28.03.2007. 01:50 ] @
Citat:
mozda ima gresaka jer se bas ne doznam mnogo u pascal

ima greska!...pokusao sam da resim al mi treba mala pomoc:
Code:

program BrojANaBrojN;
           var:  a,i,n:integer;
                  stepen:real;
           begin
              readln(a,n);
              stepen:=1;
              i:=1;
              while i<=n do
                 begin
                   stepen:=stepen*a;
                   i:=i+1;
                 end;
              if (n<0) then
                 begin
                    stepen:=BROJ a NA BROJ abs(n); { Kako ovo da napisem u pascalu?????}
                    stepen:=1/stepen;
                 end;
             writeln('stepen=',stepen:10:2);
             readln;
            end. 


Trebalo bi da sam sve napisao ispravno.
Fali mi samo...stepen:=BROJ a NA BROJ abs(n), kako to da napisem? Da li moze preko exp(x)?

Hvala.



[ X Files @ 28.03.2007. 07:24 ] @
Citat:

Da li moze preko exp(x)?

Trebalo bi da može ovako (nisam testirao):
an = exp ( n * ln ( a ) )
...ali svakako obrati pažnju na *tipove*, da ne bi rezultat bio približan.

Odavno nisam u Pascal svetu, pa ne znam šta kažu standardi, ali svakako proveri i da li može:
an = a ** n

... ili čak i:
an = POW ( a, n )
(ukoliko kompajler ima neku (ne)standardnu ekstentiju)
[ Wajda.W @ 28.03.2007. 09:42 ] @
E a mozda da u while petlji stavis abs(n) to moze "peske" da se napise kao sqrt(n*n)
i onda ti while petlja racuna uvek za pozitivne vrednosti i posle samo proveris da li je manje od 0 i ako jeste napravis reciprocnu vrednost.
tako bar moze u c-u , verovatno moze i u pascalu
[ bratovuk @ 28.03.2007. 13:45 ] @
@X Files
Hvala, al ne ide:(
Citat:
an = exp ( n * ln ( a ) )

kada to ubacim resava stepen:=1/stepen kao stepen:=stepen*a, ne razumem zasto..

Citat:
an = a ** n

... ili čak i:
an = POW ( a, n )

Citat:
Odavno nisam u Pascal svetu, pa ne znam šta kažu standardi, ali svakako proveri i da li može


Hehe...ne moze, error:)!..
Hvala na trudu...mucicu se ja jos malo :)!
Tnx!
[ bratovuk @ 28.03.2007. 13:50 ] @
@Wajda.W
Ti mi vajda zagorca zivot :) sa ovim:
Citat:
koliko se meni cini to je samo za vrednosti n>=0
treba dodati uslov sa grananjem za n>=0 i n<0
posle izracunavanja stepena.

Budi sad ljubazan i resi misteriju;)!

inace, ovo ne pali u pascalu, barem ne kod mene:
Citat:
E a mozda da u while petlji stavis abs(n) to moze "peske" da se napise kao sqrt(n*n)
i onda ti while petlja racuna uvek za pozitivne vrednosti i posle samo proveris da li je manje od 0 i ako jeste napravis reciprocnu vrednost.
tako bar moze u c-u , verovatno moze i u pascalu


Pozdrav!

[ Srki_82 @ 28.03.2007. 15:05 ] @
Napisi sam funkciju za dizanje nekog broja na neki stepen... npr ovako:
Code:
function Pow(n, s: Longint): Longint;
begin
  if s = 0 then
    Pow := 1
  else
    Pow := n * Pow(n, s - 1);
end;

i onda je samo pozovi u kodu
Code:
stepen:= Pow(BROJ, abs(n));
[ savkic @ 28.03.2007. 15:36 ] @
> an = exp ( n * ln ( a ) )
> kada to ubacim resava stepen:=1/stepen kao stepen:=stepen*a, ne razumem zasto..

Nisam razumeo šta ti ne radi.

function Power(const a, n: Extended): Extended;
begin
Result := Exp(Ln(a) * n);
end;

A na N = Power(A, N);
Nti koren iz A = Power(A, 1 / N);

Power(2, 5) = 32;
Power(2, 1 / 2) = 1.41...;
[ bratovuk @ 28.03.2007. 16:04 ] @
@Srki82
Citat:
Opravi ga Srki svaka mu cast!
:)
Radi! Hvala.
@savkic
Tnx na odgovoru, pokusacu i na taj nacin!
Pozdrav!
[ Srki_82 @ 28.03.2007. 17:02 ] @
Radi i moje, a radi i kod koji je napisao savkic, a moze da se uradi i na jos nacina... poenta nije u tome da li radi ili ne, nego u tome da li ti razumes zasto nesto radi ili ne. Namerno sam napisao funkciju onako kako sam je napisao da bih video da li ti je jasno sta se u njoj desava... i... da li znas zasto to radi?
[ bratovuk @ 28.03.2007. 19:16 ] @
@Srki82

Pocetnik sam.Paskal ucim od 1.Marta.
Da budem iskren, nije mi jasno! Cak ni ne znam sta radi f-ja u TP, kakve osobine ima...
Sa ucenjem sam stigao do petlji (while-do, repeat-until,for..)..

Koja je uloga f-ja u TP? Ako nije problem da se objasni,"odokativno", Hvala:).

..
[ savkic @ 29.03.2007. 00:47 ] @
> Pocetnik sam.Paskal ucim od 1.Marta.
> Da budem iskren, nije mi jasno! Cak ni ne znam sta radi f-ja u TP, kakve osobine ima...
> Sa ucenjem sam stigao do petlji (while-do, repeat-until,for..)..
> Koja je uloga f-ja u TP? Ako nije problem da se objasni,"odokativno", Hvala:).

To je proces koji moraš sam preći, moj ti je savet da nabaviš neku knjigu (za Pascal je najbolja Turbo Pascal Kompletan vodič - Stephen O'Brien) i naučiš osnove jezika. Ukucaj dobijene primere u editor i startuj izvršavanje programa red po red (moraš naučiti rad sa debuggerom) i proveri koliko god da treba, dan, dva, nedelju u prolasku kroz primere dok ne shvatiš.
[ bratovuk @ 29.03.2007. 14:34 ] @
Citat:
(za Pascal je najbolja Turbo Pascal Kompletan vodič - Stephen O'Brien)


ne moguca misija:)..hvala na savetu!