PascalABC.NET официальный канал
الذهاب إلى القناة على Telegram
Официальный канал языка и системы программирования PascalABC.NET
إظهار المزيد1 857
المشتركون
لا توجد بيانات24 ساعات
-147 أيام
-2330 أيام
أرشيف المشاركات
Орлы и решки - продолжение
Обобщим предыдущую задачу. Монета бросается 100 раз. В каком проценте случаев выпадет n орлов?
Данная программа рисует график распределения.
uses PlotWPF;
begin
// Процент выпадения n орлов при 100 бросаниях
var n := 1000000;
var a := new real[101];
loop n do
begin
var Орлы := 0;
loop 100 do
if Random(0, 1) = 0 then
Орлы += 1;
a[Орлы] += 1;
end;
LineGraphWPF.Create(PartitionPoints(0,100,100),a);
end.
По графику ясно, что распределение нормальное. Уже при 30 орлах вероятность выпадения практически нулевая.Использование случайных чисел для моделирования
Случайные числа позволяют проводить компьютерные эксперименты, которые трудно или нельзя проводить в реальности.
Рассмотрим задачу о подбрасывании монеты n раз. В каком проценте случаев выпадет орёл? Если сделать всего два бросания, то понятно, что орёл достаточно часто может выпасть дважды, то есть в 100 % случаев. Но в основном в среднем орел будет выпадать в 50 % случаев.
Проверим это , проведя компьютерный эксперимент. Приведенная программа иллюстрирует, как меняется процент орлов в зависимости от числа бросаний.
Хорошо видно, что с ростом числа бросаний n процент орлов приближается к 50 %. Чем больше экспериментов, тем точнее результат! Большие данные делают своё дело!
Особенности сравнения записей в PascalABC.NET
В PascalABC.NET записи можно сравнивать на равенство и неравенство - при этом сравниваются все поля. Например, следующий код
pascal
type
Person = record
name: string;
age: integer;
end;
function PersonCreate(name: string; age: integer): Person;
begin
Result.name := name;
Result.Age := age
end;
begin
var p1 := PersonCreate('Иван',20);
var p2 := PersonCreate('Иван',20);
Print(p1 = p2);
end.
выведет True.
Принято считать, что PascalABC.NET наследует всё, что есть в C#/ Но это не так. Аналогичная программа на C# выдаст ошибку компиляции: структуры в C# по умолчанию сравнивать на равенство нельзя.massiv, srednee, dlina и другие животные
Каких только программ не встретишь на просторах сети или в учебных работах! Но подобный код отличается особой "красотой".
Пишите в комментариях, часто ли вы такой код встречаете.
Обратный словарь
Словарь Dictionary - это по-существу функция, которая отображает ключи на значения. Например, англо-русский словарь - это функция, отображающая английское слово на его перевод.
Обратным словарем будем называть словарь, в котором ключи и значения меняются местами. В нашем случае обратным словарем будет русско-английский словарь. Но есть одна проблема - нескольким английским словам будет соответствовать одно и то же русское слово. В этом случае при обращении словаря русскому слову будет соответствовать несколько переводов. Поэтому обратный словарь будет отображать русское слово на список английских переводов.
На скриншоте показан код, формирующий обратный словарь.
Система тегов канала
Уважаемые читатели канала! Для удобства навигации статьи, публикуемые на канале, помечаются тегами.
Список тегов по разделам
Обучение
#дошкольникам
#начинающим
#студентам
#методика
#ЕГЭ
#обучение
Типы и конструкции языка, алгоритмы и примеры кода
#строки
#матрицы
#списки
#кортежи
#файлы
#последовательности
#типы
#лямбды
#коллекции
#цепочки_методов
#рекурсия
#алгоритмы
#oneliner
Прикладные примеры
#графика
#3D
#игра
#проекты
Специфика PascalABC.NET
#IDE
#PascalABC
#NET
Парадигмы программирования
#объектно_ориентированное_программирование
#функциональное_программирование
Общие вопросы
#персоналии
#интересное
#теория
#сравнение_языков
#производительность
#стрим
#Линукс
Бесконечный цикл с выходом из середины
Обработка данных до некоторого условия - распространенная задача для начинающих. Например, вводятся числа, конец ввода - число 0. Необходимо вычислить сумму таких чисел, максимум или количество удовлетворяющих некоторому условию.
Во всех этих случаях можно использовать паттерн "бесконечный цикл с выходом из середины", использующий break. Вот схема этого паттерна;
pascal
while True do
begin
var x := ReadInteger;
if x = 0 then
break;
end;
На скриншоте приведено решение задачи "в последовательности целых с признаком конца ввода 0 найти количество четных"Процедуры Insert и Delete и функция Pos для обработки строк
Для обработки строк в .NET имеется множество удобных методов. Однако они вызывают исключение при указании индекса или длины вне границ строки.
Для начинающих в этой ситуации удобнее использовать процедуры Insert и Delete и функция Pos, из стандартного модуля, которые были унаследованы еще из Borland Pascal.
На скриншоте - пример задачи, которая хорошо решается этими подпрограммами: заменить второе вхождение подстроки на другую подстроку.
Вышла операционная система «Альт Образование» 10.1 с предустановленным PascalABC.NET
Сразу несколько новостных ИТ-порталов опубликовали новость о том, что вышла операционная система «Альт Образование» 10.1, в которую включена система программирования PascalABC.NET с графической оболочкой, "используемая при сдаче ЕГЭ по информатике". Среди них:
https://3dnews.ru/1080205/vishla-novaya-versiya-linuxdistributiva-alt-obrazovanie-101
https://4pda.to/2023/01/13/408545/vyshla_rossijskaya_os_alt_obrazovanie_10_1_chto_novogo/
Оригинал новости - на сайте baseAlt: https://www.basealt.ru/about/news/archive/view/novaja-versija-rossiiskoi-os-alt-obrazovanie-101-mnogo-interesnykh-vozmozhnostei-dlja-pedagogov-shkolnikov-studentov-i-sistemnykh-administratorov
Дональду Кнуту - 85 лет
Дональд Кнут - американский учёный в области информатики, преподаватель и идеолог программирования. Наиболее известен Дональд Кнут как автор издательской системы TeX, которая присутствует сейчас практически везде, в том числе на интернет-страницах. Например, на этой странице все математические формулы набраны в системе TeX.
Дональд Кнут известен также как автор фундаментального труда «Искусство программирования», состоящего в настоящий момент из 4 томов. Эти книги охватывают практически все фундаментальные алгоритмы информатики и используются на протяжении десятилетий в университетских курсах и как справочник. Кроме того, название этих книг напоминает нам, что программирование - это в первую очередь не ремесло, не технология, не средство зарабатывания денег и не способ решать сложные задачи. Программирование - это в первую очередь - искусство!
Оригинальная статья - здесь:
https://www.linux.org.ru/news/development/17089463
Алгоритмические анимации объектов в WPFObjects
Алгоритмическая анимация обеспечивает исключительную плавность. Для WPF-объектов имеются алгоритмические анимации перемещения, вращения и масштабирования.
Неизвестный decimal
В .NET имеется тип decimal, предназначенный для бухгалтерских вычислений. Его особенности:
1. Он вещественный, но преобразуется в тип real и назад только явно. А вот из типа integer неявно
2. Его точность - 28 знаков после десятичной точки, то есть ошибки округления сказываются значительно позже.
3. Диапазон значений - не такой большой как в real - максимальное значение - порядка 10^28
Вычисление функции Exp(a)
https://teletype.in/@pascalabcnet/xBW5RmmSSkP
Русские исполнители
Модуль Исполнители для младших школьников позволяет ознакомиться с часто используемыми стандартными классами и их операциями и понять, что с ними можно делать, используя методы на русском.
Методически такой подход улучшает восприятие детей и снижает возраст ребенка, который может это освоить.
Ковариантность в PascalABC.NET
В PascalABC.NET появилась поддержка ковариантных типов обобщений.
Ковариантность - это сохранение иерархии наследования в контейнерах производных типов. Приведем пример.
Пусть у нас есть простая иерархия наследования Person <- Student. Cтудент - разновидность персоны, и студента можно использовать всюду вместо персоны (принцип подстановки). Согласно тому же принципу
List<Person> будет разновидностью sequence of Person:
var ip: sequence of Person := new List<Person>;А будет ли List<Student> разновидностью sequence of Person?
var ip: sequence of Person := new List<Student>;Здесь в дело вступает ковариантность аргумента T в sequence of T. Код на скриншоте компилируется и работает(сборка 3222 от 6.01.22) inherited Create(n,a); univ := u; end; end; begin var L := new List<Student>; L.Add(new Student('Иванов',20,'ЮФУ')); L.Add(new Student('Попова',19,'ЮФУ')); var ip: sequence of Person := L; ip.Print end. ``` Результат - на скриншоте.
Как учить детей программированию?
https://teletype.in/@vdjenjer/QrTVS-LSwS0
