Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2011, 19:17   #1
Gluck231
 
Регистрация: 16.10.2011
Сообщений: 7
По умолчанию найти максимальный элемент массива среди отрицательных чисел

Проверьте домашку)

Вообще не врубаюсь в этот [#censored#] паскаль, но вроде что-то набросал)

Вещественный массив B содержит k элементов. Найти

и определить его порядковый номер.

Ну и кракозябра которую я набросал:

Код:
program lab1;
var
B : array[1..100] of real;
Max : real;
i,k,iMax : integer;
begin
write('vvedite kol-vo elementov massiva: ');
read(k);
write('vvedite massiv: ');
for i:=1 to k do
read(B[i]);

Max:= -1E32;
iMax:= 0;
for i:=1 to k do
    if (B[i]<0) and (B[i]>Max) then
    begin
    Max:= B[i];
    iMax:= i;
    end;
writeln('Max: ',Max,'iMax: ',iMax);
end.

Прошу поправить мои нелепости. Спасибо

______________
1) Название темы по правилам форума должно адекватно отражать суть решаемой задачи/проблемы.
На первый раз я исправил.
В последующем, темы с подобным названием будут закрываться или удаляться,
а автор такой темы будет получать штрафные баллы.
Учтите это на будущее.

2) Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!


Модератор.

Последний раз редактировалось Serge_Bliznykov; 24.10.2011 в 23:58.
Gluck231 вне форума Ответить с цитированием
Старый 24.10.2011, 19:22   #2
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

я правильно понял задание? Нужно найти максимальный елемент среди чисел которые менше нуля?
Pein95 вне форума Ответить с цитированием
Старый 24.10.2011, 19:25   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А почему -1E32? Это же не предел real по-моему. Лучше используйте b[1] и iMax 1
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 24.10.2011, 19:32   #4
Gluck231
 
Регистрация: 16.10.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Pein95 Посмотреть сообщение
я правильно понял задание? Нужно найти максимальный елемент среди чисел которые менше нуля?
Ну я именно так его понял)
Gluck231 вне форума Ответить с цитированием
Старый 24.10.2011, 19:34   #5
Gluck231
 
Регистрация: 16.10.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А почему -1E32? Это же не предел real по-моему. Лучше используйте b[1] и iMax 1
Когда в классе делал похожую хрень с положительными числами, препод-ламерша мне втирала что 1E32 это максималка. Да и если я задам Max через B[1] и B[1] окажется положительным числом, то нихрена не получится, так как оно будет больше любого отрицательного числа массива, разве не?

Последний раз редактировалось Gluck231; 24.10.2011 в 19:38.
Gluck231 вне форума Ответить с цитированием
Старый 24.10.2011, 19:46   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А, показалось, что там все отрицательные. Ну тогда можно искать в цикле (while\repeat) первое отрицательное и потом с него же+1 и начинать, ибо массив одномерный.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 24.10.2011, 21:25   #7
Gluck231
 
Регистрация: 16.10.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А, показалось, что там все отрицательные. Ну тогда можно искать в цикле (while\repeat) первое отрицательное и потом с него же+1 и начинать, ибо массив одномерный.
А поподробней?) А то у меня из-за кривоты рук ничего не выходит)

Код:
program lab1;
var
B : array[1..100] of real;
Max : real;
i,k,iMax : integer;
begin
 write('vvedite kol-vo elementov massiva: ');
 read(k);
 write('vvedite massiv: ');
 for i:=1 to k do
 read(B[i]);
    Max:= B[i];
    iMax:= 1;
    while B[i]>0 do
        begin
        Max:= B[i+1];
        iMax:= i+1
        end;
 for i:=1 to k do
 if (B[i]<0) and (B[i]>Max) then
 begin
 Max:= B[i];
 iMax:= i;
 end;
 writeln('Max: ',Max,'  ','iMax: ',iMax);
end.
С такой записью мне в ответе упорно продолжает выдавать какой-то бред) Не пойму моя в этом вина, или это PascalABC глючит. В Borland Pascal который стоит на виртуальной машине вообще exe'шник не создаётся и хз как проверить правильность алгоритма)


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 24.10.2011 в 23:59.
Gluck231 вне форума Ответить с цитированием
Старый 24.10.2011, 21:54   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

эм...как-то так, например
Код:
j:=0;
repeat
   j:=j+1;
until (b[j]<0) or (j=k);
max:=b[j];
imax:=j;
for i:=j to k do
...
И используйте тег [CODE] (значок # ) для сохранения форматирования и подсветки кода в сообщении. Кнопка Правка снизу справа.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.10.2011, 00:11   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно применить подход Alex11223

а ещё в подобных задачах удобно использовать такой подход:
Код:
program lab1;
var
B : array[1..100] of real;
i,k,iMax : integer;
begin
 write('vvedite kol-vo elementov massiva: ');
 read(k);
 write('vvedite massiv: ');
 for i:=1 to k do
      read(B[i]);

 iMax := -1; {это признак того, что ещё максимальное отрицательное не нашли}

 for i:=1 to k do
   if (B[i]<0) then
     if iMax = -1  then
       {первое отрицательное запоминаем как максимальное}
       iMax := i
     else {иначе, если уже были отрицательные, сравним их с максимальным значением}
        if B[i]>B[iMax] then iMax := i;

 if iMax=-1 then WriteLn('в массиве вообще нет отрицательных чисел! ') 
 else 
   writeln('Max: ',B[iMax],'  ','iMax: ',iMax);
 Readln; 
end.

писал прямо на форуме, могут быть опечатки. Но, главное, чтобы идея была понятна!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти максимальный нечетный отрицательный эл-т массива целых чисел AxlR0se Помощь студентам 3 14.07.2011 18:32
Найти максимальное значение среди отрицательных элементов и вывести на экран его индексы. Nursik77 Помощь студентам 2 08.04.2011 17:23
Найти максимальный элемент массива и его порядковый номер через функцию на С ++ SeReGa48 Помощь студентам 1 31.05.2010 23:08
найти максимальный элемент одномерного массива Серый777 Паскаль, Turbo Pascal, PascalABC.NET 4 05.05.2010 20:54
одномерные массивы(C++) - Найти максимальный положительный элемент и вычислить сумму элементов массива Scarletred Помощь студентам 2 03.04.2010 03:08