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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2010, 22:23   #1
WitaliG
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 75
По умолчанию Задача на Паскаль

Здравствуйте!
Помогите, пожалуйста, решить задачу: В массиве из 10 чисел есть хотя бы один нулевой элемент. Вычислить произведение элементов массива до первого нуля.
Код:
Var  a :array[1..10] of integer; i,p :integer;
begin
    randomize;
    for i :=1 to 10 do
    begin  a[i] :=-5 + random(20); write(a[i]:4) end;
    while a[i] <> 0 do
    begin if a[i] <> 0 then p := p*a[i]  end;
    Writeln('Произведение элементов массива до первого нуля= ',p);     Readln;     End.
Мой код совсем не хочеть считать?!
С уважением Виталий.
WitaliG вне форума Ответить с цитированием
Старый 19.12.2010, 22:30   #2
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

возможно в массив ноль не попадает))
Код:
var
  a: array [1..10] of integer;
  i, p: integer;

begin
  randomize;
  for i := 1 to 10 do
    a[i] := random(30);
  a[random(10)+1] := 0;
  i := 1;
  p := 1;
  while (a[i] <> 0) and (i<=10) do 
  begin
    p := p * a[i];
    i := i + 1;
    if i>10 then break;
  end;
  if a[1]=0 then p:=0;
  writeln(p);
end.
а вот кстати твой исправленный:
Код:
Var  a :array[1..10] of integer; i,p :integer;
begin
    randomize;
    for i :=1 to 10 do
    begin  a[i] :=-5 + random(20); writeln(a[i]:4) end;
    i:=1;
    p:=1;
    while (a[i] <> 0) and (i<=10) do begin p := p*a[i];
    i:=i+1;
    end;
    if a[1]=0 then p:=0;
    Writeln('Произведение элементов массива до первого нуля= ',p);     Readln;     End.

Последний раз редактировалось unbanned; 19.12.2010 в 22:53.
unbanned вне форума Ответить с цитированием
Старый 20.12.2010, 00:24   #3
WitaliG
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 75
По умолчанию

Большое спасибо
WitaliG вне форума Ответить с цитированием
Старый 20.12.2010, 18:50   #4
WitaliG
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 75
По умолчанию

Вчера уже было поздно, а сегодня на работу, поэтому я поблагодарил unbanned, а код не смотрел.
Сегодня у меня компилятор пишет по последнему варианту:"Ошибка времени выполнения: Индекс находился вне границ массива." Причем один раз пишет эту запись, а другой раз код решает задачу правильно?!
Вопрос: Что означает эта запись?!
WitaliG вне форума Ответить с цитированием
Старый 20.12.2010, 20:06   #5
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Цитата:
"Ошибка времени выполнения: Индекс находился вне границ массива." Что означает эта запись?!
Эта значит что фактически массив закончился. А условие выхода из цикла не выполнилось. Попробуйте переделать так
Код:
Var
  a :array[1..10] of integer;
  i:byte;
  p:Real;
begin
    randomize;
    for i :=1 to 10 do
    begin
      a[i] :=-5 + random(10);
      writeln(a[i]:4)
    end;
    i:=1;
    p:=1;
    For i:=1 to 10 do
    Begin
      If a[i] <> 0 then p:=p*a[i]
      Else
      If a[i] = 0 then
      Break
    End;
    If A[1] = 0 then Writeln('Произведение = 0')
    Else
    Writeln('Произведение элементов массива до первого нуля= ',p:3:0);
    Readln;
End.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 20.12.2010, 23:00   #6
WitaliG
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 75
По умолчанию

Спасибо GetMax Ваш вариант работает четко. Спасибо.
С уважением Виталий.
WitaliG вне форума Ответить с цитированием
Старый 20.12.2010, 23:03   #7
WitaliG
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 75
По умолчанию

Спасибо GetMax Ваш код работает четко. Спасибо.
С уважением Виталий.
WitaliG вне форума Ответить с цитированием
Старый 22.12.2010, 18:05   #8
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

Цитата:
Сообщение от WitaliG Посмотреть сообщение
:"Ошибка времени выполнения: Индекс находился вне границ массива."
да, в своем коде учел... а в исправленом - нет. прошу прощения
unbanned вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача, паскаль. =) Soul_fly Паскаль, Turbo Pascal, PascalABC.NET 5 18.12.2010 16:15
Задача на Паскаль WitaliG Помощь студентам 5 28.11.2010 23:01
Задача на Паскаль WitaliG Помощь студентам 18 23.10.2010 08:05
Задача в Паскаль Ivanushka17 Помощь студентам 1 06.12.2009 20:01
задача по Паскаль... Вера123 Помощь студентам 3 09.06.2009 21:20