خرد کردن
تعداد دفعات ممکن خرد کردن اسکناس 2000 ریالی بکمک سکه های 50 ؛ 100 و 250 ریالی به شرط اینکه از هر سکه حداقل یکی باشد .
Cls
K = 0
For P = 1 To 33
For S = 1 To 17
For D = 1 To 7
Let sum = P * 50 + S * 100 + d * 250
If Sum = 2000 Then k = k + 1
Next D , s , p
Print K
End
برنامه بیسیک
شما به ورودی این برنامه جمله ای درجه اول وارد می کنید که داخل آن فقط عبارت های جمع و تفریق وجود دارد پس از اجرای برنامه مقدار متغیر ها از شما خواسته می شود و در انتها جواب نوشته خواهد شد
!!!! لطفا عبارت های خود را با حرف کوچک وارد کنید !!!!
مثال :
X+2-X+Z-20 ورودی برنامه
X = ? 10
Z = ? 4 درخواست های برنامه
?? - خروجی برنامه
CLS
INPUT a
($n = LEN(a
OPTION BASE 0
(DIM a$(n + 1), a(n + 1), t(n
FOR i = 1 TO n
( a$(i) = MID$(a$, i, 1
(( a(i) = ASC(a$(i
NEXT i
FOR i = 1 TO n
IF a(i) > 96 AND a(i) < 123 THEN
(( q = INSTR(sum$, a$(i
( sum$ = sum$ + a$(i
g = g + 1
IF q = 0 THEN
; " = ";( PRINT a$(i
( INPUT t(g
ELSE
( t(g) = t(q
END IF
IF a$(i - 1) = "-" THEN
( sum = sum - t(g
ELSE
( sum = sum + t(g
END IF
END IF
IF a(i) > 47 AND a(i) < 58 THEN
( z = i: s$ = a$(i
DO
z = z + 1
IF a(z) < 48 OR a(z) > 57 THEN EXIT DO
( s$ = s$ + a$(z
LOOP
IF a$(i - 1) = "-" THEN
($ sum = sum - VAL(s
ELSE
($ sum = sum + VAL(s
END IF
i = z - 1
END IF
NEXT i
PRINT sum
END
qbasic
شماره ی روز از کل سال را گرفته و خروجی آن این است که معلوم می کند چندمین روز و چندمین ماه سال است
مثال
ورودی 241
خروجی ماه هشتم و روز 25
در انتها عبارت q را پاک کنید
CLS : o = 31 q
INPUT "enter days ( 1 - 365 ) : ", n q
FOR i = 1 TO 11 q
IF n <= o THEN EXIT FOR q
n = n - o q
IF i = 6 THEN o = 30 q
NEXT i q
PRINT "month = "; i, "day = "; n q
END
بدون استفاده از سه تابع رشته ای زیر سه کارکتر اول رشته ی ورودی را چاپ کند
(( mid , Right , Left ))
در انتهای عبارت های زیر q را پاک کنید
CLS
INPUT a$ q
FOR i = 1 TO 3 q
FOR j = 1 TO 255 q
b$ = CHR$(j) q
n = INSTR(i, a$, b$) q
IF n = i THEN PRINT b$; : EXIT FOR q
NEXT j, i q
END q
مربع جادویی
به ورودی این برنامه طول ضلع مربع را میدهیم البته باید عددی فرد باشد
مثلا ما عدد سه را وارد می کنیم خروجی ان برنامه یک مربع سه در سه خواهد بود که اعداد داخل خانه ها را هرگونه جمع کنید یک عدد ثابتی می شود
CLS
c = 1
INPUT n
OPTION BASE 0
DIM a(n + 1, n + 1)
IF n MOD 2 = 0 THEN END
b = n 2 + 1
a(c, b) = 1
FOR i = 2 TO n ^ 2
c = c - 1: b = b + 1
IF a(c, b) = 0 THEN
IF c = 0 THEN k = c: c = n
IF b = n + 1 THEN
q = b: b = 1
END IF
IF a(c, b) > 0 THEN c = k + 2: b = q - 1
ELSE
c = c + 2
b = b - 1
END IF
a(c, b) = i
NEXT i
FOR i = 1 TO n
FOR j = 1 TO n
PRINT USING "####"; a(i, j);
NEXT
PRINT
PRINT
NEXT
END
چند برنامه ی ساده ی بیسیک
مثال 1 : برنامه ای بنویسید که اعداد یک تا ده را چاپ کند سپس مقابل هریک ریشه چهارم آن را نمایش دهد .
CLS
FOR i = 1 TO 10
( ( PRINT i ; " " ; SQR ( SQR( i
NEXT i
END
توضیح : به منظور ایجاد فاصله بین عدد و ریشه چهارمش از یک رشته خالی به طول 20 کاراکتر استفاده شده است . می توانستید به جای اینکه 20 بار space را فشار دهید از تابعی که به همین منظور آماده شده ، استفاده کنید : تابع (SPC(a به تعداد مشخص شده ( a تا ) فضای خالی ایجاد می کند . در این صورت خط سوم برنامه به این صورت در می آمد که صحیح تر و بهتر است :
( ( PRINT i ; SPC (20) ; SQR ( SQR( i
=================================================
مثال 2 : برنامه ای بنویسید که کلیه مقسوم علیه های یک عدد ورودی را محاسبه و چاپ کند .
CLS
INPUT "Enter a number" , num
FOR i = 1 TO num
IF INT( num / i ) = num / i THEN PRINT i
NEXT i
END
توضیح : این بار این مسئله را با استفاده از تابع ( )INT حل کردیم . اگر num بر i بخشپذیر باشد ، پس حاصل num/i یک عدد صحیح است و جزءصحیح آن با خودش برابر است .
=================================================
مثال 3 : برنامه ای را بنویسید که جدول مقادیر مثلثاتی زوایای 1 تا 90 را نمایش دهد .
CLS
CONST pi = 3.1415
"PRINT "Degree" ; SPC(3) ; "Sin" ; SPC(3) ; "Cos" ; SPC(3) ; "Tan" ; SPC(3) ; "Cot
PRINT
FOR i = 1 TO 90
;( PRINT i ; SPC(3
rad = i * pi / 180
( PRINT SIN(rad); SPC(3); COS(rad); SPC(3); TAN(rad); SPC(3); 1/Tan(rad
NEXT i
END
=================================================
مثال 4 : برنامه ای بنویسید که یک رشته را دریافت کرده و حروف آن را معکوس کرده ، نمایش دهد .
CLS
$INPUT "Enter a string : " , test
" " = $reverse
( $FOR i = 1 TO LEN ( test
( temp$ = MID$ ( test$ , i , 1
$ reverse$ = temp$ + reverse
NEXT i
$PRINT "Reverse of string : " ; reverse
END
=================================================
مثال 5 : برنامه ای بنویسید که یک رشته را از ورودی دریافت کرده و تمام فاصله های آن را (جاهای خالی رشته) به ستاره تبدیل کند .
$INPUT a
" " = $b
($FOR i = 1 TO LEN (a
( temp$=MID$ ( a$ , i , 1
"*"=$IF temp$ = " " THEN temp
$b$ = b$ + temp
NEXT i
$PRINT b
END
=================================================
مثال 6 : برنامه ای بنویسید که یک رشته اصلی را دریافت کند و یک رشته که درون آن موجود است را دریافت کرده و به رشته ای دیگر تغییر دهد . مثلا رشته "This is a test" را به عنوان رشته اصلی دریافت کند . سپس به جای حروف "s" حرف "V" را چاپ کند . یعنی خروجی باید به صورت "ThiV iV a tevt" باشد .
$INPUT "Enter the mail string ", mainstr
$INPUT "What string do you want to replace it ?",oldstr
$INPUT "What is new string ?",newstr
INPUT "Enter start position : "start
DO
($pos=INSTR(start,mainstr$,oldstr
IF pos<>0 THEN
(Leftstr$=LEFT$(mainstr$,pos-1
($Rightstr$=RIGHT$(mainstr$,pos+LEN(oldstr
$mainstr$=Leftstr$+newstr$+Rightstr
ENDIF
LOOP WHILE pos<>0
" :PRINT "New main string is
$PRINT mainstr
END
=================================================
مثال 7 : برنامه ای بنویسید که یک عدد را دریافت کند و تعداد رقم های آن را چاپ کند .
INPUT "Type a number ranging from 1 to 7 digits ",num
( ( a = LEN ( STR$ ( num
"PRINT "You typed a "; a ; "digit number
END
=================================================
مثال 8 : برنامه ای بنویسید که یک عدد را در مبنای 2 دریافت کرده و معادل آن را در مبنای ده نمایش دهد .
INPUT "Enter a binary number ",numbin
(numbin$ = MID$ (STR ( numbin ) , 1
sum = 0
pow = 0
FOR i = LEN ( numbin$ ) TO 1 STEP -1
( abit$ = MID$ ( numbin$ , i , 1
IF VAL ( abit$ ) > 1 THEN
"!PRINT "Error in number
sum = 0
EXIT FOR
ENDIF
sum = sum + VAL ( abit$ ) * 2^pow
pow = pow + 1
NEXT i
PRINT "Decimal form is : " ; sum
END
=================================================
مثال 9 : برنامه ای بنویسید که نام و نمره دانش آموزان را بگیرد و در آرایه ذخیره کند . سپس امکان جستجو را به این ترتیب برای کاربر فراهم کند که با دریافت نام دانش آموز ، نمره وی را نمایش دهد . برنامه را طوری بنویسید که case sensitive نباشد . ( نسبت به بزرگی و کوچکی حروف حساس نباشد )
INPUT "How many students are there ?" , n
(DIM name$(n
(DIM grade(n
count = 1
DO WHILE count <= n
PRINT "Enter name of student " ; count
( INPUT name$( count
PRINT "Enter grade of student " ; count
( INPUT grade ( count
count = count + 1
LOOP
FOR i = 1 TO n : name$ ( i ) = UCASE ( name$ ( i ) ) : NEXT i
$INPUT "Enter name of student to see her/his grade " , a
FOR i = 1 TO n
( IF name$(i)=UCASE$(a$) THEN PRINT name$(i)" 's grade is : " ; grade (i
NEXT i
END
=================================================
مثال ?? : برنامه ای بنویسید که دو رشته را دریافت کرده و تمام محل های وجود رشته دوم را در رشته اول بررسی کرده و نشان دهد .
CLS
$INPUT "Enter the main string " , main
$INPUT "What string is you want to search it ? " , search
DO
($location = INSTR (location+1 , main$ , search
IF location = 0 THEN EXIT DO
PRINT " Location : " ; location
LOOP
END
=================================================
?-
REM This program can show the name of colors
CLS
%INPUT "Enter a number from 1 to 6 " , a
%SELECT CASE a
CASE 1
" PRINT " Black
CASE 2
" PRINT " Red
CASE 3
" PRINT " Green
CASE 4
" PRINT " Blue
CASE 5
" PRINT " Orange
CASE 6
" PRINT " Brown
CASE ELSE
" PRINT " Invalid number
END SELECT
END
=================================================
?-
CLS
%INPUT "Enter a number ( >=0 )",num
count = 1
fact = 1
IF num% >= 0 THEN
% DO WHILE count <= num
fact = fact * count
count = count +1
LOOP
PRINT num% ; "! =" ; fact
ELSE
" PRINT " Invaid number
END IF
END
توضیح : برنامه دارای متغیری به نام count است که حکم شمارنده ای را دارد که از مقدار ? شروع می شود و تا زمانی که به عدد ورودی کاربر برسد ، هربار در عدد قبلی خود ضرب شده و در متغیری به نام fact قرار می گیرد . سپس یک واحد به آن اضافه شده و دوباره در عدد قبلی ضرب می شود . به این ترتیب حاصلضرب اعداد از ? تا n ) n عدد ورودی کاربر است ) محاسبه شده که همان فاکتوریل است . به دستور PRINT قبل از ELSE دقت کنید . این دستور از سه قسمت تشکیل شده است . دو قسمت عددی و یک قسمت رشته ای به این ترتیب که ابتدا عدد ورودی کاربر نمایش داده می شود . سپس علامت فاکتوریل (!) روبه روی عدد قرار می گیرد .آنگاه با چاپ علامت مساوی (=) فاکتوریل عدد در مقابل مساوی چاپ می شود . برای مثال اگر عدد ورودی کاربر ? باشد ، از آنجا که 0>1 یک عبارت نادرست است ، حلقه DO WHILE اجرا نمی شود و دستور بعدی که همان دستور PRINT است اجرا شده و با توجه به اینکه مقدار fact تغییری نکرده است ، خروجی به فرم زیر خواهد بود :
1 = ! 0
=================================================
?-
REM This program can calculate (1+2+3+..+n)^2
INPUT "Enter the last number (n) " , n
sum = 0
FOR i = 1 TO n
sum = sum + i
NEXT i
PRINT "Answer is : ";sum^2
END
دنباله ی فیبوناتچی
CLS
F1 = 1: F2 = 1
INPUT A
FOR I = 1 TO A
PRINT F1;
F3 = F1 + F2
F1 = F2: F2 = F3
NEXT I
بر عکس مثلث خیام پاسکال
DECLARE FUNCTION fact! (n!)
CLS
INPUT l
l = l - 1
FOR k = 2 * l TO 0 STEP -1
b = ABS(k - l)
FOR u = 1 TO ABS(k - l)
PRINT " ";
NEXT
FOR i = ABS(k - l) TO l STEP 2
PRINT USING "###"; fact(i) / (fact(b) * fact(i - b));
PRINT " ";
b = b + 1
NEXT i
PRINT
PRINT
NEXT k
FUNCTION fact (n)
s = 1
FOR r = 1 TO n
s = s * r
NEXT
fact = s
END FUNCTION
آیا می توانید در یک صفحه ی شطرنج هشت وزیر بگنجانید که نتوانند همدیگر را بگیرند
این برنامه تمام حالات را چک می کند و تمام حالات ممکن را چاپ می کند
DIM a(1 TO 8) AS INTEGER
CLS
arzesh = 0
PRINT "vazir"
FOR a = 1 TO 8
a(1) = a
FOR b = 1 TO 8
a(2) = b
FOR i = 1 TO 1
FOR j = 1 TO 2
IF i = j THEN j = j + 1
arzesh = (ABS(i - j) = ABS(a(i) - a(j))) OR (a(i) = a(j))
IF arzesh = -1 THEN EXIT FOR
NEXT j
IF arzesh = -1 THEN EXIT FOR
NEXT i
FOR c = 1 TO 8
IF arzesh <> 0 THEN
arzesh = 0
EXIT FOR
END IF
a(3) = c
FOR i = 1 TO 2
FOR j = 1 TO 3
IF i = j THEN j = j + 1
arzesh = (ABS(i - j) = ABS(a(i) - a(j))) OR (a(i) = a(j))
IF arzesh = -1 THEN EXIT FOR
NEXT j
IF arzesh = -1 THEN EXIT FOR
NEXT i
FOR d = 1 TO 8
IF arzesh <> 0 THEN
arzesh = 0
EXIT FOR
END IF
a(4) = d
FOR i = 1 TO 3
FOR j = 1 TO 4
IF i = j THEN j = j + 1
arzesh = (ABS(i - j) = ABS(a(i) - a(j))) OR (a(i) = a(j))
IF arzesh = -1 THEN EXIT FOR
NEXT j
IF arzesh = -1 THEN EXIT FOR
NEXT i
FOR e = 1 TO 8
IF arzesh <> 0 THEN
arzesh = 0
EXIT FOR
END IF
a(5) = e
FOR i = 1 TO 4
FOR j = 1 TO 5
IF i = j THEN j = j + 1
arzesh = (ABS(i - j) = ABS(a(i) - a(j))) OR (a(i) = a(j))
IF arzesh = -1 THEN EXIT FOR
NEXT j
IF arzesh = -1 THEN EXIT FOR
NEXT i
FOR f = 1 TO 8
IF arzesh <> 0 THEN
arzesh = 0
EXIT FOR
END IF
a(6) = f
FOR i = 1 TO 5
FOR j = 1 TO 6
IF i = j THEN j = j + 1
arzesh = (ABS(i - j) = ABS(a(i) - a(j))) OR (a(i) = a(j))
IF arzesh = -1 THEN EXIT FOR
NEXT j
IF arzesh = -1 THEN EXIT FOR
NEXT i
FOR g = 1 TO 8
a(7) = g
IF arzesh <> 0 THEN
arzesh = 0
EXIT FOR
END IF
FOR i = 1 TO 6
FOR j = 1 TO 7
IF i = j THEN j = j + 1
arzesh = (ABS(i - j) = ABS(a(i) - a(j))) OR (a(i) = a(j))
IF arzesh = -1 THEN EXIT FOR
NEXT j
IF arzesh = -1 THEN EXIT FOR
NEXT i
FOR h = 1 TO 8
IF arzesh <> 0 THEN
arzesh = 0
EXIT FOR
END IF
a(8) = h
'FOR s = 1 TO 8
' PRINT a(s);
'NEXT
' PRINT
FOR i = 1 TO 7
FOR j = 1 TO 8
IF i = j THEN j = j + 1
IF j = 9 THEN EXIT FOR
arzesh = (ABS(i - j) = ABS(a(i) - a(j))) OR (a(i) = a(j))
IF arzesh = -1 THEN EXIT FOR
NEXT j
IF arzesh = -1 THEN EXIT FOR
NEXT i
IF arzesh = 0 THEN
x = x + 1
PRINT
PRINT
PRINT
PRINT x,
FOR v = 1 TO 8
PRINT a(v);
NEXT
mnb$ = INPUT$(1)
ELSE
arzesh = 0
END IF
NEXT h
NEXT g
NEXT f
NEXT e
NEXT d
NEXT c
NEXT b
NEXT a
END
بدست آوردن فاکتوریل های بزرگ تا 500 فاکتوریل
CLS
DIM k(1 TO 2000) AS INTEGER
DIM p(1 TO 2000) AS INTEGER
INPUT n
k(1) = 1
FOR a = 1 TO n
b = a
FOR i = 1 TO 2000
p(i) = k(i): k(i) = 0
NEXT i
w = 0
DO
m = b MOD 10: b = b 10
FOR u = 1 TO 1990
s = k(u + w) + (m * p(u))
k(u + w) = s MOD 10
k(u + w + 1) = k(u + w + 1) + s 10
NEXT
w = w + 1
LOOP UNTIL b = 0
NEXT a
f = 0: h = 2000
DO
IF k(h) <> 0 THEN f = 1
IF f = 1 THEN PRINT USING "#"; k(h);
h = h - 1
LOOP UNTIL h = 0