Форум «Всё о Паскале» _ Задачи _ процедура и файлы
Автор: Yurka 21.10.2006 16:47
есть такое задание, вроде и несложно, только у меня проблема с процедурами появилась, заштопорился (почти всю ночь на спал), помогите чем сможете... условие такое: определить зарплати каждого сотрудника за каждый месяц, которые он получил после высчитывания налога. Вывести начальные даные и полученные результаты, использовать двумерный массив. По этому условию нужно написать три программы: 1-ую просто с обработкой массива, 2 -ую использовав процедуры и функции (причём сама программа должна иметь только вызовы процедур), 3-ью использовав для хранения начальных результатов ы промежуточных значений типизированые файлы. Вот первая:
Код
uses crt; const M=12;
Var zp:array [1..100,1..M] of real; i,j,k,P:word;
Begin clrscr; write ('k-stvo sotrud K='); readln(K); for i:=1 to K do for j:=1 to M do begin write ('zar_plata ',i,' sotrud za ',j, ' meciac Zp=' ); readln(zp[i,j]); end;
write ('nalog v % P='); readln(P);
writeln ('zar_platu bez naloga'); writeln; write ('nomer m '); for j:=1 to m do write(j,' m '); writeln; for i:=1 to K do begin write (i,'sotrud '); for j:=1 to M do begin write (zp[i,j]:0:1 ); write(' '); end; writeln; end;
writeln; writeln ('zar_platu posle naloga'); writeln; write ('nomer m '); for j:=1 to m do write(j,' m '); writeln; for i:=1 to K do begin write (i,'sotrud '); for j:=1 to M do begin write (zp[i,j]-((zp[i,j]/100)*P):0:1); write(' '); end; writeln; end; readkey End.
тут вроде как всё нормально, на её основе я сделал вторую:
Код
uses crt; const M=12; Type masiv=array [1..100,1..m] of real;
procedure vvod(var zp:masiv; K:integer); var i,j:integer; begin write ('k-stvo sotrud K='); readln(K); for i:=1 to K do for j:=1 to M do begin write ('zar_plata ',i,' sotrud za ',j, ' mecyac Zp=' ); readln(zp[i,j]); end; End;
Procedure Nalog(var Zp:masiv; K:integer); var P:real; j,i:integer; Begin write ('nalog v % P='); readln(P); writeln; writeln ('zar_platu posle naloga'); writeln; write ('nomer m '); for j:=1 to M do write(j,' mic '); writeln; for i:=1 to K do begin write (i,' sotrud '); for j:=1 to M do begin write (zp[i,j]-((zp[i,j]/100)*P):0:1); write(' '); end; writeln; end; End;
Procedure Vuvod(var Zp:masiv;K:integer); var j,i:integer; Begin writeln ('zar_platu bez naloga'); writeln; write ('nomer m '); for j:=1 to m do write(j,' mic '); writeln; for i:=1 to K do begin write (i,' sotrud '); for j:=1 to M do begin write (zp[i,j]:0:1 ); write(' '); end; writeln; end; End;
VAR a:masiv; kl:integer; BEGIN clrscr; vvod(a,kl); vuvod(a,kl); nalog(a,kl); readkey END.
выдаёт бред, что не так? и если кто подскажет как третью переработать буду очень благодарен
Автор: volvo 21.10.2006 17:07
Цитата
выдаёт бред, что не так?
Здесь ошибка:
procedure vvod(var zp:masiv; K:integer);
Ты не возвращаешь значение K в основную программу, поэтому ничего и не печатается...
Так попробуй:
procedure vvod(var zp:masiv; Var K:integer);
Автор: мисс_граффити 21.10.2006 17:08
у меня в таком виде не выводит ничего... надо не
procedure vvod(var zp:masiv; K:integer);
а
procedure vvod(var zp:masiv; var K:integer);
Автор: Yurka 21.10.2006 17:20
надо же, а я столько сидел, ломал голову, ну а с третьей поможете...
Автор: мисс_граффити 21.10.2006 18:23
Цитата(Yurka @ 21.10.2006 14:20)
надо же, а я столько сидел, ломал голову, ну а с третьей поможете...