Как сделать цикл в qbasic
Данная конструкция (цикл) будет выполнена 10 раз
и на экран будет выведено как изменяется переменная-счетчик.
а как сделать по умному, раз знаешь? в задаче следующее значение увеличивается на 5% от предыдущего и так 40 раз. Нужно найти сумму всех этих чисел.
По-умному тут вообще цикл не нужен. Это сумма геометрической прогрессии, стандартная формула
input "a";a : print a=a*(1-1.05^40)/(1-1.05)
Вот и вся программа.
А по-глупому через цикл
input "a";a : for i=1 to 40 : c=c+a : a=a*1.05 : next : print c
В предыдущей главе, мы говорили относительно циклов DO. LOOP, которые позволяют повторять действие некоторое количество раз. Окончание цикла при уловии:
Все, что вы должны сделать - написать, DO WHILE. или UNTIL..[какое-либо условие].
В переводе с английского это бы звучало так:
ДЕЛАЙТЕ какое - либо ДЕЙТСТИЕ ДО ТОГО КАК ПРОИЗОЙДЁТ [какое-либо условие]
Обязательна команда LOOP, чтобы закончить цикл.
Есть очень простой пример из того, как использовать этот цикл:
DO UNTIL a = 10
try = try + 1
PRINT "Попробуйте номер"; try
PRINT
PRINT "Наберите секретный номер!"
INPUT "Введите"; a
LOOP
Это бы значило что цикл продолжался до набора числа 10. Эта команда очень простая,
но бесконечно полезная.
Отличие этого цикла от команды INPUT - не нужно нажимать клавишу "ENTER" после ввода числа.
Сейчас программисты стремятся придерживаться этого в своих программах,
а именно, в местах где написано "нажмите любую клавишу".
Функция INKEY$ - требует немедленного нажатия на любую клавишу…
Вы можете "вставлять" эти команды в вашу программу.
DO WHILE INKEY$ = ""
PRINT "Нажмите любую клавишу. Для окончания цикла. "
LOOP
И это бы значило, то что, цикл бы не прекратился пока бы вы не нажали любую клавишу.
Функцию можно использовать в:
Меню "вызывающей клавиши" INPUT(Как горючую клавишу).
Однако, это требует конструкцию, подобную IF. THEN.
Изучим, теперь, новый набор команд - SELECT CASE. END SELECT,
что позволяет вам устанавливать связку IF. THEN,
вместо сотен отдельных функций в вашей программе будут операторы SELECT CASE. END SELECT.
Это также позволит вам иметь многократные команды в переменной CASE.
Вот простой пример:
PRINT " Главное меню "
PRINT "1) Окончание программы"
PRINT "2) Сюрприз"
PRINT
INPUT "Ваш выбор"; chc
SELECT CASE chc
CASE 1
PRINT "Хорошо неправда ли!"
END
CASE 2
PRINT "СЮРПРИЗ. "
PRINT "Вы были удивленны. А?"
END
CASE ELSE 'обратите сюда внимание
PRINT "Почему вы выбрали 1 а не 2?" 'команда, которая позволяет вам END
END SELECT' захватывать недопустимые ответы (CASE ELSE)
Все, что вы должны сделать для работы программы - выбрать один из 2-ух разделов переменной "chc". Когда вы выберите раздел, ваша программа будет выполнятся.
Если же вы не выбираете, то программа стоит на месте. Интересное место программы там,
где я использовал оператор CASE ELSE. Например, если вы не выбрали 1 то этот оператор позволяет выполнять программу под остальными цифрами т.е. в нашем случае под цифрой 2.
Выбор должен обязательно начинаться с оператора CASE SELCET,
а заканчиваться оператором END SELECT.
Изучим следующий полезный пункт - как делать случайные числа в QBASIC.
Очень простой способ сделать это, можно сделать с помощью команд LET, INT, и RND.
Имеется простой пример этого:
x = INT (RND * 10) + 1
Это бы присвоило переменной "x" между число 1 и 10. Получить номер
Между 0 и 10, а не 1 и 10 можно избавившись " + 1 " в конце строки.
Это все, что вы должны знать, чтобы сделать генерацию случайных чисел:
INT - округляет дробное число до целого.
RND - задаёт случайные числа
Теперь, перейдём к командам файла. Это обязательно должно быть изучено!
Для открытия файлов используется команда OPEN, чтобы закрыть файл команда CLOSE.
Файл должен обязательно закрываться, иначе ваша программа не будет работать!
Чтобы открыть файл, используют команду OPEN таким образом:
Вы должны использовать LINE INPUT, чтобы читать полную строку в файле.
Например:
Это читало бы полную строку из файла в переменную "s$". Только заново
элемент, при использовании OUTPUT, это стирает то, что находится в файле.
Четвертая глава на этом заканчивается. Вот задание:
1.Сделать программу в которой нужно сгенерировать случайное число между 1 и 20.
Дать играющему 5 шансов, и после того, как вы ввели число,
программа должна сообщать высоко или низко введённое вами число.
FOR, ТО, STEP, NEXT
Введем переменную i, называемую счетчиком цикла, присвоим
ей значение 1 и подставим в строку 45 для выделения первого
45 IF CODE R$(i) 57 THEN GO TO 100
Конструкция, подобная построенному нами циклу, настолько
часто применяется в программировании, что для ее организации в
Бейсик введены специальные операторы FOR и NEXT. С их по-
мощью наш цикл запишется следующим образом:
40 FOR i=1 ТО LEN R$
45 IF CODE R$(i) 57 THEN GO TO 100
Следом за ключевым словом FOR следует операция присвоения
переменной i. начального значения — эквивалент LET i=1. После
знака равенства может стоять числовое выражение. Переменная,
использующаяся в цикле FOR. NEXT в качестве счетчика, носит
специальное название — управляющая переменная цикла. Это обыч-
ная числовая переменная, но с единственным ограничением: ее
имя должно состоять из одной буквы.
За ключевым словом ТО указывается конечное значение перемен-
ной цикла (число либо числовое выражение). Сравнение перемен-
ной цикла и предельного значения осуществляет оператор NEXT,
который ставится в конце цикла с указанной вслед за ним управ-
ляющей переменной. Строка с NEXT i аналогична прежним строкам
В нашем примере переменная цикла с каждым проходом уве-
личивается на 1, но значение шага цикла можно варьировать, введя
ключевое слово STEP и указав за ним значение, на которое следует
увеличивать переменную цикла при выполнении оператора NEXT.
Строку 40 можно записать и так:
40 FOR i=1 ТО LEN R$ STEP 1
5 REM Программа пересчета рублей в доллары
10 INPUT "Текущий курс (руб. за 1$): "; LINE К$
13 IF LEN К$=0 THEN GO ТО 10
15 FOR i=1 TO LEN K$
20 IF CODE K$(i) 57 THEN LET N=10: GO TO 100
25 NEXT i
30 LET Kurs=VAL K$
33 PRINT AT 0,1; "Текущий курс: "; Kurs; " рублей за 1$"
34 PRINT AT 15, 0; "Для окончания работы введите 0"
35 INPUT "Сумма (руб.): "; LINE R$
37 IF LEN R$=0 THEN GO TO 35
40 FOR i=1 TO LEN R$
45 IF CODE R$(i) 57 THEN LET N=10: GO TO 100
50 NEXT i
60 LET Rub=VAL R$
65 IF Rub=0 THEN STOP
70,LET Dol=INT(Rub/Kurs*100+0.5)/100: REM Расчет
75 PRINT AT 1, 1; Rub; " руб. - ";"$"; Dol:"
80 GO TO 35
100 PRINT AT 10, 0;"Извините. Вы ошиблись в наборе."
103 PRINT AT 10, 0;"
105 GO TO N
Вот теперь компьютер прервет выполнение программы только
тогдаг когда мы введем сумму 0 руб. (либо оператор STOP). При
ошибочном вводе компьютер извинится и предложит повторить
набор.
Пауза
В строке 101 программы использован оператор PAUSE. Он при-
останавливает выполнение программы. Длительность паузы зада-
ется параметром оператора в 1/50 долях секунды. Оператор
PAUSE 0 задает бесконечную паузу. Прервать паузу можно и рань-
ше установленного срока, нажав любую клавишу.
Опрос клавиатуры
Есть еще одна возможность сделать нашу программу более при-
ятной в общении. При выходе из программы принято запрашивать
подтверждение желания пользователя закончить работу. Ведь воз-
можна ситуация, когда на запрос случайно будет введен ноль.
Программа прервется, хотя мы этого и не хотели.
Без предисловий напишем
необходимый нам фрагмент
программы:
120 PRINT AT 10f 5; "Вы действительно хотите закончить работу? Y/N
(Да/Нет)"
140 IF INKEY$="" THEN GO TO 140
145 IF INKEY$="Y" OR INKEY$="y" THEN STOP
150 CLS: GO TO 5
программа останавливается. По любой другой клавише осуществ-
ляется переход к началу программы.
Никогда нелишне украсить программу одной-двумя музыкаль-
ными фразами.
В течение одной секунды мы
будем слышать звук с частотой,
соответствующей ноте ДО пер-
вой октавы. Меняя первое чис-
ло, можно регулировать про-
должительность звучания ноты
(значение задается в секундах).
Второе число определяет высо-
ту звука: увеличение числа на
1 соответствует переходу на
пол тона выше, уменьшение на
1 — на пол тона ниже. Для
поднятия ноты на октаву ко
второму параметру ВЕЕР следу-
ет прибавить 12.
Указанный принцип отсчета параметра ВЕЕР не точен: высоты
нот при его использовании не будут совпадать /с принятыми в
музыке. Чтобы не травмировать слух окружающих, необходимо
использовать более точные параметры. На рис. 4 приведено точное
соответствие значений второго параметра оператора ВЕЕР нотам
первой октавы.
Для проигрывания мелодии, естественно, нужно написать про-
граммку, состоящую из последовательности ВЕЕР. Вот как, к приме-
до ре ми фа соль ля си до
(0) (2.039) (3.86) (4.98) (7.02) (8.84) (10.88) (12)
Рис. 4. Точные параметры ВЕЕР для средней октавы.
10 ВЕЕР 0.15,7.02: ВЕЕР 0.15,8.84: ВЕЕР 0.15,10.88
20 ВЕЕР 0.15,7.02: ВЕЕР 0.15,10.88: ВЕЕР 0.75,8.84
30 ВЕЕР 0.15,8.84: ВЕЕР 0.15,8.84: ВЕЕР 0.15,10.88
40 ВЕЕР 0.3,10.88: ВЕЕР 0.6,7.02
Конечно, мы не стали бы занимать место под эту примитивней-
шую программу, если бы не задались целью показать, как ее
можно модифицировать с помощью какого-нибудь, еще не изучен-
ного нами средства.
1. Наверное этот вопрос уже часто здесь задавали, но всё таки как сделать задержку менее чем на 1 мс?
2. Как сделать чтоб цикл выполнялся менее 1 мс?
3. В тексте моей программы насчитывается более 1500 строк и она не хочет компилироваться в EXE (когда сокращаю да 1200 строк, то всё работает). Можно что-нибудь сделать с этим?
4. Опять же, после того как моя программа стала столь огромной иногда глючит звук (должен быстро пикнуть, а он гудит целую секунду). Почему так.
5. Напоследок - есть ли способ поставить фоновую музыку (чтоб программа работала, а музон пиликал)?
Как сделать, чтоб при загрузке выполнялся код?
Нужно чтоб при загрузке UserForm1 у меня сразу выполнялся код. Как это сделать? (VBA)
Как сделать, чтоб PHP код выполнялся всегда (без кэша) ?
Вечер добрый. Вопрос вот в чем - есть php-файл. В нем скрипт с массивом разных фраз, одна из.
Как сделать так, чтобы цикл выполнялся определенное количество раз в Pascal?
Нужно сделать так, чтобы пользователь ввел какое-то число и цикл выполнился такое число раз.
Как сделать через оператор whilе так, чтобы цикл выполнялся до нажатия клавиши
Как сделать через оператор whilе так чтоб цыкл выполнялся до тех пор пока пользователь не нажмут У
Решение
1. Наверное этот вопрос уже часто здесь задавали, но всё таки как сделать задержку менее чем на 1 мс?
2. Как сделать чтоб цикл выполнялся менее 1 мс?
3. В тексте моей программы насчитывается более 1500 строк и она не хочет компилироваться в EXE (когда сокращаю да 1200 строк, то всё работает). Можно что-нибудь сделать с этим?
4. Опять же, после того как моя программа стала столь огромной иногда глючит звук (должен быстро пикнуть, а он гудит целую секунду). Почему так.
5. Напоследок - есть ли способ поставить фоновую музыку (чтоб программа работала, а музон пиликал)?
в зависимости от размера n она может составлять любое разумное количество мс
2. Сколько времени выполняется цикл - зависит от количества и сложности команд в цикле.
если у вас цикл
не выполнится вообще
3. всё зависит от типа компилятора, а они могут быть разными.
Что это за программа в 1500 строк?
4. надо смотреть программу. в опциях языка есть длина звука. если, конечно, это не beep
5. не надо требовать от языка для начинающих профессиональных опций. Хотите наворотов - учите VisualBasic
Блин, забыл сказать, что FOR. NEXT не подходит - на разных компах цикл прогоняется с разной скоростью, а мне надо через таймер. Вот на одном форуме подсказали, но я в этом не разобрался
В Бейсике, насколько я помню, имеются функции для работы с памятью по конкретным адресам. Так вот. По адресу $0000:$046C можно прочитать 4-байтовое значение, обозначающее количество времени, прошедшего с момента запуска системы, кажется. Факт в том, что если снять это значение 2 раза, а потом найти разность - получим затраченное время. Для перевода в секунды надо разделить на 18.2, т.е. каждые 1/18.2 секунды этот счётчик автоматически увеличивается на 1.
Вот а когда игру свою выложил так сразу набежали обсирать, а помочь только модер пришёл. Критиковать легко, а по делу сказать нечего (только что goto много и по этому программа примитивная и страшная). Молодцы, удружили!
Вот а когда игру свою выложил так сразу набежали обсирать, а помочь только модер пришёл. Критиковать легко, а по делу сказать нечего (только что goto много и по этому программа примитивная и страшная). Молодцы, удружили!
Я для начала посоветовал бы вам научиться себя вести и выражаться без непечатных выражений, в противном случае карточка вам гарантирована. Помощь - это не когда хвалят, а когда учат. Советую вам это запомнить.
1. Наверное этот вопрос уже часто здесь задавали, но всё таки как сделать задержку менее чем на 1 мс?
В винде для этого есть пара API функций QueryPerformanceFrequency и QueryPerformanceCounter, но QB не способен работать с API!
Эти API функции позволяют достаточно точно выдерживать интервалы времени, меньше 1 мс не зависимо от быстродействия компа.
4. Опять же, после того как моя программа стала столь огромной иногда глючит звук (должен быстро пикнуть, а он гудит целую секунду). Почему так??
Может быть из-за ошибки в программме, а может быть из-за того, что DOS прога запускается под виндой!
В винде для этого есть пара API функций QueryPerformanceFrequency и QueryPerformanceCounter, но QB не способен работать с API!
Эти API функции позволяют достаточно точно выдерживать интервалы времени, меньше 1 мс не зависимо от быстродействия компа.
В Бейсике, насколько я помню, имеются функции для работы с памятью по конкретным адресам. Так вот. По адресу $0000:$046C можно прочитать 4-байтовое значение, обозначающее количество времени, прошедшего с момента запуска системы, кажется. Факт в том, что если снять это значение 2 раза, а потом найти разность - получим затраченное время. Для перевода в секунды надо разделить на 18.2, т.е. каждые 1/18.2 секунды этот счётчик автоматически увеличивается на 1.
Имелся в виду бейсик под винду, который умеет работать с API.
Вот к примеру, процедура, которая формерует микросекундные задержки
to GordonG ,
имейте ввиду, что господин PB прославился у нас на форуме тем, что суёт во все дырки непопулярную версию бейсика PureBasic. Видимо, плохи у него дела, раз приходится навязывать его каждому пользователю.
Да я лишь пишу о том, что под виндой это можно сделать и всё.
PS.
Давайте на этот раз без холивара!
имейте ввиду, что господин PB прославился у нас на форуме тем, что суёт во все дырки непопулярную версию бейсика PureBasic. Видимо, плохи у него дела, раз приходится навязывать его каждому пользователю.
Ты не хихикай, а прислушайся к советам!
PS
Бегемот прославился тем, что всем советует, бейсик-динозавр не начто не способный под виндой, и не признаёт того, что современные бейсики ненамного сложнее этого динозавра, но обладают в 1000 раз большими возможностями!
Читайте также: