Адрес: ул. Б. Очаковская 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 »

SIGN — знак числа

sgn(x) возвращает -1, если x отрицательное, 0, если x = 0, и 1, если x положительное.

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

Clear Screen
Repeat
    Input "Введите число: " num
    Print sgn(num)
Until num = -100
SQR — квадрат числа

В YaBasic sqr(x) возвращает квадрат числа (не путать с квадратным корнем!).

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

Clear Screen
For x = 1 To 10
    Print "Квадрат ", x, " = ", sqr(x)
Next x
SQRT — квадратный корень

sqrt(x) возвращает квадратный корень.

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

Clear Screen
For x = 10 To 100 Step 10
    Print "Корень из ", x, " = ", sqrt(x)
Next x
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

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

Сообщение Anton »

TAN — тангенс

Мы уже рассмотрели её в начале как пример тригонометрической функции.

XOR — исключающее ИЛИ (аналог EOR)

В YaBasic есть и xor(), работающая аналогично eor().

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

Clear Screen
a = 0b10101010
b = 0b01010101
n = xor(a, b)
Print n
Print bin(n)
Результат: 255 (все биты единицы), так как операнды инвертированы.

Возведение в степень: ^, ** и ^ с дробным показателем

Для возведения в степень можно использовать ^ или **.
Например, 5^3 = 125.

Для извлечения корня степени n используется возведение в дробную степень 1/n.

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

Clear Screen
Print 5^3
Print 5**3
Print 125^(1/3)      ' кубический корень из 125
Print 125**(1/3)
Важно! Без скобок 125^1/3 интерпретируется как (125^1)/3 = 41.666..., из-за приоритета операций. Поэтому обязательно заключайте дробный показатель в скобки.
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

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

Сообщение Anton »

Заключение

Мы рассмотрели основные числовые, тригонометрические, логические и битовые функции YaBasic. Все они просты, но некоторые (например, int, mod, ran) используются в программировании постоянно.

В следующей главе поговорим об организационных диаграммах (блок-схемах), в том числе о менее известных, но очень полезных диаграммах Конвея, которые не просто позволяют, а заставляют писать структурно.

Все программы из этого урока можно скачать на Patreon (ссылка в описании видео). До встречи!

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

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

Сообщение Anton »

!
Сообщение от: Anton
Это заключительный материал автора, тема будет дополнена, если выйдет продолжение
Глава 10. Диаграммы потоков и диаграммы Насси-Шнейдермана (Chapin)

В этом уроке автор отходит от непосредственного программирования и рассказывает о графическом инструменте — диаграммах потоков (блок-схемах), которые помогают проектировать программы. Особое внимание уделяется диаграммам Насси-Шнейдермана, которые способствуют структурному программированию.

Привет, друзья! Мы продолжаем наш учебник по программированию, но сегодня не будем разбирать код или конкретную инструкцию. Сменим ритм и поговорим об одном полезном инструменте — диаграммах потоков. Иногда их ошибочно называют organigramas, я и сам грешил этим словом, но правильно — diagramas de flujo. Далее для краткости буду говорить просто «диаграммы».

Зачем нужна диаграмма потока? Это графический способ показать шаги, необходимые для решения задачи. Задача может выглядеть по-разному, и диаграмма должна учитывать все возможные варианты. Для сложной задачи диаграмма может быть довольно объёмной, хотя обычно она проще.

Существует много видов диаграмм. Сначала мельком взглянем на классический тип (он лежит у меня на столе вверх ногами). Это самый традиционный вид, но мне он не нравится, потому что позволяет писать плохой код — с пресловутым GOTO. Я не против GOTO из снобизма, а потому что он порождает запутанный «спагетти-код»: переходы туда-сюда, и потом невозможно понять, откуда пришли и куда вернёмся. Структурированная программа гораздо легче для понимания.

Классические блок-схемы позволяют программировать и хорошо, и плохо — как ты их построишь. А вот другие диаграммы, которые мы сейчас рассмотрим, заставляют программировать структурно, потому что в них нет поддержки инструкции GOTO.

Давайте посмотрим на классическую блок-схему (на столе). Все диаграммы имеют как минимум одно начало и один конец, хотя иногда может быть несколько конечных точек. Начало и конец обозначаются овалом со словами «Inicio» и «Fin». Ромбоид означает ввод/вывод данных: здесь, например, запрашивается DNI (испанский идентификационный номер) как строка (поэтому с символом $). Обычно в диаграммах не привязываются к конкретному языку, но я позволил себе такую вольность. Ромбы — это вопросы, точки принятия решений с ответами «да» и «нет». Здесь мы спрашиваем, пуст ли DNI: если пользователь ничего не ввёл и нажал Enter, это сигнал к выходу. Если не пуст, продолжаем. Прямоугольники — это процессы, операции в памяти: присваивание, преобразование и т.д. Мы преобразуем строковый DNI в числовой, потому что дальше нужны вычисления. Потом вычисляем остаток от деления DNI на 23 (модуль). В зависимости от остатка (от 0 до 22) назначаем букву. Затем объединяем DNI и букву в переменную NIF, выводим результат. И вот здесь появляется тот самый GOTO: он ведёт обратно для повторения цикла, пока не введут пустой DNI. Я уже объяснил, почему GOTO нежелателен.

Теперь перейдём к другим диаграммам — диаграммам Насси-Шнейдермана (сокращённо NS), также известным как диаграммы Чапина (Chapin). Я встречал написание «ЧапИн» с ударением на «и», но не уверен. Главное — не произносить «Шопен», а то мы начнём делать диаграммы для фортепианных партий. Шучу. Эти диаграммы основаны на теории структурного программирования. Суть теории: любую программу, какой бы длинной и сложной она ни была, можно построить из трёх простых структур:
  1. Последовательные процессы — блок, внутри которого может быть одна или много инструкций.
  2. Циклы — для повторения: REPEAT, WHILE, FOR.
  3. Условные конструкции — принятие решений: простая IF (с ветвями «да» и «нет») и множественный выбор (SWITCH, CASE, SELECT и т.п.).
В диаграммах Чапина нет соединительных линий и переходов — только вложенные прямоугольники. Поэтому они не позволяют писать неструктурно: они вынуждают программировать правильно.

Рассмотрим элементы диаграмм Чапина:
  • Процесс: прямоугольник с текстом.
  • Условие: прямоугольник, разделённый на две части (для IF), или на несколько секций для SWITCH. В SWITCH можно также добавить ветку default.
  • Циклы: REPEAT обозначается как прямоугольник с буквой «L»-образной скобкой слева; WHILE — аналогично, но скобка может быть слева или справа; FOR — тоже.
Теперь пример реальной диаграммы Чапина — программа ведения файла. Начинаем с инициализации (всегда должна быть). Затем открываем файл. Дальше идёт большой цикл REPEAT...UNTIL, который повторяется, пока не будет нажата клавиша Escape. Внутри цикла: рисуем панель управления, принимаем нажатие клавиши, затем проверяем, Escape ли это. Если да — закрываем файл и выходим. Если нет — идём в множественный выбор (SWITCH), где обрабатываются различные клавиши: F7 (добавить), Enter (редактировать), F9 (удалить), клавиши курсора (перемещение по записям), F10 (отчёты) и т.д. После каждой операции клавишу сбрасываем в пустую строку (чтобы цикл не завершился), и возвращаемся к началу цикла.

Важный момент: если из подпрограммы (например, редактирования) выйти по Escape, то мы должны вернуться в главное меню, а не завершить программу. Поэтому внутри подпрограмм клавиша очищается, и только на уровне панели управления Escape приводит к выходу.

Теперь на чистом листе я покажу, как комбинировать элементы. Внутрь цикла REPEAT можно вкладывать процессы, условия, другие циклы. Главное — сохранять структуру вложенности. Если процесс слишком большой, его можно вынести на отдельный лист и разработать отдельно.

Давайте построим диаграмму для задачи вычисления контрольной буквы испанского DNI. Сначала процесс инициализации. Затем цикл REPEAT...UNTIL, который продолжается, пока не введён пустой DNI или не нажата Escape. Внутри цикла: выводим приглашение, запрашиваем DNI (строкой). Если строка пустая — выходим из цикла (Break). Иначе преобразуем DNI в число, вычисляем остаток от деления на 23. Далее — множественный выбор (SWITCH) по остатку: для каждого значения от 0 до 22 присваиваем соответствующую букву (официальная таблица). После SWITCH объединяем DNI и букву в NIF, выводим результат, делаем паузу. Если во время паузы нажата Escape — выходим из цикла, иначе повторяем.

Теперь напишем программу на YaBasic, следуя этой диаграмме. Слева на экране — диаграмма, справа — код. Я не буду писать код прямо сейчас (это заняло бы много времени), но объясню соответствие.

В начале программы идут описания подпрограмм (процедур). Наша первая подпрограмма — Inicializa, она пустая, но оставлена для будущих дополнений. Затем начинается основной код с REPEAT. Внутри вызывается DibujaMensajeEnPantalla — эта подпрограмма очищает экран и выводит сообщение. Затем PideDni — запрашивает DNI через INPUT. Далее проверка: если DNI пустой (=""), выполняется BREAK — выход из цикла. Если нет — преобразуем DNI в число: dni = Val(dni$). Вычисляем остаток: resto = Mod(dni, 23). Затем идёт SWITCH resto с 23 ветками CASE, каждая присваивает переменной letra$ нужную букву. После END SWITCH формируем nif$ = dni$ + letra$, выводим его. Затем вызываем Pausa — она печатает подсказку и ждёт нажатия клавиши; нажатая клавиша сохраняется в tecla$. Если tecla$ = "escape", цикл завершается, иначе продолжается.

Код подпрограммы Pausa использует INKEY$ для ожидания клавиши. Подпрограмма Despedida выводит прощальное сообщение.

Я признаю, что реализация SWITCH на 23 ветки не самая элегантная — можно было бы обойтись одной строкой с функцией MID$, но мы её ещё не изучали. Поэтому пока так.

Диаграммы Чапина очень помогают при проектировании, особенно больших программ: всегда можно разбить сложный процесс на несколько более простых, вынося их на отдельные листы. Это дисциплинирует.

На этом всё. В следующем видео продолжим изучение функций работы со строками.

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

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

Сообщение Anton »