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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 17:20   #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
    a[i] :=-2+random(20);
    write('Massiv = ');
    for i :=1 to 10 do
    write(a[i]:4);
    p :=1;
    while (a[i]) >= 0 do
    begin    p :=p*i    end;
    writeln('Произведение = ',p);
    readln  end.
С уважением Виталий.
WitaliG вне форума Ответить с цитированием
Старый 12.12.2010, 17:21   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
while (a[i]) > 0) do
    begin    p :=p*a[i]    end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 12.12.2010, 17:45   #3
WitaliG
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 75
По умолчанию

Исправил я по твоему, но результата нет. А почему???
WitaliG вне форума Ответить с цитированием
Старый 12.12.2010, 17:58   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

В цикл еще i:=i+1 добавь
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 12.12.2010, 18:03   #5
cabss
 
Регистрация: 11.12.2010
Сообщений: 4
По умолчанию

while (a[i]) >= 0 do вы же перебираете массив, но в тоже время i стоит неизменно.
while (a[i]) >= 0 do
begin
p :=p*i;
i:=i+1;
end;
cabss вне форума Ответить с цитированием
Старый 12.12.2010, 18:14   #6
WitaliG
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 75
По умолчанию

Исправил код по совету cabss , но компилятор пишет "Ошибка времени выполнения: Индекс находился вне границ массива."
WitaliG вне форума Ответить с цитированием
Старый 12.12.2010, 19:41   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
var  a :array[1..10] of integer; i,p :integer;
begin  
    randomize;
    for i :=1 to 10 do
    a[i] :=-2+random(20);
    write('Massiv = ');
    for i :=1 to 10 do
    write(a[i]:4);
    if a[1] < 0 
         then p := 0
         else p :=1;
    i :=1;
    while ((a[i]) >= 0) and (i<=10) do
    begin   
       p :=p*a[i];
       i:=i+1;
    end;
    writeln('Произведение = ',p);
    readln  
end.
p.s. кстати, думаю, что на нулевые элементы массива умножать не стоит..
иначе произведение будет равно нулю..

Последний раз редактировалось Serge_Bliznykov; 12.12.2010 в 19:43.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2010, 20:15   #8
WitaliG
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 75
По умолчанию

Спасибо Serge_Bliznykov, код очень хорошо работает.
Скажите: Это какие же книжки надо читать, чтобы так хорошо решать задачи?!
С уважением Виталий.
WitaliG вне форума Ответить с цитированием
Старый 12.12.2010, 20:16   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А не проще ли было бы вычислять непосредственно при вводе массива?
Код:
var  a :array[1..10] of integer; i,p :integer;firstminus:boolean;
begin  
    randomize;
    firstminus:=true;
    for i :=1 to 10 do begin
     a[i] :=-2+random(20);
     if firstminus and (a[i]>0) then p :=p*a[i] else firstminus:=false;
    end;
    writeln('Произведение = ',p);
    readln  
end.
Или я опять что-то путаю?
Цитата:
Это какие же книжки надо читать, чтобы так хорошо решать задачи?!
Умные ))) И не лениться.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2010, 21:29   #10
WitaliG
Пользователь
 
Регистрация: 17.08.2010
Сообщений: 75
По умолчанию

Три раза запускал компилятор с Вашим, Stilet, кодом и все три раза пишет: Произведение = 0

Последний раз редактировалось WitaliG; 12.12.2010 в 21:32.
WitaliG вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на Паскаль Лешка Помощь студентам 0 10.12.2010 20:35
Задача на Паскаль WitaliG Помощь студентам 7 24.10.2010 23:35
Задача на Паскаль Julia86 Помощь студентам 1 08.03.2009 11:44