- •Иркутский государственный университет путей сообщения
- •Содержание
- •Лабораторная работа № 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. Компиляция, отладка, тестирование и получение результата: