Приветствую Вас ГостьПятница, 06.12.2019, 21:00

Для начинающих программистов

Наш опрос
Оцените мой сайт
Всего ответов: 28

Базовые команды и операторы - Форум

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Liberty Basic » Обсуждение команд и операторов » Базовые команды и операторы (Обсуждаем и задаем вопросы о Liberty Basic)
Базовые команды и операторы
TimurARДата: Вторник, 25.07.2017, 23:27 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 10
Репутация: -1
Статус: Offline
Обсуждаем и задаем вопросы о базовых операторах и командах Liberty Basic. Задавайте любые вопросы, даже если они могут показаться неуместными.
УВАЖАЕМЫЕ посетители сайта убедительная просьба не стесняйтесь задавайте вопросы или делитесь опытом, а то вроде бы просмотры есть, а ни одной записи.
 
lidiyaproДата: Понедельник, 28.08.2017, 21:20 | Сообщение # 2
Рядовой
Группа: Пользователи
Сообщений: 1
Репутация: 0
Статус: Offline
В чём различие оператора GOTO от GOSUB. Фактически они выполняют одно и то же
 
TimurARДата: Вторник, 29.08.2017, 00:50 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 10
Репутация: -1
Статус: Offline
Цитата lidiyapro ()
В чём различие оператора GOTO от GOSUB. Фактически они выполняют одно и то же
goto [metka]- оператор который переводит на указанную строку выполнение программы и далее код выполняется с этой указанной строки, а
gosub [metka]- оператор который перевод на часть кода которую мы определили как подпрограмму, после выполнения которой обязательно пишем RETURN и возвращаемся в то место откуда мы перешли. При чем этот код подпрограммы мы можем вызывать несколько раз из разных мест.
Пример:
a=3
b=4
c=0
goto [m2] 'вот отсюда переходим на [m2]
c=a*b 'эту строчку пропускаем
[m2] 'вот сюда переходим
c=c+a+b
print c

Пример:
a=3
b=4
c=0
gosub [m1] 'вот здесь вызываем подпрограмму первый раз
print c
a=5
b=6
gosub [m1] 'вот здесь подпрограмму вызываем второй раз
print c
end
[m1] 'отсюда начинается подпрограмма
c=a*b
RETURN 'здесь подпрограмма заканчивается и возвращается в то место откуда была вызвана
 
ГупиДата: Среда, 05.09.2018, 17:37 | Сообщение # 4
Рядовой
Группа: Модераторы
Сообщений: 2
Репутация: 0
Статус: Offline
Здравствуйте, Тимур, подскажите, пожалуйста.
У меня два вопроса, касающихся нижеприведённого цикла.

1. FOR i=1 TO 14
2.     x=INT(RND(1)*(16-i)+i)
3.     b=A(i)
4.     A(i)=A(x)
5.     A(x)=b
6. NEXT i

Первый вопрос: по какой причине в четвёртой строчке выражение "А(х)" является значением массива, а уже в следующей строчке то же самое выражение является индексом массива А? Это зависит от того, в какой части находится данное выражение? По типу если слева от "=", то это индекс массива, а если справа, то его значение?

И второй вопрос: никак не могу понять, как получается, что данный алгоритм заполняет массив в итоге случайными числами без повторения?
 
TimurARДата: Четверг, 06.09.2018, 22:30 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 10
Репутация: -1
Статус: Offline
Хотел вчера ответить, но интернет вырубился.
 
TimurARДата: Четверг, 06.09.2018, 22:52 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 10
Репутация: -1
Статус: Offline
Алгоритм взят из примера решения задач 1 глава, 20 параграф, задача б). Вообще данный алгоритм я взял из одной старой советской книжки для военных. Он предназначался для ручного перемешивания карточек с числами.
Вот достаточно полный код:
1 Dim ch(15)
2 For i=1 to 15
3     ch(i)=i
4 Next i
5 For i=1 to 14
6     x=Int(Rnd(1)*(16-i)+i)
7     b=ch(i)
8     ch(i)=ch(x)
9     ch(x)=b
10 Next i
11 For i=1 to 15
12     print "ch(";i;")=";ch(i)
13 Next i
Сперва со 2 по 4 строчку заполняем массив числами по порядку.
Далее следует обратить внимание на группу строк с 7 по 9, это обмен значениями между двумя членами массива ch(i) и ch(x) через буферную переменную  "b". Сперва сохраняем значение хранящееся в  ch(i) в переменную  "b", затем в ch(i) кладем значение из ch(x), и потом в ch(x) кладем старое значение ch(i) которое у нас находится в "b".
Вся соль перемешивания заключается в 6 строке. Это формула генерирует случайное число из постоянно меняющегося диапазона. следующим образом:
Для ch(1) выбирается пара для обмена значениями из диапазона от 1 до 15
Для ch(2) выбирается пара уже из диапазона от 2 до 15
Для ch(3) выбирается пара из диапазона от 3 до 15
и т.д.
В результате, массив заполненный числами по порядку, оказывается перемешанным за один проход.
По поводу конкретно вопроса: в пятой строчке переменная A(x) - не индекс массива, а ячейка массива в которую кладем значение (в данном случае из переменной "b"), а в четвертой строке мы из переменной A(x) кладем значение в переменную A(i). Индексом у них являются переменные "i" и "x".
 
Форум » Liberty Basic » Обсуждение команд и операторов » Базовые команды и операторы (Обсуждаем и задаем вопросы о Liberty Basic)
  • Страница 1 из 1
  • 1
Поиск:

Вход на сайт
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • База знаний uCoz