[PASCAL]Procedury,Funkcje srednia z n liczb

uses crt;


procedure Start;

begin

     clrscr;

     writeln('Program do obliczen sredniej z n liczb');

end;


function WczytanieDanych(var a:integer):integer;

begin

     write('Podaj liczbe: ');

     readln(a);


end;


function Petla(var znak:char; licznik:byte);

begin

     licznik:=0;

     repeat

     licznik:=licznik+1;

     write('Czy chcesz podawac dalej? t/n');

     readln(znak);

     znak:=upcase(znak);


     until znak='N'

end;








var

   a:integer;

   srednia:real;

   licznik:word;



begin

     Start;

     WczytanieDanych(a);

     Petla(licznik,znak);




     readln;

end.

Zwracam się znowu z prośbą :confused:

nie wiem czy to ja jestem taki oporny czy to jest takie trudne…

bez procedur i funkcji program ten bym wykonał w minute… po co utrudniać sobie życie jeśli coś jest łatwe takie jakie jest no ale ok.

MUSZE zrobić program który obliczny średnią z n liczb.

Ma to wyglądać jakos tak:

licznik:=0

(petla) (sądzę iż pętla FOR jest bardzo dobra w tym przypadku, ponieważ nie wiem z góry z ilu liczb chcę liczyć średnią)

licznik:=licznik+1;

podaj liczbe

czytaj liczbe

czy chcesz dalej podawac t/n?

jesli n…

(end petla)

to

srednia:=a/liczik (ktory bedzie w pętelce)

end

i problem tkwi w tym iż nie wiem jak użyć pętli w procedurze bądź funkcji. czy wszystko (zaczytanie,obliczenie) ma być w jednej procedurze czy musi być rozbite na kilka…

wg mnie lepszym rozwiazaniem byloby uzycie while…

zrobilbys sobie licznik obiegow petli, i zmienna do ktorej zapisywana jest suma i potem bys podzielil pod koniec funkcji i zwrocil jako jej wynik…

moglbys tez zrobic wariant z czyms takim ze jesli uzytkownik wprowadzi 0 to chce zakonczyc wczytywanie danych…

proponuje uzyc 1 funkcji(w ktorej wczytyjesz dane i obliszasz srednia). nie musialbys do niej nawet wysylac argumentow.

ps: jak chcesz mam troche materiałów co do pascala/delphi

function WczytanieDanych(var a:integer):integer; - poco funkcja jak nic nie zwraca?

function Petla(var znak:char; licznik:byte); - A co powinna zwracać? to nawet się nie skompiluje

uses crt;


procedure start;

begin

     writeln('srednia z n liczb');

end;


procedure CzytajDane(var suma:real; var licznik:byte);

var

liczba:real;

znak:char;

suma_x:real;



begin

     suma_x:=0;

     suma:=0;

     licznik:=0;

 repeat

     write('Podaj liczbe ');readln(liczba);

     IF liczba>0 then

     begin

     suma_x:=suma_x+liczba;

     licznik:=licznik+1;

     end;

 write('Czy nastepna liczba t/n ');readln(znak);

 znak:=upcase(znak);

 until znak<>'T';

suma:=suma_x;

end;




function srednia(suma:real; licznik:word):real;

begin

     srednia:=suma/licznik;


end;


procedure OblicziWyswietl(suma:real; licznik:word);

begin

     writeln('Srednia= ',srednia(suma,licznik):6:2);

end;


var

suma:real;

licznik:byte;



begin

     clrscr;

     start;

     CzytajDane(suma,licznik);

     OblicziWyswietl(suma,licznik);


     readln;

end.


{By Hondus}

done. może komuś się przyda kiedyś

dzięki za pomoc :wink: