Консультация № 176271
24.01.2010, 22:01
0.00 руб.
0 5 1
Добрый вечер,уважаемые эксперты!!!!
помогите решить задачки на СДВИГИ, УДАЛЕНИЕ , ВСТАВКА массивов
1)а_)Даны натуральное число n и вещественный массив из n элементов. Удалить из массива элемент, расположенный перед максимальным элементом. При отсутствии элементов перед максимальным выдать соответствующее сообщение
б)Даны натуральное число n и вещественный массив из n элементов. Удалить из массива элемент, расположенный после элемента с максимальным значением и после элемента с минимальным значением. Если массив состоит из одинаковых элементов или какое-то удаление невозможно, выдать соответствующее сообщение.
2)Даны натуральное число n и вещественный массив из n элементов. Удалить из массива элемент, расположенный после каждого значения, равного минимальному элементу. При отсутствии таких элементов выдать соответствующее сообщение.

Обсуждение

давно
Профессор
401888
1232
25.01.2010, 10:13
общий
это ответ
Здравствуйте, angel.nero!
Решения задач в приложении. Там где порядок и содержание массива роли не играет, написал ввод через рандом, там где это существенно, ввод с клавиатуры.

Приложение:
1)а_)Даны натуральное число n и вещественный массив из n элементов. Удалить из массива элемент, расположенный перед максимальным элементом. При отсутствии элементов перед максимальным выдать соответствующее сообщение
uses crt;
const max=100;
var a:array[1..max] of real;
n,i,imx:integer;
begin
clrscr;
randomize;
repeat
write('Размер массива n=');
readln(n);
until n in [1..max];
writeln('Исходный массив:');
for i:=1 to n do
begin
a[i]:=10*random;
write(a[i]:0:2,' ');
end;
writeln;
imx:=1;
for i:=1 to n do
if a[i]>a[imx] then imx:=i;находим индекс максимального элемента}
if imx=1 then write('Перед максимальным нет элементов!'){если он первый}
else{иначе}
begin
writeln('Максимальный элемент a[',imx,']=',a[imx]:0:2);
for i:=imx-1 to n-1 do{к элементу перед максимальным сдвигаем конец массива}
a[i]:=a[i+1];{на 1 влево, элемент исчезает}
n:=n-1;{уменьшаем размер массива}
writeln('Удаление элемента перед максимальным:');
for i:=1 to n do
write(a[i]:0:2,' ');
end;
readln
end.
б)Даны натуральное число n и вещественный массив из n элементов. Удалить из массива элемент, расположенный после элемента с максимальным значением и после элемента с минимальным значением. Если массив состоит из одинаковых элементов или какое-то удаление невозможно, выдать соответствующее сообщение.
uses crt;
const max=100;
var a:array[1..max] of real;
n,i,imx,imn:integer;
begin
clrscr;
randomize;
repeat
write('Размер массива n=');
readln(n);
until n in [1..max];
writeln('Введите ',n,' элементов массива:');
for i:=1 to n do
begin
write('a[',i,']=');{здесь делаем ввод с клавиатуры, чтобы проверить когда все числа одинаковые,
рандомно это не получится}
readln(a[i]);
end;
clrscr;
writeln('Исходный массив:');
for i:=1 to n do
write(a[i]:0:2,' ');
writeln;
imx:=1;imn:=1;
for i:=1 to n do
begin
if a[i]>a[imx] then imx:=i;{находим индексы макс. и мин.}
if a[i]<a[imn] then imn:=i;
end;
writeln('Максимальный элемент a[',imx,']=',a[imx]:0:2);
writeln('Минимальный элемент a[',imn,']=',a[imn]:0:2);
if imn=imx then write('Массив состоит из одинаковых элементов!'){если индексы совпали}
else if imn=n then write('Невозможно удаление после минимального элемента!'){если мин. последний}
else if imx=n then write('Невозможно удаление после максимального элемента!'){если макс. последний}
else{иначе}
begin
if imx>imn then{если максимальный дальше}
begin
for i:=imx+1 to n-1 do{сначала удаляем за ним}
a[i]:=a[i+1];
n:=n-1;
for i:=imn+1 to n-1 do{потом за мин., макс. при этом может удалиться, если он сразу за мин.}
a[i]:=a[i+1];
n:=n-1;
end
else{если минимальный дальше, все наоборот}
begin
for i:=imn+1 to n-1 do{сначала за минимальным}
a[i]:=a[i+1];
n:=n-1;
for i:=imx+1 to n-1 do{потом за максимальным}
a[i]:=a[i+1];
n:=n-1;
end;
writeln('Удаление элементов после максимального и минимального:');
for i:=1 to n do
write(a[i]:0:2,' ');
end;
readln
end.
2)Даны натуральное число n и вещественный массив из n элементов. Удалить из массива элемент, расположенный после каждого значения, равного минимальному элементу. При отсутствии таких элементов выдать соответствующее сообщение.
uses crt;
const max=100;
var a:array[1..max] of real;
n,i,imn,j:integer;
mn:real;
begin
clrscr;
randomize;
repeat
write('Размер массива n=');
readln(n);
until n in [1..max];
writeln('Введите ',n,' элементов массива:');
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
end;
clrscr;
writeln('Исходный массив:');
for i:=1 to n do
write(a[i]:0:2,' ');
writeln;
mn:=a[1];imn:=1;
for i:=1 to n do
if a[i]<a[imn] then
begin
mn:=a[i];{находим минимальное}
imn:=i;{его индекс}
end;
j:=0;
for i:=1 to n do
if a[i]=mn then j:=j+1;
if imn=n then write('Минимальный элемент один и он последний в массиве. Удаления нет!'){если последний, значит один}
else if j=n then write('Массив состоит из одинаковых элементов!'){все одинаковые}
else{иначе удаляем элементы после минимальных, не сами минимальные, даже если они подряд}
begin
i:=2;{начнем со втрого элемента}
while i<=n do{пока не конец массива}
if (a[i-1]=mn)and(a[i]<>mn) then{если перед элементом мин., а сам он не мин.}
begin
for j:=i to n-1 do{сдвигаем конец массива}
a[j]:=a[j+1];{на один влево}
n:=n-1;{уменьшаем размер}
end
else i:=i+1;{иначе идем вперед}
writeln('Удаление элементов после минимальных:');
for i:=1 to n do
write(a[i]:0:2,' ');
end;
readln
end.
Неизвестный
26.01.2010, 01:46
общий
Пупорев Юрий Борисович:
Уважаемый Пупорев Ю.Б.!!!Если можете,помогите пожалуйста вот с такой задачкой:
1) Не используя вложенные циклы, вычислить
y=1! – 2!+3! –...+ (-1)^(n-1)*n! (поясняю последний член- минус один в степени н минус один умноженное на н! )
давно
Профессор
401888
1232
26.01.2010, 07:11
общий
Код:
uses crt;
var n,i:integer;
s,t:real;
begin
clrscr;
write('n=');
readln(n);
s:=0;t:=-1;//начальные значения суммы и очередного члена ряда
for i:=1 to n do
begin
t:=-t*i;//очередной член ряда, меняем знак и домножаем на очередное число
s:=s+t;//суммируем
end;
write('s=',s:0:0);
readln
end.
Неизвестный
28.01.2010, 01:51
общий
Добрый день!помогите пожалуйста с одной задачкой на двумерные массивы:
Дана прямоугольная матрица,по ней построить вектор,каждый элемент которого равен количеству положительных элементов в соответствующей строке прямоугольной матрицы.
очень жду.
давно
Профессор
401888
1232
28.01.2010, 06:23
общий
angel.nero, Задайте вопрос как положено, это мини-форум другого вопроса.
Форма ответа