Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram, группа в ВКонтакте

Авторский курс программирования на yabasic от @Terrazocultor

Подробный курс по программированию для начинающих программистов и просто любопытных людей

История разработки, новости релизов и документация
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Авторский курс программирования на yabasic от @Terrazocultor

Сообщение Anton »

Авторский курс программирования на yabasic от @Terrazocultor
Канал YouTube @Terrazocultor

Глава 1. ВВОДНАЯ ИНФОРМАЦИЯ, ПЕРВЫЕ ШАГИ
Показать
  1. Представление курса
  2. Скачивание и установка YaBasic
  3. Интерпретируемые и компилируемые языки
  4. Термины и концепции ИТ, которые полезно знать
  5. Ограничения памяти. Проверяем доступные объемы
  6. Контроверсийные номера строк (уже устарели)
  7. Скорость вычислений. Сколько времени займёт расчёт одного миллиона квадратных корней?
  8. Бонус: Программа игры «Четыре в ряд», против компьютера, создана мной в течение двух месяцев. Содержит более 3000 строк кода.
  9. Видеоматериал
Глава 2. ТЕКСТОВЫЙ РЕЖИМ. Print, Chr$,…
Показать
Глава 3. ГРАФИЧЕСКИЙ РЕЖИМ
Показать
  1. Графический режим. Пиксель
  2. Вход в графический режим. Open window
  3. Системные переменные WinWidth и WinHeight (ширина и высота в пикселях)
  4. Рисование отдельных пикселей. Команда Dot
  5. Установка цвета рисования и фона: Color и Backcolor
  6. Проведение прямой линии между двумя точками. Команда Line
  7. Рисование окружности. Circle
  8. Рисование прямоугольника. Rectangle
  9. Рисование треугольника. Triangle
  10. Вывод текста в графическое окно. Команда Text
  11. Очистка содержимого графического экрана. Clear window
  12. Вернуть всё как было: закрыть графическое окно. Close window
  13. Уголок ТЕОРИИ: Важность документирования программы. Оператор REM
  14. Видео
Глава 4. ПЕРЕМЕННЫЕ
Показать
  1. Определение переменной
  2. Идентификаторы или имена переменных
  3. Типы переменных
  4. Присваивание значений переменным
  5. Глобальные и локальные переменные
  6. Счётчик или накопитель и его кажущийся парадокс: A = A + 1
  7. Сравнение переменных. Операторы отношения >, <, =
  8. Уголок ТЕОРИИ
    8.1 Строго типизированные языки против языков без строгой типизации
    8.2 Чувствительность к регистру. YaBasic чувствителен к регистру
    8.3 Константы в противоположность переменным
  9. Видео
Глава 5. ЦИКЛЫ
Показать
Глава 6. Операторы IF и SWITCH (CASE)
Показать
Глава 7. Примеры программ на YaBasic: база данных транзисторов и квинела
Показать
Глава 8. СЛУЧАЙНЫЕ ЧИСЛА
Показать
Глава 09. Числовые функции и функции преобразования
Показать
Глава 10. Диаграммы потоков и диаграммы Насси-Шнейдермана (Chapin)
Показать
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс программирования на yabasic от @Terrazocultor

Сообщение Anton »

!
Сообщение от: Anton
Автор курса не подготовил (или я не нашёл, хотя искал) материалы, есть только видео. Я попросил DeepSeek обработать субтитры и сделать из них статью.
Глава 7. Примеры программ на YaBasic: база данных транзисторов и квинела



В этом видео автор показывает, какие серьёзные программы можно создавать на YaBasic, и объясняет некоторые приёмы программирования.

Здесь у нас центр всей программы. Внешняя программа в наших системах программирования… Вот здесь у нас Basic с номерами строк и кучей операторов `GOTO` или `GOSUB`, что почти одно и то же: «перейди на строку 1580, выполни что-то и вернись». А `GOTO` — это переход без возврата, например, на строку 1540, и дальше неизвестно, куда он приведёт. Такой код очень трудно отслеживать даже его создателю. Мы не будем использовать такой стиль. Наш Basic — не в стиле Visual Basic, не объектно-ориентированный, он ближе к старым версиям, но всё же современный. Если зайти на страницу YaBasic, видно, что последняя версия вышла всего три-четыре месяца назад — язык живой. В руководстве — огромное количество команд: работа с числами, преобразования, обработка файлов, структуры управления, условия, тригонометрия, логика, работа со строками, операции с файлами и принтерами — всё есть.

Так что YaBasic на несколько ступеней выше той «халтуры», которую мы только что видели.

Посмотрим на внешний вид программ на этом языке. Одна из моих последних программ — база данных транзисторов.

Запускаем программу. Вот панель управления. Как видите, в каждой строке выводится транзистор. Транзисторы ficticios, но это не важно: я проверял, как язык справляется почти с 8000 записей. Можно листать полчаса от AAA до FFF, а это около семи тысяч семисот с чем-то записей. Можно перейти сразу, нажав Ctrl+I (или как там было) и введя код.

Можно сортировать по трём параметрам: по коду, по максимальному напряжению коллектор-эмиттер и по максимальному току коллектора. Сейчас сортировка по коду, но я нажимаю Tab — и он сортирует по напряжению. Смотрите, как быстро: меньше секунды. Начинается с 21, потом выше, выше, до 1500, и снова сначала. Если я введу, например, 600, то поиск выполняется мгновенно — вот записи с напряжением 600 вольт.

Теперь сортируем по максимальному току. Здесь значения около 43, 6.1, 0.43 ампера, максимум почти 1000 ампер. Введу 430 — контекст уже другой, это амперы, и сразу находятся первые записи с таким значением. Поиск очень быстрый.

Возвращаемся к сортировке по коду. Вводим, например, "CA..." — и мгновенно находится нужный код, как если бы это было имя или фамилия. И это при почти 8000 записей.

Теперь другая, более свежая программа — для футбольных ставок (квинела). Вот её код. Идём в конец — там основная часть: панель управления. Всегда должна быть инициализация. Программа открывает файл со ставками, читает записи и выводит их на экран. Затем цикл повторяется, пока мы не захотим выйти. В зависимости от нажатой клавиши выполняется то или иное действие.

Запустим программу. Выйдем из базы транзисторов и зайдём в квинелу. Структура и внешний вид похожи, только вместо транзисторов — ставки.

Посмотрим, какие здесь есть опции. Нажмём F1 — появится помощь по текущему экрану. Можно написать целый мануал, и не нужны бумажки: всё встроено в программу.

Добавим ставку. Нажимаем F7 — появляется пустая форма: дата, номер тура, матчи, цена ставки (например, 0.75 евро), прогнозы. Заполняем, нажимаем Enter — ставка сохраняется. Можно её потом удалить (F9) с подтверждением.

Есть функция разработки комбинаций (F2 или что-то подобное). Здесь показаны шесть вариантов, но их может быть 600 или 6000 в зависимости от количества комбинаций. В этой ставке сильная редукция — она нетипичная. У меня в «пенье» (клубе) есть такие экспериментальные ставки.

Также есть «эскрутиньо» (проверка результатов) — F10. Программа проверяет все ставки и показывает статистику выигрышей (это ficticio, естественно). Можно выводить на печать.

Ещё есть условия (F9?) — можно задать условия для удешевления ставки, не сильно уменьшая вероятность выигрыша. Например, исключить колонки с 12 единицами подряд — это «мусорные» колонки. Программа использует теорию распределения Гаусса для оптимизации.

F3 — вывод в текстовый файл: можно сгенерировать файл для валидации ставок, чтобы не писать 28 болетов вручную. F8 — сделать резюме (лист для партнёров и публикации в Twitter).

Есть контекстная помощь: если нажать F1 на конкретном поле, помощь будет относиться именно к нему.

Ещё одна интересная особенность — многооконность: когда открывается новое окно (например, калькулятор по F12), предыдущие окна не стираются. При закрытии калькулятора под ним снова видно то, что было. Это реализовано с помощью продвинутых техник программирования, которые не являются привилегией только «продвинутых» языков — всё сделано на YaBasic.

Кнопки: когда выбираешь опцию (Tab или стрелками) и нажимаешь Enter, кнопка визуально «нажимается». Это не только красиво, но и даёт пользователю уверенность, что команда выполнена.

Цвета: у каждого типа экрана своя цветовая схема, в том числе в строке состояния.

Проверка ввода: если в поле, где ожидается 'X' или '2', ввести 'H', программа не примет и вернёт курсор к ошибочному полю (или строке). Всё это делает программу удобной.

Теперь посмотрим на код. Вверху — процедура калькулятора. Ниже — внутренности калькулятора. Всё написано на чистом YaBasic, без внешних библиотек.

Ещё ниже — процедуры поиска, удаления записи (с подтверждением), модификации. Выше — процедура добавления записи: она синтезирована, потом разбивается на более мелкие подпрограммы.

Особый интерес представляет большая матрица-макроопределение, где для каждого поля заданы: координаты на экране, длина, тип (целое/вещественное, десятичные знаки), длина отображения, описание. Это позволяет легко управлять вводом и перемещением по полям: например, если поле длинное, можно показывать только часть, а остальное прокручивать. Благодаря этой макро-таблице реализовано удобное перемещение курсора между полями (влево — в конец предыдущего поля, вверх — на предыдущее поле и т.д.) без ошибок выхода за границы.

Также есть мощная обработка строк: процедура «ввода» принимает один символ, определяет его тип (управляющий, цифра, функциональная клавиша) и решает, что делать, учитывая, что поля имеют начало и конец, и при достижении последнего поля переход идёт на первое. Всё это хорошо отлажено.

Как видите, если делать всё правильно, на Basic можно создавать программы, которые никто не отличит от написанных на других языках.

В следующем видео мы рассмотрим случайные числа — это очень увлекательная и полезная тема. До встречи!

---

*Примечание: текст является расшифровкой видеоурока, поэтому в нём сохранены особенности устной речи автора. Для удобства чтения он разбит на абзацы и снабжён подзаголовками.*
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс программирования на yabasic от @Terrazocultor

Сообщение Anton »

1. Что такое случайное число

Говорят, что число является случайным, когда неизвестен порядок его появления, когда никто не может предсказать, какое число выпадет следующим. Пример генератора случайных чисел — игральная кость: ясно, что выпадет число от 1 до 6, но никто не знает, какое именно выпадет в следующий раз.

Случайные числа могут быть любого типа: целые, вещественные, отрицательные, положительные, мнимые, комплексные…
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс программирования на yabasic от @Terrazocultor

Сообщение Anton »

2. Зачем используются случайные числа

Первое, что приходит на ум, — игры, развлечения, хобби, азартные игры. Но они также применяются в различных симуляциях, научных приложениях, управленческих и коммерческих программах и вообще в любых областях.

Пример использования случайных чисел: нам нужен случайный цвет. Один из способов задать цвет — указать три числа: процент красного, зелёного и синего — трёх основных цветов в аддитивном смешении (то есть при смешении света). Если числа могут быть от 0 до 255, мы можем сгенерировать случайные числа в этом диапазоне 0..255 и, предположим, получим 33, 200 и 125.

Эти три значения красного, зелёного и синего и составят случайно полученный цвет.
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс программирования на yabasic от @Terrazocultor

Сообщение Anton »

3. Есть ли в YaBasic что-то для моделирования случайных чисел? Да

Практически все языки программирования содержат какую-либо инструкцию или инструмент для генерации случайных чисел. В YaBasic такой инструкцией является RAN — от английского «RANDOM», что означает «случайный».
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс программирования на yabasic от @Terrazocultor

Сообщение Anton »

4. Функция RAN()

Согласно руководству Yabasic (http://2484.de/yabasic/), функция Ran сама по себе несколько ограничена, но так происходит во всех языках программирования. Чуть дальше в этой главе мы увидим, как заставить RAN выдавать числа любого типа и в самых разных диапазонах.

Синтаксис Ran следующий (два примера):

Код: Выделить всё

Print Ran
voltaje = Ran
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс программирования на yabasic от @Terrazocultor

Сообщение Anton »

4.1 Использование RAN в чистом виде (без параметров)

В первом примере выше команда Print Ran выводит случайное число на экран самым простым образом: это число может быть 0 и может «почти» достичь 1, но не достигает её. Например, 0.999899.

В этом практически все языки программирования совпадают.

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

Если повторить команду Print Ran, будут выводиться разные случайные числа. Например, следующий цикл For-Next выведет на экран примерно пять случайных чисел:

Код: Выделить всё

For i = 1 To 5
    Print Ran()
Next i
0.714919
0.182161
0.424268
0.101126
0.971082
Во втором примере мы тоже генерируем случайное число, но не выводим его, а сохраняем в переменной voltaje. Сохранить случайное число в переменной важно, если мы хотим его использовать позже, поскольку при следующем вызове Ran мы получим НОВОЕ случайное число, а предыдущее потеряем.

Так, если мы хотим сгенерировать (и сохранить) 10 случайных чисел, подойдёт следующий фрагмент кода. Мы создаём и объявляем таблицу voltaje из 10 элементов, а затем генерируем 10 случайных чисел с помощью цикла For-Next:

Код: Выделить всё

Clear Screen               // Очищаем экран
Dim voltaje(10)          // Объявляем таблицу из 10 элементов
For i = 1 To 10           // Обычный цикл For-Next
    voltaje(i) = Ran()   // Присваиваем случайное число элементу voltaje(i)
Next i
End
Это основа случайных чисел, но они не были бы по-настоящему полезны, если бы мы не могли задавать более широкие диапазоны (например, числа от 1 до 6, как у игральной кости, или от 1 до 1000 для чего-то ещё).

Рассмотрим это в следующих пунктах.

Ещё один момент: что произойдёт, если запустить программу со случайными числами несколько раз?

В каждом запуске последовательность случайных чисел будет РАЗНОЙ. Раньше в информатике случайные числа повторялись в одной и той же последовательности при каждом запуске программы — всегда одни и те же числа, хотя были способы это обойти. Сегодня всё наоборот: по умолчанию последовательность каждый раз новая.
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс программирования на yabasic от @Terrazocultor

Сообщение Anton »

4.2 Моделирование игральной кости: числа от 1 до 6 с помощью RAN

Теперь применим функцию случайных чисел Ran() более реалистично и конкретно.
Скобки, которые мы до сих пор оставляли пустыми, как раз и позволяют управлять диапазоном.
Если между скобками ничего не указано, мы получаем, как и раньше, случайные числа от 0 до 0.999999.

Если мы хотим более широкий диапазон, укажем его в скобках:
Это даёт диапазон как у игральной кости: 1..6, но есть небольшая проблема: функция Ran возвращает число с десятичными знаками. Мы воспользуемся новой для нас функцией Int(), которая возвращает целую часть числа, указанного в скобках.

Например: если x = 6.3, то Print Int(x) выведет 6, а не 6.3 (целую часть).
Итак, генерируем случайное число так: Int(Ran(6))
Теперь оно без десятичных знаков, но возникает другое явление: если проверить это выражение, мы получим числа от 0 до 5, а не от 1 до 6. Почему?

Вспомним, что базовое случайное число может быть от 0 до (почти) 1, но не достигает 1. Поэтому если мы уберём десятичные знаки (с помощью Int()), диапазон уменьшится на единицу, и мы получим 0..5 вместо 1..6.

Решение очень простое: выражение для моделирования игральной кости должно быть таким:

Код: Выделить всё

Print Int(Ran(6)) + 1
+ 1 возвращает всё на свои места.
Таким образом, слагаемое + 1 — это ПЕРВЫЙ элемент диапазона (в данном случае 1), а число в скобках Ran() задаёт общий диапазон.
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс программирования на yabasic от @Terrazocultor

Сообщение Anton »

4.3 Числа, начинающиеся не с 1 (начинаем с 18)

Не всегда нужно, чтобы последовательность случайных чисел начиналась с 1.

Допустим, мы выполняем статистическую работу и нам нужны возраста начиная с 18, то есть совершеннолетние. Мы уже поняли, что в «формуле» случайного числа нужно заменить + 1 на + 18. Что касается диапазона: если он от 18 до 100, у нас есть интервал в 82, но мы увеличим его до 83 из-за эффекта Int(), который отрезает одну единицу. Поэтому в скобках ставим 83.

Правильная формула для этого случая:

Код: Выделить всё

Edad = Int(Ran(83)) + 18
Это выражение будет выдавать целые числа от 18 до 100.

На моём Patreon (бесплатно) есть пост со всеми программами этой главы, чтобы вам не пришлось набирать их вручную. Ссылка:
https://www.patreon.com/posts/53223730
!
Сообщение от: Anton
Все программы я на всякий случай загрузил в постах с видео
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс программирования на yabasic от @Terrazocultor

Сообщение Anton »

4.4 Отрицательные числа

Нет никаких препятствий для генерации отрицательных случайных чисел.
Можно генерировать последовательности полностью отрицательные или только с частью отрицательного диапазона. Примеры:
  • от -100 до -30 — и нижняя, и верхняя границы отрицательные;
  • от -50 до +100 — нижняя граница отрицательная, а верхняя положительная.
Следуя примеру небольшой программы из видео, сгенерируем случайные числа в диапазоне от -50 до +40. Строка на YaBasic будет такой:

Код: Выделить всё

Numero = Int(Ran(91)) - 50
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс программирования на yabasic от @Terrazocultor

Сообщение Anton »

4.5 Числа с десятичными знаками

В некоторых приложениях нужны числа с высокой точностью, и поэтому необходимо использовать десятичные знаки. Никаких проблем: достаточно не использовать функцию Int(), которая преобразует число в целое.

Чтобы получить случайные числа с десятичными знаками в диапазоне 0..19.99, используем команду:

Код: Выделить всё

Numero = Ran(20)
Затем для вывода на экран с двумя знаками после запятой используем шаблон "##.##".
Смотрите мини-программу на Patreon.