- •Лабораторный практикум по информатике
- •Новосибирск 2008
- •Оглавление
- •Тема 1. Линейные вычислительные процессы
- •Тема 2. Разветвляющиеся вычислительные процессы
- •Тема 3. Циклические вычислительные процессы
- •Тема 4. Структурный тип данных "массив" Варианты задач на обработку векторов
- •Варианты задач на обработку матриц
- •Тема 5. Подпрограммы
- •Тема 6. Текстовые типы данных
- •Тема 7. Файловые типы данных
- •Тема 8. Тип "запись"
- •Требования к оформлению индивидуального задания
- •Курсовая работа Задание на курсовую работу
- •Пример отчета по курсовой работе
- •1. Постановка задачи
- •2. Описание программы
- •3. Листинг программы
- •4. Результаты тестирования программы
- •Варианты заданий курсового проекта
- •Приложение 1. Таблицы ascii‑кодов символов для операционных систем dos и windows
- •Символы с кодами 0—127
- •Символы с кодами 128—255 для кодировки dos‑866
- •Символы с кодами 128—255 для кодировки Windows‑1251
- •Приложение 2. Расширенные коды клавиатуры
- •Расширенные коды
- •Рекомендуемая литература
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