Рассуждения о том, что паскаль мёртв и как надо сдавать ЕГЭ

Очень эффективная структура данных :slight_smile:

Вообще да, там все очень даже эффективно, просто алекс выдрал из контекста то, что требует подробного объяснения или не дочитал - там base 30 хранится: https://www.codementor.io/@arpitbhayani/how-python-implements-super-long-integers-12icwon5vk

Большинство школьников сделают аналогичное гораздо медленнее. Но скорее всего они просто используют BigInteger, точно также совершенно не разбираясь как это работает. Ну и в чем разница?

Реализуйте лучше на pascalabc.net без BigInteger, посмотрим насколько медленнее оно будет работать :slight_smile:

Да уж предложите сразу реализовать PascalАВС.NЕТ без .NET - чего мелочиться? А Python надо реализовать без всех этих его библиотек. В DOSBox. И будет Вам счастье…

Так в Free Pascal его изкоробки нет, почему как раз его и советую. Придётся им или искать в инете или самим писать,что будет гораздо полезнее.

Конечно может оно медленнее будет работать, но это не значит, что это плохо. Обычно в таких задачах производительность вообще не критична.

В том что придётся понять, что ничего не даётся даром, и те же big int компьютер обрабатывает через множество манипуляций с числами обычной разрядности. Что будет замаскировано при обучении на языках вроде ABC или Python. Из чего следует, что для начального обучения программированию они подходят хуже, чем Free Pascal.

C тоже не очень хорошо подходит для начального обучения, но уже по другой причине — он наоборот уже слишком близок к железу, из-за чего более высокоуровневые концепции в нём отсутствуют, даже такие элементарные как массивы и строки. Поэтому и получается что кроме Pascal для самого начального обучения и взять-то нечего, каким бы он ни казался устаревшим и непопулярным.

Из этого следует совсем другое: если Вы со своими идеями пойдете в школу учить детей, то очень быстро станете героем тик-тока с отпечатком ботинка на пятой точке.

2 лайка

Это не требуется для обучения. Этот критерий “близок/не близок к железу” вы сами придумали для себя. Важно уметь строить алгоритм решения задачи. Как там компьютер BinInt или float в у себя хранит и обрабатывает по большей части не важно для начала. А вот то, что writeln(3/2); после fpc выводит 1.5000000000000000E+000 - вызывает некоторые вопросы… Кстати у pabc с этим получше вроде.

1 лайк

Вот цена нынешним школьникам: любуйтесь! Какие тут С++, FPC и железо?

А вы свои критерии не сами придумали? Почему вы решили, что это не важно, а то важно?

А что он, по-вашему, должен выводить? Это в Си целочисленное деление обозначается простым /, а в паскале нужно явно написать mod или div, чтобы целый результат получить (3 div 2 должно дать 1)

1.5 внезапно

1 лайк

Так он 1.5 и выводит в экспоненциальной нотации. Если не нравится, то во writeln можно формат задать: writeln(3/2:1:1)

Если надо вывести 0.3/1.75/1.825 и т.д, то не поможет, надо принудительно форматировать через FormatFloat в general или что-то аналогичное. Это конечно все равно придется познать, но в начале обучения это лишняя магия.

Bigint без понимания это плохо, хотя его использование не может привести к каким-то ошибкам. Но падаван должен обязательно понимать как оно работает!!

Float без понимания это нормально, хотя как раз в нем есть подводные камни, но чтото я сомневаюсь что ктото дает типы переменных и сразу детали того как они храняться и считаются.

Ну т.е. Вы критикуете язык, толком его не зная. Прелестно…

Если вдаваться в детали, надо определиться что есть язык pascal для начала… Конкретно FormatFloat из sysutils fpc. У абц форматирует по умолчанию, даже не интересовался дальше.

Ну и чтобы что-то толком знать, надо этим пользоваться. Зачем в 2022 знать паскаль я хз…

Я, вообще-то, такого не говорил. Но типы с плавающей точкой нативно поддерживается процессорами x86 начиная с i486, так что без него в языке программирования никуда не деться. Но вообще-то понять как эти типы данных в памяти закодированы и как работают куда проще чем bigInt из какой-то библиотеки по которой не факт что такая дока вообще есть.

Кстати, в тему предыдущего обсуждения. Нашел и посмотрел видео решения одного из вариантов ЕГЭ по информатике. Там где автор решал брутфорсом на питоне, я решал ту же задачу в уме и причём правильно и быстрее чем автор писал код. И это не потому что я такой умный, а потому что эти задачи вручную решить действительно проще. Единственный номер, где я бы наверное тоже обратился к брутфорсу, это с таблицей истинности, да и то, только потому, что не помню правил алгебраических преобразований. Ну и конечно есть номер, где явно нужно программирование по условиям, но там на fpc решение выйдет немногим длиннее чем на питоне. (а если не считать begin/end то вообще так же)

А давайте вот такую задачку. На интервале от 45 000 000 до 50 000 000 найти количество чисел, имеющих ровно 28 четных делителей. Тривиальные делители также учитываются, количество нечетных делителей неважно.

В уме будете решать или на fpc? Хотелось бы код увидеть…

У кого? У программиста???

Есть простой пример задачки на наличие мозга. Найти корень из суммы n нечетных чисел. И дать n чтобы сумма в переполнение ушла. Можно замаскировать дополнительно… решается на бумажке

И что? Сумму искать не как integer, а как real. Вряд ли сумма уйдет за пределы 10^308. Детский сад… А кто помнит математику, знает, что ответом будет n.

А не надо даже помнить математику, чтобы понять что это n. Суть в том, что если решатель сразу начал писать цикл, то с думалкой проблема. Ну и обычно задача чуть более запутана и еще лимит на время выполнения программы стоит. Это же для падаванов.

А посложнее есть project euler.