PascalABC.NET официальный канал @pascalabc_official Channel on Telegram

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

@pascalabc_official


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

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

Добро пожаловать в официальный канал PascalABC.NET! Здесь вы найдете все необходимые сведения о языке и системе программирования PascalABC.NET. Этот канал предназначен для всех, кто интересуется программированием на языке PascalABC.NET, независимо от уровня опыта. nnPascalABC.NET - это мощный инструмент для разработки программ на языке Pascal. Он позволяет создавать разнообразные приложения, от простых консольных программ до сложных многофункциональных приложений. Благодаря своей простоте и понятности, PascalABC.NET подходит как для начинающих программистов, так и для опытных специалистов. nnВ нашем канале вы сможете находить информацию о последних обновлениях языка и системы, участвовать в обсуждениях с другими участниками, делиться своим опытом и задавать вопросы. Мы также предоставляем различные обучающие материалы, чтобы помочь вам освоить все возможности PascalABC.NET. nnПрисоединяйтесь к нашему каналу и станьте частью активного сообщества программистов, увлеченных разработкой на языке PascalABC.NET. Независимо от того, хотите ли вы узнать о новых функциях языка, найти ответы на свои вопросы или просто общаться с единомышленниками, здесь вы найдете все, что вам нужно для успешного программирования на PascalABC.NET!

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

22 Nov, 04:01


Новые множества

В PascalABC.NET обновлена реализация встроенных множеств set of T, просуществовавшая 17 лет. За это время в PascalABC.NET внесено огромное количество улучшений: появились обобщенные классы, перегрузка операций, методы расширения, реализация интерфейсов, последовательности. Именно благодаря этим средствам реализация новых множеств стала возможной.

В результате новые множества значительно ускорены, приближаясь по эффективности к HashSet<T>.

На скриншоте - программа, которая работает в старой версии примерно в 1000 медленнее.

Обновите Паскаль - скачайте новую версию!

#PascalABC #новое

begin
var s: set of integer;
var n := 10000000;
for var i:=1 to n do
s += [i];
Print(MillisecondsDelta);
end.

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

20 Nov, 04:44


Игра Животные

Создаем игру "Угадай животное" на PascalABC.NET

Хотите научить программу угадывать загаданные вами животные? В PascalABC.NET это легко реализовать с помощью бинарного дерева и сериализации. Покажем, как это сделать, на примере классической игры "Угадай животное".
Пример кода

type
[Serializable]
Node = auto class
Data: string; Yes, No: Node;
end;

const FName = 'animals.dat';

begin
var root: Node;

Println('Загадайте животное');
if not FileExists(FName) then
root := new Node('Собака', nil, nil)
else root := Node(Deserialize(FName));

var cur := root;
while cur.Yes <> nil do
if ReadlnInteger(cur.Data + '? (0-Нет, 1-Да):') = 1 then
cur := cur.Yes else cur := cur.No;

if ReadlnInteger('Это ' + cur.Data + '? (0-Нет, 1-Да):') = 1 then
Println('Я угадала!')
else
begin
var newA := ReadlnString('Я проиграла. Какое животное вы загадали?');
var quest := ReadlnString('Введите вопрос для отличия ' +
newA + ' от ' + cur.Data + ':');
cur.Yes := new Node(newA, nil, nil);
cur.No := new Node(cur.Data, nil, nil);
cur.Data := quest;
end;

Serialize(FName, root);
end.


Что делает этот код?

🔹 Создание дерева знаний: узлы дерева содержат либо вопрос, либо название животного.
🔹 Интерактивный процесс угадывания: программа задает вопросы до тех пор, пока не достигнет конца дерева.
🔹 Добавление новых знаний: если программа ошибается, она добавляет новое животное и соответствующий вопрос в дерево.
🔹 Сохранение прогресса: данные сохраняются в файл, что позволяет программе "учиться" даже после закрытия.

Как это работает на практике?

🔹 Если вы играете впервые, программа начнет с единственного узла — "Собака".
🔹 Постепенно дерево знаний будет разрастаться: каждая ошибка добавляет новый вопрос и новый узел.
🔹 Благодаря сериализации, данные сохраняются между сессиями.

Почему это интересно?

🔹 Обучение на практике: игра демонстрирует, как устроены деревья и как их можно использовать.
🔹 Простота расширения: можно добавить сохранение статистики, визуализацию дерева или использование синонимов.

Попробуйте реализовать эту игру и удивите своих друзей — пусть они проверят, как "умна" ваша программа! 🚀

Ниже - интерактивная версия нашей игры на JavaScript
https://claude.site/artifacts/923ab4f7-5d10-4db2-a227-bc74d699419e

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

17 Nov, 04:44


Работа с индексами элементов в матрице

В PascalABC.NET работа с матрицами становится особенно удобной благодаря встроенным методам. Хотите найти все позиции элементов, удовлетворяющих определённому условию? А может, сразу обновить значения? Давайте рассмотрим это на примере:

begin
var a := MatrRandom(3,4,0,2); // Создаём случайную матрицу 3x4 с элементами от 0 до 2
a.Println(3); // Выводим матрицу в удобном формате
a.Indices(x -> x = 0).Println; // Находим индексы всех нулей в матрице
a.Indices(x -> x = 0).ForEach(\(i,j) -> (a[i,j] := 99)); // Заменяем все нули на 99
a.Println(3); // Выводим обновлённую матрицу
end.


🔍 Что здесь происходит?

🔹 Генерация матрицы: С помощью MatrRandom создаём матрицу 3x4 со случайными числами от 0 до 2.
🔹 Поиск индексов: Метод Indices возвращает все позиции элементов, соответствующих условию. В данном случае мы ищем нули.
🔹 Обновление значений: Метод ForEach позволяет перебрать пары индексов (i, j) и изменить значения в матрице — нули заменяются на 99.

📈 Зачем это нужно? Такой подход удобен для сложных вычислений, анализа данных, обработки изображений, где нужно находить и модифицировать элементы по условию. Сжатый и выразительный код позволяет быстрее решать задачи!

Попробуйте использовать матрицы и методы работы с индексами в своих проектах, и вы увидите, насколько это упрощает вашу жизнь программиста! 🚀

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

15 Nov, 04:53


Оптимизация поиска простых чисел: Решето Эратосфена в PascalABC.NET

Решето Эратосфена — это один из наиболее эффективных алгоритмов для нахождения всех простых чисел до заданного предела n. Он отличается высокой производительностью и простотой реализации.

Алгоритм обладает асимптотической сложностью O(n * log(⁡log ⁡n)), что делает его значительно быстрее простейших методов определения простоты через деление.

function SieveOfEratosthenes(n: integer): array of integer;
begin
var isPrime := |True| * (n + 1);
isPrime[0] := False;
isPrime[1] := False;

for var i := 2 to Trunc(Sqrt(n)) do
if isPrime[i] then
for var j := i * i to n step i do
isPrime[j] := False;

Result := (2..n).Where(i -> isPrime[i]).ToArray;
end;

begin
var n := 50;
var primes := SieveOfEratosthenes(n);
Println('Простые числа до ', n, ': ', primes);
end.


Этот пример демонстрирует, как эффективно можно реализовать решето Эратосфена в PascalABC.NET. Для визуализации работы алгоритма и лучшего понимания его процесса, вы можете ознакомиться с интерактивной демонстрацией по ссылке: визуализация решета Эратосфена, любезно сгенерированной Claude.ai по коду, приведенному выше/

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

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

11 Nov, 04:05


Гарри Поттер - самые частые слова в начале предложения

Разбиваем текст на предложения, а затем предложения - на слова. Слова добавляем в список, затем по ним составляем частотный словарь и сортируем его по встречаемости.

begin
// LordOfTheRings
var sentences := ReadAllText('HarryPotter.txt').ToWords('.?!');
var lst := new List<string>;
foreach var sentence in sentences do
begin
var words := sentence.ToWords(AllDelimiters);
if words.Length = 0 then
continue;
if words[0][1].IsLower then
continue;
lst.Add(words[0]);
end;

lst.EachCount.OrderByDescending(kvp -> kvp.Value).Take(30).Print;
end.

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

08 Nov, 10:10


Сортировка столбцов матрицы по возрастанию суммы в столбце

Метод a.Cols и функция MatrByCol превращают матрицу в массив массивов по столбцам и наоборот. В промежутке можно выполнить любую операцию со столбцами - например, отсортировать их по некоторому критерию.

begin
var a := MatrRandomInteger(3,4,1,9);
a.Println;
a := MatrByCol(a.Cols.OrderBy(col -> col.Sum));
a.Println;
end.


Аналогичный код на Python требует подключения numpy:

import numpy as np

a = np.random.randint(0, 100, (3, 4))
print(a)

sorted_indices = np.argsort(a.sum(axis=0))
sorted_matrix = a[:, sorted_indices]

print(sorted_matrix)

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

05 Nov, 06:40


📌 Группировка элементов с использованием словаря в PascalABC.NET 📌

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

👀 Что делает этот код?

🔹 Имеется список пар элементов с категориями, например, фрукт, овощ, ягода.
🔹 Код создаёт словарь grouped, где ключами являются категории, а значениями — списки элементов в каждой категории.
🔹 Для каждого элемента проверяется наличие категории в словаре:
✦ Если категория отсутствует, создаётся новая запись со списком.
✦ Элемент добавляется в соответствующий список.
🔹 В результате формируется структура данных, аналогичная результату GroupBy, но построенная вручную.

Почему это полезно?

Такой пример не только помогает понять принцип работы GroupBy, но и показывает, как можно использовать словари для создания сложных структур данных. Подход может быть полезен в ситуациях, где требуется больше контроля над логикой группировки.

Пример кода:

begin
var items := |('яблоко','фрукт'), ('помидор','овощ'), ('банан','фрукт')
, ('морковь','овощ'), ('арбуз','ягода')|;

var grouped := new Dictionary<string, List<string>>;

foreach var (item,category) in items do
begin
if category not in grouped then
grouped[category] := new List<string>;
grouped[category].Add(item)
end;

grouped.PrintLines;
end.


📊 Результат:

фрукт: яблоко, банан
овощ: помидор, морковь
ягода: арбуз

Попробуйте разобраться в устройстве GroupBy на этом примере — это важный шаг в понимании основ алгоритмов и структур данных!

#Группировка #Словарь #GroupBy

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

03 Nov, 04:04


📚 Анализ больших текстов в PascalABC.NET, Использование словарей 📚

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

Рассмотрим следующий код:

begin
var a := ReadAllText('LordOfTheRings.txt').ToLower.ToWords(AllDelimiters)
.Where(w -> w[1] in 'а'..'я');
for var i:=2 to 10 do
a.Where(w -> w.Length = i)
.EachCount
.OrderByDescending(kv -> kv.Value).Take(5).Println;
end.


👀 Что делает этот код?

🔹 Загружает текст из файла, приводит его к нижнему регистру и разбивает на слова, используя константу AllDelimiters как разделители.
🔹 Оставляет только те слова, которые начинаются с русских букв.
🔹 С помощью метода EachCount получает словарь частот слов заданной длины.
🔹 Сортирует слова по их длине (от 2 до 10 символов) и подсчитывает частоту каждого слова.
🔹 Выводит самые популярные слова для каждой длины, помогая понять, какие слова наиболее часто встречаются.

Почему это удобно? Работа с текстом в PascalABC.NET позволяет:

🔹 Легко анализировать большие текстовые данные,
🔹 Использовать встроенные методы Where, EachCount, OrderByDescending, Println и многие другие для фильтрации и сортировки данных,
🔹 Проводить быстрый и наглядный анализ, который можно адаптировать под любой текст.


Попробуйте адаптировать этот пример под свои тексты и узнайте, как часто и какие слова встречаются!

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

31 Oct, 04:59


🔹 Лямбда-выражения в PascalABC.NET: преобразования, условия и проекции

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

1. Лямбда-преобразования

Лямбда-преобразование используется для преобразования данных. Оно может оставлять тип данных без изменений или переводить элементы в другой тип. Рассмотрим оба варианта:

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

var a := Arr(1, 2, 3, 4, 5);
var squares := a.Select(x -> x * x); // Числа преобразуются в их квадраты
a := squares.ToArray; // Результат можно присвоить тому же массиву
Println(squares); // Вывод: [1, 4, 9, 16, 25]


Преобразование к другому типу. Следующий пример показывает перевод чисел в строки, представляя каждое число текстом:

var a := Arr(1, 2, 3, 4, 5);
var strValues := a.Select(x -> x.ToString); // Числа преобразуются в строки
Println(strValues); // Вывод: ['1', '2', '3', '4', '5']


В обоих случаях метод Select позволяет эффективно преобразовывать данные: в первом случае, чтобы получить квадраты чисел, во втором — текстовое представление чисел.

2. Лямбда-условия

Лямбда-условия применяются для фильтрации элементов по критерию. В примере ниже отбираются только четные числа:

var a := Arr(1, 2, 3, 4, 5, 6);
var evenNumbers := a.Where(x -> x mod 2 = 0); // Отбираются только чётные числа
Println(evenNumbers); // Вывод: [2, 4, 6]


Метод Where использует условие x -> x mod 2 = 0, чтобы выбрать только числа, делящиеся на 2 без остатка.

3. Лямбда-проекции

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

var items := Arr(('apple', 1.5), ('banana', 1.2), ('cherry', 0.9));
var fruitNames := items.Select(x -> x[0]); // Извлекается только название фрукта
Println(fruitNames); // Вывод: ['apple', 'banana', 'cherry']


Метод Select создает проекцию x -> x[0], возвращая первую часть кортежа x.

Подводим итоги:

✦ Лямбда-преобразования помогают изменить значение элемента, сохраняя или меняя его тип.
✦ Лямбда-условия отбирают данные по критерию.
✦ Лямбда-проекции полезны для извлечения частей составных объектов.

Пользуйтесь этими возможностями, чтобы сделать ваш код лаконичнее и понятнее! 🚀

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

26 Oct, 10:05


Работа с форматом JSON

Дорогие подписчики! Сегодня мы расскажем о том, как легко и удобно работать с форматом JSON в PascalABC.NET с использованием библиотеки Newtonsoft.Json. JSON (JavaScript Object Notation) — это текстовый формат для представления структурированных данных на основе синтаксиса JavaScript. Он стал стандартом де-факто для обмена данными в веб-приложениях и широко используется благодаря своей простоте и удобству.

💻 Предлагаем вашему вниманию небольшой пример кода, который демонстрирует разбор сложной JSON-структуры и вывод ее содержимого в консоль с русскими названиями полей. Обратите внимание на легкость доступа к вложенным объектам и массивам:

uses Newtonsoft.Json.Linq;

begin
// Считываем содержимое JSON из файла
var jsonString := ReadAllText('data.json');

// Разбор JSON-строки в объект JObject
var jsonObject := JObject.Parse(jsonString);

// Доступ к верхнему уровню объекта "человек"
var person := jsonObject['человек'];

// Извлечение простых значений
var name := person['имя'].ToString;
var age := person['возраст'].ToObject&<integer>;
var isStudent := person['являетсяСтудентом'].ToObject&<boolean>;

// Доступ к вложенному объекту "контакты"
var contacts := person['контакты'];
var email := contacts['электроннаяПочта'].ToString;
var phone := contacts['телефон'].ToString;

// Доступ к массиву "хобби"
var hobbies := person['хобби'];
var hobbyList := hobbies.ToObject&<array of string>;

// Вывод извлеченных данных с ручным выравниванием
Println($'Имя: {name}');
Println($'Возраст: {age}');
Println($'Является студентом: {isStudent}');
Println($'Электронная почта: {email}');
Println($'Телефон: {phone}');

// Объединение элементов массива хобби в строку и вывод
Println($'Хобби: {hobbyList.JoinToString('', '')}');
end.


В этом примере форматированный вывод поможет вам легко читать данные, а использование русских названий для полей делает код более понятным. 🌟

Файл data.json имеет следующее содержимое:

{
"человек": {
"имя": "Иван",
"возраст": 30,
"являетсяСтудентом": false,
"контакты": {
"электроннаяПочта": "[email protected]",
"телефон": "123-456-7890"
},
"хобби": ["чтение", "путешествия", "плавание"]
}
}


🚀 Пробуйте работать с JSON в своих проектах на PascalABC.NET и делитесь своими впечатлениями в комментариях! Мы всегда рады услышать ваше мнение и поддержать новые идеи. 💬

#PascalABCNET #JSON #DataParsing

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

23 Oct, 04:17


Присваивание и сравнение динамических массивов

Работа с массивами в PascalABC.NET имеет свои особенности, особенно если речь идёт о динамических массивах. В этой новости разберём, как правильно присваивать, копировать и сравнивать такие массивы.

🔹 Присваивание динамических массивов

Когда вы присваиваете один динамический массив другому через оператор :=, происходит ссылочное присваивание. Это означает, что обе переменные ссылаются на один и тот же массив в памяти. Любые изменения в одном массиве автоматически отразятся на другом.

Пример:
var a := new integer[5]; // Создаём массив
var b := a; // b ссылается на тот же массив,что и a
b[0] := 10; // Теперь и a[0], и b[0] равны 10


Чтобы создать независимую копию массива, следует использовать встроенную функцию Copy(a).

Пример:
var a := new integer[5]; // Создаём массив
var b := Copy(a); // b — это копия массива a
b[0] := 10; // Изменение b не затрагивает a


🔹 Сравнение массивов

✦ Прямое сравнение массивов через оператор = проверяет ссылки, а не содержимое массивов. Даже если два массива содержат одинаковые элементы, они будут считаться неравными, если ссылаются на разные объекты в памяти.

Пример
var a, b: array of integer;
a := new integer[5];
b := new integer[5];
if a = b then // это сравнение вернёт False
Println('Массивы равны')
else
Println('Массивы не равны');



✦ Для корректного сравнения содержимого массивов в PascalABC.NET нужно использовать метод ArrEqual, который проверяет, равны ли все элементы двух массивов.

Пример:
var a := new integer[5];
var b := new integer[5];
if a.ArrEqual(b) then // Проверяет равенство всех элементов массива
Println('Массивы равны')
else
Println('Массивы не равны');


🔹 Итоги:

✦ Для копирования массива используйте функцию Copy(a), чтобы избежать ссылочного присваивания.
✦ Для сравнения содержимого массивов используйте метод ArrEqual.

Это поможет вам избежать ошибок при работе с динамическими массивами и сделает ваш код более предсказуемым и надёжным! 🚀

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

20 Oct, 09:00


Операции с массивами

Операции + и * с массивами позволяют быстро и эффективно конструировать массивы, заполняя их значениями. Для непрерывного диапазона элементов помогает также конструкция Arr(1..3).

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

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

18 Oct, 04:48


Сортировка выбором - минимизация обменов

Алгоритм сортировки выбором является одним из самых простых для понимания, но его можно улучшить! В стандартной реализации количество обменов может быть избыточным, так как обмен выполняется всегда, даже если текущий элемент уже на своём месте.

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

Новый алгоритм выглядит так:

procedure SortByChoice(a: array of integer);
begin
var n := a.Length;
for var i := 0 to a.Length - 2 do
begin
var imin := i;

for var j := i + 1 to n - 1 do
if a[j] < a[imin] then
imin := j;

if imin <> i then
Swap(a[imin], a[i]);
end;
end;


🔥 Теперь алгоритм работает эффективнее за счёт уменьшения количества обменов! 🔥 Пробуйте и внедряйте это улучшение в свои программы! 🚀

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

17 Oct, 04:58


Copilot - задача о поиске двух первых минимумов в массиве

Два запроса - два отличных ответа!

begin
var arr := ArrRandomInteger(10);

var min1, min2 := (MaxInt, MaxInt);

foreach var x in arr do
if x < min1 then
(min1, min2) := (x, min1)
else if x < min2 then
min2 := x;

Println('Сгенерированный массив: ', arr);
Println('Первый минимум: ', min1);
Println('Второй минимум: ', min2);
end.

и
begin
var arr := ArrRandomInteger(10);

var min1 := arr.Min();
var min2 := arr.Where(x -> x <> min1).Min();

Println('Сгенерированный массив: ', arr);
Println('Первый минимум: ', min1);
Println('Второй минимум: ', min2);
end.

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

16 Oct, 04:18


Логирование в PascalABC.NET

✦ Устанавливаем пакет NLog командой nuget install NLog.
✦ Копируем dll в папку проекта
✦ Создаем конфигурационный файл nlog.config:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="File" name="logfile" fileName="log.txt" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
</rules>
</nlog>


✦ Просим Copilot написать программу для логирования:

{$reference 'NLog.dll'}

uses NLog;

begin
// Инициализация логгера
LogManager.LoadConfiguration('nlog.config');
var log := LogManager.GetCurrentClassLogger;

// Запись логов
log.Info('Программа запущена');

try
var a := 10;
var b := 0;
var c := a div b; // Это вызовет исключение
except
on e: Exception do
log.Error('Ошибка: ' + e.Message);
end;

log.Info('Программа завершена');
end.


Вуаля!

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

15 Oct, 07:10


Вычисление средних оценок студентов

Дан словарь оценок студентов. Вычислить для каждого студента среднюю оценку. Результат записать в новый словарь.

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

14 Oct, 04:22


Трансформация части элементов массива

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

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

11 Oct, 04:09


Используй принцип локальности при описании переменных!

Сегодня напомним об одном важном принципе, который делает ваш код более чистым, понятным и безопасным — принципе локальности при описании переменных.

Принцип локальности подразумевает, что переменные должны объявляться как можно ближе к месту их использования, а не в самом начале программы или функции. Это помогает избежать путаницы и ошибок при работе с переменными, особенно в больших и сложных проектах.

🔹 Почему это важно?

Читаемость: Когда переменные объявляются рядом с кодом, который их использует, легче понять, для чего они нужны.
Минимизация ошибок: Переменные, объявленные локально, реже влияют на другие части программы, что уменьшает шанс на случайные ошибки.
Упрощение отладки: Когда переменная используется только в одном небольшом блоке кода, легче отследить, как она изменяется и откуда берутся значения.
Экономия памяти: Локальные переменные занимают память только в пределах своего блока, что делает код более эффективным.

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

10 Oct, 07:19


Использование атрибутов Combinatorial, Values и RangeAttribute при Unit-тестировании

Атрибуты Combinatorial, Values и RangeAttribute позволяют легко задавать разные наборы данных для тестов.

🔹 Combinatorial
Этот атрибут помогает комбинировать несколько наборов данных, применяемых к параметрам теста.

🔹 Values
С помощью атрибута Values можно указать несколько значений для одного параметра теста. Когда тест запускается, он выполняется с каждым из заданных значений, что позволяет проверить работу функции сразу на множестве входных данных.

🔹 RangeAttribute
Атрибут RangeAttribute позволяет указать диапазон значений, которые будут использоваться для параметра теста.

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

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

08 Oct, 11:28


🧪 Unit-тестирование в PascalABC.NET

Один из лучших способов убедиться, что ваш код работает корректно, — это Unit-тестирование. В PascalABC.NET вы можете использовать популярный инструмент для тестирования — NUnit, который интегрирован в модуль NUnitABC. Изображенную на скрине программу надо запустить, используя Ctrl-Shift-T.

Тестирование с помощью NUnit — это не просто проверка кода, а способ сделать ваш проект стабильным, качественным и лёгким в поддержке. Внедряйте Unit-тестирование в ваш рабочий процесс, и ваши приложения станут надёжнее! 🚀