Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Лабораторная работа № 7




Подпрограммы

Тема: Создание программ, использующих пользовательские подпрограммы-функции (процедуры).

Цель работы: Освоить создание и работу с подпрограммами-функциями и процедурами.

 

Задание на лабораторную работу

  1. Получить задание в соответствии с номером своего варианта.
  2. Составить схему алгоритма решения задачи.
  3. Написать код программы на языке Паскаль в среде Borland Pascal for Windows.
  4. Осуществить компиляцию, отладку и тестирование программы.
  5. Получить результат.
  6. Оформить отчет по лабораторной работе.

 

Пример оформления работы

Задание 1.

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

Перед началом поиска максимального элемента max_1 главной диагонали массива принимаем за него элемент massiv11. После этого сравниваем остальные элементы главной диагонали massivii (i=2,…,n) с текущим максимумом: если очередной элемент больше текущего максимума max_1, то сейчас он – текущий максимум.

Перед началом поиска максимального элемента max_2 побочной диагонали массива принимаем за него элемент massivnn. После этого сравниваем остальные элементы побочной диагонали massivij (i=2,…,n; j=n-i+1) с текущим максимумом: если очередной элемент больше текущего максимума max_2, то сейчас он – текущий максимум.

 

2. Схема алгоритма решения задачи.

2.1. Головная программа:

 

2.2. Подпрограмма-функция:

 

 

3. Код программы:

 

Program Variant_0;

Uses WinCrt;

Const n = 5; {задание размера массива именованной константой}

Type TMass=Array [1..n, 1..n] Of Integer;{описание нового типа}

Var i, j: Word;

summa, v_min, v_max: Integer;

massiv: TMass;

Function Summa_max(nn:Integer; AA:TMass):Integer;

Var i, max_1, max_2: Integer;

Begin

max_1:=AA[1,1];

For i:=2 To nn Do

If (AA[i,i]>max_1)

Then max_1:=AA[i,i];

max_2:=AA[nn,nn];

For i:=2 To nn Do

If (AA[i,nn-i+1]>max_2)

Then max_2:=AA[i,nn-i+1];

Summa_max:=max_1+max_2;

End; {функции Summa_max}

Begin {головной программы}

Randomize; {запуск генератора случайных чисел}

WriteLn('Лабораторная работа №7_1');

WriteLn('Вариант №0');

WriteLn('ИС-11-1');

WriteLn('Пупкин Василий');

WriteLn;

WriteLn('Задайте диапазон случайных чисел');

Write('v_min=');

ReadLn(v_min);

Write('v_max=');

ReadLn(v_max);

For i:=1 To n Do {заполнение массива случайными числами}

For j:=1 To n Do

massiv[i,j]:=Random(v_max-v_min + 1) + v_min;

WriteLn;

WriteLn('Исходный массив:');

For i:=1 To n Do {вывод на экран исходного массива}

Begin

For j:=1 To n Do

Write(massiv[i,j]:5);

WriteLn;

End;

WriteLn;

summa:=Summa_max(n, massiv);

WriteLn('Сумма максимальных элементов диагоналей:', summa);

End.

4. Компиляция, отладка, тестирование и получение результата:

 

Задание 2.

  1. Создать процедуру:

- определяющую максимальный и минимальный элементы вектора vectorn,

- сортирующую элементы, находящиеся между ними, по возрастанию.

Перед началом поиска максимального элемента max вектора vectorn принимаем за него элемент vector1. После этого сравниваем остальные элементы вектора vectori (i=2,…,n) с текущим максимумом: если очередной элемент больше текущего максимума max, то сейчас он – текущий максимум. Запоминаем индекс текущего максимума i_max.

Таким же образом определяем минимальный элемент вектора min и его индекс i_min.

Сравниваем индексы найденных элементов:

- если i_min < i_max, то сортируем элементы вектора от i_min+1 до i_max-1,

- если i_max < i_min, то сортируем элементы вектора от i_max+1 до i_min-1,

 

  1. Схема алгоритма решения задачи

2.1. Головная программа:

 

2.2. Подпрограмма-процедура:

3. Код программы:

 

Program Variant_0;

Uses WinCrt;

Const n = 10; {задание размера вектора именованной константой}

Type TVect=Array [1..n] Of Integer;{описание нового типа}

Var i, j: Word;

vector: TVect;

min, max, v_min, v_max: Integer;

Procedure Sort_max_min(Var min_vector, max_vector: Integer;
Var AA: Array Of Integer);

Var i, j, k, min, max, i_min, i_max, k_nach, k_kon, nn: Integer;

Begin

nn:=High(AA); {индекс последнего элемента открытого вектора}

max:=AA[0];

i_max:=0;

For i:=1 To nn Do {поиск максимального элемента вектора}

If (AA[i]>max) Then

Begin

max:=AA[i];

i_max:=i;

End;

min:=AA[0];

i_min:=0;

For i:=1 To nn Do {поиск минимального элемента вектора}

If (AA[i]<min) Then

Begin

min:=AA[i];

i_min:=i;

End;

min_vector:=min;

max_vector:=max;

If (i_min<i_max) {определяем начало и конец диапазона сортировки}

Then

Begin

k_nach:=i_min+1;

k_kon:=i_max-1;

End

Else

Begin

k_nach:=i_max+1;

k_kon:=i_min-1;

End;

{сортировка элементов между k_nach и k_kon методом “пузырька”}

For i:=k_kon DownTo k_nach+1 Do

For j:=k_nach To i-1 Do

If (AA[j]>AA[j+1]) Then {меняем эти элементы местами}

Begin

k:=AA[j];

AA[j]:=AA[j+1];

AA[j+1]:=k;

End;

End; {процедуры Sort_max_min}

Begin {головной программы}

Randomize; {запуск генератора случайных чисел}

WriteLn('Лабораторная работа №7_2');

WriteLn('Вариант №0');

WriteLn('ИС-11-1');

WriteLn('Пупкин Василий');

WriteLn;

WriteLn('Задайте диапазон случайных чисел');

Write('v_min=');

ReadLn(v_min);

Write('v_max=');

ReadLn(v_max);

For i:=1 To n Do {заполнение вектора случайными числами}

vector[i]:=Random(v_max-v_min + 1) + v_min;

WriteLn;

WriteLn('Исходный вектор:');

For i:=1 To n Do {вывод на экран исходного вектора}

Write(vector[i]:5);

WriteLn;

Sort_max_min(min, max, vector);

WriteLn;

WriteLn('min=', min);

WriteLn('max=', max);

WriteLn;

WriteLn('Полученный вектор:');

For i:=1 To n Do {вывод на экран выходного вектора}

Write(vector[i]:5);

WriteLn;

WriteLn;

End.

 

4. Компиляция, отладка, тестирование и получение результата:

 

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...