
Дана последовательность чисел, заканчивающаяся нулем. Определить количество чисел не оканчивающихся
на 2 и кратных 3 8 класс. Pascal Abc Net. Написать максииально понятно.

Ответы на вопрос

begin
ReadSeqIntegerWhile(p -> p <> 0).
Where(p -> (Abs(p) mod 10 <> 2) and (p mod 3 = 0)).
Count.Println
end.
Объяснение
На самом деле такая программа намного понятнее, чем те, которые еще дают во многих (но не всех) школах. А при зачаточных знаниях английского языка программирование подобных задач превращается в забаву.
Итак, по порядку.
Функция ReadSeqIntegerWhile(p -> p <> 0). - сокращение английской фразы Read Seqiunce of Integer While - "читать последовательность целых до тех пор пока"... А это "пока" стоит в скобках после имени функции и понимается так. p - это параметр функции (такой, как х в функции y = f(x). Т.е. p обозначает каждый по очереди элемент последовательности, которую функция принимает с клавиатуры. И для этого p указано условие p <> 0. Т.е. пока очередной считанный элемент последовательности не станет равным нулю, их следует продолжать читать. В целом вся эта конструкция обеспечивает получение с клавиатуры последовательности целых чисел с условием окончания по вводу нуля. Сам ноль в последовательность не входит. Почему последовательность, а не какой-то массив? Во-первых, в условии ясно сказано: последовательность. В прежних версиях паскаля не было последовательностей. В этой они есть. Во-вторых, нам сами элементы последовательности хранить не надо, мы просто проверяем значение очередного элемента и можем о нем забыть. А раз не надо хранить, нечего память занимать массивом. А последовательность память не занимает.
В конце строки стоит точка. Точку можно понимать, как данные. Т.е. точка тут символизирует полученную последовательность. Это как место сцепки двух вагонов, когда из одного вагона мы идем в другой. Первым вагончиком была функция, организовавшая нам получение последовательности. Второй вагончик - это следующая строка (моэно на одной писать, но будет длинно).
Where(p -> (Abs(p) mod 10 <> 2) and (p mod 3 = 0)).
Это тоже функция и тоже с точкой-сцепкой в конце. Значит, есть и следующий вагончик. Where - на аглийском означает "где". Это фильтр, ситечко, который пропускает в следующий вагон только тех, кто удовлетворяет условиям. Такой вот программный "фейс-контроль".
И условие прохода (отбора) также в скобочках. И опять этот р, обозначающий каждый по очереди элемент последовательности. А дальше обычное логическое выражение. Abs(p) mod 10 <> 2 - это проверка того, что число не оканчивается двойкой. Abs можно не писать, если гарантировано, что не будет отрицательных чисел. Второе условие p mod 3 = 0 требует, чтобы число было кратно 3. Оба условия связаны and, т.е. должны выполняться одновременно. Итак, в нашем втором "вагончике" сидят контролеры, которые следят, чтобы нежелательные элементы дальше не прошли.
Count.Println - это наша последняя сцепка пары "вагончиков".
Count. - это "считать" по-английски. В этом вагончике просто сидит Счетчик и отмечает, сколько элементов-пассажиров входят в вагон. А вот дальше он их не пускает. Он поступает несколько жестоко - просто выкидывает элемента - пассажира из состава. Такая уж у него работа. И только когда поток пассажиров закончится, Счетчик отправится в последний вагон со своими результатами.
Println - это и есть последний вагочик. Print and Line feed - печать и переход к новой строке. Счетчик отдаст свои результаты на вывод, а сам покинет вагон.
Ну и главное. Это все один-единственный оператор. В нем "закопаны" и циклы и много другое. В этом мощь нынешнего программирования - не заниматься мелочами, котороые компьютер в состоянии выполнить сам.
Как такое оператор работает? Первый элемент пассажир заходит (с клавиатуры) в вагончик ReadSeqIntegerWhile. И что, он там ждет остальных? Да нет, конечно! Он идет во второй вагончик - фильтр Where. Проходит контроль - идет в третий вагончик, к Счетчику. Ну и там... в общем, проходит Счетчика и дальше уже не при деле. А прямо за этим элементов в первый вагончик зашел второй элемент, за ним - третий... Часть проходит фильтр, а часть - нет. Те, что проходят, добираются до Счетчика. С прочими прощаемся еще раньше. Собственно это и означает, что поледовательость не хранится. Если бы хранилась - эти "пассажиры" так бы сидели где-то, занимая места. Ну а так - так мы можем хоть миллиарды элементов пропустить через вагончики.
Написано много. Но стоит раз понять - и такие (а также подобные) вагончики будет очень легко и очень быстро строить. А это позволяет писать программы коротко, быстро и безошибочно.



Для решения данной задачи, мы должны проанализировать последовательность чисел, заканчивающуюся нулем. Наша цель - определить, сколько чисел в этой последовательности не оканчиваются на 2 и при этом являются кратными 3.
Для начала, нам понадобится счетчик, который будем увеличивать каждый раз, когда выполняются условия: число не оканчивается на 2 и является кратным 3.
Давайте рассмотрим шаги, необходимые для решения задачи:
Инициализируем переменную-счетчик нулем. Пусть ее имя будет "count".
Считываем первое число из последовательности.
Проверяем, равно ли это число нулю. Если да, переходим к следующему шагу. Если нет, переходим к шагу 4.
Проверяем два условия:
- Число не должно оканчиваться на 2 (последняя цифра не равна 2).
- Число должно быть кратным 3 (делится на 3 без остатка).
Если оба условия выполняются, увеличиваем счетчик "count" на 1.
Считываем следующее число из последовательности и переходим к шагу 3.
По достижении нуля, выводим значение переменной-счетчика "count". Это и будет искомым количеством чисел, удовлетворяющих условию.
Данное описание алгоритма является понятным и должно помочь вам реализовать его на языке Pascal. Успехов в решении задачи!


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili