Страница 1 из 1
Pascal. Массивы. Перестановка элементов вектора
Добавлено: 10 янв 2018, 01:50
Gollum
PascalABC.NET
Дан целочисленный вектор а(n).Найти наименьшее из четных чисел,определить его индекс и поменять местами с макс. элементом.Вывести исходный вектор,полученный результат и преобразованный вектор.
Вот что получилось у меня.Объясните,что не так,пожалуйста.
Код: Выделить всё
program zadanie2;
const n=10;
var a: array[1..n] of integer;
i,min,max,minind,z: integer;
begin
min:=maxint;
writeln('Введите ',n,' элементов массива:' );
for i:=1 to n do
read(a[i]);
for i:=1 to n do
if (a[i] mod 2=0)and(a[i]<min) then
begin
min:=a[i];
minind:=i;
end;
writeln('Минимальный четный элемент: ',min);
writeln('Индекс минимального четного элемента: ',minind);
max:=a[i];
for i:=2 to n do
if a[i]>max then max:=a[i];
Writeln('Максимальный элемент массива:',max);
i:=min;
min:=max;
max:=i;
for i:=1 to n do
write(a[i],' ');
end.
[ATTACH]2451[/ATTACH]
Re: Pascal.Массивы.Перестановка элементов
Добавлено: 10 янв 2018, 05:38
garmayev
Код: Выделить всё
type mas = array [1..10] of integer;
const n = 10;
function readArray: mas;
var i: integer;
a: mas;
begin
for i:=1 to n do read(a[i]);
readArray:= a;
end;
procedure writeArray(a: mas);
var i: integer;
begin
for i:=1 to n do
begin
write(a[i]);
write(' ');
end;
writeln;
end;
procedure findMin(a: mas; min: integer; var value, index: integer);
var i: integer;
begin
index:= -1;
for i:=1 to n do
if ( (a[i] mod 2 = 0) and (a[i] < min) ) then
begin
value:= a[i];
index:= i;
min:= a[i];
end;
end;
procedure findMax(a: mas; max: integer; var value, index: integer);
var i: integer;
begin
index:= -1;
for i:=1 to n do
if ( a[i] > max ) then
begin
value:= a[i];
index:= i;
max:= a[i]
end;
end;
var a: mas;
min, minIndex, max, maxIndex, buffer: integer;
begin
a:= readArray();
findMin(a, 32767, min, minIndex);
findMax(a, -32767, max, maxIndex);
writeArray(a);
write(min,' ',minIndex);
writeln;
buffer:= a[minIndex];
a[minIndex]:= a[maxIndex];
a[maxIndex]:= buffer;
writeArray(a);
end.
Как-то так
Re: Pascal.Массивы.Перестановка элементов
Добавлено: 10 янв 2018, 14:32
Gollum
Спасибо большое!
Re: Pascal.Массивы.Перестановка элементов
Добавлено: 12 янв 2018, 04:26
Oleg_Rus
В твоем решении:
1. Ты не сохраняешь индекс максимального элемента
2. Неправильная перестановка элементов
Посмотри решение выше Там все вынесено на функции/процедуры
readArray и writeArray - соответственно чтение и вывод массива
процедуры findMin и fnidMax - поиск минимального и максимального элемента с сохранением индекса
в основном теле программы идет вызов всех вышеописанных процедур и функций и перестановка необходимых элементов
Re: Pascal.Массивы.Перестановка элементов
Добавлено: 12 янв 2018, 13:23
dr.Jekill
Позволю себе сделать небольшое дополнение, которое не влияет на правильность результата, а только на скорость выполнения программы.
Для решения данной задачи достаточно 2 циклов:
- в одном ввод массива, нахождение max и min, вывод исходного массива;
- во втором вывод преобразованного массива.
Re: Pascal.Массивы.Перестановка элементов
Добавлено: 13 янв 2018, 17:39
garmayev
dr.Jekill писал(а):Позволю себе сделать небольшое дополнение, которое не влияет на правильность результата, а только на скорость выполнения программы.
Для решения данной задачи достаточно 2 циклов:
- в одном ввод массива, нахождение max и min, вывод исходного массива;
- во втором вывод преобразованного массива.
Нууу, оптимальный код я как-то даже не заморачивался =))) постарался написать "красиво", когда все аккуратно завернуто в функции и процедуры =))) для полного экстремизма можно все это завернуть в модуль, который отрабатывает автоматически при подключении. Т.о. весь код программы может свестись до 3 строк
uses myModule;
begin
end.
Re: Pascal.Массивы.Перестановка элементов
Добавлено: 15 янв 2018, 21:22
Gollum
dr.Jekill писал(а):
Для решения данной задачи достаточно 2 циклов:
- в одном ввод массива, нахождение max и min, вывод исходного массива;
- во втором вывод преобразованного массива.
У меня не выходит сделать с меньшим количеством циклов(
Re: Pascal.Массивы.Перестановка элементов
Добавлено: 17 янв 2018, 07:05
garmayev
Код: Выделить всё
max:= -32000;
min:= 32000;
for i:=1 to n do
begin
read(a[i]);
if (a[i] > max) then
begin
max:= a[i];
maxIndex:= i;
end else if ( a[i] < min ) then
begin
min:= a[i];
minIndex:= i;
end;
end;
writeln(min, minIndex);
writeln(max, maxIndex);
for i:=1 to n do write(a[i]);
Как-то так в два цикла должно быть.