Лабораторная работа № 7
Подпрограммы Тема: Создание программ, использующих пользовательские подпрограммы-функции (процедуры). Цель работы: Освоить создание и работу с подпрограммами-функциями и процедурами.
Задание на лабораторную работу
Пример оформления работы Задание 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.
- определяющую максимальный и минимальный элементы вектора 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,
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 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|