PascalABC.NET официальный канал
1.86K subscribers
536 photos
1 video
9 files
376 links
Официальный канал языка и системы программирования PascalABC.NET
Download Telegram
Интерфейсы

Интерфейс
- это набор требований, которым должен удовлетворять класс. Этот набор требований задается в интерфейсе в виде заголовков методов.

Класс, реализующий интерфейс, должен реализовывать все его методы в секции public.

Интерфейсы позволяют объединять разнородные объекты в полиморфные списки.

#студентам
Тип Object

Переменной типа Object можно присвоить объект любого типа. На скриншоте приведен пример, в котором переменной типа object присваивается целое, вещественное и массив.
👍21
Пишем интерпретатор на PascalABC.NET. Синтаксический анализатор. Часть 2. Реализуем конкретный язык Simple

В данной статье мы наконец реализуем парсер конкретного языка с циклами, условным оператором и оператором вывода.

https://teletype.in/@pascalabcnet/Parse2
🔥4👍2
Дубль запуска основной программы

На скриншоте продемонстрирована важная техника - как запустить код основной программы повторно в этой же программе.

Для этого используется рефлексия. Соответствующие действия выполняются в подключаемом модуле RunUnit. Здесь в секции инициализации еще до запуска основной программы вызывается метод $Main основной программы и потом прорабатывает сама программа.

Данный прием активно используется при тестировании. В частности, подобную технику активно использует задачник PT4 и легковесный задачник LightPT.
🔥3
Игра Быки и коровы

Перед вами - реализация игры Быки и Коровы. Один игрок загадывает четырехзначное число, в котором все цифры разные. Второй - отгадывает его, предлагая вариант ответа. Первый должен ответить, сколько в сказанном числе верных цифр не на своих местах (коров) и сколько верных на своих местах (быков).

Вот результат одного запуска программы:

Загадано: 8170 
1. Ход=1846 Коров: 2 Быков: 0 ОсталосьВариантов: 1155
2014 2018 2061 2064 2068 2081 2084 2104 2108 2134 2138 2154 2158 2160 2163 2165 2167 2169 2174 2178
2. Ход=6780 Коров: 2 Быков: 1 ОсталосьВариантов: 53
2687 2768 3687 3768 4087 4670 4708 5687 5768 6017 6028 6038 6058 6071 6074 6098 6107 6208 6278 6308
3. Ход=8765 Коров: 1 Быков: 1 ОсталосьВариантов: 8
4708 7160 7460 8170 8470 8620 8630 8690
4. Ход=8620 Коров: 0 Быков: 2 ОсталосьВариантов: 2
8170 8470
5. Ход=8170 Коров: 0 Быков: 4 ОсталосьВариантов: 1
8170
Решение = 8170 Ходов: 5
3👍3
Перед ЕГЭ

function F(a, limit, sm, pr: integer): integer;
begin
if (a = limit) and (sm <= 1) and (pr <=1) then
Result := 1
else if (a > limit) or(sm > 1) or (pr > 1) then
Result := 0
else
Result := F(a+1, limit, sm+1, 0) + F(a+2, limit, sm+1, 0) +
F(a*2, limit, 0, pr+1) + F(a*3, limit, 0, pr+1)
end;

begin
Print(F(1, 22, 0, 0));
end.
👍41
И снова перед ЕГЭ

var count, cnt: array['A'..'Z'] of integer;

begin
Assign(input, '24.txt');

while not eof do
begin
var s := ReadlnString;

for var i := 2 to s.Length do
if s[i - 1] = 'A' then
cnt[s[i]] += 1;

var max := cnt.Max;

for var c := 'A' to 'Z' do
if cnt[c] = m then
count[c] += 1;
end;

Print(count.Max);
end.
👍1🥰1
Чего в массиве больше - четверок или пятерок

Здесь три возможности - четверок больше, пятерок больше или одинаково. Используем CompareTo, возвращающую целое
👍4
19 июня - ЕГЭ по информатике

Сегодня 19 июня десятки тысяч школьников по всей России сдают ЕГЭ по информатике. Цель - получить как можно более высокий балл и поступить в ВУЗ своей мечты.

Для решения задач можно использовать самые разные языки, но многие школьники выбирают в качестве языка программирования именно PascalABC.NET - российскую систему программирования, разработанную для обучения современному программированию и вошедшую в репозитории российских операционных систем.

Именно грамотное использование PascalABC.NET позволяет написать компактный и понятный код, дает школьнику на ЕГЭ хорошие конкурентные преимущества, обеспечивает получение наивысших баллов и порой ставит в тупик присутствующих на экзамене "специалистов".

Дерзайте! Разработчики PascalABC.NET с вами в этот день!
🔥7👍1
Метод f.Lines текстового файла

Один из способов выполнить цикл по строкам текстового файла - воспользоваться методом f.Lines, который возвращает последовательность строк
Пишем интерпретатор на PascalABC.NET. Синтаксический анализатор. Часть 2. Абстрактное синтаксическое дерево (AST)

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

https://teletype.in/@pascalabcnet/Parse3
Можно ли типизировать Питон?

Глубокая статья-перевод на Хабре о том, можно ли хоть как-то типизировать Питон и в результате получить ускорение?
Анализируются все известные решения и - делается вывод...

Спойлер - нельзя. Полностью нельзя будет никогда. Слишком много там наворотили динамичного. Так что Питон всегда так и останется медленным.

https://habr.com/ru/companies/piter/articles/743538/
2
ЕГЭ по информатике - реальное задание 27

В этом году на ЕГЭ по информатике - новее задание 27.
Кто решит?

Вот примерная формулировка:

Астрономическая станция ведёт наблюдение за излучением солнца. Показания записываются каждую минуту в течении N минут. Определяется тройка измерений, между которыми прошло не менее K минут. Найдите максимальную сумму показаний среди таких троек.

Входные данные
Даны два входных файла (A и B), каждый из которых в первой строке содержит число N - количество измерений, во второй строке K - минимальное количество минут между искомыми измерениями. В каждой из следующих N строк находится число: интенсивность излучения солнца.

В ответе укажите два числа: сначала значение искомой величины для файла A, затем - для файла B.

Типовой пример организации данных во входном файле
7
2
18
48
49
102
95
15
68

При таких исходных данных ответом будет 48 + 102 + 68 = 218
Черепашья графика на занимательных примерах

Валерий Рубанцев опубликовал новую замечательную книгу по Черепашьей графике в PascalABC.NET: https://disk.yandex.ru/i/2bIr-nEYGWLoLw
В ней - огромное количество примеров.
На скриншоте - один из них.
👍7
Умножение матриц

Данный код перемножает две матрицы 3 на 4 и 4 на 5. Одна строка!

#OneLiner
5
Группировка данных по категории

Имеется набор данных - каждое данное принадлежит к некоторой категории (например, рост человека - ниже среднего, средний и выше среднего.

Сгруппировать данные по категориям и посчитать количество в каждой категории.
👍2
Новая стандартная функция RandomReal

В PascalABC.NET появилась новая стандартная функция RandomReal(a,b,digits). Параметр digits определяет количество знаков после точки и по умолчанию равен 1.

В примере на скриншоте демонстрируется генерация 10 случайных вещественных с двумя знаками после десятичной точки

#новое
👍93😁2
Вредные советы для C++ и не только

Публикуем великолепную коллекцию вредных советов от PVS Studio - как не надо писать на C++: https://pvs-studio.ru/ru/blog/posts/cpp/1053/

Половина советов - универсальные и не зависят от языка программирования.

Самые замечательные вредные советы:
🔹 Чем короче имя переменной, тем лучше
🔹 Если что-то не работает, то, скорее всего, глючит компилятор. Попробуйте поменять местами некоторые переменные и строки кода
🔹 Используйте как можно меньше фигурных скобок и переносов строк, старайтесь писать условные конструкции в одну строку. Так код будет быстрее компилироваться и занимать меньше места
🔹 Не пользуйтесь стандартной библиотекой языка. Что может быть интереснее, чем написать свои строки и списки с уникальным синтаксисом и семантикой?
🔹 Глобальные переменные очень удобны, т. к. к ним можно обращаться отовсюду.
🔹 Смело сравнивайте числа с плавающей точкой с помощью оператора ==. Раз есть такой оператор, значит им нужно пользоваться
🔹 Зачем инициализировать переменные, если там и так нули? Я вот недавно не инициализировал, и там ноль был. Всё работало.
🔹 Выравнивание и единый стиль не дают раскрыться вашей индивидуальности и креативности. Это притеснение свободы личности и самовыражения. Каждый должен оформлять код так, как ему нравится.
🔹 Экономьте память. Используйте одну переменную для разных целей!
🔹 Массив на стеке — лучшее решение. И вообще, выделение памяти — зло. char c[256] хватит всем, а если не хватит, то потом поменяем на 512. В крайнем случае – на 1024.
🔹 Нет времени думать, копируйте код многократно!
🔹 Если программа работает, как вы ожидали, значит она правильная. И обсуждать здесь нечего, точка. Everything is fine
🔹 Проявите немного уважения к программистам прошлого – объявляйте все переменные в начале функций. Это традиция!
🔹 Прося помощь на форуме, делайте так, чтобы из тебя вытягивали информацию. Так всем будет интереснее
🔹 Настоящие программисты программируют только на C++
👍10🤪41🔥1