Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мухина И.Н. Кисленко Н.П. Лабораторный практику...doc
Скачиваний:
3
Добавлен:
29.08.2019
Размер:
769.54 Кб
Скачать

3. Листинг программы

program Tabl;

const max=50; {максимальное число строк таблицы!}

type data=array [1..max] of real;

names=array [1..max] of string;

var tovar:names;

ostatok1,prihod,rashod,ostatok2:data;

so1,sp,sr,so2:real;

rows:integer;

name:string;

f:text;

function Chislo (var s:string):real;

{выделить и вернуть очередное число из строки s}

var p,code:integer;

n:real;

begin

Chislo:=0;

p:=Pos(' ',s);

if (p=0) and (length(s)>0) then p:=length(s)+1;

if p>0 then begin

Val(Copy(s,1,p-1),n,code);

if code=0 then Chislo:=n;

Delete (s,1,p);

end;

end;

function DeSpace (var s:string):string;

{удалить лишние пробелы из строки s}

var p:integer;

begin

repeat

p:=pos(' ',s);

if p>0 then delete (s,p,1);

until p=0;

if s[1]=' ' then delete (s,1,1);

if s[length(s)]=' ' then delete (s,length(s),1);

DeSpace:=s;

end;

procedure ReadData (var f:text; var rows:integer);

{Чтение данных из файла с дескриптором f}

{Вернет количество прочитанных строк через rows}

var s:string;

n,code,i,p:integer;

begin

i:=1;

while not eof (f) do begin

readln (f,s);

s:=DeSpace(s);

if length(s)>0 then begin

p:=Pos(' ',s);

tovar[i]:=Copy (s,1,p-1);

Delete (s,1,p);

ostatok1[i]:=Chislo(s);

prihod[i]:=Chislo(s);

rashod[i]:=Chislo(s);

i:=i+1;

if i>max then begin

WriteLn ('Таблица заполнена до предела! ',

'Для ввода большего количества');

WriteLn ('данных увеличьте константу Max',

' в программе');

Break;

end;

end;

rows:=i-1;

end;

end;

procedure Obrabotka (rows:integer);

{Основной алгоритм – расчет остатка2}

var i:integer;

begin

so1:=0;

sp:=0;

sr:=0;

so2:=0;

for i:=1 to rows do begin

ostatok2[i]:=ostatok1[i]+prihod[i]-rashod[i];

so1:=so1+ostatok1[i];

sp:=sp+prihod[i];

sr:=sr+rashod[i];

so2:=so2+ostatok2[i];

end;

end;

procedure WriteData (var f:text; rows:integer);

{Вывод данных в файл с дескриптором f}

var i:integer;

begin

writeln (f, 'Наименование':18, 'Остаток1':15, 'Приход':15, 'Расход':15, 'Остаток2':15);

for i:=1 to rows do begin

writeln (f,tovar[i]:18, ostatok1[i]:15:2, rashod[i]:15:2, prihod[i]:15:2, ostatok2[i]:15:2);

end;

writeln (f,'Итого':18, so1:15:2, sp:15:2, sr:15:2, so2:15:2);

end;

begin

WriteLn

('Введите имя файла для ввода табличных данных:');

ReadLn (Name);

Assign (f,Name);

Reset (f);

ReadData (f,rows);

Close (f);

WriteLn ('Данные прочитаны из файла ',name,

' (кол.-во строк=', rows, ')');

Obrabotka(rows);

WriteLn('Расчет выполнен');

WriteLn('Введите имя файла для вывода ',

'результатов расчета (con - на экран):');

ReadLn (Name);

Assign (f,Name);

Rewrite (f);

WriteData (f,rows);

Close (f);

end.

4. Результаты тестирования программы

Файл tabl.dat, использованный для тестирования программы:

Товар1 345 45 40

Товар2 721 31 34

Товар3 456 98 34

Товар4 682 12 18

Товар5 74 37 20

Листинг вывода программы:

Введите имя файла для ввода табличных данных:

tabl.dat

Данные прочитаны из файла tabl.dat (кол.-во строк=5)

Расчет выполнен

Введите имя файла для вывода результатов расчета(con-на экран):

con

Наименование Остаток1 Приход Расход Остаток2

Товар1 345.00 40.00 45.00 350.00

Товар2 721.00 34.00 31.00 718.00

Товар3 456.00 34.00 98.00 520.00

Товар4 682.00 18.00 12.00 676.00

Товар5 74.00 20.00 37.00 91.00

Итого 2278.00 223.00 146.00 2355.00