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

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

Open in Telegram

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

Show more
1 859
Subscribers
-124 hours
-117 days
-2630 days
Posts Archive
Преобразование в вещественное, имеющее другой разделитель целой и дробной части Реализован ряд дополнительных параметров для
Преобразование в вещественное, имеющее другой разделитель целой и дробной части Реализован ряд дополнительных параметров для преобразования строк в вещественные с другим разделителем целой и дробной части Можно также вызвать глобальную процедуру SetDecimalSeparator(','), которая будет влиять на все последующие преобразования #новое

Преобразование в вещественное, имеющее другой разделитель целой и дробной части Реализован ряд дополнительных параметров для преобразования строк в вещественные с другим разделителем целой и дробной части Можно также вызвать глобальную процедуру SetDecimalSeparator(','), которая будет влиять на все последующие преобразования #новое

### Задача Создать генератор случайных паролей на PascalABC.NET, используя интерполированные строки. ### Код программы
const
  PasswordLength = 12; // Длина пароля
  Characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&\*()_+[]{}|;:,.<>?'; // Разрешенные символы

function GeneratePassword(Length: Integer): string;
begin
  // Генерируем пароль одной строкой, используя ArrGen для создания массива
  Result := ArrGen(Length, i -> Characters.RandomElement()).JoinToString('');
end;

begin
  var Password := GeneratePassword(PasswordLength); // Генерация пароля
  PrintLn($"Сгенерированный пароль: {Password}"); // Вывод пароля с интерполированной строкой
end.
### Нейросеть Сгенерировано с помощью ChatGPT от OpenAI.

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

Короткий текст про семантические ошибки в Python Данная статья написана как часть учебного пособия для школьников по программированию на PascalABC.NET и Python. В комментариях пишите про другие виды семантических ошибок в Python, проявляющихся при выполнении https://teletype.in/@pascalabcnet/kr7IoIkQnCc

Функция SetOf В PascalABC.NET появилась функция SetOf для создания множества. Она возвращает множество HashSet, но это может
Функция SetOf В PascalABC.NET появилась функция SetOf для создания множества. Она возвращает множество HashSet, но это может измениться. Функция SetOf введена для обучения начинающих. На скриншоте - программа вычисления симметрический разности двух множеств. #новое

Мы - в Top-100 языков Rosetta code! Кривая Гильберта - одна из известнейших фрактальных кривых. Ниже приводится алгоритм рисо
Мы - в Top-100 языков Rosetta code! Кривая Гильберта - одна из известнейших фрактальных кривых. Ниже приводится алгоритм рисования кривой Гильберта с помощью новой Черепахи. Это - 334-я задача, решенная на Rosetta Code: https://rosettacode.org/wiki/Hilbert_curve#PascalABC.NET
uses Turtle;

procedure Hilbert(level: integer; angle,step: real);
begin
  if level = 0 then
    exit;
  TurnRight(angle);
  Hilbert(level-1, -angle, step);
  
  Forw(step);
  TurnLeft(angle);
  Hilbert(level-1, angle, step);
  
  Forw(step);
  Hilbert(level-1, angle, step);
  
  TurnLeft(angle);
  Forw(step);
  Hilbert(level-1, -angle, step);
  TurnRight(angle);
end;

begin
  SetWidth(2);
  ToPoint(-9,-9);
  Down;
  Hilbert(6,90,0.3);
end.
Красота!

Обновлённый модуль Turtle Обновлён школьный модуль Turtle для Исполнителя Черепаха. uses Turtle; begin SetWidth(1.4); SetColo
Обновлённый модуль Turtle Обновлён школьный модуль Turtle для Исполнителя Черепаха.
uses Turtle;

begin
  SetWidth(1.4);
  SetColor(Colors.Blue);
  //ToPoint(3,0);
  Down;
  loop 4000 do
  begin
    //Circle(0.1);
    Forw(0.3);
    Turn(Random(-120,120));
    //Sleep(1);
  end;
end.
Для знакомства с возможностями можно скачать новую версию и запустить указанную программу. Обязательно понажимайте Пробел - меняется отображение координат. Если программа будет тормозить при перерисовке, уменьшите количество итераций в цикле. Принимаются предложения и сообщения о багах. #новое

Можно потестировать координаты будущего модуля Turtle При использовании колёсика мыши график масштабируется. Диапазон значений - достаточно большой Необходимо проверить на предмет корректности отображения значений на осях при различном масштабе. Файл для тестирования прилагается.

Ввод Y или N без нажатия клавиши Enter begin repeat var q := console.ReadKey; if q.Key in |System.ConsoleKey.Y,System.Console
Ввод Y или N без нажатия клавиши Enter
begin
  repeat
    var q := console.ReadKey;
    if q.Key in |System.ConsoleKey.Y,System.ConsoleKey.N| then
    begin  
      Print($'{q.Key} pressed');
      exit
    end;  
  until False;
end.
https://rosettacode.org/wiki/Keyboard_input/Obtain_a_Y_or_N_response#PascalABC.NET 106 место! Спасибо всем, кто активно помогает решать задачи!

Последовательность, возвращающая функции В данной задаче из Rosetta Code с помощью метода Zip возвращается последовательность
Последовательность, возвращающая функции В данной задаче из Rosetta Code с помощью метода Zip возвращается последовательность функций. Собственно ничего интересного в этой задаче нет кроме того, что мы в Rosetta Code вырвались на 107 место! https://rosettacode.org/wiki/First-class_functions/Use_numbers_analogously#PascalABC.NET

Найти недостающую перестановку Даны перестановки - все кроме одной. Найти недостающую О, это совсем просто. Перебираем все пе
Найти недостающую перестановку Даны перестановки - все кроме одной. Найти недостающую О, это совсем просто. Перебираем все перестановки и сравниваем их как множества, используя операцию разности. Тут и многострочная строка, и метод ToLines. Ну и перестановки как множества - а как еще искать недостающую?
begin
  var s := '''
  ABCD
  CABD
  ACDB
  DACB
  BCDA
  ACBD
  ADCB
  CDAB
  DABC
  BCAD
  CADB
  CDBA
  CBAD
  ABDC
  ADBC
  BDCA
  DCBA
  BACD
  BADC
  BDAC
  CBDA
  DBCA
  DCAB
  ''';
  var perms := s.ToLines;
  Print(('ABCD'.Permutations.ToHashSet - perms.ToHashSet).First);
end.
https://rosettacode.org/wiki/Find_the_missing_permutation#PascalABC.NET

Точка пересечения прямой и плоскости Данная программа иллюстрирует, как найти точку пересечения прямой и плоскости type Point
Точка пересечения прямой и плоскости Данная программа иллюстрирует, как найти точку пересечения прямой и плоскости
type Point = auto class
  x,y,z: real;
  static function operator-(p1,p2: Point): Point := new Point (p1.x-p2.x, p1.y-p2.y, p1.z-p2.z);
  static function operator*(p1,p2: Point): real := p1.x*p2.x + p1.y*p2.y + p1.z*p2.z;
  static function operator*(p: Point; r: real): Point := new Point (p.x*r, p.y*r, p.z*r);
end;

function IntersectionPoint(RayDir, RayPoint, PlaneNormal, PlanePoint: Point): Point
  := RayPoint - RayDir * (((RayPoint - PlanePoint) * PlaneNormal) / (RayDir * PlaneNormal));

begin
  var RayDir := new Point(0.0, -1.0, -1.0);
  var RayPoint := new Point(0.0, 0.0, 10.0);
  var PlaneNormal := new Point(0.0, 0.0, 1.0);
  var PlanePoint := new Point(0.0, 0.0, 5.0);
  Print(IntersectionPoint(RayDir, RayPoint, PlaneNormal, PlanePoint));
end.
https://rosettacode.org/wiki/Find_the_intersection_of_a_line_with_a_plane#Perl#PascalABC.NET

Как преобразовать значение одного обобщенного типа к другому обобщенному типу На скриншоте показано, как это сделать. Использ
Как преобразовать значение одного обобщенного типа к другому обобщенному типу На скриншоте показано, как это сделать. Используется класс Convert. ТипыTFrom и TTo не связаны наследованием. Возможно исключение времени выполнения.

Внимание! Изменения в библиотеке School! Начиная с версии 3.9.0.3522 от 02.08.2024 в библиотеку добавлены функции (и расширения к ним) PrimeFactors(n) и PrineFactorsCount(n), соответственно возвращающие список всех простых факторов (делителей) числа n и количество всех простых факторов. Функции (и расширения к ним) PrimeDivisors(n) и PrimeDivisorsCount(n) возвращают соответственно список и количество уникальных простых делителей числа n. Функция (и ее расширение) Factorize(n) теперь является синонимом функции PrimeFactors(n).

Внешние функции Zip и Cartesian В стандартной библиотеке реализованы внешние функции Zip и Cartesian с количеством последоват
Внешние функции Zip и Cartesian В стандартной библиотеке реализованы внешние функции Zip и Cartesian с количеством последовательностей от 2 до 5 и необязательной функцией проекции #новое

Все простые числа с увеличивающимися цифрами Функция AscendingSeq даёт последовательность всех чисел, у которых цифры упорядо
Все простые числа с увеличивающимися цифрами Функция AscendingSeq даёт последовательность всех чисел, у которых цифры упорядочены строго по возрастанию. Обратите внимание на изящное применение yield sequence и рекурсии. Отфильтровать среди них простые, упорядоченные по возрастанию, - совсем просто, используя модуль School.
## 
uses School;

function AscendingSeq(n: integer): sequence of integer;
begin
  for var x := n*10 + n mod 10 + 1 to n*10 + 9 do
    yield sequence AscendingSeq(x) + x;
end;

AscendingSeq(0).Order.Where(n -> n.IsPrime).Print;
https://rosettacode.org/wiki/Ascending_primes#PascalABC.NET Решайте задачи на Rosetta Code!

Niven numbers Необходимо вывести 20 первых чисел, обладающих свойством - число делится на сумму своих цифр. В PascalABC.NET с
Niven numbers Необходимо вывести 20 первых чисел, обладающих свойством - число делится на сумму своих цифр. В PascalABC.NET с использованием модуля school сделать это - проще простого!
##
uses School;

function IsHarshad(n: integer) := n.Divs(n.Digits.Sum);

1.Step.Where(IsHarshad).Take(20).Println;
1.Step.Where(i -> (i > 1000) and IsHarshad(i)).First.Println;
Последняя строка выводит первое Niven-число, большее 1000. https://rosettacode.org/wiki/Harshad_or_Niven_series#PascalABC.NET И - мы в Rosetta Code уже на 115 месте!

Преобразование в римские числа Составим функцию, преобразующую арабские числа в римские и применим её на списке чисел. Кто-ни
Преобразование в римские числа Составим функцию, преобразующую арабские числа в римские и применим её на списке чисел. Кто-нибудь напишет короче? https://rosettacode.org/wiki/Roman_numerals#PascalABC.NET
var anums := |1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1|;
var rnums := 'M CM D CD C XC L XL X IX V IV I'.split;

function ToRoman(x: integer): string;
begin
  Result := '';
  foreach var (a,r) in anums.Zip(rnums) do
  begin
    var n := x div a;
    x := x mod a;
    Result += r * n;
  end;
end;

begin
  var test := |1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 30, 40,
          50, 60, 69, 70, 80, 90, 99, 100, 200, 300, 400, 500, 600, 666, 700, 800, 900, 1000,
          1009, 1444, 1666, 1945, 1997, 1999, 2000, 2008, 2010, 2011, 2500, 3000, 3999|;
  foreach var x in test do
    Println($'{x} - {ToRoman(x)}')
end.

Загрузка JSON-строки С помощью стандартной библиотеки System.Web.Extensions.dll можно манипулировать JSON-объектами: сериализ
Загрузка JSON-строки С помощью стандартной библиотеки System.Web.Extensions.dll можно манипулировать JSON-объектами: сериализовать их в JSON-формат из строки и словаря, а также десериализовать их

{$reference System.Web.Extensions.dll}
uses System.Web.Script.Serialization;

begin
  var serializer := new JavaScriptSerializer;
  var people := new Dictionary<string, object>;
  people.Add('1', 'John');
  people.Add('2', 'Susan');
  var json := serializer.Serialize(people);
  Println(json);
  var res := serializer.Deserialize&<Dictionary<string, object>>(json);
  Println(TypeName(res));
  Println(res);
  
  var jsonObject := serializer.DeserializeObject('{ "foo": 1, "bar": [10, "apples"] }')
    as Dictionary<string, object>;
  Println(jsonObject);
  var arr := jsonObject['bar'] as array of object;
  arr.Println;
end.
Результат:
{"1":"John","2":"Susan"}
Dictionary<string, Object>
{(1,John),(2,Susan)}
{(foo,1),(bar,[10,apples])}
10 apples
https://rosettacode.org/wiki/JSON#PascalABC.NET