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

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

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

История разработки, новости релизов и документация
Закрыто
Аватара пользователя
Anton
Site Admin
Сообщения: 241
Зарегистрирован: Чт фев 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
Сообщения: 241
Зарегистрирован: Чт фев 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
Сообщения: 241
Зарегистрирован: Чт фев 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
Сообщения: 241
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва
Контактная информация:

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

Сообщение Anton »

Заключение

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

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

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

Вложения
Abs.yab
(129 байт) 135 скачиваний
And().yab
(129 байт) 143 скачивания
ACos.yab
(113 байт) 130 скачиваний
asterisco y ^.yab
(316 байт) 137 скачиваний
Asin.yab
(110 байт) 138 скачиваний
Bin$.yab
(135 байт) 136 скачиваний
Bitnot.yab
(161 байт) 136 скачиваний
Ceil.yab
(177 байт) 138 скачиваний
Cos.yab
(130 байт) 135 скачиваний
Eor.yab
(265 байт) 139 скачиваний
Dec.yab
(276 байт) 137 скачиваний
Euler.yab
(226 байт) 149 скачиваний
Exp.yab
(152 байт) 136 скачиваний
Floor.yab
(175 байт) 128 скачиваний
Frac.yab
(160 байт) 128 скачиваний
Int.yab
(144 байт) 132 скачивания
Log.yab
(206 байт) 130 скачиваний
Max.yab
(165 байт) 136 скачиваний
Min.yab
(171 байт) 139 скачиваний
Mod.yab
(170 байт) 138 скачиваний
Or.yab
(173 байт) 143 скачивания
Ran.yab
(317 байт) 146 скачиваний
Pi.yab
(129 байт) 144 скачивания
Round.yab
(189 байт) 140 скачиваний
Shr.yab
(149 байт) 134 скачивания
Shl.yab
(170 байт) 139 скачиваний
Sig.yab
(228 байт) 124 скачивания
Sin.yab
(149 байт) 133 скачивания
Sqr.yab
(179 байт) 136 скачиваний
Sqrt.yab
(160 байт) 137 скачиваний
Tan.yab
(238 байт) 136 скачиваний
Xor.yab
(328 байт) 134 скачивания
Аватара пользователя
Anton
Site Admin
Сообщения: 241
Зарегистрирован: Чт фев 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
Сообщения: 241
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва
Контактная информация:

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

Сообщение Anton »

Закрыто
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение