Помощь - Поиск - Пользователи - Календарь
Полная версия: Векторы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Владимир89
В целочисленном векторе vector n найти минимальный и максимальный элементы. Перевернуть элементы вектора, расположенные между ними (выполнить “поплавок”).

Входные данные:
n=10
v_min=-5
v_max=10
Исходный вектор:
7 -5 1 3 -2 5 2 0 10 1

Выходные данные:
min=-5 n_min=2
max=10 n_max=9
Выходной вектор:
7 -5 0 2 5 -2 3 1 10 1
TarasBer
А есть есть несколько минимальных и максимальных?
Владимир89
есть пример на который нужно опираться

Program Variant_0;
Uses WinCrt;
Const n = 10; {задание размера вектора именованной константой}

Var i, v_min, v_max, i_max, max, i_min, min : Integer;
vector : Array [1..n] Of Integer;

Begin

Randomize; {запуск генератора случайных чисел}

WriteLn('Лабораторная работа №6_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 {заполнение вектора случайными числами}
vector[i]:=Random(v_max-v_min + 1) + v_min;


WriteLn;
WriteLn('Исходный вектор:');
For i:=1 To n Do {вывод на экран исходного вектора}
Write(vector[i]:5);
WriteLn;

max:= vector[1]; {пока макс элемент – первый элемент вектора}
i_max:= 1;
min:= vector[1]; {пока мин элемент – первый элемент вектора}
i_min:= 1;

For i:=2 To n Do {поиск начинаем со второго элемента}
Begin

If (vector[i] > max) Then {если очередной элемент больше} {текущего максимального}
Begin
max := vector[i]; {то максимальным элементом}
i_max := i; {становится очередной элемент} {вектора}
End;

If (vector[i] < min) Then {если очередной элемент меньше} {текущего минимального}
Begin
min := vector[i]; {то минимальным элементом}
i_min := i; {становится очередной элемент} {вектора}
End;

End;

WriteLn;
WriteLn(‘max=’, max, ‘ i_max=’, i_max);
WriteLn(‘min=’, min, ‘ i_min=’, i_min);

vector[i_max]:=min; {меняем местами макс и мин элементы}
vector[i_min]:=max; {в векторе}


WriteLn;
WriteLn('Полученный вектор:');
For i:=1 To n Do {вывод на экран полученного вектора}
Write(vector[i]:5);
WriteLn;

End.
TarasBer
Блин вы запарили.
Во-первых, используй тег code=pas!
Во-вторых, какой в жопу bmp, вы про другие форматы знаете вообще, и про то, что сеть не резиновая?

Короче, исправляй, только потом, может быть, буду говорить, что делать.
TarasBer
А, теперь jpg. Получше, но тоже отвратно.
Ну почему никто не знает про формат png, которыей и разводов не оставляет, и сжимает отлично?
Уже же у половины населения винда-семёрка стоит, у которой пеинт по умолчанию в ПНГ сохраняет, так откуда же, ОТКУДА до сих пор берутся бмпшники и жпгешники?
Krjuger
Меню->Сохранить как-> blabla bla.bmp))))))
-TarasBer-
Цитата(Krjuger @ 16.12.2011 22:14) *

Меню->Сохранить как-> blabla bla.bmp))))))

Ну да, упорные дятлы всегда пробьются.
Владимир89
а сейчас как?
TarasBer
Во, теперь нормально.
В общем, по-прежнему висит вопрос: что делать, если максимальных элементов несколько?
Код из собщения номер три я не читал, потому что он не отформатирован и вне тега code=pas.
Владимир89
Program Variant_0; 
Uses WinCrt;
Const n = 10; {задание размера вектора именованной константой}
Var
i, v_min, v_max, i_max, max, i_min, min : Integer;
vector : Array [1..n] Of Integer;
Begin
Randomize; {запуск генератора случайных чисел}
WriteLn('Лабораторная работа №6_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 {заполнение вектора случайными числами}
vector[i]:=Random(v_max-v_min + 1) + v_min;
WriteLn;
WriteLn('Исходный вектор:');
For i:=1 To n Do {вывод на экран исходного вектора}
Write(vector[i]:5);
WriteLn;
max:= vector[1]; {пока макс элемент – первый элемент вектора}
i_max:= 1;
min:= vector[1]; {пока мин элемент – первый элемент вектора}
i_min:= 1;
For i:=2 To n Do {поиск начинаем со второго элемента}
Begin
If (vector[i] > max) Then {если очередной элемент больше} {текущего максимального}
Begin
max := vector[i]; {то максимальным элементом}
i_max := i; {становится очередной элемент} {вектора}
End;
If (vector[i] < min) Then {если очередной элемент меньше} {текущего минимального}
Begin
min := vector[i]; {то минимальным элементом}
i_min := i; {становится очередной элемент} {вектора}
End;
End;
WriteLn;
WriteLn(‘max=’, max, ‘ i_max=’, i_max);
WriteLn(‘min=’, min, ‘ i_min=’, i_min);
vector[i_max]:=min; {меняем местами макс и мин элементы}
vector[i_min]:=max; {в векторе}
WriteLn;
WriteLn('Полученный вектор:');
For i:=1 To n Do {вывод на экран полученного вектора}
Write(vector[i]:5);
WriteLn;
End.

вот и компиляция задачи
TarasBer
Ага, если максимальных и минимальных несколько, то надо брать первое вхождение.

Короче, тебе надо сделать то же самое, но вместо обмена двух значений местами вот как:


i := i_min;
j := i_max;
while i<j do begin
t := vector[i];
vector[i]:=vector[j];
vector[j] := t;
inc(i);
dec(j);
end;

Владимир89
Спасибо большое очень помог
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.