- •В. А. Лучников программирование на языках высокого уровня
- •Оглавление
- •Лабораторная работа № 1 выражения и операторы присваивания
- •Задание на лабораторную работу
- •Пример оформления работы
- •Задания на лабораторную работу № 1
- •Пример оформления работы
- •Задания на лабораторную работу № 2
- •Пример оформления работы
- •Int n; // целого типа
- •Задания на лабораторную работу № 3
- •Пример оформления работы Задание 1
- •Int n; // целого типа
- •Задание 2
- •Int a, a1, a2, k, n, s; //описание переменных
- •Int a, a1, a2, n, s; // целого типа
- •Задания на лабораторную работу № 4
- •Пример оформления работы
- •If (c In ['0'..'9']) Then {если очередной элемент - цифра}
- •Val(s,k,error); {преобразуем строку в число}
- •Задания на лабораторную работу № 5
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Лабораторная работа № 6 массивы
- •Задание на лабораторную работу
- •Пример оформления работы Задание 1
- •Int n, vector_min, vector_max, min, max, i_min, i_max; String input, text; // строк класса String
- •Задание 2
- •Int n, massiv_min, massiv_max, temp; // целого типа
- •Задания на лабораторную работу № 6
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Вариант 16
- •Вариант 17
- •Вариант 18
- •Вариант 19
- •Вариант 20
- •Лабораторная работа № 7 подпрограммы
- •Задание на лабораторную работу
- •Пример оформления работы Задание 1
- •Задание 2
- •Задания на лабораторную работу № 7
- •Вариант 1
- •Вариант 15
- •Лабораторная работа № 8 файлы
- •Задание на лабораторную работу
- •Пример оформления работы Задание 1
- •Задание 2
- •Задания на лабораторную работу № 8
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Лабораторная работа № 9 рекурсия
- •Задание на лабораторную работу
- •Пример оформления работы Задание 1
- •Задание 2
- •Задания на лабораторную работу № 9
Задание 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;
time_t t; // текущее время для инициализации
// генератора случайных чисел
srand((unsigned) time(&t)); // инициализация генератора
// случайных чисел
m = vect_max-vect_min + 1;
// получение случайного числа в диапазоне
// от vector_min до vector_max
for (i=0; i<nn; i++)
vect[i]=rand()% m + vect_min;
}
// 2. Определение min и max элементов,
// сортировка элементов между ними
void min_max(int nn, int vect[nn])
{
int i, j, i_max, i_min, max, min, k_nach, k_kon, temp;
max = vect[0]; //начальные значения и индексы min и max
i_max = 0;
min = vect[0];
i_min = 0;
for (i=1; i<nn; i++) //поиск min и max элементов вектора
{
if (vect[i] > max)
{
max = vect[i];
i_max = i;
}
if (vect[i] < min)
{
min = vect[i];
i_min = i;
}
}
printf("\n min=%d i_min=%d", min, i_min);
printf("\n max=%d i_max=%d\n", max, i_max);
//определяем начало и конец диапазона сортировки
if (i_min < i_max)
{
k_nach = i_min + 1;
k_kon = i_max - 1;
}
else
{
k_nach = i_max + 1;
k_kon = i_min - 1;
}
//сортировка элементов между k_nach и k_kon методом пузырька
for (i = k_kon; i >= k_nach + 1; i--)
for (j = k_nach; j <= i - 1; j++ )
if (vect[j] > vect[j + 1])
{
temp = vect[j];
vect[j] = vect[j + 1];
vect[j + 1] = temp;
}
}
4. Компиляция, отладка, тестирование и получение результата: