Скачиваний:
6
Добавлен:
20.05.2014
Размер:
71.17 Кб
Скачать

ЛАБОАТОРНАЯ РАБОТА№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

14

Соседние файлы в папке Отчеты по проге паскаль вариант 27