Балтийский Государственный
Технический Университет
«ВоенМех»
имени Д.Ф. Устинова
Отчет
к лабораторной работе по информатике №2
На тему
“Модули раздельной трансляции”
Отчет выполнил студент
Факультета «И»
Суханов Александр
Группа И433
Санкт-Петербург 2004
Лабораторная работа по информатике №2
Тема: Модули раздельной трансляции
Цель: Ознакомиться с понятием модуля. Научиться использовать модульный принцип при решении задач на языке Pascal.
Исходная задача: Дана вещественная матрица V10*15. Выполнить в каждом столбце матрицы следующую перестановку: поменять местами минимальный элемент столбца с первым элементом этого же столбца. Программу должна состоять из следующих модулей:
Структуры данных:
Matrix – Тип-Матрица
Nmax, Mmax – Максимально допустимые размеры матрицы V [Integer]
N, M – Размеры матрицы V [Integer]
V – Обрабатываемая матрица [Matrix]
Процедуры и функции:
Procedure Input (var n, m: Integer; var V: Matrix) – Ввод данных [Модуль InOut.pas]
Procedure Output (n, m: Integer; V: Matrix) – Вывод данных [Модуль InOut.pas]
Procedure Count (n, m: Integer; var V: Matrix) – Преобразование Матрицы [Модуль Counter.pas]
Листинг программы, решающей данную задачу:
{Файл Main.pas}
program lab2;
uses Structur, InOut, Counter, Crt;
begin
Input(n, m, V);
gotoXY(2, 2);
write('Исходная матрица V:');
Output(n, m, V);
Count(n, m, V);
gotoXY(2, 2);
write('Преобразованная матрица V:');
Output(n, m, V);
end.
{Файл Structur.pas}
unit Structur;
interface
const Nmax = 10;
Mmax = 9;
type Matrix = array [1..Nmax,1..Mmax] of real;
var V: Matrix;
n, m: integer;
implementation
begin
end.
{Файл InOut.pas}
unit InOut;
interface
uses Structur, Crt;
procedure Input (var n, m: Integer; var V: Matrix);
procedure Output (n, m: Integer; V: Matrix);
implementation
procedure Input (var n, m: Integer; var V: Matrix);
var zicl, zicl2: Integer;
begin
ClrScr;
write('Введите кол-во строк [Maximum ', Nmax,']: '); readln(n);
write('Введите кол-во столбцов [Maximum ', Mmax,']: '); readln(m);
if n>Nmax then n:=Nmax;
if m>Mmax then m:=Mmax;
for zicl:=1 to n do
begin
write(zicl,' строка[элементов: ', m, ']: ');
for zicl2:=1 to m do read(V[zicl, zicl2]);
end;
gotoXY(1, 25);
write('Ввод завершен. Нажмите любую клавишу...');
repeat
until Keypressed;
ClrScr;
end;
procedure Output (n, m: Integer; V: Matrix);
var zicl, zicl2: Integer;
c: Char;
begin
gotoXY(2, 3);
write('г');
for zicl:=1 to m*8 do write('=');
write('¬');
for zicl:=1 to n do
begin
gotoXY(2, zicl+3);
write('¦');
for zicl2:=1 to m do write(V[zicl, zicl2]:7:3,' ');
write('¦');
end;
gotoXY(2, WhereY+1);
write('L');
for zicl:=1 to m*8 do write('=');
write('-');
gotoXY(1, 25);
write('Нажмите любую клавишу...');
while keypressed do c:=readkey;
repeat
until Keypressed;
ClrScr;
end;
begin
end.
{Файл Counter.pas}
unit Counter;
interface
uses Structur;
procedure Count (n, m: Integer; var V: Matrix);
implementation
procedure Count (n, m: Integer; var V: Matrix);
var zicl, zicl2, poz: integer;
min: real;
begin
for zicl:=1 to m do
begin
min:=V[1, zicl];
poz:=1;
for zicl2:=2 to n do
if V[zicl2, zicl]<min then
begin
poz:=zicl2;
min:=V[zicl2, zicl];
end;
if poz<>1 then
begin
V[poz, zicl]:=V[1, zicl];
V[1, zicl]:=min;
end;
end;
end;
begin
end.
Тестовые данные:
1) A4*5 = 1 2 3 4 5 Ответ: A4*5 = 0 0 0 0 5
1 2 3 4 6 1 2 3 4 6
0 0 0 0 5 1 2 3 4 5
2 1 1 1 7 2 1 1 1 7
2) A4*5 = 3 9 3 0 5Ответ: A4*5 = 1 1 3 0 2
1 2 3 4 6 3 2 3 4 6
6 8 4 6 2 6 8 4 6 5
2 1 9 8 7 2 9 9 8 7
Блок-схема алгоритма:
Вывод: Мною было изучено понятие модуля раздельной трансляции и правила работы программы, использующей модули. Для закрепления изученного материала была написана программа (lab2.pas). Произведенные тесты этой программы позволяют сделать вывод о правильности ее алгоритма и реализации этого алгоритма.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.