РЕШАЕМ ДИСКРЕМЕНАНТ НА QBASIC:
Привет! Сегодня мы будемработать с Qbasic’ом. Это очень старый язык программирования, ипоэтому я не стану говорить тебе, что эта статья для тебя важна и что без нее тыне станешь программером! Но в принципе будет совсем не плохо (по крайней мере,я так думаю) если ты все же прочтешь ее! QВasic это среда программирования, без визуальнойразработки (О УЖАС !!! воскликнешь ты…) , без графических возможностей (рисовать можно только линии, круги,квадраты), использовать же нарисованные картинки, или DirectX нельзя, без API… Но благодаря этой статье ты сможешь понятьсуть программирования, написания алгоритма, решения различных задач. Напримеробыденных школьных (очень нудных) примеров, задач, расчетов… Среду разработки ты можешь скачать с моегосайта (смотри в разделе «ПРОГРАММЫ») со справкой на русском языке, также ты тамнайдешь русификатор клавы. К сожалению, работающего компилятора я не нашел ипоэтому в *.ехе’шку перевести неполучится, и прога будет работать только из среды разработки.
Итак, сейчас мы начнем писатьпрограмму. Но для начала вспомним, как находится дискременант. Его общая формула:
Теперьвспомним, как найти корни дискременанта. Тут есть некое правило:
Ø ЕслиD>0
Ø ЕслиD=0
Ø ЕслиD<0
КОРНЕЙНЕТ!!!
Все, надеюсь ты теперь вспомнил что такое ДИСКРЕМИНАНТ. Начнем рассчитыватьалгоритм нашей программы. Что же должна она делать? (Тут я объясню все попунктам…) Ах, да, чуть не забыл,программа написанная на Qbasic’e работает последовательно, строка за строкой, (т. е. в приложениинет ни кнопок, ни полей ввода, ни меток, программа лишь просит ввести значениеи выводит на экран результат…).
Итак, пишем алгоритм (это самоеинтересное):
ü Программавыводит на экран свое название (это очень красиво, и я решил не отказываться оттакого удовольствия)
ü Программапоследовательно просит ввести пользователя значение a,b, и с переменных (это входныеданные нашей программы)
ü Программа находит дискременант и проверяет(оператором If… Then … ElseIf, такжеможно использовать Select Case) его значение, как описановыше. Если D>0 находит Х1 и Х2, если D=0 находит Х, ну и если D<0 ничего не делает, лишьвыводит строку «Корней нет!!!»
ü Вконце программы размещаем код который спрашивает, продолжить ли программу, иливыйти (как это сделать я расскажу ниже, пока скажу только что мы будемиспользовать оператор безусловного перехода GoTo)
Алгоритм решения (работы) нашей программы построен. Осталосьнаписать программный код, что не очень сложно.
Объявим переменные нашей программы.
DIM a ASDOUBLE
DIM b AS DOUBLE
DIMc AS DOUBLE
DIMD AS DOUBLE
DIMx1 AS DOUBLE
DIMx2 AS DOUBLE
DIMz AS STRING
Объяснять значение каждой переменной я не стану, т.к их названиясами говорять за себя. Скажу только, что переменная z нам понадобится для возврата кначалу программы. С этого момента мы и начнем. В начале программы переходим ковторой метке, в которой и содержится наша программа, а в конце мы лишь спросим,продолжить ли программу, и если пользователь согласится, перейдем опять же ко 2метке (хитро придумано? J)
GOTO 2
2:
CLS’очищаем экран, от предыдущихзаписей
PRINT “Программадля решения квадратных уравнений!”
Далее мы должны попросить упользователя значение переменных a, b и с. Для этого в Qbasic’eесть оператор INPUT ”Подсказка”, переменная, вкоторую записывается значение. Проверять на правильность ввода не стоит (я имеюввиду если пользователь введет строковое значение), ошибки не будет так как Qbasic выведетстроку Redo From Start, и повторно попросит ввестизначение в переменную. И потом, этой программой, скорее всего будешьпользоваться только ты, а сам программер в свою прогу ошибочных значений невведет в отличии от юзвера, для которого 12 все равно что двенадцать, а тем более«12». Ну ладно мы и так достаточно отвлеклись от дела.
INPUT “Введитезначение a: ” , a
INPUT ”Введитезначение b: ” , b
INPUT ”Введитезначение c: ” , c
Теперь считаем дискременант:
D=(b*b)-(4*a*c)
Далее мы должны проанализироватьзначение D и соответственно, найти корни. После чеговывести значение дискременанта и корней на экран. Для этого мы будемиспользовать оператор IF…Then…ElseIf…:
IF D>0THEN
x1=(b+SQR(D))/(2*a)
x2=(b-SQR(D))/(2*a)
PRINT “Дискременант = ”,D
PRINT “Корень ном.1 = ”,x1
PRINT ”Корень ном.2 = ”,x2
ELSEIF D=0 THEN
x1=b/(2*a)
PRINT “Дискременант = ”,D
PRINT “Корень = ”,x1
PRINT “корень ном.1 = корню ном.2”
ELSEIF D<0 THEN
PRINT ”Дискременант = ”,D
PRINT “Корнейнет!!!”
END IF
Большая часть программы уженаписана, осталось написать ту часть которая отвечает за продолжение программы.Для этого мы будем использовать опять же оператор IF…Then…Else (т.к у нас только один переход).Мы будем просить у пользователя ввести Y/N, если он введет Y топрограмма продолжится, если N– выход изпрограммы J.Но тут есть один подводный камень, для Qbasic’a важен регистр, т.е если пользователь введет вместо Y – y, программа его не поймет. Но неотчаивайся, для таких целей есть логический оператор OR (логическое ИЛИ), им мы ивоспользуемся в нашей программе.
INPUT “Продолжить(Y/N)?”, z
IFz = “Y” OR z = “y” THEN
GOTO 2’ переходим в начало программы
ELSE
END
ENDIF
Все программа закончена.Исходник здесь (*BAS файл). Надеюсь что тебепонравилось, и ты не напрасно провел время у экрана. Если тебе понравилось, тынаписал чтото сам (на Qbasic’e, VisualBasic’e, Pascal’e, Delphi) шли мне на мыло (если конечно не жалко) ashdan87@mail.ru также заходи на мой сайт http://worldvb.narod.ru .
Пока!
Удачи тебе!