// генератора случайных чисел
srand((unsigned) time(&t)); // инициализация генератора
// случайных чисел
m = mass_max-mass_min + 1;
// получение случайного числа в диапазоне
// от mass_min до mass_max
for (i=0; i<nn; i++)
for (j=0; j<nn; j++)
mass[i][j]=rand()% m + mass_min;
}
// 2. определение суммы максимальных элементов диагоналей массива
int summa_max(int nn, int mass[nn][nn])
{
int i, max_1, max_2;
max_1 = mass[0][0];
for (i=1; i<nn; i++)
if (mass[i][i] > max_1)
max_1 = mass[i][i];
max_2 = mass[0][nn-1];
for (i=1; i<nn; i++)
if (mass[i][nn-i-1] > max_2)
max_2 = mass[i][nn-i-1];
return max_1 + max_2;
}
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.1. На языке Паскаль:
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.
3.2. На языке Си:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
// прототипы функций
void vorm_vector(int nn, int vect_max, int vect_min, int vect[nn]);
void min_max(int nn, int vector[nn]);
Int main()
{
int i, j, n, vector_min, vector_max;
printf("\nЛабораторная работа №7_2");
printf("\nВариант №0");
printf("\nПО-11-1");
printf("\nПупкин Василий\n");
printf("\nВведите нижнюю границу диапазона:");
scanf("%d", &vector_min);
printf("\nВведите верхнюю границу диапазона:");
scanf("%d", &vector_max);
printf("\nВведите размер вектора:");
scanf("%d", &n);
int vector[n];
printf("\nИсходный вектор:\n");
vorm_vector(n, vector_max, vector_min, vector);
for (i=0; i<n; i++)
printf("%5d", vector[i]);
printf("\n");
min_max(n, vector);
printf("\nВыходной вектор:\n");
for (i=0; i<n; i++)
printf("%5d", vector[i]);
printf("\n");
return 0;
}
//описание функций
// 1. формирование вектора
void vorm_vector(int nn, int vect_max, int vect_min, int vect[nn])
{
int i, m;