Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методич. указания по выполнению лабораторных работ.doc
Скачиваний:
40
Добавлен:
27.03.2016
Размер:
5.32 Mб
Скачать

Задание 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. Подпрограмма-процедура:

  1. Код программы

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. Компиляция, отладка, тестирование и получение результата: