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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2008, 14:31   #1
Zenit10
Пользователь
 
Регистрация: 16.01.2008
Сообщений: 16
По умолчанию Организация циклов и работа с одномерными массивами

Прошу помощи в решении данной задачи
Integer.
Найти произведение последних L отрицательных элементов в массиве A={a[i]}.
Ничего понять не могу как решать её.Помогите плиз.
Ну точто заполнить массив рандомно это понятно а с помошью какой футкции или процедуры зделать одбор последних отрицательных элементов незнаю.
Zenit10 вне форума Ответить с цитированием
Старый 17.01.2008, 14:58   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Отсортируй массив по убыванию. Все отрицательные элементы соберутся в конец. Затем
Код:
P:=1;
for i:=L to n do
   begin
     P:=P*a[i];  
  end;
puporev вне форума Ответить с цитированием
Старый 17.01.2008, 15:41   #3
Zenit10
Пользователь
 
Регистрация: 16.01.2008
Сообщений: 16
По умолчанию

Спасибо большое.
Zenit10 вне форума Ответить с цитированием
Старый 17.01.2008, 19:16   #4
Zenit10
Пользователь
 
Регистрация: 16.01.2008
Сообщений: 16
По умолчанию

Вот что получилось но прога не работает не пойму из-за чего.
Uses crt;
const n=10;
Var
a:array[1..n] of integer;
i,j: byte;
b,l:word;
p: integer;
Begin
clrscr;
randomize;
begin
for i:=1 to n do
a[i]:=random(101)-50;
write (a[i],' ');
writeln;

end;
for j:=1 to n-1 do
for i:=1 to n-j do
if a[i] < a[i+1] then
begin
b:=a[i];
a[i]:=a[i+1];
a[i+1]:=b;
end;
writeln ('упорядоченный масив');
for i:=1 to n do
write (a[i],' ');
writeln;
p:=1;
for i:=(n-l) to n do
begin
p:=p*a[i];
write(p);
end;
End.
Вот так у меня получилось помогите додумать что не так.

Последний раз редактировалось Zenit10; 17.01.2008 в 19:25.
Zenit10 вне форума Ответить с цитированием
Старый 17.01.2008, 19:44   #5
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Ну, а L чему равно, сколько цифр перемножать?
Код:
Uses crt;
const n = 10;
Var
  a: array[1..n] of integer;
  i,j,b,p,L: integer;
Begin
  clrscr;
  L:=3; {кол.перемнож.цифр}
  randomize;
  for i:=1 to n do
    begin
      a[i]:=random(101)-50;
      write(a[i]:4);
    end;
  writeln;
  for j:=1 to n-1 do
    for i:=1 to n-j do
      if a[i] < a[i+1] then
        begin
          b:=a[i];
          a[i]:=a[i+1];
          a[i+1]:=b;
        end;
  b:=0;
  writeln('упорядоченный масив');
  for i:=1 to n do
    begin
      if (b = 0) and (a[i] < 0) then b:=i;
      write(a[i]:4);
    end;
  writeln;
  b:=n-b+1; {кол.отрицат.цифр}
  if L > b then L:=b;
  p:=1;
  for i:=n-L+1 to n do p:=p*a[i];
  writeln(p);
  readln;
End.
Хотя, наверно, сортировать массив неправильно. Т.к. мы найдем произведение L наибольших отрицательных элементов. А по условию нужно перемножить L последних.

Последний раз редактировалось _Dmitry; 17.01.2008 в 19:50.
_Dmitry вне форума Ответить с цитированием
Старый 17.01.2008, 20:01   #6
Zenit10
Пользователь
 
Регистрация: 16.01.2008
Сообщений: 16
По умолчанию

А я недогоню почему L=3 там же написано последних L отрицательных элементов их может быть 5,6, или 8 ваще как массив введётся.
Zenit10 вне форума Ответить с цитированием
Старый 17.01.2008, 20:03   #7
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Я понял так, их всего может быть 5,6, или 8, а нужно вычислить произведение L последних.
Например, массив: 5 -8 3 8 7 6 -2 4 -3 9 4 -6 2, L=3, то перемножать нужно последние 3 отрицательные: -6, -3, -2.
Вот код для этого
Код:
uses crt;
const n = 10;
var
  a: array[1..n] of integer;
  i,j,p,L: integer;
begin
  clrscr;
  L:=3; {кол.перемнож.цифр}
  randomize;
  for i:=1 to n do
    begin
      a[i]:=random(101)-50;
      write(a[i]:4);
    end;
  writeln;
  p:=1; j:=0;
  for i:=n downto 1 do
    if (a[i] < 0) and (j < L) then
      begin
        p:=p*a[i];
        j:=j+1;
      end;
  writeln(p);
  readln;
end.

Последний раз редактировалось _Dmitry; 17.01.2008 в 20:08.
_Dmitry вне форума Ответить с цитированием
Старый 17.01.2008, 21:58   #8
Zenit10
Пользователь
 
Регистрация: 16.01.2008
Сообщений: 16
По умолчанию

Всё понял спасибо огромнейшее.

Кстати неподскажешь как замутить проверку на область допустимых значений, т.е. у нас умножается 3 отрицательных числа а вдруг в массиве будет только 2 отрицательных.

Последний раз редактировалось Zenit10; 17.01.2008 в 22:07.
Zenit10 вне форума Ответить с цитированием
Старый 17.01.2008, 22:12   #9
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

В программе перемножаются только отрицательные числа. Если их 2 - будут перемножены только 2, если их 7 - будут перемножены 3 последних. Если отрицательных чисел нет, то ничего перемножаться не будет - результат будет равен 1.

Последний раз редактировалось _Dmitry; 17.01.2008 в 22:16.
_Dmitry вне форума Ответить с цитированием
Старый 17.01.2008, 22:20   #10
Zenit10
Пользователь
 
Регистрация: 16.01.2008
Сообщений: 16
По умолчанию

ок. даже незнаю как тебя благодарить
Zenit10 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с массивами mager JavaScript, Ajax 5 27.08.2008 22:02
Работа с массивами Stelix Паскаль, Turbo Pascal, PascalABC.NET 1 20.06.2008 11:37
Работа с массивами в C# MaskEdit Общие вопросы .NET 3 17.05.2008 17:59
Работа с массивами Hakman Общие вопросы C/C++ 1 19.02.2008 15:11
Работа с массивами DeN1308 Помощь студентам 3 09.11.2007 11:50