[ dusansilni95 @ 09.02.2012. 17:31 ] @
ZADATAK: Koristeci funkciju za izdvajanje cijelog dijela realnog broja, napisati program koji ucitava n razlicitih realnih brojeva i nalazi sumu cijelih dijelova tih realnih brojeva.

Ovo je moje vidjenje tog zadatka ali nesto ne valja:

Code:
program blabla;
 uses wincrt;
  var
   a,x:real;
   i,s,n:integer;
  function izdvajanje(a:real):integer;
   var
    b:integer;
   begin
    b:=trunc(a);
   end;
  begin
   i:=0;
   writeln('Koliko puta ce mo ucitati realni broj:');
   readln(n);
    repeat
     writeln('Unesi realne brojeve:');
     readln(x);
     i:=i+1;
    until i=n;
   s:=0;
    repeat
     s:=s+izdvajanje(x);
     i:=i+1;
    until i=n;
   writeln('Suma n razlicitih realnih brojeva iznosi: ', s);
  end.
[ reiser @ 09.02.2012. 17:50 ] @
Svaka funkcija treba da vrati neki rezultat, a taj rezultat dodeljujes tako sto napises: ime_funkcije := neka_vrednost. Ti u izdvajanje() funkciji dodeljujes promenljjivoj b vrednost, i posto nista nije dodeljeno rezultatu funkcije, ona ne vraca nista. Dake, umesto b := trunc(a) stavi izdvajanje := trunc(a) i trebalo bi da radi.

Takodje, preporucujem ti da koristis for..do petlju umesto repeat..until, za ucitavanje brojeva i njihovo sumiranje, posto je for..do bas namenjena za takve stvari.
Learn Pascal Programming Tutorial Lesson 6 - Loops

I "ce mo" se pise spojeno :)
[ dusansilni95 @ 09.02.2012. 18:03 ] @
-ne razumijem to za "result" sto si objasnjavo

-repeat petlju koristim jer moram. Mozemo birati izmedju while ili repeat, kaze profesor da se naviknemo na njih
-a to "ce mo", ma svejedno na brzinu sam napiso, pa nisam ni gledo


usput ako nesto pomaze ovaj zadatak mogu pokrenuti i sve bude u redu, ali na kraju uvijek izbaci rezultat nula

i u ovoj liniji:
writeln('Suma n razlicitih realnih brojeva iznosi: ', s);
ako stavim ovako: s:5:2 izbacuje mi gresku kod 5, to isto ne razumijem zasto
[ Marko Simulak @ 09.02.2012. 18:27 ] @
Pa ako koristis funkciju, i vec uvedes neku lokalnu promenljivu, u ovom slucaju b, i b dodelis neku vrednost, moras navesti u funckiji da kao rezultat izbacuje to b...npr: b:=trunc(a); izdvajanje:=b;...

[Ovu poruku je menjao Marko Simulak dana 09.02.2012. u 19:53 GMT+1]
[ reiser @ 09.02.2012. 18:41 ] @
Izbaci rezultat nula jer funkcija izdvajanje() ne vraca nikakav rezultat. Unutar svake funkcije u pascalu negde moras da joj "dodelis" rezultat koji ce da vrati, a to radis tako sto napises:

Code:
ime_funkcije := rezultat


s:5:2 ne radi jer se ta anotacija koristi kod brojevnih tipova sa decimalnim ostatkom, dok je tebi s integer tipa.
[ dusansilni95 @ 09.02.2012. 18:42 ] @
evo dodo sam to ali opet ne izbacuje rezultat tj. uvijek rezultat bude nula


Code:

program blabla;
 uses wincrt;
  var
   a,x:real;
   i,s,n:integer;
  function izdvajanje(a:real):integer;
   var
    b:integer;
   begin
    b:=trunc(a);
    izdvajanje:=b;       <-----mislis na ovo
   end;
  begin
   i:=0;
   writeln('Koliko puta ce mo ucitati realni broj:');
   readln(n);
    repeat
     writeln('Unesi realne brojeve:');
     readln(x);
     i:=i+1;
    until i=n;
   s:=0;
    repeat
     s:=s+izdvajanje(x);
     i:=i+1;
    until i=n;
   writeln('Suma n razlicitih realnih brojeva iznosi: ', s);
  end.
[ Marko Simulak @ 09.02.2012. 18:49 ] @
Ubaci pod jednu petlju sve
[ dusansilni95 @ 09.02.2012. 20:02 ] @
evo sad kad sam sve stavio pod jednu petlju radi, ne znam zasto al bitno da radi
cak nisam moro ni da stavim ono s:=0, ne znam ni to zasto
mislim da je to to

Code:

program blabla;
 uses wincrt;
  var
   a,x:real;
   i,s,n:integer;
  function izdvajanje(a:real):integer;
   var
    b:integer;
   begin
    b:=trunc(a);
    izdvajanje:=b;
   end;
  begin
   i:=0;
   writeln('Unesi koliko cemo puta ucitati realne brojeve:');
   readln(n);
    repeat
     writeln('Unesi realne brojeve');
     readln(x);    
     s:=s + izdvajanje(x);
     i:=i+1;
    until i=n;
   writeln('Suma n razlicitih realnih brojeva iznosi: ', s);
  end.