
Отчеты по проге паскаль вариант 27 / Отчет №6
.docЛАБОАТОРНАЯ РАБОТА№6
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ
ЭЛЕКТРОНИКИ И МАТЕМАТИКИ
(технический университет)
Кафедра ИТАС
ОТЧЕТ
ПО ЛАБОРАТОРНОМУ ПРАКТИКУМУ
по дисциплине “Алгоритмические языки и программирование”
Вариант___27______
Исполнитель Руководитель
__Хомич_ ____________
(фамилия) (фамилия)
___________ ____________
(подпись) (подпись)
Группа___АП-11____
Москва 2005
Содержание
1.Первая часть:
Постановка задачи, Внешняя спецификация 2
Алгоритм на псевдокоде 3
Листинг программы 4
Тесты 5
2.Вторая часть:
Постановка задачи, Внешняя спецификация 6
Алгоритм на псевдокоде 7
Листинг программы 8
Тесты 9
3.Третья часть:
Постановка задачи, Внешняя спецификация 10
Алгоритм на псевдокоде 11
Листинг программы 12,13
Тесты 14
Самостоятельная работа №6
Цель работы:
Программирование с использованием структурированных типов данных (файлы, множества, записи).
Первая часть.
Постановка задачи:
1.Создать файл для хранения действительных чисел. Прочитать этот файл и вычислить:
1.Максимальное среди отрицательных чисел.
Внешняя спецификация:
Дано:f – file of real,файл для хранения заданных чисел;
n – integer, количество чисел в этом файле;
Результат: max - максимальное среди отрицательных чисел.
Алгоритм на псевдокоде.
НАЧАЛО
Ввод n {кол-во чисел в массиве}
assign(my_file,'real.dat');
rewrite(my_file);
ввод(а[i]); {ввод массива}
max:=-32767;
reset(my_file);
Цикл от i:=1 до n
read(my_file,tek);
если (tek<0) и (tek>max) то
max:=tek;
все
Кц
close(my_file);
если max=-32767 то
вывод(Отрицательних чисел нет)
иначе
вывод(Максимальное из отрицательних: max:7:3)
все
КОНЕЦ
Листинг программы.
program zoo;
uses crt;
type
massive = array[1..10] of real;
var
my_file : file of real;
a : massive;
max, tek : real;
n, i, j : integer;
begin
clrscr;
writeln('Программа читает из файла действительные числа и ищет максимальное среди отрицательных');
repeat
write('Введите количество чисел, 0 < n <=10 ');
read(n);
until (n<=10) and (n>0);
for i:=1 to n do
begin
write('Введите',i,'-ое число ');
read(a[i]);
end;
assign(my_file,'real.dat');
rewrite(my_file);
for i:=1 to n do
write(my_file,a[i]);
max:=-32767;
reset(my_file);
for i:=1 to n do
begin
read(my_file,tek);
if (tek<0) and (tek>max) then
max:=tek;
end;
close(my_file);
if max=-32767 then
writeln('Отрицательних чисел нет')
else
write('Максимальное из отрицательних: ',max:7:3);
readkey;
end.
Тесты.
1.Нет отрицательных чисел:
Введите количество чисел, 0 < n <=10: 5
Введите,i,-ое число
1 23 0 31 8
Отрицательних чисел нет
Вторая часть.
Постановка задачи:
1.Создать файл (текстовый) средствами редактора. Читать этот файл построчно и:
1.Заменить каждую цифру соответствующей ей латинской буквой
(‘0’ – ‘A’, ‘1’ – ‘B’ и т.д.)
Внешняя спецификация:
Дано:f - text,текстовый файл, содержащий несколько заданных строк
Результат:f2 – text,текстовый файл, содержащий преобразованные строки;
Алгоритм на псевдокоде
НАЧАЛО
ввод(st - имя исходного файла)
проверка существования файла
ввод(st2 - имя конечного файла)
Цикл пока НЕ(EOF(f))
n:=n+1 {переписываем данные строки из файла в массив строк}
readln (f,a[n])
вывод (a[n])
Кц
close(f)
Цикл от i:=1 до n
Цикл от j:=1 до length(a[i])
Если (ord(a[i,j])>=48) и (ord(a[i,j])<=57) то {'0'-48,'A'-65}
a[i,j]:=chr(ord(a[i,j])+17);
Все
Кц
Кц
assign(f2,st2);
rewrite(f2);
Цикл от i:=1 до n
вывод(a[i]);
writeln(f2,a[i]);
Кц
close(f2);
КОНЕЦ
Листинг программы.
Program gizka;
uses crt;
var
a: array [1..20] of string;
i,j,n:integer;
f,f2:text;
st,st2:string;
begin
clrscr;
write('Vvedite imya isxodnogo faila: '); readln(st);
If length(st)=0 then halt;
{$I-}
Assign(F, st);
Reset(F);
{$I+}
If IOResult <> 0 then
begin
writeln('Takogo faila nety');
readkey;
halt;
end;
write('Vvedite imya konechnogo faila: '); readln(st2);
n:=0;
while not eof(f) do
begin
n:=n+1;
readln(f,a[n]);
writeln(a[n]);
end;
close(f);
writeln;
writeln;
for i:=1 to n do {Cikl po strokam}
for j:=1 to length(a[i]) do {Cikl po elementam strok}
if (ord(a[i,j])>=48) and (ord(a[i,j])<=57) then
a[i,j]:=chr(ord(a[i,j])+17); {'0'-48,'A'-65}
assign(f2,st2);
rewrite(f2);
for i:=1 to n do begin
writeln(a[i]);
writeln(f2,a[i]);
end;
close(f2);
readkey
end.
Тесты
1.Ввод несуществующего имени исходного файла:
Vvedite imya isxodnogo faila: c:\zavedomonevernii.txt
Takogo faila nety
{halt}
2.Ввод пустого имени исходного файла:
Vvedite imya isxodnogo faila:
{halt}
3.Ввод пустого имени конечного файла:
Vvedite imya isxodnogo faila: c:\isx.txt
Vvedite imya konechnogo faila:
123aa13
BCDaaBD {в конечный файл рез-тат не запишется,а выведется 2 раза
BCDaaBD т.к writeln (f2,a[i]) где имя f2 – пустая строка }
3.Без цифр:
Vvedite imya isxodnogo faila: c:\isx.txt
Vvedite imya konechnogo faila: c:\kon.txt
s/f*wgwehg-wefg+we
sddse*w/wef\sae/.
s/f*wgwehg-wefg+we
sddse*w/wef\sae/.
4.Нормальная работа:
Vvedite imya isxodnogo faila: c:\isx.txt
Vvedite imya konechnogo faila: c:\kon.txt
123456789
dsfj1\/as-195/.as41
BCDEFGHIJ
dsfjB\/as-BJF/.asEB
Третья часть.
Постановка задачи:
1.Сформировать файл записей имеющий заданную структуру.Количество записей дано.Найти в файле требуемую запись:
1. Самого молодого больного с заданным диагнозом
Больной
/ | \
диагноз Ф.И.О. дата
/ | \ / / \
фамилия имя отчество год месяц день
Внешняя спецификация:
Дано: n – integer, количество записей;
bolnoy – record ... – заданная структура записи;
f – file of televizor – файл записей;
diagnoz – название диагноза, задано;
Результат:
bol2[i] – array of bolnoy , запись, удовлетворяющая заданию
Алгоритм на псевдокоде.
НАЧАЛО
Ввод(n)
assign(f,'c:\3.txt')
rewrite(f)
Цикл от i:=1 до n
Ввод(bol[i])
write(f,bol[i])
Кц
close(f)
ввод(diagnoz)
reset(f)
цикл от i:=1 до filesize(f)
read(f,bol2)
Кц
n:=filesize(f)
сlose(f)
nbol:=0;
mol_bol:=32765;
mol_bolm:=32765;
mol_bold:=32765;
цикл от i:=1 до n
если bol2[i].diagnoz=diagnoz то
если mol_bol>bol2[i].data.g то
если mol_bolm>bol2[i].data.m то
если mol_bold>bol2[i].data.d то
mol_bol:=bol2[i].data.g;
mol_bolm:=bol2[i].data.m;
mol_bold:=bol2[i].data.d;
nbol:=i; {nomer molodogo bolnogo}
Все
КЦ
если nbol>0 то
вывод(bol2(nbol))
иначе
вывод (V kartoteke net bolnix s takim diagozom)
Все
КОНЕЦ
Листинг программы.
program zykko;
uses crt;
type
bolnoy=record
fio:record
fam,im,ot:string;
end;
diagnoz:string;
data:record
g,m,d:integer;
end;
end;
var
bol,bol2:array [1..20] of bolnoy;
i,n,nbol:integer;
mol_bol,mol_bolm,mol_bold:integer;
diagnoz:string;
f:file of bolnoy;
begin
clrscr;
repeat
write('vvedite kolichestvo bolnix: ');
readln(n);
until (n>=1) and (n<=10);
assign(f,'c:\3.txt');
rewrite(f);
for i:=1 to n do
begin
writeln;
writeln('BOLNOY N',i);
writeln;
with bol[i] do
begin
write('Diagnoz: '); readln(diagnoz);
with fio do
begin
write('Familiya: '); readln(fam);
write('Ima: '); readln(im);
write('Ot4estvo: '); readln(ot);
end;
with data do
begin
write('God: '); readln(g);
write('Mesac: '); readln(m);
write('Den: '); readln(d);
end;
end;
write(f,bol[i]);
end;
close(f);
writeln;
write('Vvedite diagnoz: '); readln(diagnoz);
reset(f);
for i:=1 to filesize(f) do read(f,bol2[i]);
n:=filesize(f);
close(f);
nbol:=0;
mol_bol:=32765;
mol_bolm:=32765;
mol_bold:=32765;
for i:=1 to n do
if bol2[i].diagnoz=diagnoz then
if mol_bol>bol2[i].data.g then
if mol_bolm>bol2[i].data.m then
if mol_bold>bol2[i].data.d then
begin
mol_bol:=bol2[i].data.g;
mol_bolm:=bol2[i].data.m;
mol_bold:=bol2[i].data.d;
nbol:=i; {nomer molodogo bolnogo}
end;
writeln;
if nbol>0 then
begin
writeln('Samiy molodoy bolnoy s diagnozom: ',diagnoz,':');
with bol2[nbol] do
begin
with fio do
begin
writeln(fam);
writeln(im);
writeln(ot);
end;
with data do
begin
writeln(g:8);
writeln(m:8);
writeln(d:8);
end;
end;
end else
writeln('V kartoteke net bolnix s takim diagozom');
readkey
end.
Тесты
1.Нормальная работа:
vvedite kolichestvo bolnix: 2
BOLNOY N1
Diagnoz: spit
Familiya: Фарамазян
Ima: Араик
Ot4estvo: Михайлович
God: 1988
Mesac: 8
Den: 17
BOLNOY N2
Diagnoz: spit
Familiya: Адский
Ima: Мужик
Ot4estvo: Спящий
God: 1000
Mesac: 12
Den: 31
Vvedite diagnoz: spit
Samiy molodoy bolnoy s diagnozom:
Diagnoz: spit
Familiya: Фарамазян
Ima: Араик
Ot4estvo: Михайлович
God: 1988
Mesac: 8
Den: 17
2.Нет больных с заданным диагнозом:
vvedite kolichestvo bolnix: 1
TELEVIZOR N1
Diagnoz: spit
Familiya: Адский
Ima: Мужик
Ot4estvo: Спящий
God: 1000
Mesac: 12
Den: 31
Vvedite diagnoz: est
V kartoteke net bolnix s takim diagozom