Примеры готовых программ на QBasic. В них используется текстовая, графическая и звуковая информация. Отличное предложение начинающему программисту в QBasic.
Графика Программа рисует простой рисунок с дорогой:
Code
CLS SCREEN 12 CIRCLE (320, 200), 50, 14 PAINT (320, 200), 14 LINE (0, 300)-(640, 300), 2 PAINT (0, 422), 2 LINE (0, 370)-(640, 370), 3 LINE (0, 400)-(640, 400), 3 PAINT (100, 380), 3 LINE (0, 301)-(640, 301), 9 PAINT (0, 200), 9 CIRCLE (320, 200), 50, 14 PAINT (320, 200), 14 LINE (0, 385)-(640, 385), 15 LINE (100, 370)-(100, 360), 15 CIRCLE (100, 355), 5, 4 CIRCLE (100, 355), 4, 15 CIRCLE (100, 355), 3, 15 CIRCLE (100, 355), 6, 4 CIRCLE (100, 355), 2, 15 CIRCLE (100, 355), 1, 15 LINE (101, 370)-(101, 360), 0 LINE (101, 370)-(96, 375), 0 CIRCLE (96, 380), 5, 0 PAINT (96, 380), 0 LINE (150, 375)-(200, 350), 4, BF LINE (201, 375)-(220, 355), 1, BF LINE (208, 370)-(213, 365), 15, BF CIRCLE (155, 375), 4, 0 CIRCLE (200, 375), 4, 0 CIRCLE (217, 375), 4, 0 PAINT (155, 375), 0 PAINT (200, 375), 0 PAINT (217, 375), 0
"Ликующая блоха":
Code
CLS SCREEN 9 COLOR 9, 1 DRAW "C2 L20 U20 R20 D20 F10 D10 R2" DRAW "BM300, 175 C2 G10 D10 L2" DRAW "BM300, 155 C2 H10 E10 L2" DRAW "BM320, 155 C2 E10 H10 R2" DRAW "BM310, 155 C2 U4" DRAW "BM307, 151 C2 R10 H6 G6" PAINT (310, 170), 2, 2 BYTES = INT((55 * 2 + 7) / 8) * 60 DIM BUG(BYTES) GET (285, 135)-(340, 195), BUG CLS PUT (250, 80), BUG: SLEEP 1 PLAY " A A" PUT (250, 80), BUG: SLEEP 1 PLAY " B B" PUT (30, 60), BUG: SLEEP 1 PLAY " C C" PUT (30, 60), BUG: SLEEP 1 PLAY "D D" PUT (460, 130), BUG: SLEEP 1 PLAY "E E" PUT (460, 130), BUG: SLEEP 1 PLAY "F F" PUT (180, 70), BUG: SLEEP 1 PLAY "G G" PUT (180, 70), BUG: SLEEP 1 PLAY "D D" PLAY "F F" PUT (300, 70), BUG: SLEEP 1 END
Графики Cos(x) и Sin(x):
Code
SCREEN 12 VIEW (20, 150)-(620, 250) WINDOW (-6.28, 1)-(6.28, -1) LINE (-6.28, 0)-(6.28, 0), 14 LINE (0, -1)-(0, 1), 14 LOCATE 14, 60 PRINT "pi" LOCATE 14, 40 PRINT "0" LOCATE 14, 20 PRINT "-pi" LOCATE 14, 30 PRINT "-pi/2" LOCATE 14, 50 PRINT "pi/2" FOR x = -6.28 TO 6.28 STEP .005 PSET (x, SIN(x)), 10 PSET (x, COS(x)), 3 NEXT x LOCATE 15, 4 COLOR 3 PRINT "y = cos (x)" LOCATE 17, 26 COLOR 10 PRINT "y = sin (x)"
Красивые цифровые часы:
Code
DECLARE SUB MakeBmp (NameBmp$) DECLARE SUB Prepare () ' Процедуры печати DECLARE SUB DrawChar (x%, y%, Ch%, Poz%, Mshtb!) DECLARE SUB DrawClock (xDr%, yDr%, Tm$, Mashtab!) ' Массивы CONST DataDL = 228 DIM SHARED Sizes%(1 TO 7), Sost%(9, 1 TO 7), i%, k% DIM SHARED X1%(1 TO 7, 1 TO 6), X2%(1 TO 7, 1 TO 6) DIM SHARED Y1%(1 TO 7, 1 TO 6), Y2%(1 TO 7, 1 TO 6) DIM SHARED PZx%(1 TO 7), PZy%(1 TO 7) ' Paint zone - зона закраски SCREEN 12 ' 640x480x16цв. Prepare ' Читаем размерности FOR i% = 1 TO 7 READ Sizes%(i%) NEXT ' Читаем координаты FOR i% = 1 TO 7 zx% = 0: zy% = 0 FOR k% = 1 TO Sizes%(i%) READ X1%(i%, k%), Y1%(i%, k%), X2%(i%, k%), Y2%(i%, k%) zx% = zx% + X1%(i%, k%) + X2%(i%, k%) zy% = zy% + Y1%(i%, k%) + Y2%(i%, k%) NEXT PZx%(i%) = zx% / (Sizes%(i%) * 2): PZy%(i%) = zy% / (Sizes%(i%) * 2) NEXT ' Читаем состояния i% = 0 DO: READ k% IF k% = -1 THEN i% = i% + 1 ELSE IF k% <> -2 THEN Sost%(i%, k%) = 1 END IF LOOP UNTIL k% = -2
DO: Kb$ = INKEY$ G! = TIMER: WHILE G! + .5 < TIMER: WEND DrawClock 100, 250, TIME$, 4 IF INT(TIMER * 2) AND 1 THEN LINE (215, 220)-(225, 230), 2, BF LINE (215, 270)-(225, 280), 2, BF LINE (394, 220)-(404, 230), 2, BF LINE (394, 270)-(404, 280), 2, BF ELSE LINE (215, 220)-(225, 230), 4, BF LINE (215, 270)-(225, 280), 4, BF LINE (394, 220)-(404, 230), 4, BF LINE (394, 270)-(404, 280), 4, BF END IF IF Kb$ = CHR$(32) THEN MakeBmp "Clock" LOOP UNTIL Kb$ = CHR$(27)
END ' Размеры DATA 5, 6, 5, 6, 5, 6, 5 ' 1 > Левый верх DATA -105,-196,-114,-187 DATA -105,-196,-57,-148 DATA -114,-187,-114,-3 DATA -57,-148,-57,-40 DATA -114,-3,-57,-40 ' 2 > Верх DATA -93,-208,-102,-199 DATA -102,-199,-54,-151 DATA -93,-208, 93,-208 DATA -54,-151, 54,-151 DATA 93,-208, 102,-199 DATA 102,-199, 54,-151 ' 3 > Правый верх DATA 105,-196, 114,-187 DATA 105,-196, 57,-148 DATA 114,-187, 114,-3 DATA 57,-148, 57,-40 DATA 57,-40, 114,-3 ' 4 > Центр DATA -109, 0,-59,-33 DATA -109, 0,-59, 33 DATA -59,-33, 59,-33 DATA -59, 33, 59, 33 DATA 59,-33, 109, 0 DATA 109, 0, 59, 33 ' 5 > Левый низ DATA -114, 3,-57, 40 DATA -114, 3,-114, 187 DATA -57, 40,-57, 148 DATA -114, 187,-105, 196 DATA -57, 148,-105, 196 ' 6 > Низ DATA -102, 199,-54, 151 DATA -102, 199,-93, 208 DATA -54, 151, 54, 151 DATA -93, 208, 93, 208 DATA 54, 151, 102, 199 DATA 102, 199, 93, 208 ' 7 > Правый низ DATA 114, 3, 57, 40 DATA 57, 40, 57, 148 DATA 114, 3, 114, 187 DATA 57, 148, 105, 196 DATA 114, 187, 105, 196 ' Состояния DATA 2, 1, 3, 5, 7, 6, -1 DATA 3, 7, -1 DATA 2, 3, 4, 5, 6, -1 DATA 2, 3, 4, 7, 6, -1 DATA 1, 4, 3, 7, -1 DATA 2, 1, 4, 7, 6, -1 DATA 2, 1, 4, 5, 7, 6, -1 DATA 2, 3, 7, -1 DATA 2, 1, 3, 4, 5, 7, 6, -1 DATA 2, 1, 3, 4, 7, 6, -1, -2 ' Заголовок *.BMP* bgdt: DATA 66,77,54,254,0,0,0,0,0,0,54,4,0,0,40,0,0 DATA 0,128,2,0,0,224,1,0,0,1,0,8,0,0,0,0,0,0 DATA 250,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0
SUB DrawChar (x%, y%, Ch%, Poz%, Mshtb!) PCvtL% = 1: PCvtZ% = 2 ' Цвета для присутствующих OCvtL% = 3: OCvtZ% = 4 ' Цвета для отсутствующих
xPls% = ((DataDL / Mshtb!) * 1.05) * Poz% FOR i% = 1 TO 7 ' От 1-го до 7-ми частей IF Sost%(Ch%, i%) = 1 THEN ' Если часть включена, рисуем CvtL% = PCvtL%: CvtZ% = PCvtZ% ELSE CvtL% = OCvtL%: CvtZ% = OCvtZ% END IF FOR k% = 1 TO Sizes%(i%) ' Рисуем все линии x11% = X1%(i%, k%) / Mshtb!: x22% = X2%(i%, k%) / Mshtb! y11% = Y1%(i%, k%) / Mshtb!: y22% = Y2%(i%, k%) / Mshtb! LINE (x11% + xPls% + x%, y11% + y%)-(x22% + xPls% + x%, y22% + y%), CvtL% NEXT PAINT (PZx%(i%) / Mshtb! + xPls% + x%, PZy%(i%) / Mshtb! + y%), CvtZ%, CvtL% NEXT END SUB
SUB DrawClock (xDr%, yDr%, Tm$, Mashtab!) FOR u% = 1 TO LEN(Tm$) Tc% = ASC(MID$(Tm$, u%, 1)) IF Tc% > 47 AND Tc% < 58 THEN DrawChar xDr%, yDr%, Tc% - 48, u% - 1, Mashtab! END IF NEXT END SUB
SUB MakeBmp (NameBmp$) ' Создаём *.BMP* OPEN NameBmp$ + ".Bmp" FOR BINARY AS #3 RESTORE bgdt FOR byte& = 1 TO 54 READ Zglv%: PUT #3, byte&, Zglv% NEXT byte&: byte& = 55 FOR ii% = 0 TO 255 OUT &H3C7, ii%: R% = INP(&H3C9) * 4: G% = INP(&H3C9) * 4: B% = INP(&H3C9) * 4 bt1% = CVI(CHR$(B%) + CHR$(G%)): bt2% = CVI(CHR$(R%) + "№") PUT #3, byte&, bt1%: PUT #3, byte& + 2, bt2% byte& = byte& + 4 NEXT ii% FOR y% = 479 TO 0 STEP -1 FOR x% = 0 TO 639 cve% = POINT(x%, y%) PUT #3, byte&, cve%: byte& = byte& + 1 NEXT x% NEXT y% CLOSE #3 END SUB
SUB Prepare OUT &H3C8, 1 OUT &H3C9, 92 / 4: OUT &H3C9, 93 / 4: OUT &H3C9, 77 / 4 OUT &H3C9, 21 / 4: OUT &H3C9, 26 / 4: OUT &H3C9, 19 / 4 OUT &H3C9, 120 / 4: OUT &H3C9, 124 / 4: OUT &H3C9, 87 / 4 OUT &H3C9, 110 / 4: OUT &H3C9, 118 / 4: OUT &H3C9, 86 / 4 OUT &H3C9, 120 / 4: OUT &H3C9, 124 / 4: OUT &H3C9, 87 / 4 LINE (50, 180)-(590, 320), 5, BF END SUB
Программа построения фракталов:
Code
SCREEN 12 Kc = 15 'количество цветов для фрактала a = 640: b = 480 'размер экрана в пикселах по x и y 'Нужно задавать (менять) значения p,q 'для получения различных рисунков 'p = -.1: q = -1.92 'p = .5: q = -.1 'p = -.5: q = -.9 'p = -.5: q = .9 p = .5: q = 1 100 Xmin = -1.75: Ymin = -1.25 ' миним. коорд. фрактала Xmax = 1.75: Ymax = 1.25 ' максим.коорд. фрактала M = 100 'максимальное расстояние для поиска атрактора dx = (Xmax - Xmin) / (a - 1) 'размер пиксела по оси x dy = (Ymax - Ymin) / (b - 1) 'размер пиксела по оси y FOR Nx = 1 TO a - 1 'цикл сканирования всех пикселов для FOR Ny = 1 TO b - 1 'определения их цвета xk = Xmin + Nx * dx yk = Ymin + Ny * dy k = 0 200 'формулы определения координат атрактора xk1 = xk * xk - yk * yk + p yk1 = 2 * xk * yk + q k = k + 1 'число итер. для данного начального пиксела c = k 'цвет пиксела, соответствующий данному числу 300 r = xk1 * xk1 + yk1 * yk1 'расст.от нач. до кон.точки xk = xk1: yk = yk1 IF r > M THEN c = k: GOTO 400 'условие сходимости IF k = Kc THEN c = 0: GOTO 400 'повторение палитры GOTO 200 400 PSET (Nx, Ny), c NEXT Ny NEXT Nx
Ещё один фрактал - папоротник:
Code
DECLARE SUB MakeBmp (NameBmp$)
CONST Iterations = 1000000
DIM t AS DOUBLE, x AS DOUBLE, y AS DOUBLE, p AS DOUBLE DIM k AS LONG DIM Midx AS INTEGER, Midy AS INTEGER, radius AS INTEGER
ON TIMER(1) GOSUB ShowIter TIMER ON
SCREEN 12 FOR k = 1 TO 15 OUT &H3C8, k IF k < 16 THEN OUT &H3C9, k: OUT &H3C9, 25 + k * 2: OUT &H3C9, 0 ELSE OUT &H3C9, k: OUT &H3C9, 54: OUT &H3C9, 0 END IF NEXT: k = 10 Midx = 320 Midy = 480 radius = .1 * Midy RANDOMIZE TIMER x = 1 y = 0
FOR k = 1 TO Iterations p = RND t = x IF p <= .85 THEN x = .85 * x + .04 * y y = -.04 * t + .85 * y + 1.6 ELSE IF p <= .92 THEN x = .2 * x - .26 * y y = .23 * t + .22 * y + 1.6 ELSE IF p <= .99 THEN x = -.15 * x + .28 * y y = .26 * t + .24 * y + .44 ELSE x = 0 y = .16 * y END IF
END IF END IF PSET (Midx + radius * x, Midy - radius * y), POINT(Midx + radius * x, Midy - radius * y) + 1 NEXT MakeBmp "Paporotn" END ShowIter: LOCATE 1: PRINT "Iterations: "; k: IF INKEY$ <> "" THEN END RETURN bgdt: DATA 66,77,54,254,0,0,0,0,0,0,54,4,0,0,40,0,0 DATA 0,128,2,0,0,224,1,0,0,1,0,8,0,0,0,0,0,0 DATA 250,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0
SUB MakeBmp (NameBmp$) ' Создаём *.BMP* OPEN NameBmp$ + ".Bmp" FOR BINARY AS #3 RESTORE bgdt FOR byte& = 1 TO 54 READ Zglv%: PUT #3, byte&, Zglv% NEXT byte&: byte& = 55 FOR ii% = 0 TO 255 OUT &H3C7, ii%: R% = INP(&H3C9) * 4: G% = INP(&H3C9) * 4: B% = INP(&H3C9) * 4 bt1% = CVI(CHR$(B%) + CHR$(G%)): bt2% = CVI(CHR$(R%) + "№") PUT #3, byte&, bt1%: PUT #3, byte& + 2, bt2% byte& = byte& + 4 NEXT ii% FOR y% = 479 TO 0 STEP -1 FOR x% = 0 TO 639 cve% = POINT(x%, y%) PUT #3, byte&, cve%: byte& = byte& + 1 NEXT x% NEXT y% CLOSE #3 END SUB
CLS N = 15 DIM M(N) SUMM = 0 FOR I = 1 TO N M(I) = INT(RND * 100) PRINT I; "-"; M(I) SUMM = SUMM + M(I) NEXT I PRINT "Среднее арифметическое чисел = "; SUMM/N
Определить минимальный элемент массива:
Code
CLS INPUT "N"; n DIM e(n) FOR i = 1 TO n INPUT e(i) NEXT CLS min1 = e(1) PRINT "Массив:" FOR i = 1 TO n PRINT e(i); IF e(i) < min1 THEN min1 = e(i): min2 = i NEXT PRINT PRINT "Минимальный :"; min1; PRINT "Порядковый номер:"; min2 SWAP e(min2), e(n) PRINT "Новый массив:" FOR i = 1 TO n PRINT e(i); NEXT
Вычисления Программа, определяющая, простое число, или нет:
Code
CLS INPUT "Введите число N=", N IF N <= 3 THEN GOTO 10 d = 2 IF N MOD 2 = 0 THEN GOTO 20 d = 3 FOR i = 1 TO N d = d + 2 IF N MOD d = 0 THEN GOTO 20 IF N <= d * d THEN GOTO 10 NEXT i 10 PRINT "Число N-простое." INPUT "Для продолжения - Enter.", z END 20 PRINT "Число N-составное. Оно делится на"; d INPUT "Для продолжения - Enter.", w END
Определение чётности или нечётности числа:
Code
CLS INPUT "Введите число N=", N IF N MOD 2 THEN PRINT "Число нечётное" ELSE PRINT "Число чётное" END
Работа с мышью Cтандартные ф-ии для работы с мышью:
Code
DECLARE SUB Mouse (ax%, bx%, cx%, dx%)
DECLARE SUB MouseActive (a%) DECLARE SUB MouseReset () DECLARE SUB MouseShowCursor () DECLARE SUB MouseHideCursor () DECLARE SUB MouseBorders (x1%, y1%, x2%, y2%) DECLARE SUB MouseGetStat (b%, x%, y%) DECLARE SUB MouseSetXY (x%, y%) DECLARE SUB MouseSetMickey (x%, y%)
TYPE RegType ax AS INTEGER: bx AS INTEGER: cx AS INTEGER: dx AS INTEGER bp AS INTEGER: si AS INTEGER: di AS INTEGER: f AS INTEGER END TYPE DIM SHARED regs AS RegType
MouseActive a%: IF a% = 0 THEN PRINT "Need a mouse to run!": END MouseReset MouseShowCursor DO MouseGetStat a%, b%, c% LOCATE 1, 1: PRINT a% / 8, b% / 8, c% LOOP UNTIL INKEY$ <> ""
SUB MouseActive (a%) DEF SEG = 0 mseg% = CVI(CHR$(PEEK(207)) + CHR$(PEEK(206))) mofs% = CVI(CHR$(PEEK(205)) + CHR$(PEEK(204))) IF mseg% OR mofs% THEN DEF SEG = mseg% IF PEEK(mofs%) = 207 THEN a% = 0 ELSE a% = -1 ELSE a% = 0 END IF DEF SEG END SUB
SUB MouseBorders (x1%, y1%, x2%, y2%) Mouse 7, 0, x1%, x2% Mouse 8, 9, y1%, y2% END SUB
SUB MouseGetStat (x%, y%, b%) Mouse 3, b%, x%, y% END SUB
SUB MouseHideCursor Mouse 2, 0, 0, 0 END SUB
SUB MouseReset Mouse 0, 0, 0, 0 END SUB
SUB MouseSetMickey (x%, y%) Mouse 15, 0, x%, y% END SUB
SUB MouseSetXY (x%, y%) Mouse 4, 0, x%, y% END SUB
SUB MouseShowCursor Mouse 1, 0, 0, 0 END SUB
Изменение графического курсора мыши:
Code
'
' M e e s e s . B a s from B. Roche
'
' Demonstrates Graphical Mouse Cursors
' Translated over from VBDOS Program
' Make sure to enter Environment with /L for Interrupt Support
' Currently set up to run *AS IS* in QB ..REM/UNREM the appropriate
' spots to use Far Strings ..
' Multiple Versions of some Cursors are given because some look
' Better on White BG, some better on Black BG
DECLARE FUNCTION HaveMouse% () ' Checks to See if Driver Installed
' ' This is an include file to be used with the COMPORT.BAS, PALREAD.BAS, ' and READSCRN.BAS routines. (Put it at the top of your MAIN routine.) ' DECLARE FUNCTION COMREAD$(PORT AS INTEGER,N AS INTEGER,TERMCHR AS INTEGER) DECLARE FUNCTION READSCRN$() ' ' Set up machine code. Various bytes are changed by routines in ' COMPORT.BAS, PALREAD.BAS, or READSCRN.BAS. ' DIM SHARED MCODE(1 TO 10) AS LONG DIM OS AS INTEGER DEF SEG=VARSEG(MCODE(1)) OS=VARPTR(MCODE(1)) POKE OS,&HB8 : POKE OS+1,0 : POKE OS+2,2 'MOV AX,[AHAL] POKE OS+3,&HBB : POKE OS+4,&HFF : POKE OS+5,0 'MOV BX,[BHBL] POKE OS+6,&HB9 : POKE OS+7,0 : POKE OS+8,0 'MOV CX,[CHCL] POKE OS+9,&HBA : POKE OS+10,&HAB : POKE OS+11,&HCD 'MOV DX,[DHDL] POKE OS+12,&H55 'PUSH BP POKE OS+13,&H89 : POKE OS+14,&HE5 'MOV BP,SP POKE OS+15,&HCD : POKE OS+16,&H10 'INT [INT] POKE OS+17,&H8B : POKE OS+18,&H7E : POKE OS+19,6 'MOV DI,[BP+6] POKE OS+20,&H89 : POKE OS+21,&H15 'MOV [DI],DX POKE OS+22,&H8B : POKE OS+23,&H7E : POKE OS+24,8 'MOV DI,[BP+8] POKE OS+25,&H89 : POKE OS+26,&HD 'MOV [DI],CX POKE OS+27,&H8B : POKE OS+28,&H7E : POKE OS+29,&HA 'MOV DI,[BP+A] POKE OS+30,&H89 : POKE OS+31,&H1D 'MOV [DI],BX POKE OS+32,&H8B : POKE OS+33,&H7E : POKE OS+34,&HC 'MOV DI,[BP+C] POKE OS+35,&H89 : POKE OS+36,5 'MOV [DI],AX POKE OS+37,&H5D 'POP BP POKE OS+38,&HCB 'RETF DEF SEG
Инструкция по использованию файлов в коде программы.
Разное "Привет мир!":
Code
PRINT "Hello world!"
Игра "Орёл или решка":
Code
CLS PLAY "A B C " COLOR , 3 PRINT "Введите ваше имя." INPUT name$ CLS PRINT "Здравствуйте,"; name$; " ! " PRINT "Загадайте орла или решку и нажмите <ENTER> для начала игры." SLEEP RANDOMIZE TIMER X = INT(RND(1) * 2) IF X = 0 THEN PRINT "У вас выпала решка" ELSE PRINT "У вас выпал орёл" SLEEP 2 PRINT "До свидания,"; name$; ". Играйте ещё!" PLAY "C B A"
помогите плиз..... решите этот массив - решить уравнение AX=B для десяти пар значений А и В, заданных в виде двух массивов А(10) и В(10). результат поместить в массив Х(10).(при составлении программ учесть, что среди А(I) могут быть нулевые элементы, т.е. исключить деление на ноль)
Здравствуйте, помогите, пожалуйста, составить программу. Задача-Сформулируйте и выведите на экран массив из 9 элементов, каждые три последовательных элемента которого составлены по следующему правилу: 1-й равен квадрату текущего индекса, увеличенному на 5; 2-й равен целой части квадратного корня из предыдущего элемента; 3-й равен целой части от деления двух предыдущих элементов.
Уматные примеры)) Правда почему у вас выводимая информация на экран написана английскими словами по-русски? Я уже давно по-русски пишу. Менять нада нажав одновременно на правый шифт и контрл. А обратно на английский перейти тоже самое только на левые нажимать.