Смекни!
smekni.com

Методические указания к лабораторным работам по дисциплине "Информатика" Составители: Викентьева О. Л., к т. н., доцент (стр. 7 из 8)

11. Написать подпрограмму, проверяющую, по возрастанию или убыванию упорядочена указанная строка двумерного массива. Упорядочить по возрастанию все строки двумерного массива, которые неупорядочены по убыванию.

12. Написать подпрограмму, для поиска максимального элемента в указанной строке двумерного массива. Сдвинуть в двумерном массиве все строки циклически вправо на количество элементов равное максимальному элементу в этой строке.

13. Определить, можно ли в двумерном массиве найти такой столбец, который разбивает массив на два так, что сумма элементов в первом больше, чем сумма элементов во втором. Сам столбец в разбиваемые части не входит.

14. Вычислить произведение всех столбцов массива, у которых первый элемент больше элементов расположенных на главной и побочной диагонали.

15. Задан двумерный массив. Найти сумму элементов первого столбца без одного последнего элемента, сумму элементов второго столбца без двух последних, сумму элементов третьего столбца без трех последних и т. д. Последний столбец не обрабатывается. Среди найденных сумм найти максимальную.

16. Задан двумерный массив N x N. Разрешается произвольно переставлять элементы внутри любого столбца. Проверить, можно ли выполнив конечное количество перестановок в столбцах, расположить на побочной диагональ элементы так, чтобы он возрастали.

17. Задан двумерный массив N x M. Найти в нем подмассив 3 х 3, сумма элементов которого максимальна. N и M могут быть не кратны трем.

18. Задан двумерный массив N x N. Последовательно рассматриваются квадратные подмассивы, правый верхний элемент которых лежит на побочной диагонали. В каждом таком подмассиве находится максимальный элемент. Путем перестановок строк и столбцов (целиком) элемент надо переместить в правый верхний угол подмассива. Проверить получилась ли на побочной диагонали убывающая последовательность элементов.

19. Задана строка из N2 цифр. Установить, можно ли, разбив строку на подстроки длиной N, записать их в строки двумерного массива N x N по одной цифре в одном элементе так, чтобы они в первом столбце расположились в порядке возрастания.

20. Найти минимальный из неповторяющихся элементов двумерного массива.

21. Найти максимальный из повторяющихся элементов двумерного массива.

22. В двумерном массиве найти среднее арифметическое первого столбца и количество элементов в каждом из следующих столбцов, превышающих среднее арифметическое предыдущего столбца.

23. Задан одномерный массив состоящий из N целых чисел. Сформировать на его основе двумерный массив N x N так, чтобы сумма элементов в первом столбце была равна первому элементу одномерного массива, сумма элементов во втором столбце была равна второму элементу одномерного массива и т. д. Нули не использовать.

24. Определить сколько элементов двумерного массива больше любого элемента на главной диагонали.

25. Из двумерного массива в одномерный записали сначала строки в произвольном порядке, затем столбцы в произвольном порядке. Написать программу, восстанавливающую исходный двумерный массив по одномерному, если известна размерность двумерного массива и элементы в нем не повторяются.

5. Содержание отчета

1) Постановка задачи (общая и конкретного варианта).

2) Алгоритм основной программы в виде блок-схемы

3) Описание и назначение глобальных переменных.

4) Описание используемых подпрограмм (заголовок, назначение параметров, краткий словесный алгоритм решаемой задачи).

5) Текст программы.

6) Результаты тестов.

6. Пример выполнения работы и оформления отчета

Лабораторная работа №4
«Использование процедур и функций»

1. Постановка задачи: Используя процедуры или функции, сформировать двумерный массив (матрицу), распечатать его, решить указанную в варианте задачу и вывести результаты в удобном для пользователя виде.

Вариант №26. Написать подпрограмму, которая находит максимальный элемент в матрице размерностью МхМ. С помощью этой подпрограммы найти минимальный из таких элементов в N матрицах.

2. Алгоритм основной программы в виде блок-схемы


3. Описание и назначение глобальных переменных

I:integer - счетчик цикла для перебора матриц;

K:integer - минимальный элемент массива из максимальных элементов матриц;

size : integer; - размер матриц;

n: integer; - количество матриц

r: mas_matr; - массив из матриц 10х10.

a: mas_max; - массив целых чисел для хранения максимальных значений матриц;

4. Описание используемых подпрограмм (заголовок, назначение параметров, краткий словесный алгоритм решаемой задачи).

1) procedure Form(var R: mas_matr; nom: integer); - формирование матрицы с номером nom из массива матриц R.

С помощью циклов с параметром перебираются строки и столбцы матрицы, датчиком случайных чисел формируется элемент R[nom,i,j].

2) procedure Print(R: mas_Matr; nom: integer ); - печать матрицы с номером nom из массива матриц R.

С помощью циклов с параметром перебираются строки и столбцы матрицы, печатается элемент R[nom,i,j].

3) function Max(r:matr):integer; - вспомогательная функция для поиска максимального элемента в матрице R.

С помощью циклов с параметром перебираются строки и столбцы матрицы, элемент R[i,j] сравнивается с максимальным.

4) procedure Maxim(r:Mas_matr;var a:mas_max); - формирует массив максимальных элементов А, r- массив матриц, в которых ищутся максимальные элементы.

С помощью цикла с параметром для каждой матрицы из массива матриц r вызывается функция Max.

5) function minim(a:mas_max):integer; - ищет минимальный элемент в массиве А.

С помощью цикла с параметром перебирается массив а и каждый элемент сравнивается с минимальным.

5. Текст программы

uses crt;

type

matr= array [1..10,1..10] of integer;

mas_max =array[1..10]of integer;

mas_matr =array[1..10]of Matr;

var i, k, size : integer;

n: integer;

r: mas_matr;

a: mas_max;

procedure Form(var R: mas_matr; nom: integer);

var i, j: integer;

begin

for i:=1 to size do

for j:=1 to size do

r[nom,i,j]:=random(100);

end;

procedure Print(R:mas_Matr;nom:integer);

var i,j:integer;

begin

for i:=1 to size do begin

for j:=1 to size do

write(r[nom, i, j]:4);

writeln;

end;

writeln;

end;

function Max(r:matr):integer;

var v,i,j:integer;

begin

v:=r[1,1];

for i:=1 to size do

for j:=1 to size do

if v<r[i,j]then

v:=r[i,j];

max:=v;

end;

procedure Maxim(r:Mas_matr;var a:mas_max);

var t:integer;

begin

for t:=1 to n do

a[t]:=max(r[t]);

end;

function minim(a:mas_max):integer;

var t,min:integer;

begin

min:=a[1];minim:=1;

for t:=1 to n do

if min>a[t] then begin min:=a[t];

minim:=t;

end;

end;

begin{main}

clrscr;

writeln('Введите количество матриц');

readln(n);

writeln('Введите размер матрицы');

readln(size);

for i:=1 to n do begin

form(R,i);

print(R,i);

end;

maxim(r,a);

k:=minim(a);

print(r,k);

end.

6. Тесты

N Size Исходные матрицы Результат
2 3 0 3 86 20 27 67 31 16 37 42 8 47 7 84 5 29 91 36 0 3 86 20 27 67 31 16 37
3 2 0 3 86 20 27 67 31 16 37 42 8 47 37 42 8 47

Лабораторная работа № 5
«Работа с типизированными и текстовыми файлами»

1. Цель работы:

Изучение типизированных и текстовых файлов и способов работы с ними.

2. Краткие теоретические сведения

2.1. Понятие файла

ФАЙЛ - это именованная область памяти на внешнем устройстве.

Файлы имеют три особенности:

1) файл имеет имя, что дает возможность программе работать одновременно с несколькими файлами;

2) содержит компоненты одного типа;

3) длина файла в программе не ограничивается;

Файловый тип или файловую переменную можно задать следующим образом:

<имя>=FILE OF <тип>;

<имя>=TEXT;

где <имя> - имя файлового типа;

<тип> - любой тип Турбо Паскаля, кроме файлов;

TEXT - имя стандартного типа текстовых файлов ;

Например,

type Zap = record;

Name : string;

Days : integer;

end;

Filetype1 : file of Zap;{типизированный файл }

Filetype2 : Text; {текстовый файл}

var Fzap : filetype1;

Ftext : filezap2;

2.2. Стандартные процедуры и функции для работы с файлами

К файлам можно применять следующие стандартные процедуры и функции:

1)процедура assign(<файловая переменная>,<имя файла на диске>) - связывает файловую переменную (которая используется в программе) с именем существующего или создаваемого файла на диске.

2)процедура reset(<файловая переменная>) открывает для чтения файл, который уже существует на диске. При этом специальная переменная-указатель, связанная с этим файлом, устанавливается на начало файла, т. е. на компонент с порядковым номером 0. Если попытаться открыть для чтения файл, который не существует на диске, возникнет аварийный останов программы. Чтобы этого не произошло, надо сначала установить, есть ли файл на диске. Для этого надо выполнить следующую последовательность операторов:

{$I-} { отключить контроль за ошибками ввода-вывода}

reset(f); {открыть для чтения файл, связанный с файловой переменной f}

{$I+} { включить контроль за ошибками ввода-вывода}

if ioresult<>0 then

. . . {файл не существует }

else

. . . {файл существует }

3)Функция ioresult возвращает 0, если последняя операция ввода- вывода завершилась успешно, в противном случае возвращает код ошибки. Эта функция становится доступной только при отключенном автоконтроле ошибок ввода-вывода. Директива компилятора {$I-} отключает, а {$I+} включает автоконтроль.

4)процедура rewrite(<файловая переменная>)- открывает файл для записи. При этом если файл уже существует на диске вся информация из него стирается. Переменная-указатель, связанная с этим файлом, устанавливается на начало файла, т. е. на компонент с порядковым номером 0. Желательно при выполнении этой операции также проверять существует файл или нет, чтобы не стереть нужную информацию.

5)процедура read(<файловая переменная>,<список ввода>) - читает очередные компоненты типизированного или текстового файла. Для типизированных файлов список ввода содержит одну или более переменных такого же типа, что и компоненты файла.