• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Дан массив размера N

  • Автор темы Автор темы Alise7
  • Дата начала Дата начала

Alise7

Ученик
Регистрация
21 Окт 2012
Сообщения
7
Реакции
0
Баллы
0
Дан массив размера N

Дан массив размера N.найти максимальный из его элементов не являющийся ни локальным максимумом, ни локальным минимумом.
кто-нибудь может помочь?
 
Помочь - да. Писать эту учебную ерунду за Вас - нет. Выложите свои наработки, если таковые имеются - поможем, подскажем, исправим.

имеются, но с паскалем сталкиваюсь впервые, поэтому большие трудности
вот
var
a: array [1..100] of integer;
i, j, k: integer;
n: integer;

begin
randomize;
writeln('Введите N: ');
readln(n);
for i := 1 to n do a := random(101) - 25;
writeln('Исходный массив: ');
for i := 1 to n do write(a, ' ');
writeln;
for i := 2 to n - 1 do
if ((a > a[i + 1]) and ((a > a[i - 1]))) or ((a < a[i + 1]) and ((a < a[i - 1])))
then inc(k) else inc(j);
writeln('Полученное количество: ');
if j > 0 then writeln(j) else writeln(0);
end.
 
имеются, но с паскалем сталкиваюсь впервые, поэтому большие трудности вот
Ну вот, совсем другое дело и совершенно другое отношение.
По выложенной программе. Написана в целом правильно и грамотно, но, увы, решает она совсем другую задачу, а именно, определяет количество локальных максимумов и минимумов в массиве, а Вам нужно найти максимальный элемент, НЕ являющийся таковым экстремумом. Решение этой задачи дано ниже, и вот несколько пояснений:
1. Прошу извинить за английский язык: возня с кириллицей для меня - заморочки. Если надо, исправьте.
2. Перестановка действий в строке, задающей элементы массива, связана с тем, что некоторые (не моя!) версии Паскаля не могут справится с ситуацией, когда из беззнакового целого вычитается бОльшая величина. Они приписывают ожидаемому результату тоже беззнаковый целый формат, а, получив отрицательное число, начинают верещать об ошибке. Сталкивался с таким. Такая вот тонкость.
3. Выводить элементы массива лучше с указанием формата, тогда, если там несколько строк, то они всегда расположатся один под другим. Просто красивее.
4. Начальное значение искомого максимума (max) задается любым, МЕНЬШИМ минимального значения элементов массива (у Вас это -25), числом. Вместо -80 можно взять -40, -1046, -513 и т.п.
5. Если Ваш Паскаль не проглотит конструкцию вида
not(bla-bla-bla),
то замените ее на
(not bla-bla-bla), где bla-bla-bla - какое-то булевское выражение. Тоже бывают закидоны разных версий Паскаля.
6. В конце программы, предполагающей вывод результата на экран, очень желательно поставить оператор readln без параметров. Тогда, дойдя до него, программа остановится и позволит полученный результат рассмотреть до нажатия клавиши "Enter". А иначе просто моргнет да и вылетит в Турбо-среду или папку, откуда Вы ее запускали.
Ну, вроде, всё.
Код:
var
 a: array [1..100] of integer;
 i,max,N: integer;

begin
 randomize;
 write('N (<=100)= ');
 readln(N);
 for i:= 1 to n do
  a[i]:=-25+random(101);
 writeln('Initial array: ');
 for i:=1 to N do write(a[i]:4);
 writeln;
 max:=-80;
 for i:=2 to N-1 do
  if (a[i]>max) and
     not((a[i]>a[i+1]) and (a[i]>a[i-1])) and
     not((a[i]<a[i+1]) and (a[i]<a[i-1])) then max:=a[i];
 writeln('Result: ');
 if max=-80 then writeln('No such elements') else writeln('Max= ',max);
 readln
end.
 
Ну вот, совсем другое дело и совершенно другое отношение.


спасибо большое, Владимир!

uses crt;
const size = 10;
Var
El, MaxEl, iMax, jMax, i, j : integer;
lMax, lMin, mtr : Array[1..size,1..size] of integer;
Begin
ClrScr;
Randomize;
{формируем матрицу случайным образом}
For i:=1 to size do
For j:=1 to size do
begin
mtr[i,j]:=100+ random(300);
lMax[i,j]:=0; lMin[i,j]:=0;
end;
{сначала найдем все локальные минимумы и максимумы}
For i:=1 to size do
For j:=1 to size do
begin
El:=mtr[i,j];
If i=1 then {верхняя строка}
begin
If j=1 then
begin
If (El<mtr[i ,j+1]) and
(El<mtr[i+1,j+1]) and
(El<mtr[i+1,j ]) then lMin[i,j]:=1; {пометим локальный минимум}
If (El>mtr[i ,j+1]) and
(El>mtr[i+1,j+1]) and
(El>mtr[i+1,j ]) then lMax[i,j]:=1; {пометим локальный максимум}
end
Else
If j=size then
begin
If (El<mtr[i ,j-1]) and
(El<mtr[i+1,j-1]) and
(El<mtr[i+1,j ]) then lMin[i,j]:=1;
If (El>mtr[i ,j-1]) and
(El>mtr[i+1,j-1]) and
(El>mtr[i+1,j ]) then lMax[i,j]:=1;
end
Else {неугловые элементы верхней строки}
begin
If (El<mtr[i ,j-1]) and
(El<mtr[i+1,j-1]) and
(El<mtr[i+1,j ]) and
(El<mtr[i+1,j+1]) and
(El<mtr[i ,j+1]) then lMin[i,j]:=1;
If (El>mtr[i ,j-1]) and
(El>mtr[i+1,j-1]) and
(El>mtr[i+1,j ]) and
(El>mtr[i+1,j+1]) and
(El>mtr[i ,j+1]) then lMax[i,j]:=1;
end
end
{========================}
Else
If i=size then {нижняя строка}
begin
If j=1 then
begin
If (El<mtr[i-1,j ]) and
(El<mtr[i-1,j+1]) and
(El<mtr[i ,j+1]) then lMin[i,j]:=1;
If (El>mtr[i-1,j ]) and
(El>mtr[i-1,j+1]) and
(El>mtr[i ,j+1]) then lMax[i,j]:=1;
end
Else
If j=size then
begin
If (El<mtr[i ,j-1]) and
(El<mtr[i-1,j-1]) and
(El<mtr[i-1,j ]) then lMin[i,j]:=1;
If (El>mtr[i ,j-1]) and
(El>mtr[i-1,j-1]) and
(El>mtr[i-1,j ]) then lMax[i,j]:=1;
end
Else {неугловые элементы нижней строки}
begin
If (El<mtr[i ,j-1]) and
(El<mtr[i-1,j-1]) and
(El<mtr[i-1,j ]) and
(El<mtr[i-1,j+1]) and
(El<mtr[i ,j+1]) then lMin[i,j]:=1;
If (El>mtr[i ,j-1]) and
(El>mtr[i-1,j-1]) and
(El>mtr[i-1,j ]) and
(El>mtr[i-1,j+1]) and
(El>mtr[i ,j+1]) then lMax[i,j]:=1;
end
end
Else
If j=1 then {левый столбец}
begin
If (El<mtr[i-1,j ]) and
(El<mtr[i-1,j+1]) and
(El<mtr[i ,j+1]) and
(El<mtr[i+1,j+1]) and
(El<mtr[i+1,j ]) then lMin[i,j]:=1;
If (El>mtr[i-1,j ]) and
(El>mtr[i-1,j+1]) and
(El>mtr[i ,j+1]) and
(El>mtr[i+1,j+1]) and
(El>mtr[i+1,j ]) then lMax[i,j]:=1;
end
Else
If j=size then {правый столбец}
begin
If (El<mtr[i-1,j ]) and
(El<mtr[i-1,j-1]) and
(El<mtr[i ,j-1]) and
(El<mtr[i+1,j-1]) and
(El<mtr[i+1,j ]) then lMin[i,j]:=1;
If (El>mtr[i-1,j ]) and
(El>mtr[i-1,j-1]) and
(El>mtr[i ,j-1]) and
(El>mtr[i+1,j-1]) and
(El>mtr[i+1,j ]) then lMax[i,j]:=1;
end
Else
begin
If (El<mtr[i-1,j ]) and {1}
(El<mtr[i-1,j-1]) and {2}
(El<mtr[i ,j-1]) and {3}
(El<mtr[i+1,j-1]) and {4}
(El<mtr[i+1,j ]) and {5}
(El<mtr[i+1,j+1]) and {6}
(El<mtr[i ,j+1]) and {7}
(El<mtr[i-1,j+1]) {8}
then lMin[i,j]:=1;

If (El>mtr[i-1,j ]) and {1}
(El>mtr[i-1,j-1]) and {2}
(El>mtr[i ,j-1]) and {3}
(El>mtr[i+1,j-1]) and {4}
(El>mtr[i+1,j ]) and {5}
(El>mtr[i+1,j+1]) and {6}
(El>mtr[i ,j+1]) and {7}
(El>mtr[i-1,j+1]) {8}
then lMax[i,j]:=1;

end;
end;
{ищем максимальный элемент,
не являющийся ни локальным максимумом, ни локальным минимумом}
MaxEl:=-32768;
iMax:=0; jMax:=0;
For i:=1 to size do
For j:=1 to size do
If (lMax[i,j]=0) and (lMin[i,j]=0) then
If MaxEl<mtr[i,j] then
begin
MaxEl:=mtr[i,j];
iMax:=i; jMax:=j;
end;
{выводим результат на экран}
For i:=1 to size do
Begin
For j:=1 to size do
begin
If lMax[i,j]=1 then TextColor(Red) {красные - локальные максимумы}
Else
If lMin[i,j]=1 then TextColor(Blue) {синие - локальные минимумы}
Else
If MaxEl=mtr[i,j] then TextColor(Green) {зеленый - искомый максимум}
Else TextColor(DarkGray);
Write(mtr[i,j]:4);
end;
WriteLn;
end;
ReadLn;
End. вот такой вариант еще предлагали, получается он не верен?
 
вот такой вариант еще предлагали, получается он не верен?
Прежде всего, определитесь, с каким массивом нужно работать - одномерным или двумерным (матрицей)? Тогда и будем двигаться дальше.
 
массив одномерный, еще нужно упорядочить положительные эелементы второ
 
массив одномерный, еще нужно упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений?это совсем меня запутало(
 
массив одномерный,
Тогда выложенный в #5 листинг к задаче отношения не имеет: там идет обработка матрицы, а не вектора.
еще нужно упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений?
Знаете что - хватит выдавать "в день по чайной ложке". Выложите задание в том виде, в котором оно Вам дано - тогда и будем разбираться. А то, боюсь, дальше последует очередное "а еще надо...".
это совсем меня запутало(
А уж о нас-то что говорить...
 
Дан массив размера N.
Найти максимальный из его элементов, не являющихся ни локальным максимумом, ни локальным минимумом(локальный минимум-это элемент, который меньше любого из своих соседей).Если таких элементов в массиве нет, вывести об этом сообщение.
упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений.
для отладки программы числа последовательности сформировать с помощью генератора случайных чисел.
вот это оригинал задания.Извините, что сразу не выложила его(
 
упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений.
Я в шоке от таких формулировок:
1. Если речь идет о положительных элементах, то и обратные значения тоже будут положительными. Причем тут тогда "модули"?
2. "Убывание обратных значений" - разве это не то же самое, что просто "возрастание значений"?
Или цель подобной формулировки - максимально запутать студента? А может быть, следует читать "упорядочить обратные значения элементов второй половины массива по убыванию модулей"? В общем, уточните у преподавателя, что имеется в виду.
 
"Убывание обратных значений" - разве это не то же самое, что просто "возрастание значений"?
с объяснений преподавателя, что обратные значения это, например от числа а- 1/а. Более подробных объяснений не дают, ссылаясь на то ,что это курсовая работа(Вся надежда на Вас
 
с объяснений преподавателя, что обратные значения это, например от числа а- 1/а.
Так, ну с Вами примерно всё ясно. Спасибо, я в курсе, что такое "обратные значения".
Более подробных объяснений не дают, ссылаясь на то ,что это курсовая работа(
Между тем, я считаю, что Вы в праве потребовать четкой формулировки задания, а они (преподы) обязаны Вам таковую дать. Ну что за бред, ей-Богу - "модули обратных значений положительных элементов"?! Если число положительное, то и обратное значение его тоже положительно, тогда при чем тут "модули"? И, еще раз: "убывание обратных значений" - это то же самое, что возрастание самих значений (но только в случае положительных чисел!), тогда почему так и не написать? В общем, моё мнение такое: здесь налицо явная ошибка и, возможно, не одна.
Вся надежда на Вас
Единственное, что могу сделать - это написать программу в строгом и точном соответствии с той ахинеей, которая содержится в формулировке. Потом наверняка последует "ой, а преподаватель сказал, что там опечатка и надо было..." но это уже не ко мне. Я просил Вас уточнить задание, даже вопросы конкретные задал, но тщетно. Что же, получите:
Код:
var
 a: array [1..100] of integer;
 b:array[1..50] of integer;
 num:array[1..50] of byte;
 i,max,N,Imax,j,Npos,D: integer;
 bo:boolean;

begin
 randomize;
 write('N (<=100)= ');
 readln(N);
 for i:= 1 to n do
  a[i]:=-25+random(101);
 writeln('Initial array: ');
 for i:=1 to N do write(a[i]:4);
 writeln;
 max:=-80;
 Imax:=2;
 for i:=2 to N-1 do
  if (a[i]>max) and
     not((a[i]>a[i+1]) and (a[i]>a[i-1])) and
     not((a[i]<a[i+1]) and (a[i]<a[i-1])) then
     begin
      Imax:=i;
      max:=a[i];
     end;
 writeln('Result: ');
 if max=-80 then writeln('No such elements')
 else writeln('i= ',Imax,'     Max= ',max);
 writeln;
 Npos:=0;
 for i:=(N div 2)+1 to N do
  if a[i]>0 then
   begin
    Inc(Npos);
    b[Npos]:=a[i];
    num[Npos]:=i;
   end;
 for i:=1 to Npos-1 do
  for j:=1 to Npos-i do
   if Abs(1/b[j])<Abs(1/b[j+1]) then
    begin
     D:=b[j];
     b[j]:=b[j+1];
     b[j+1]:=D;
    end;
 for i:=1 to N do
  begin
   bo:=false;
   j:=0;
   repeat
    Inc(j);
    if num[j]=i then bo:=true;
   until bo or (j=Npos);
   if bo then write(b[j]:4) else write(a[i]:4);
  end;
 readln
end.
 
Назад
Сверху