ar
Feedback
PascalABC.NET официальный канал

PascalABC.NET официальный канал

الذهاب إلى القناة على Telegram

Официальный канал языка и системы программирования PascalABC.NET

إظهار المزيد
1 858
المشتركون
-224 ساعات
-137 أيام
-2430 أيام
أرشيف المشاركات
Треугольник Флойда Задача. Написать процедуру, выводящую треугольник Флойда с rows рядами:
 1
 2  3
 4  5  6
 7  8  9 10
11 12 13 14 15
Решение.
procedure FloydTriangle(rows: integer);
begin
  var r := 1;
  for var i:=1 to rows do
  begin
    for var j:=1 to i do
    begin  
      Write(r: (j>8 ? 4 : 3));
      r += 1;
    end;
    Writeln
  end;
end;

begin
  FloydTriangle(5);
  Writeln;
  FloydTriangle(14);
end.
https://rosettacode.org/wiki/Floyd%27s_triangle#PascalABC.NET

Бесконечная последовательность Задача. Выведите все натуральные числа Решение. ## 1.Step.Print https://rosettacode.org/wiki/I
Бесконечная последовательность Задача. Выведите все натуральные числа Решение.
## 1.Step.Print
https://rosettacode.org/wiki/Integer_sequence#PascalABC.NET Это решение - самое короткое на Rosetta Code

Функция Flatten для списка Имеется список элементов, каждый из которых может быть либо списком, либо атомарным элементом. Тре
Функция Flatten для списка Имеется список элементов, каждый из которых может быть либо списком, либо атомарным элементом. Требуется получить из него список атомарных элементов.
function Flatten(lst: List<object>): List<object>;
begin
  Result := new List<object>;
  foreach var x in lst do
    if x is List<object> then
      Result.Addrange(Flatten(x as List<object>))
    else Result.Add(x)
end;

function LstObj(params a: array of object): List<Object> := new List<Object>(a);

begin
  var lst := LstObj(1,LstObj(2,LstObj(3,4),LstObj(5,6)), LstObj(LstObj(7,8),9));
  Println(lst);
  Println(Flatten(lst));
end.
https://rosettacode.org/wiki/Flatten_a_list#PascalABC.NET

Ближайшая пара точек Задача. Дан массив точек. Найти пару ближайших точек и расстояние между ними. `type Point = auto class x
Ближайшая пара точек Задача. Дан массив точек. Найти пару ближайших точек и расстояние между ними.
`type Point = auto class
  x,y: real;
  function Distance(p: Point): real := Sqrt((x-p.x)**2 + (y-p.y)**2);
end;

function Pnt(x,y: real) := new Point(x,y);

function RandomPoint: Point := Pnt(RandomReal(0,10),RandomReal(0,10));

function ClosestPair(points: array of Point): (Point,Point);
begin
  var pairs := points.Combinations(2);
  var pair := pairs.MinBy(pair -> pair[0].Distance(pair[1]));
  Result := (pair[0],pair[1]);
end;

begin
  var points := ArrGen(10,i -> RandomPoint);
  points.Println;
  
  var ClPair := ClosestPair(points);
  
  Println(ClPair,ClPair[0].Distance(ClPair[1]));
end.
https://rosettacode.org/wiki/Closest-pair_problem#PascalABC.NET

Как вывести дату в различных форматах https://rosettacode.org/wiki/Date_format#PascalABC.NET begin var today := DateTime.Now.
Как вывести дату в различных форматах https://rosettacode.org/wiki/Date_format#PascalABC.NET
begin
  var today := DateTime.Now.Date;
  Println(today.ToString('yyyy-MM-dd'));
  Println($'{today:D}');
end.
Вывод:
2024-06-01
Saturday, June 1, 2024
#RosettaCode

Как найти размер файла в байтах? Очень просто: uses System.IO; begin FileInfo.Create('input.txt').Length.Println; end. https:
Как найти размер файла в байтах? Очень просто:
uses System.IO;

begin
  FileInfo.Create('input.txt').Length.Println;
end.
https://rosettacode.org/wiki/File_size#PascalABC.NET В Rosetta Code PascalABC.NET уже на 470 месте! #RosettaCode

Однострочники для КЕГЭ - часть 5 Продолжаем решать задачи ЕГЭ, используя регулярные выражения. (25. 6789) (ЕГЭ-2023) Назовём
Однострочники для КЕГЭ - часть 5 Продолжаем решать задачи ЕГЭ, используя регулярные выражения. (25. 6789) (ЕГЭ-2023) Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: — символ «?» означает ровно одну произвольную цифру; — символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске 123*4?5 соответствуют числа 123405 и 12300425. Найдите все числа, меньшие 108, соответствующие маске 12*34?5 и делящиеся без остатка на 2025. В качестве ответа приведите все найденные числа в порядке возрастания, справа от каждого числа выведите результат его деления на 2025.
##
(0..100000000)
.AsParallel
.Where(t->t.Divs(2025))
.Where(t->Regex.IsMatch(t.Tostring,'^12\d*34\d{1}5$'))
.Sorted
.printlines(t->$'{t} {t div 2025}');
Автор: Ипатов Юрий

ChatGPT - реши мне задачу по программированию! Основной вывод статьи: "полагаться на ИИ в написании программ пока рано". https://3dnews.ru/1105416/issledovanie-52-otvetov-chatgpt-na-voprosi-po-programmirovaniyu-neverni

Задача на контейнеры без использования методов Интересен сорт задач, в которых можно пользоваться любыми контейнерами данных, но в них запрещается использование любых нетривиальных методов - например, вычисляющих минимум или вовсе вызывающих LINQ-запросы. Задача. Дан массив N чисел. Оставить в нем только те числа, которые не повторяются дважды. Указание. Можно использовать словари, множества, списки, но запрещается в них использовать какие угодно нетривиальные методы (кроме добавления и в словаре - проверки ключа). Указание 2. Предложить по возможности понятный и компактный алгоритм. В комментариях приветствуются различные решения.

Однострочники для КЕГЭ - часть 4 Продолжаем решать задачи ЕГЭ, используя регулярные выражения. (24.6676) (ЕГЭ-2023) Текстовый
Однострочники для КЕГЭ - часть 4 Продолжаем решать задачи ЕГЭ, используя регулярные выражения. (24.6676) (ЕГЭ-2023) Текстовый файл 24-264.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита и цифры. Определите максимальную длину подстроки, которая может являться записью числа в шестнадцатеричной системе счисления.
##
ReadAllText('24-264.txt').MatchValues('[0-9A-F]+')
.Select(w -> w.Length).Max.Print
Автор: Ипатов Юрий

Parallel Foreach В какой последовательности выведутся слова? ## uses System.Threading.Tasks; Parallel.ForEach(|'каждый','охот
Parallel Foreach В какой последовательности выведутся слова?
##
uses System.Threading.Tasks;

Parallel.ForEach(|'каждый','охотник','желает','знать','где','сидит','фазан'|, s -> Println(s));

Однострочники для КЕГЭ - часть 3 Продолжаем решать задачи ЕГЭ, используя регулярные выражения. (08.7174) (А. Носкин) Маша сос
Однострочники для КЕГЭ - часть 3 Продолжаем решать задачи ЕГЭ, используя регулярные выражения. (08.7174) (А. Носкин) Маша составляет семибуквенные слова перестановкой букв слова ГЛУБИНА. Сколько существует слов, в которых буква «Г» расположена после букв «А» и «И»?
## 
'ГЛУБИНА'.Permutations.Count(s -> not s.IsMatch('[АИ].*Г')).Print
Автор: Ипатов Юрий

RosettaCode - сравнение длин строк в PascalABC.NET https://rosettacode.org/wiki/Compare_length_of_two_strings#PascalABC.NET
begin
  var (s1,s2) := ('Bye','Hello');
  if s1.Length > s2.Length then
    Swap(s1,s2);
  Println(s1,s1.Length);
  Println(s2,s2.Length);
  Println;
  var strArr := |'wolf','cat','crocodile','tiger'|;
  strArr.OrderByDescending(s -> s.Length).PrintLines(s -> $'{s,9} - {s.Length}');
end.

Экзамен в компьютерной школе мехмата ЮФУ Сегодня в детской компьютерной школе мехмата ЮФУ юные программисты сдают годовой экз
Экзамен в компьютерной школе мехмата ЮФУ Сегодня в детской компьютерной школе мехмата ЮФУ юные программисты сдают годовой экзамен. Основной язык программирования на первой ступени - PascalABC.NET. Напомним, что основной причиной разработки PascalABC.NET была необходимость легковесной и мощной средой программирования с современным языком и библиотеками, позволяющими начинающим эффективно осваивать современное программирование. Все экзаменационные задания проверяются автоматически с помощью электронного задачника Programming Taskbook, и результаты тут же отображаются на сайте проверяющей системы, формируя рейтинг каждого ученика. На снимке - группа 24 в полном составе. Тот самый момент, когда все задания решены и экзамен сдан.

Однострочники для КЕГЭ - часть 2 Продолжаем решать задачи ЕГЭ, используя регулярные выражения. (08.6919) (Е. Джобс) Сколько с
Однострочники для КЕГЭ - часть 2 Продолжаем решать задачи ЕГЭ, используя регулярные выражения. (08.6919) (Е. Джобс) Сколько существует натуральных чисел, запись которых в семеричной системе содержит 5 разрядов?
## 
'0123456'.Cartesian(5).Where(s -> s.IsMatch('[1-6]{1}[0-6]{4}')).Count.Print;
Или
## 
'0123456'.Cartesian(5).Count(s -> s.IsMatch('^[^0]')).Print

Repost from PLComp
Возможно вы знакомы с алгоритмами сборки мусора, которые используются в языках программирования. Американский программист Кен Фокс (Ken Fox) написал программу с использованием разных алгоритмов сборки мусора и вариант программы без освобождения памяти, собрал данные для каждого варианта запуска программы и сгенерировал анимированные изображения для них. В репозитории представлены визуализации четырех основных алгоритмов сборки мусора: - Mark-sweep - Mark-compact - Copying - Reference counting Каждому из этих алгоритмов посвящена отдельная глава в основополагающем учебнике The Garbage Collection Handbook. Рекомендуем обратиться к этому учебнику для полного погружения в тему. Каждое анимированное изображение - это пространство памяти, выделенное процессу. Чёрным цветом изображена неиспользуемая память, по мере использования память начинает подсвечиваться жёлтым (операции записи) и зелёным (операции чтения) цветами. Цвет фрагментов памяти, которые используются дольше, начинает тускнеть, чтобы визуализировать развитие процесса во времени. По ходу выполнения программа перестаёт использовать отдельные участки памяти. Они и считаются "мусором". Первая анимация демонстирует отсутствие всякой сборки мусора - NO_GC, в этом случае память освобождается только при завершении процесса. Механизм NO_GC прост в реализации, он удобен, когда есть способ разбить задачу на отдельные подпроцессы. Так, например, работает веб-сервер Apache. Вторая анимация демонстрирует работу сборщика мусора с использованием техники подсчёта ссылок. Суть алгоритма заключается в подсчёте количества ссылок на объекты в памяти, если количество ссылок становится равным нулю, то объект удаляется. Подсчёт ссылок - единственный алгоритм, хорошо совместимый с разными менеджерами ресурсов. По сравнению с первой анимацией появились красные пиксели, они соответствуют операциям подсчёта ссылок. Можно оценить и эффективность сборщика, если сразу после красной вспышки область памяти освобождается. Третья анимация демонстрирует работу алгоритма "mark-and-sweep". Все объекты делятся на достижимые и недостижимые. Определённое множество объектов считается достижимым изначально - так называемые корневые объекты. Объект, на который есть ссылка из достижимого объекта, тоже считается достижимым. При запуске сборщик мусора выполняет следующие шаги: - Фаза Mark: отмечает все достижимые объекты - Фаза Sweep: проходит рекурсивно по объектам в куче, удаляет недостижимые объекты и возвращает их в пул свободной памяти. Визуализации остальных алгоритмов приведены в репозитории. Помимо описанных визуализаций алгоритмов сборки мусора есть и другие, например интерактивная визуализация алгоритма tricolor mark-sweep, используемого в реализации языка Go.

Однострочники для КЕГЭ - часть 1 Тяжело ли сдавать компьютерный ЕГЭ по информатике? Вопрос не однозначный, и здесь нет единог
Однострочники для КЕГЭ - часть 1 Тяжело ли сдавать компьютерный ЕГЭ по информатике? Вопрос не однозначный, и здесь нет единого ответа для всех. Однако, если вы готовитесь и тренируетесь, то результат будет. Существуют разные стратегии и подходы. При этом следует отметить: чтобы гарантированно набирать баллы, надо решать надежно и продумывать варианты самопроверки. Одна из технологий, которая поможет не только на ЕГЭ, но и в ИТ карьере – это регулярные выражения. Для каких задач она подходит: №8 (комбинаторика), №24 (строки), №25 (делители). Итак, приступим. (08.5336) (ЕГЭ-2022) Определите количество пятизначных чисел, записанных в девятеричной системе счисления, которые не начинаются с нечётных цифр, не оканчиваются цифрами 1 или 8, а также содержат в своей записи не более одной цифры 3.
## uses School;
'012345678'.Cartesian(5)
    .Where(s -> s.IsMatch('[^01357].{3}[^18]'))
    .Where(s -> s.CountOf('3') <= 1)
    .Count
    .Print
Автор: Ипатов Юрий

Популярность языков программирования в RosettaCode В RosettaCode есть замечательная задача - написать программу, которая выво
Популярность языков программирования в RosettaCode В RosettaCode есть замечательная задача - написать программу, которая выводит рейтинг популярности языков программирования в RosettaCode https://rosettacode.org/wiki/Rosetta_Code/Rank_languages_by_popularity На PascalABC.NET программа заняла всего 14 строк. https://gist.github.com/miks1965/fcea25d924e90811b760abee91185ea6

Иллюстрация использования Parallel.For Данный код иллюстрирует применение Parallel.For для подсчета количества простых чисел.
Иллюстрация использования Parallel.For Данный код иллюстрирует применение Parallel.For для подсчета количества простых чисел. На шестиядерном процессоре ускорение - в 6 раз. Следует обратить внимание на использование оператора lock, который защищает следующий оператор от выполнения в нескольких потоках одновременно. Если его убрать, то результат будет отличаться от нераспараллеленного случая, что будет свидетельствовать об ошибке. #параллельность https://gist.github.com/miks1965/bac11e12e3ba82c2a33935110992183a

PascalABC.NET в проекте Rosetta Code Rosetta Code - замечательный проект, содержащий решение большого количества задач на раз
PascalABC.NET в проекте Rosetta Code Rosetta Code - замечательный проект, содержащий решение большого количества задач на различных языках программирования. Его целью является сравнение языков программирования по выразительности и мощности средств. Более 1200 задач представлено здесь. С удивлением можно обнаружить, что PascalABC.NET также тут представлен как отдельный язык, что не может не радовать. Однако PascalABC.NET здесь - на 500-том месте по количеству решенных задач. Предлагаем желающим подключиться к проекту и поднять рейтинг PascalABC.NET. Для примера - на скриншоте - решенная вчера задача об отображении древовидных структур.