• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Что значит ppk3:=99?

qwerty76

Ученик
Регистрация
24 Июн 2019
Сообщения
1
Реакции
0
Баллы
0
Что значит ppk3:=99?

i:=N;
ppk3:=99;
repeat
if (A>0) and ((A mod 3)=0) then
ppk3:=A else i:=i-1;
until ppk3<>99;
writeln('posledniy polo}|{itelniy element kpatniy 3' ppk3:4)

Что значит ppk3:=99? Спасибо!
 
Что значит 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. И модераторское замечание: не цепляйтесь к чужим темам, создавайте свои!
 
Владимир Игоревич, при всём уважении..
Ну на кой ляд там именно этот оператор? Всё равно значение будет присвоено раньше первого использования этой переменной.
 
Мы имеем огрызок от программы, не зная ничего об исходных условиях и задаче в целом. Мы не знаем диапазонов значений.
Что такое N?
Что произойдёт в версии Владимира, если первым же элементом массива окажется 99? Если он окажется любым элементом?
В используемом диалекте Паскаля нумерация элементов массива начинается с нуля или единицы? Если с нуля - один элемент не будет обработан. Да и интересный порядок обработки массива: с последнего ;)
Особенно с учётом выводимого сообщения о последнем кратном элементе.
 
Андрей, значит так, укладывайся на разделочную доску и приготовься: сейчас я из тебя отбивную делать буду. :D
Мы имеем огрызок от программы, не зная ничего об исходных условиях и задаче в целом. Мы не знаем диапазонов значений. Что такое N?
По здравому смыслу — старший номер элемента массива.
Что произойдёт в версии Владимира, если первым же элементом массива окажется 99? Если он окажется любым элементом?
А я для чего и для кого, спрашивается, оговорил:
Как я понял, задача поставлена так. Есть массив из N целых элементов (положительных и отрицательных), причем в нём заведомо нет элемента со значением 99, и требуется найти последний положительный элемент, кратный 3.
Если это условие напрягает, то стартовым может быть ЛЮБОЕ значение переменной ppk3, лишь бы заведомо за пределами массива.
В используемом диалекте Паскаля нумерация элементов массива начинается с нуля или единицы? Если с нуля - один элемент не будет обработан.
В отличие от СИ, Паскаль допускает ЛЮБУЮ нумерацию (за что его безмерно люблю), хоть с нуля, хоть с единицы, хоть в диапазоне -537..1789.
Если с нуля - один элемент не будет обработан.
Вот тут, пожалуй, соглашусь: следовало указать, что предполагается диапазон 1..N. Если же нумерация начинается с нуля, то следует присвоить исходное значение i:=N+1 и оператор i:=i-1 поставить в цикле в начале, а не в конце.
Да и интересный порядок обработки массива: с последнего Особенно с учётом выводимого сообщения о последнем кратном элементе.
Именно! Очень правильный и грамотный подход. Вот представь, что массив имеет вид:
7 13 6 8 9 5
и нужно найти последний элемент, кратный трём, т.е., в данном случае, это число 9. И вот тут рационально пойти с конца, пока не выполнится условие кратности. В данном случае 5 — нет, 9 — да. И на этом цикл завершается, задача решена.
 
укладывайся на разделочную доску и приготовься
А соусом табаско польёшь?
А я для чего и для кого, спрашивается, оговорил:
Извини, пропустил.
нужно найти последний элемент, кратный трём
Дурная привычка начинать сначала. Тормознул, что для таких условий лучше начинать с конца.
 
Назад
Сверху