Показать сообщение отдельно
Старый 24.06.2019, 16:32   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от qwerty76 Посмотреть сообщение
Что значит ppk3:=99?
Что переменной ppk3 присвоено исходное значение 99.

Вообще программа (точнее, фрагмент) написана не так, чтобы очень. Точнее, очень не очень. Разберёмся.
Как я понял, задача поставлена так. Есть массив из N целых элементов (положительных и отрицательных), причем в нём заведомо нет элемента со значением 99, и требуется найти последний положительный элемент, кратный 3. Прекрасно. Решается, судя по программе, это так. Вводится переменная ppk3, которой присваивается значение 99, и дальше, идя по массиву с конца в начало, мы ищем элемент, удовлетворяющий поставленным условиям (положительный и кратный 3). Найдя таковой, мы присваиваем его значение переменной ppk3, обрываем цикл и выводим найденное значение на экран.
Но возникает вопрос: а если среди элементов массива не найдётся нужного? Тогда программа не сможет выйти из цикла, попытается присвоить индексу массива (i) нулевое или отрицательное значение, и возникнет ошибка выхода за диапазон индексов массива! Чтобы этого избежать, чуть усложним программу:
Код:
i:=N;
ppk3:=99;
repeat
 if (A[i]>0) and ((A[i] mod 3)=0) then
  ppk3:=A[i]
 else
  i:=i-1;
until (ppk3<>99) or (i=0);
if ppk3<>99 then
 writeln('last positive divisible by 3 element is', ppk3:4)
else
 writeln('array contains no positive divisible by 3 elements');
readln
Вот теперь ошибки не возникнет в любом случае.

P.S. И модераторское замечание: не цепляйтесь к чужим темам, создавайте свои!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070