PascalABC.NET официальный канал
Відкрити в Telegram
Официальный канал языка и системы программирования PascalABC.NET
Показати більше1 858
Підписники
-224 години
-137 днів
-2430 днів
Архів дописів
Нужны ли программисту алгоритмы
Извечная тема для холивара.
Статья написана хорошим языком, с хорошим юмором.
Использование методов при решении задач на строки
По итогам конкурса школьники единогласно выбрали наиболее понравившуюся задачу. Она решается в одну строку и состоит из 6 методов.
Генерация первых n натуральных чисел
Простой способ не ставить лишние скобки при генерации последовательности натуральных чисел от 1 до N - использовать метод расширения Range. Сравните.
Обработка слов в текстовом файле
Демонстрируется решение задачи о количестве слов в файле на каждую букву.
Слова в русском языке чаще всего начинаются с п, затем с с, а затем с к.
Прямая выборка записи произвольной структуры из бестипового файла по номеру записи
type
[Serializable]
tR = record
f1: array of BigInteger;
f2: List<real>
end;
tA = array of int64;
begin
var n := 12; // планируемое количество записей в файле
var f := CreateBinary('example2.bin');
var a := new int64[n];
f.Serialize(a);
var r: tR;
for var i := 0 to n - 1 do
begin
a[i] := f.Position;
var k := Random(5, 20);
var p := Biginteger(Random(25, 131));
r.f1 := SeqGen(k, j -> p ** j).ToArray;
r.f2 := r.f1.nWise(3).Select(t -> t.Average).ToList;
f.Serialize(r);
if i = 5 then Println(r); // контрольный вывод
end;
f.Position := 0;
f.Serialize(a);
f.Close;
// --------------------------------
Println('*** Прямое чтение записи № 5 ***');
a := nil;
f := OpenBinary('example2.bin');
f.Position := 0;
a := tA(f.Deserialize);
f.Position := a[5];
r := tR(f.Deserialize);
Println(r)
end.Количество слов в строке на каждую букву
Лекция по строкам.
Разбиваем на слова, группируем по первой букве, каждую группу преобразуем в пару (буква, количество слов) и упорядочиваем по количеству слов
Заполнение лидирующими нулями при выводе
При выводе целого в двоичной или десятичной форме иногда требуется заполнить число лидирующими нулями.
Приводим способы, как это можно сделать
Контекстно-ключевое слово step
Даже в PascalABC.NET есть тёмные пятна. Одно из них - слово step.
Вы видите правильную программу на PascalABC.NET, которая правильно работает. Но счастья от этого нет.
Даже система подсветки синтаксиса - в ужасе, она не знает, какое слово step подсвечивать как ключевое.
И только компилятор знает всё.
Как эффективно формировать новую строку
StringBuilder - тип, предназначенный для эффективного изменения и формирования строк
Индексная сортировка
Индексная сортировка позволяет реализовать сортировку одного и того же массива по нескольким критериям, не сортируя массив физически.
Для этого используются индексные массивы, которые переводят виртуальные индексы в реальные.
На скриншоте показана индексная сортировка массива персон по имени и по возрасту. При этом исходный массив не меняется - все изменения осуществляются в соответствующем индексном массиве.
Методы Numerate, Tabulate, Pairwise
Методы последовательностей Numerate, Tabulate, Pairwise стандартной библиотеки PascalABC.NET отсутствуют в стандартном C#
PascalABC.NET как неучебный язык программирования
По ссылке - научная статья. Авторы - из университетов Барселоны и Харькова. Язык реализации - PascalABC.NET, что явно указано в тексте статьи
https://www.researchgate.net/publication/360486648_Mathematical_Model_and_Optimization_Algorithm_By_Mass_of_Tracked_Load-CarrierPrime_Mover_MT-LB_Transmission
Использование баз данных в PascalABC.NET
Проще всего установить пакет LiteDB бессерверной базы данных.
Вначале программа создает базу данных с таблицей Persons и создаёт в ней несколько записей (закомментированный участок). Затем печатает содержимое таблицы из БД.
Документацию можно почитать здесь: https://www.litedb.org/docs/getting-started/
Методы Zip, ZipTuple, UnZip
Методы Zip, ZipTuple позволяют объединять две последовательности в одну, а UnZipTuple - разъединять последовательность кортежей на две последовательности
Кластеризация цветков Ириса с использованием Accord.NET
Стандартную задачу машинного обучения о кластеризации цветков Ирисов можно решить на PascalABC.NET& создав проект и подключив два тгпуе-пакета: Accord.MachineLearning и Accord.DataSets
Как перечислить все подкаталоги текущего каталога
На скриншоте - программа, выводящая подкаталоги текущего каталога
Обработка строк и регулярные выражения
Использование регулярных выражений может существенно облегчить решение задач с достаточно непростыми алгоритмами обработки строк.
Рассмотрим следующую задачу:
Строка содержит текст, включающий пробелы, целые и вещественные числа, а также различные знаки. Числа могут иметь знак минус. Вещественные числа представлены в формате с фиксированной точкой. Откорректировать каждое число по следующему правилу: целые числа увеличить на единицу, вещественные - уменьшить на 5%.
Пример. Текст "Вчера температура на улице была -8 градусов, а сегодня она поднялась на 15.4%" после редактирования должен иметь вид "Вчера температура на улице была -7 градусов, а сегодня она поднялась на 14.63%".РВ для выделения целых чисел можно записать в виде
-?\d+. Для вещественных чисел с фиксированной точкой РВ может иметь вид -?\d+\.\d+. Замену подстрок будем производить с использованием метода PascalАВС.NЕТ .RegexReplace. Поскольку алгоритм замены зависит от найденного контекста, нужно будет написать лямбда-функцию и передать ее методу в качестве второго параметра.
##
var s := ReadlnString;
var Cnv: string -> string :=
s -> (s.Contains('.') ? (s.ToReal * 0.95) : s.ToInteger + 1).ToString;
s.RegexReplace('-?\d+\.\d+|-?\d+', m -> Cnv(m.Value)).Print
{
Вчера температура на улице была -8 градусов, а сегодня она поднялась на 15.4%.
Вчера температура на улице была -7 градусов, а сегодня она поднялась на 14.63%.
}
Обратите внимание, что в регулярном выражении нужно начинать поиск с шаблона вещественного числа, а не целого. В противном случае вместо подстрок (для приведенного примера) -8 и 15.4 будут найдены подстроки -8, 15 и 4.Явное указание типа при описании
Описание переменных с автовыведением типа - отличная возможность для начинающих. Однако есть ситуации, в которых тип надо указывать явно. Одна из них - алгоритм вычисления минимума из двух чисел
В комментариях приводите другие ситуации, где уместно использовать явное указание типа
