Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 24.06.2019, 15:02   #1 (permalink)
qwerty76
Новичок
 
Регистрация: 24.06.2019
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Что значит ppk3:=99?

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;
writeln('posledniy polo}|{itelniy element kpatniy 3' ppk3:4)

Что значит ppk3:=99? Спасибо!
qwerty76 вне форума   Ответить с цитированием

Старый 24.06.2019, 15:02
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0



что это значит
что это значит
что это значит???
Что это значит?

Старый 24.06.2019, 16:32   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,298
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Цитата:
Сообщение от 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. И модераторское замечание: не цепляйтесь к чужим темам, создавайте свои!
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 25.06.2019, 07:26   #3 (permalink)
prima
Member
 
Регистрация: 31.08.2015
Сообщений: 14,063
Сказал(а) спасибо: 176
Поблагодарили 140 раз(а) в 61 сообщениях
Репутация: 48833
По умолчанию

Владимир Игоревич, при всём уважении..
Ну на кой ляд там именно этот оператор? Всё равно значение будет присвоено раньше первого использования этой переменной.
__________________
Пожалуйста не предлагайте мне дружбу. Не хочу отказывать, но у меня другие понятия, поэтому просто не отвечу.
prima вне форума   Ответить с цитированием
Старый 25.06.2019, 07:46   #4 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 14,410
Записей в дневнике: 56
Сказал(а) спасибо: 123
Поблагодарили 149 раз(а) в 61 сообщениях
Репутация: 59583
По умолчанию

Цитата:
Сообщение от prima Посмотреть сообщение
Ну на кой ляд там именно этот оператор?
это значение используется в качестве условия для выхода из цикла.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 25.06.2019, 08:15   #5 (permalink)
prima
Member
 
Регистрация: 31.08.2015
Сообщений: 14,063
Сказал(а) спасибо: 176
Поблагодарили 140 раз(а) в 61 сообщениях
Репутация: 48833
По умолчанию

Мы имеем огрызок от программы, не зная ничего об исходных условиях и задаче в целом. Мы не знаем диапазонов значений.
Что такое N?
Что произойдёт в версии Владимира, если первым же элементом массива окажется 99? Если он окажется любым элементом?
В используемом диалекте Паскаля нумерация элементов массива начинается с нуля или единицы? Если с нуля - один элемент не будет обработан. Да и интересный порядок обработки массива: с последнего
Особенно с учётом выводимого сообщения о последнем кратном элементе.
__________________
Пожалуйста не предлагайте мне дружбу. Не хочу отказывать, но у меня другие понятия, поэтому просто не отвечу.
prima вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 25.06.2019, 10:44   #6 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,298
Сказал(а) спасибо: 287
Поблагодарили 506 раз(а) в 164 сообщениях
Репутация: 91675
По умолчанию

Андрей, значит так, укладывайся на разделочную доску и приготовься: сейчас я из тебя отбивную делать буду.
Цитата:
Сообщение от prima Посмотреть сообщение
Мы имеем огрызок от программы, не зная ничего об исходных условиях и задаче в целом. Мы не знаем диапазонов значений. Что такое N?
По здравому смыслу — старший номер элемента массива.
Цитата:
Сообщение от prima Посмотреть сообщение
Что произойдёт в версии Владимира, если первым же элементом массива окажется 99? Если он окажется любым элементом?
А я для чего и для кого, спрашивается, оговорил:
Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Как я понял, задача поставлена так. Есть массив из N целых элементов (положительных и отрицательных), причем в нём заведомо нет элемента со значением 99, и требуется найти последний положительный элемент, кратный 3.
Если это условие напрягает, то стартовым может быть ЛЮБОЕ значение переменной ppk3, лишь бы заведомо за пределами массива.
Цитата:
Сообщение от prima Посмотреть сообщение
В используемом диалекте Паскаля нумерация элементов массива начинается с нуля или единицы? Если с нуля - один элемент не будет обработан.
В отличие от СИ, Паскаль допускает ЛЮБУЮ нумерацию (за что его безмерно люблю), хоть с нуля, хоть с единицы, хоть в диапазоне -537..1789.
Цитата:
Сообщение от prima Посмотреть сообщение
Если с нуля - один элемент не будет обработан.
Вот тут, пожалуй, соглашусь: следовало указать, что предполагается диапазон 1..N. Если же нумерация начинается с нуля, то следует присвоить исходное значение i:=N+1 и оператор i:=i-1 поставить в цикле в начале, а не в конце.
Цитата:
Сообщение от prima Посмотреть сообщение
Да и интересный порядок обработки массива: с последнего Особенно с учётом выводимого сообщения о последнем кратном элементе.
Именно! Очень правильный и грамотный подход. Вот представь, что массив имеет вид:
7 13 6 8 9 5
и нужно найти последний элемент, кратный трём, т.е., в данном случае, это число 9. И вот тут рационально пойти с конца, пока не выполнится условие кратности. В данном случае 5 — нет, 9 — да. И на этом цикл завершается, задача решена.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 25.06.2019, 11:45   #7 (permalink)
prima
Member
 
Регистрация: 31.08.2015
Сообщений: 14,063
Сказал(а) спасибо: 176
Поблагодарили 140 раз(а) в 61 сообщениях
Репутация: 48833
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
укладывайся на разделочную доску и приготовься
А соусом табаско польёшь?
Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
А я для чего и для кого, спрашивается, оговорил:
Извини, пропустил.
Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
нужно найти последний элемент, кратный трём
Дурная привычка начинать сначала. Тормознул, что для таких условий лучше начинать с конца.
__________________
Пожалуйста не предлагайте мне дружбу. Не хочу отказывать, но у меня другие понятия, поэтому просто не отвечу.
prima вне форума   Ответить с цитированием
Ads

Яндекс

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

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 18:00.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.