PascalABC.NET официальный канал
前往频道在 Telegram
1 858
订阅者
-224 小时
-137 天
-2430 天
帖子存档
Файлы в объектно-ориентированном стиле
Файловая переменная - объект класса Text, который имеет множество методов: чтения, записи, закрытия файла и другие.
Для открытия текстового файла используется функция OpenRead, которая открываает файл по умолчанию в кодировке Windows.
Но видимо давно надо переходить на UTF-8.
Экзамен по Основам программирования
Экзамен по Основам программирования - нешуточное дело. Сегодня его пишут студенты группы 1.3 направления Фундаментальная информатика мехмата ЮФУ.
Основной язык в первом семестре - PascalABC.NET. Последовательности, лямбды, кортежи, срезы, автоклассы, цепочки методов и всё что мы любим ) Программа курса прилагается.
Экзамен по Основам программирования
Экзамен по Основам программирования - нешуточное дело. Сегодня его пишут студенты группы 1.3 направления Фундаментальная информатика мехмата ЮФУ.
Основной язык в первом семестре - PascalABC.NET. Последовательности, лямбды, кортежи, срезы, автоклассы, цепочки методов и всё что мы любим ) Программа курса прилагается.
Срезы строк с шагом
Одна из замечательных современных возможностей, которые можно использовать для строк, это срезы и срезы с шагом.
Есть много хороших задач чтобы повысить интерес начинающих к программированию.
На скриншоте - одна из них. Ученикам предлагается расшифровать зашифрованные в строке сообщения.
Если у кого-то есть идеи простых и интересных заданий на строки, предлагайте в комментариях.
Удаление символов в строке
Символы в строке можно удалить несколькими разными способами.
Можно воспользоваться срезами, оставив только нужные символы.
Можно воспользоваться классической процедурой Delete, пришедшей из Delphi. Она хороша тем, что не вызывает исключение если мы укажем аргументы, выходящие за пределы строки. Но она индексирует строку только с 1.
Наконец, можно воспользоваться методом s.Remove, который индексирует строку с 0 и к сожалению вызывает исключение при выходе за границы строки.
Машинное эпсилон
Машинное эпсилон - это наименьшее положительное значение, для которого 1+ε > 1.
Как видно из программы, оно примерно равно 2.2*e-16
Язык C# - язык года по версии TIOBE
TIOBE объявила язык программирования C# языком прошедшего 2023 года.
https://www.tiobe.com/tiobe-index/
C# устойчиво удерживает пятую позицию в рейтинге и показал за 2023 год впечатляющий рост - 1,43%. Многие конструкции PascalABC.NET были введены под влиянием именно C# как наиболее динамично развивающегося и богатого языковыми конструкциями языка программирования современности.
Из других важных изменений: "Fortran и Kotlin вошли в топ-20 игроков, заменив старых фаворитов R и Perl".
Range для вещественных
Реализована стандартная функция Range с шагом для вещественных. Несмотря на ошибки округления, если программист указывает длину отрезка, кратную шагу, то обе границы всегда входят в последовательность.
#новое
Описание переменной внутри выражения
В PascalABC.NET появилась возможность описывать переменные внутри выражения. Это удобно в ряде сценариев
#новое
Уважаемые читатели канала PascalABC.NET!
Поздравляем всех с наступающим 2024 годом!
Год будет непростой, но интересный! И кусочек старого года в виде множителя 23 в новом году - останется!
Множество Мандельброта в текстовом формате
Множество Мандельброта можно нарисовать даже в текстовом режиме
##
function Mandelbrot(a: Complex): Complex;
begin
var z := Cplx(0,0);
for var i:=0 to 50 do
z := z * z + a;
Result := z;
end;
foreach var y in PartitionPoints(1,-1,40) do
begin
foreach var x in PartitionPoints(-2,0.5,80) do
if Abs(Mandelbrot(cplx(x,y))) < 2 then
Write('*')
else Write(' ');
Writeln
end;Визуализация решета Эратосфена
uses WPFObjects;
var (n,w,m) := (300,40,20);
begin
Window.Title := 'Алгоритм решета Эратосфена';
var aa: array of SquareWPF := ArrGen(n+1,i->
SquareWPF.Create((i mod m)*w,(i div m) * w,w-2,Colors.White).SetBorder);
aa.ForEach(procedure (s,i) -> s.Number := i);
aa[0].Visible := False;
aa[1].Visible := False;
Sleep(2000);
var primes := HSet(2..n);
for var i:=2 to Round(Sqrt(n)) do
begin
if i not in primes then
continue;
aa[i].Color := Colors.Yellow;
aa[i].BorderWidth := 3;
var c := RandomColor; c.ScA := 128;
var x := i*i;
while x<=n do
begin
Sleep(50);
aa[x].Color := c;
primes -= x;
x += i;
end;
end;
primes.Println;
Sleep(1000);
aa.ForEach(procedure (s,i) -> if i not in primes then s.Visible := False);
var bb := aa.Where(ob -> ob.Visible).ToArray;
bb.ForEach(procedure (ob,i) -> ob.AnimMoveTo((i mod m)*w,(i div m) * w));
end.Анализ двоичной записи целого
Задача, которая хорошо решается алгоритмом и плохо методами Linq
Ускорена реализация s.Replace
Реализация s.Replace с тремя параметрами ускорена примерно в 4 раза
begin
for var x := 1 to 50 do
for var y := 1 to 50 do
for var z := 1 to 50 do
begin
var s := '0' + x*'1' + y*'2' + z*'3';
while ('01' in s) or ('02' in s) or ('03' in s) do
s := s.Replace('01', '30', 1).Replace('02', '101', 1).Replace('03', '202', 1);
if (s.CountOf('1') = 15) and (s.CountOf('2') = 10) and (s.CountOf('3') = 60) then
Println(x)
end;
Println('Программа завершена за', MillisecondsDelta/1000, 'секунд');
end.Война и мир
Десять самых часто встречающихся слов в "Войне и мире"
Операции с множествами
Для множеств в PascalABC.NET определены операции объединения, пересечения, разности, вложения, а также принадлежности элемента множеству.
begin
var s1: HashSet<string> := HSet('red','green','blue');
var s2: HashSet<string> := HSet('yellow','magenta','green');
Println(s1 + s2);
Println(s1 * s2);
Println(s1 - s2);
Println(s1 < s2);
Println('yellow' in s2);
end.