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

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

Last updated 7 months, 1 week ago

Straight from gutter
gutta-online.com

Last updated 2 months, 2 weeks ago

✍️По всем вопросам: @Andryukha
👨‍👩‍👧‍👦 Чат: https://t.me/za_rabotay1
🎬YouTube: https://youtube.com/@za_rabotay

Купить рекламу: https://telega.in/c/zarabotay_yt

Никого не принуждаем, все выкладывается исключительно в ознакомительных целях!

Last updated 3 months, 1 week ago

hace 3 meses, 1 semana
**Построение графа маршрутов между городами**

Построение графа маршрутов между городами

Дан список городов и прямых маршрутов между ними. Требуется построить граф, в котором:
✔️ Вершины — это города.
✔️ Рёбра — это прямые маршруты между городами.

🔹 Маршруты между городами:

🟢 Москва → 🔵 Череповец
🟢 Москва → 🔵 Петрозаводск
🟢 Москва → 🔵 Великий Устюг
🟢 Москва → 🔵 Екатеринбург
🟢 Москва → 🔵 Сочи
🔵 Череповец → 🟢 Москва
🔵 Череповец → 🔴 Санкт-Петербург
🔵 Петрозаводск → 🟢 Москва
🔴 Санкт-Петербург → 🔵 Череповец
🔵 Апатиты → 🟢 Москва
🔴 Санкт-Петербург → 🔵 Апатиты
🔵 Ухта → 🟢 Москва
🔵 Череповец → 🟣 Мурманск
🔵 Череповец → 🟠 Сочи
🔵 Череповец → 🟡 Екатеринбург

📌 Цель — визуализировать этот граф, расположив Москву в центре и минимизировав пересечения рёбер.

GhatGPT сгенерировал такую программу:

```
uses GraphWPF;

begin
var edges := [
'Москва' to 'Череповец',
'Москва' to 'Петрозаводск',
'Москва' to 'Великий Устюг',
'Москва' to 'Екатеринбург',
'Москва' to 'Сочи',
'Череповец' to 'Москва',
'Череповец' to 'Санкт-Петербург',
'Петрозаводск' to 'Москва',
'Санкт-Петербург' to 'Череповец',
'Апатиты' to 'Москва',
'Санкт-Петербург' to 'Апатиты',
'Ухта' to 'Москва',
'Череповец' to 'Мурманск',
'Череповец' to 'Сочи',
'Череповец' to 'Екатеринбург'
];

var positions := Dict(
'Москва' to Pnt(400, 300), // Центр
'Череповец' to Pnt(550, 250),
'Петрозаводск' to Pnt(500, 150),
'Великий Устюг' to Pnt(600, 300),
'Екатеринбург' to Pnt(700, 350),
'Сочи' to Pnt(400, 500),
'Санкт-Петербург' to Pnt(300, 150),
'Апатиты' to Pnt(200, 100),
'Ухта' to Pnt(250, 400),
'Мурманск' to Pnt(150, 200)
);

Window.Title := 'Граф маршрутов';
foreach var e in edges do
Line(positions[e.Key], positions[e.Value], Colors.Black);

foreach var p in positions do
Circle(p.Value.X, p.Value.Y, 5, Colors.Red);

foreach var p in positions do
TextOut(p.Value.X + 10, p.Value.Y, p.Key);
end.
```

hace 3 meses, 1 semana
**Находим главных героев в тексте произведения …

Находим главных героев в тексте произведения "Война и мир"

Можно ли установить главных героев, не читая произведение "Война и мир"?

Да, надо выдать частоту встречаемости имен.

Мы видим, что наиболее часто встречаются имена собственные Андрей, Ростов, Пьер и Анна.

hace 3 meses, 2 semanas
**faststring - новый тип в** [**PascalABC.NET**](http://PascalABC.NET/) …

faststring - новый тип в PascalABC.NET 3.10.3

На самом деле faststring - это просто синоним StringBuilder с немного дополненной функциональностью (методами Replace и IndexOf и операцией in)

Однако faststring работает действительно быстро: в примере на скрине, предложенном @tpehep33, метод PascalABC.NET опережает аналогичную функцию Python, написанную на C++, в 2 раза.

```
// 6.0 sec PascalABC.NET vs 11.4 sec Python
begin
var mx := 0;
for var n := 4 to 9999 do
begin
var s: faststring := '4' + '1' * n;

while ('411' in s) or ('1111' in s) do s.Replace('411', '14', 1) .Replace('1111', '1', 1); mx := max(mx, s.ToString.Sum(d \-> d.todigit));

end;
print(mx, Milliseconds / 1000);
end.
```

#новое

hace 3 meses, 2 semanas
**Алгоритм Дейкстры на Rosetta Code**

Алгоритм Дейкстры на Rosetta Code

Алгоритм полностью сгенерирован ChatGPT по коду на Python с минимальными правками.

https://rosettacode.org/wiki/Dijkstra%27s_algorithm#PascalABC.NET

Ну а мы в Rosetta Code уже на 67 месте с 553 задачами благодаря стараниям тайного друга. Позади Elixir, Erlang, PowerShell и Groovy.

```
type
Edge = auto class
start, &end: char;
cost: real;
end;

Graph = auto class
edges: array of Edge;
vertices: HashSet;

constructor(params edges: array of (char, char, real)); begin Self.edges := edges.Select(e \-> new Edge(e[0], e[1], e[2])).ToArray; Self.vertices := new HashSet<char>( Self.edges.Select(e \-> e.start) + Self.edges.Select(e \-> e.end) ); end; function Dijkstra(source, dest: char): sequence of char; begin assert(vertices.Contains(source)); var inf := real.MaxValue; var dist := Dict(vertices.Select(v \-> (v, inf))); var previous := Dict(vertices.Select(v \-> (v, ' '))); dist[source] := 0; var q := vertices.ToHashSet; var neighbours := Dict(vertices.Select(v \-> (v, new HashSet<(char, real)>))); foreach var edge in edges do begin neighbours[edge.start].Add((edge.end, edge.cost)); neighbours[edge.end].Add((edge.start, edge.cost)); end; while q.Count > 0 do begin var u := q.MinBy(v \-> dist[v]); q.Remove(u); if (dist[u] = inf) or (u = dest) then break; foreach var (v, cost) in neighbours[u] do begin var alt := dist[u] + cost; if alt < dist[v] then begin dist[v] := alt; previous[v] := u; end; end; end; var s := new List<char>; var u := dest; while previous[u] <> ' ' do begin s.Insert(0, u); u := previous[u]; end; s.Insert(0, u); Result := s; end;

end;

begin
var gr := new Graph(
('a', 'b', 7.0), ('a', 'c', 9.0), ('a', 'f', 14.0),
('b', 'c', 10.0), ('b', 'd', 15.0), ('c', 'd', 11.0),
('c', 'f', 2.0), ('d', 'e', 6.0), ('e', 'f', 9.0)
);

gr.Dijkstra('a', 'e').Println; // Результат: ['a', 'c', 'f', 'e']
end.
```

hace 3 meses, 3 semanas
**Перевод градусов Цельсия в градусы Фаренгейта**

Перевод градусов Цельсия в градусы Фаренгейта

Перевод градусов Цельсия в градусы Фаренгейта и обратно можно выполнить с помощью operator implicit.

```
type
Farenheit = class;

Celsius = auto class
value: real;
public
constructor (v: real) := value := v;
static function operator implicit(c: Celsius): Farenheit;
function ToString: string; override
:= $'{value}°C';
end;

Farenheit = auto class
value: real;
public
constructor (v: real) := value := v;
static function operator implicit(f: Farenheit): Celsius;
function ToString: string; override
:= $'{value}°F';
end;

static function Celsius.operator implicit
(c: Celsius): Farenheit
:= new Farenheit(c.value * 9 / 5 + 32);

static function Farenheit.operator implicit
(f: Farenheit): Celsius
:= new Celsius((f.value - 32) * 5 / 9);

begin
var c := new Celsius(25);
var f: Farenheit := c; // Неявное преобразование из Цельсия в Фаренгейт
Println($'Температура: {c} = {f}');

var f2 := new Farenheit(77);
var c2: Celsius := f2; // Неявное преобразование из Фаренгейта в Цельсий
Println($'Температура: {f2} = {c2}');
end.
```

hace 3 meses, 3 semanas
**2025 год. В виде шутки**

2025 год. В виде шутки

- Запретят ли Паскалев?
- Тогда у нас будет своих Питонов!
- Красивое...

hace 3 meses, 3 semanas
**Текстовые файлы в** [**PascalABC.NET**](http://PascalABC.NET/)

Текстовые файлы в PascalABC.NET

Простая задача - добавить в конец каждой строки слово 'строка'.

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

hace 4 meses
**Рейтинг TIOBE 2025**

Рейтинг TIOBE 2025

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

Питон объявлен языком года - он вырос почти на 10%.

Из других наблюдений. Языки из Top 12 тоже выросли. Это значит, что остальные языки уменьшились.

С++ поднялся на 2 позицию, повторив результат 2000 года.

C# и JavaScript сохраняют свои позиции как 5-го и 6-го языков.

Язык Go с 11 места переместился на 7-е.

Вновь ворвался в десятку Фортран.

И - Delphi - на 11 месте, поднявшись на 2 позиции. А всё потому что сделали for var i. Сделают лямбды как у нас - поднимутся ещё выше.

Язык Kotlin выскочил из двадцатки. А мы на него равняемся :(

Язык Rust поднялся с 19 места на 14-е.

Замыкает 20-ку COBOL, никуда не собираясь уходить.

hace 4 meses
**Функции как объекты первого класса**

Функции как объекты первого класса

Функции называют "объектами первого класса" (first-class objects) в языках программирования, если они обладают такими же возможностями, как и другие типы данных (например, числа, строки, массивы). Это означает, что функции можно передавать, возвращать, присваивать переменным и использовать в выражениях, как любые другие объекты.

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

hace 4 meses
**Learn** [**PascalABC.NET**](http://PascalABC.NET/) **in Y minutes**

Learn PascalABC.NET in Y minutes

На вики-странице Learn PascalABC.NET in Y minutes впервые представлены все ключевые возможности PascalABC.NET, отражающие 17 лет его эволюции.

📌 Важнейшие разделы:

🔹 Структуры данных: кортежи, диапазоны, строки, массивы, списки, словари, множества, записи и классы.
🔹 Современные языковые средства: автовыведение типа, внутриблочные описания, циклы loop и foreach, цикл for с шагом, интерполяция строк, многострочные строки, параметры по умолчанию и именованные аргументы.
🔹 Современные операции: in, срезы, индексация с конца. to для создания пар "ключ-значение" — лаконичные инструменты для работы с данными.
🔹 Новые литеральные массивы [1,2,3].
🔹 Лямбда-выражения и функциональные переменные: гибкость функционального подхода.
🔹 Последовательности: мощный инструмент для работы с данными, включая LINQ.
🔹 Поддержка разных парадигм: процедурное, функциональное, обобщенное и объектно-ориентированное программирование.
🔹 Полная интеграция со стандартной библиотекой .NET.

📖 Этот документ — уникальное собрание возможностей, отражающих эволюцию и современность PascalABC.NET.

🎖 Специальная благодарность @ulysses4ever за идею создания данного документа.

#PascalABCNET #новое

We recommend to visit

Last updated 7 months, 1 week ago

Straight from gutter
gutta-online.com

Last updated 2 months, 2 weeks ago

✍️По всем вопросам: @Andryukha
👨‍👩‍👧‍👦 Чат: https://t.me/za_rabotay1
🎬YouTube: https://youtube.com/@za_rabotay

Купить рекламу: https://telega.in/c/zarabotay_yt

Никого не принуждаем, все выкладывается исключительно в ознакомительных целях!

Last updated 3 months, 1 week ago