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

3.3 Таблицы и матрицы (большая вычислительная мощность)

Даже в небольших программах этот тип данных часто очень полезен.

Строго говоря, таблицы и матрицы — не отдельный тип данных, а особый способ организации данных, потому что данные в них относятся к уже рассмотренным типам: числовым и/или строковым. Таблицы и матрицы имеют схожую структуру.

Предположим, мы хотим хранить названия двенадцати месяцев года в какой-то переменной. Понятно, что для хранения названий месяцев переменные должны быть строковыми.

Не лучшей идеей будет хранить эти названия в отдельных строковых переменных — всего 12 переменных, по одной на месяц:

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

Mes1$ = "enero"
Mes2$ = "febrero"
...
Mes12$ = "diciembre"
Это не вызовет ошибки, но будет очень громоздко.

Гораздо лучше объявить строковую переменную-таблицу:

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

Dim Mes$(12)
Эта инструкция DIM задаёт размер переменной Mes$ (со знаком доллара — строковая) в 12 элементов, то есть 12 переменных с одним именем. Как обратиться к каждой?
Ответ: с помощью индекса — числа в скобках.

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

Mes$(5)   ← "mayo"
Mes$(10)  ← "octubre"
Разумеется, прежде чем обращаться к элементам, нужно заполнить таблицу названиями месяцев, иначе в каждом элементе будет пустая строка "":

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

Mes$(1) = "enero"
Mes$(2) = "febrero"
...
Mes$(12) = "diciembre"
Теперь у нас есть большое преимущество: достаточно числа от 1 до 12, чтобы связать номер месяца (1–12) с его названием, благодаря нумерованной таблице.

Такой тип данных (таблица) экономит массу работы, а при использовании циклов (мы их рассмотрим) вычислительная мощность значительно возрастает. В этом примере всего 12 элементов, но можно сделать таблицу на 25 000 элементов, например с названиями астероидов.

Рассмотренный пример — одномерная таблица: индекс от 1 до 12 для месяца. Но можно сделать таблицу для месяцев с двумя измерениями:

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

Dim Mes(12,31)
Теперь для каждого элемента от 1 до 12 есть 31 элемент — дни. Эта двумерная таблица содержит уже не 12, а 12 × 31 = 372 элемента. Мы знаем, что не во всех месяцах 31 день. Ничего страшного: несуществующие дни просто игнорируются, соответствующие ячейки не используются. Так мы охватим все 365 дней года.

Я не забыл убрать $ из имени Mes, потому что теперь хочу, чтобы таблица была числовой.

Что можно хранить в каждом элементе такой таблицы? Например, количество осадков в литрах на квадратный метр для определённой зоны в этот день и месяц.

Чтобы обратиться к осадкам за 17 апреля, используем индексы Mes(4,17), а за 8 августа — Mes(8,8).

А если нужно хранить эту информацию для 250 населённых пунктов?

Добавим ещё одно измерение:

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

Dim Mes(12,31,250)
Пожалуй, теперь такую таблицу лучше назвать Lluvia (осадки), так как именно эти данные она содержит:

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

Dim Lluvia(12,31,250)
Теперь у таблицы внушительные размеры. Каждое длинное целое, как мы видели, занимает 4 байта, а в таблице 12 × 31 × 250 элементов, по 4 байта каждый = 372 000 байт, то есть примерно 363 Кбайт памяти.

Этим 250 населённым пунктам нужно присвоить коды от 1 до 250. Допустим, мы хотим узнать осадки за 25 марта в посёлке «Вильяконехос-де-Арриба», имеющем (предположим) код 197. Обращение к элементу таблицы будет таким:

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

Lluvia(3,25,197)
С тремя индексами и циклами потенциал обработки больших объёмов информации растёт экспоненциально. Если добавить обработку этих данных и наглядное представление на бумаге или экране, становится понятна привлекательность информатики.

Такие таблицы можно воспринимать как электронные таблицы: одно измерение — строки, другое — столбцы, третье — листы, наложенные друг на друга.

Нет никаких препятствий для создания таблиц или матриц с 4 и более измерениями; ограничивает только память. Действительно стоит знать и уметь использовать эти простые, но мощные структуры данных.

В предыдущей трёхмерной таблице видно, что такой тип переменной не просто облегчает работу — без него программирование было бы почти невозможным или крайне утомительным. Мы видели, что таблица содержит 12 × 31 × 250 = 93 000 переменных. Представьте, каково было бы инициализировать нулями все 93 000 переменных одну за другой — пришлось бы написать 93 000 инструкций вида:

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

Lluvia(1,1,1) = 0
Lluvia(1,1,2) = 0
...
Lluvia(12,31,250) = 0
Вместо этого с помощью таблицы и трёх вложенных циклов те же 93 000 присваиваний делаются всего в семь строк:

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

For Mes = 1 To 12
   For Dia = 1 To 31
      For Poblacion = 1 To 250
         Lluvia(Mes,Dia,Poblacion) = 0
      Next Poblacion
   Next Dia
Next Mes
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

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

Сообщение Anton »

3.4 Другие типы переменных, которые существуют, но не поддерживаются в YaBasic
Считаю нужным хотя бы упомянуть некоторые типы данных, которых нет в YaBasic.

3.4.1 Char
Char — от Character (символ).
Между разными языками есть отличия и нюансы.
Служит для хранения одного символа.
Длина — 1 байт.
Эквивалентен типу byte, но если byte может участвовать в математических операциях, то Char — нет.

3.4.2 Boolean
Логический тип данных, может принимать только одно из двух значений:
  • True (истина)
  • False (ложь)
    Занимает 1 байт.
В YaBasic такого типа нет, но есть нечто похожее, что полезно знать: при использовании конструкций If можно проверять, является ли что-то истинным или ложным, учитывая, что числовое значение НОЛЬ представляет False, а любое другое числовое значение — True.

3.4.3 Record (запись)
Это тип данных, которого мне будет не хватать в YaBasic, но его можно чем-то заменить или имитировать — в информатике почти всё можно эмулировать с большим или меньшим успехом.

Тип record позволяет создать структуру данных, объединяя несколько изначально разрозненных данных в единое целое — запись.
Пример записи — данные о транзисторе, если бы мы хотели создать базу данных или файл транзисторов. В такую запись могли бы входить:
  • Название транзистора
  • Корпус
  • NPN/PNP
  • VCEMax
  • ICMax
  • Hfe
В Yabasic мы использовали бы их по отдельности, без объединения в запись (но, конечно, файлы с данными создавать и использовать можно).

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

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

TPrecio = (Gratis, muy barato, barato, asequible, medio, algo caro, muy caro, inalcanzable)
Этот список из 8 значений можно было бы использовать с помощью простой математической процедуры сегментации цен, чтобы легко распределять товары по категориям: бесплатно, очень дёшево, дёшево, доступно…

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

3.4.5 Указатели (Pointer)
Указатель — это тип данных, который содержит не само значение, а адрес этого значения в памяти, что в конечном счёте тоже является данными, но не самим значением.

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

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

Сообщение Anton »

4. Присваивание значений переменным

В информатике для присваивания значения переменной обычно используется знак равенства =, с небольшими отличиями в разных языках. В YaBasic также используется знак равенства.

Примеры:

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

A = 433               ← присваивает значение 433 числовой переменной A
Nombre$ = "José María" ← присваивает строку "José María" строковой переменной Nombre$
Следующая попытка вызовет ошибку:

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

A = "433"   ← заключив число в кавычки, мы говорим, что 433 — не число, а строка, а A — числовая переменная, которая не примет строку
Если строковой переменной Nombre$, содержащей «José María», присвоить:

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

Nombre$ = ""
она будет полностью очищена, так как мы присвоили ей пустую строку "".
Это не хорошо и не плохо, просто так можно сделать.

Сразу после очистки можно снова присвоить переменной Nombre$ то же или другое имя.

Значение переменной можно присваивать сколько угодно раз.

Также значение переменной можно получить другими способами: например, вводом с клавиатуры (input и line input), чтением из файла с помощью Open и Input или функцией Read-Data.

Другие способы присваивания показаны в видео:
  • С клавиатуры с помощью команд INPUT и LINE INPUT.
  • Чтением внешнего файла, находящегося на каком-либо носителе (например, жёстком диске). Файл может быть создан в текстовом редакторе или самим YaBasic, который умеет создавать и записывать файлы. Чтение из файла выполняется командой INPUT #X, где #X — номер, присвоенный файлу. Если номер не указан, предполагается, что данные поступают с клавиатуры.
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

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

Сообщение Anton »

5. Глобальные и локальные переменные

Понятия «глобальная» и «локальная» связаны с видимостью переменной в зависимости от того, какая часть программы выполняется в данный момент.

В принципе, переменные, объявленные в основной программе, являются глобальными, то есть видны в любой части программы. Если мы объявили числовую переменную A со значением 14, то при каждом обращении к A мы получим 14.

Ситуация меняется внутри подпрограммы (это понятие мы ещё не рассматривали, но рассмотрим; подпрограмма — это как процедура, фрагмент программы). Внутри подпрограммы можно объявить переменную с директивой local. Это означает, что даже если у переменной то же имя, что у глобальной, объявленной вне подпрограммы, локальная переменная будет видна только внутри подпрограммы, а глобальная переменная не будет видна внутри подпрограммы, поскольку её «затмевает» локальная.

Пример:

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

A = 1
Print A
Inkey$
Pro()
Print A
Inkey$
End

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

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

Сообщение Anton »

6. Счётчик или накопитель и его кажущийся парадокс: A = A + 1

Ресурс, используемый во всех языках программирования, — счётчик или накопитель.

Между языками могут быть небольшие отличия, но суть одна. Типичная форма счётчика такова; предположим, есть целочисленная переменная с именем CONTADOR (можно было назвать иначе):

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

CONTADOR = CONTADOR + 1
Здесь и кроется парадокс. Как может CONTADOR быть равен самому себе плюс 1?
Это абсурд, бессмыслица.

Смотря как понимать…

Если CONTADOR = CONTADOR + 1 рассматривать как равенство, то это действительно абсурд: CONTADOR не может быть равен себе плюс 1.

…но если рассматривать это как ПРИСВАИВАНИЕ, то смысл есть. Вполне возможно присвоить переменной CONTADOR значение её самой плюс 1.

Предположим, переменная CONTADOR предварительно равна 5.
При следующем выполнении инструкции CONTADOR = CONTADOR + 1 значение увеличится на 1 и станет 6. Поэтому такое присваивание называют счётчиком или накопителем: оно позволяет узнать, сколько раз программа прошла через эту инструкцию, сколько раз произошло какое-то событие.

Рассмотрим наглядный пример: мы хотим узнать, сколько чисел от 1 до 1000 делятся на 5, то есть при делении на 5 дают остаток 0.

Используем цикл For-next (мы его ещё не изучали, но немного знакомы), функцию Mod(), возвращающую остаток от деления, и счётчик:

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

Contador = 0
For x = 1 To 1000
   If Mod(x,5) = 0 Then
      Contador = Contador + 1
   EndIf
Next x
Print "Чисел, делящихся на 5 от 1 до 1000: ", Contador
End
Счётчик не обязан увеличиваться на единицу; он может, например, увеличиваться на 5:

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

CONTADOR = CONTADOR + 5
Счётчик может быть и убывающим, как в следующем примере, где при каждом выполнении значение уменьшается на 10 — это похоже на обратный отсчёт:

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

CONTADOR = CONTADOR - 10
В некоторых языках есть специальные инструкции для счётчика, например в Turbo Pascal Inc(a) увеличивает целую переменную a на 1, Inc(a,5) — на 5, а Dec(a,5) уменьшает на 5.
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

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

Сообщение Anton »

7. Сравнение переменных. Операторы отношения >, <, =

Для сравнения двух или более переменных используются операторы отношения. С их помощью можно проверить, больше ли одна переменная другой, меньше, равна или не равна. Пока рассмотрим тему на числовых переменных (целых и вещественных). Операторы отношения:
  • > (больше) A > B — спрашивает, больше ли A, чем B. Если выражение истинно, результат — «true» (истина), иначе — «false» (ложь). Если A = 10, B = 4, то A > B истинно.
  • < (меньше) A < B — спрашивает, меньше ли A, чем B.
  • = (равно) A = B — спрашивает, равно ли A B.
  • <> (не равно) A <> B — спрашивает, отличается ли A от B.
  • >= (больше или равно) A >= B — спрашивает, больше ли A или равно B.
  • <= (меньше или равно) A <= B — спрашивает, меньше ли A или равно B.
Эти операторы вместе с инструкцией IF, которую мы ещё не рассматривали, дают программе возможность принимать решения. Программа может принимать решения разными способами, но If — один из самых используемых.

Пример:

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

If Edad >= 18 Then   (если возраст больше или равен 18, то…)
   MayorDeEdad
Else   (…в противном случае…)
   MenorDeEdad
Также можно сравнивать строковые переменные.
Что это значит? Лучше на примере:

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

Nombre1$ = "Jorge"
Nombre2$ = "Ana"
Если сказать, что Nombre2$ меньше Nombre1$, это означает, что в алфавитном порядке «Ana» идёт раньше, чем «Jorge». Именно так мы нашли бы их в словаре. Таким образом, операторы отношения со строками — это средство сортировки по алфавиту как по возрастанию (от A до Z), так и по убыванию (от Z до A).

Nombre1$ > Nombre2$ — истина, так как «Jorge» идёт после «Ana».
Nombre2$ > Nombre1$ — ложь, так как «Ana» идёт раньше «Jorge».

Обратите внимание: «A» — не то же самое, что «a». Их ASCII-коды различны: «A» — 65, «a» — 97, следовательно, «a» больше «A».
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

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

Сообщение Anton »

8. Уголок ТЕОРИИ
Прежде чем завершить главу, хочу рассмотреть три вопроса, напрямую связанных с центральной темой — переменными.

8.1 Строго типизированные языки против языков без строгой типизации

Мы уже видели, что переменные могут быть разных типов, и программист в большей или меньшей степени (в зависимости от языка) обязан объявлять переменные перед использованием и указывать их тип… или нет.

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

Другие языки, например мой любимый Turbo Pascal (и вообще все версии Pascal), строго типизированы. Нужно объявлять переменные перед использованием… или искать более снисходительный язык.

8.2 Чувствительность к регистру. YaBasic чувствителен к регистру

«Case sensitive» можно перевести как «чувствительный к регистру», поскольку «case» в английском означает, набран ли текст в верхнем регистре (upper case) или нижнем (lower case).

Следствие: переменные Suma и suma — НЕ одно и то же!

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

Следующий фрагмент кода может отнять у нас время, если мы не готовы:

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

suma = 0
For x = 1 to 10
   Suma = Suma + 5
Next x
Print suma
Мы инициализируем suma нулём.
Затем создаём цикл из 10 итераций, в каждой увеличивая Suma на 5, но это не та же переменная, что suma, потому что последняя начинается со строчной буквы.

В итоге, когда мы пишем Print suma, выводится не ожидаемые 50, а 0, так как suma (со строчной s) не изменялась в коде и осталась равной 0.

Итак, запомним: YaBasic, как и язык C, чувствителен к регистру.

8.3 Константы в противоположность переменным

В отличие от переменных, значение которых, как следует из названия, можно менять сколько угодно, константы не должны и не могут изменяться. Например, кто и зачем стал бы менять значение числа π = 3,14 или ускорения свободного падения g ≈ 9,8 м/с²? В физике и математике множество констант.

Многие языки позволяют объявлять константы и присваивать им значения. Позже это значение нельзя изменить — именно потому, что оно постоянно.

В YaBasic такой возможности нет: нет пользовательского типа констант. Но есть два момента:
  1. Можно использовать переменную и присвоить ей постоянное значение. Формально это не константа, но ведёт себя так же, пока мы не меняем её значение.
  2. В YaBasic уже есть несколько встроенных констант. Если мы не знаем о них и определим переменную с тем же именем, ничего страшного, но лучше знать об этих константах и использовать их при необходимости. Вот (только) две константы, встроенные в Yabasic:
    • euler — значение 2.71828182864
    • pi — значение 3.14159
Любая попытка присвоить значение этим константам (даже правильное) не имеет смысла и вызовет ошибку, например:

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

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

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

Сообщение Anton »

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

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

Сообщение Anton »

1. Что такое цикл и зачем он нужен
Слово «цикл» имеет несколько значений. В информатике цикл — это конструкция в программе, позволяющая повторить заданное число раз фрагмент программы. Этот фрагмент может быть одной инструкцией, несколькими инструкциями или очень многими инструкциями.

Каждый раз, когда цикл завершается, то есть делает один оборот, это называется циклом или итерацией.

Все языки программирования без исключения поддерживают циклы. Циклы настолько полезны и необходимы, что без них язык был бы почти бесполезен.

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

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

Наиболее важные циклы, которые есть во всех языках (и в YaBasic тоже): Кроме того, YaBasic включает цикл «бесконечного» типа: Do – Loop.

Предположим, нам нужно повторить четыре раза три инструкции в программе. Без циклов мы сделали бы это «в лоб», двенадцатью строками кода:

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

Инструкция1
Инструкция2
Инструкция3
Инструкция1
Инструкция2
Инструкция3
Инструкция1
Инструкция2
Инструкция3
Инструкция1
Инструкция2
Инструкция3
С помощью цикла мы сделаем то же самое, но всего за 5 строк вместо 12:

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

For x = 1 To 4
   Инструкция1
   Инструкция2
   Инструкция3
Next x
Другой пример:
Представьте, что нас просят написать программу, которая выводит таблицу умножения от 1 до 10. Это 10 таблиц, в каждой по 10 строк, итого 100 строк.

Без циклов пришлось бы терпеливо написать 100 строк кода, одну за другой, с простой командой PRINT. Если же воспользоваться циклами, ту же работу можно выполнить меньше чем за 10 строк. Разница огромна. Этот пример мы рассмотрим в пункте 3 «Вложенные циклы».
Аватара пользователя
Anton
Site Admin
Сообщения: 239
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

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

Сообщение Anton »

2. Типы циклов

2.1 Цикл For – Next

Это самый используемый тип цикла. Особенно удобен, когда заранее известно, сколько раз должен повториться цикл, то есть сколько итераций нужно выполнить.

Структура цикла For-Next:

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

For x = Inicio To Final
   Инструкция(и)
Next x
В этом цикле переменная x начинает со значения переменной Inicio (не обязательно равного 1) и увеличивается на 1, пока не достигнет значения переменной Final. В этот момент цикл завершается, и программа продолжает выполнение после Next x. Переменные Inicio и Final можно заменить числами:

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

For x = 1 To 100
   Инструкция(и)
Next x
Обратите внимание на отступы (indentación): инструкции внутри For – Next сдвигаются вправо. Это, хотя и кажется мелочью, значительно улучшает читаемость реальной программы, особенно большой. Программа и без того достаточно сложна, не будем усложнять её ещё больше.

Настоятельно рекомендую привыкнуть делать отступы.

Пример реального цикла For-Next: нужно вывести квадраты первых 20 чисел от 1 до 20. Очевидно, цикл должен повториться 20 раз, начиная с 1 и заканчивая 20:

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

For x = 1 To 20
   Print "Квадрат ", x, " равен ", x^2
Next x
В YaBasic для возведения в квадрат используется оператор ^. Также можно использовать **. А если показатель степени равен 2, есть специальная функция Sqr(x), возвращающая квадрат числа x.

Кроме того, мы постепенно осваиваем команду Print, которая очень универсальна: комбинируем литералы (в двойных кавычках) и переменные, разделяя запятыми, и очень важно: пробелы до и после нужных мест, чтобы текст на экране был читаемым.

До сих пор мы предполагали, что цикл For-Next всегда идёт по возрастанию с шагом 1. Но это не всегда так. Существует ключевое слово Step, которое указывает, в каком направлении и с каким шагом должен двигаться For. Если Step опущено, предполагается шаг 1 по возрастанию — так мы чаще всего и будем использовать For-Next. В следующем примере слева переменная x увеличивается на 5, а справа — уменьшается на 2 (из-за минуса в Step -2).

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

For x = 1 To 100 Step 5        For x = 100 To 1 Step -2
   Print x                        Print x
Next x                         Next x