Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ процедура и файлы

Автор: 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

good.gif
надо же, а я столько сидел, ломал голову,
ну а с третьей поможете...

Автор: мисс_граффити 21.10.2006 18:23

Цитата(Yurka @ 21.10.2006 14:20) *

good.gif
надо же, а я столько сидел, ломал голову,
ну а с третьей поможете...

конечно поможем!
но ты сначала сам попробуй