PDA

View Full Version : مبتدی: چاپ کردن ستاره در صفحه نمایش



vistacali
یک شنبه 17 اردیبهشت 1391, 09:59 صبح
سلام دوستان من یک برنامه نوشتم که شکل زیر را چاپ میکند


*
**
***
****


data segment
Nl db 0ah,0dh,'$'
i db ?
j db ?
ends

code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax

; add your code here

mov i,1
f1: cmp i,7
je ef1


mov j,1
f2: mov al,i
cmp j,al
je ef2

mov ah,02h
mov dl,'*'
int 21h

inc j
jmp f2

ef2:
mov ah,09h
lea dx,NL
int 21h

inc i
jmp f1

ef1:

mov ax, 4c00h
int 21h
ends
end start



حالا میخوام اینو به این طریق هم چاپ کنم

*
***
*****
*******

میدونم باید یک حلقه دیگه بزارم بالای حلقه چاپ * ولی حالا موندم اول حلقه کاراکتر اسپیس رو چاک کنم و برم سراغ ستاره یا ستاره و اسپیس اگر کمی توضیح بدید من چکار کنم توی این کد ممنون میشم :گیج:

ssbostan
یک شنبه 17 اردیبهشت 1391, 20:51 عصر
سلام، كدي كه نياز داري به اين روشي كه نوشتم قابل پياده سازي هست:



mov di, 11
mov si, -1
mov cx, 10
do_1:
mov cx, di
dec di
do_sp:
cmp di, 0
jz exit
mov ah, 02h
mov dl, ' '
int 21h
loop do_sp
push cx
add si, 2
mov cx, si
do_2:
mov ah, 02h
mov dl, '*'
int 21h
loop do_2
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
pop cx
loop do_1

exit:


اگر نياز به توضيح داره بگو...

موفق باشيد.

vistacali
دوشنبه 18 اردیبهشت 1391, 01:27 صبح
تشکر دوست گرامی اگر یک توضیح کوچولو هم بدی ممنون میشوم

MostafaMohammadi
دوشنبه 18 اردیبهشت 1391, 21:19 عصر
به مثال زیر دقت کن:


86791


شکل چاپ شدن گل‌های ستاره‌‌ای توی این مسئله شبیه یک هرم می مونه. اگه تعداد خطوط شکل رو ارتفاع این هرم در نظر بگیری، می بینی:
توی خط صفرم به تعداد Height - 1 کاراکتر خط‌فاصله چاپ شده و یک کاراکتر گل ستاره ای و مکان نما به خط بعد رفته،
توی خط اول به تعداد Height - 2 کاراکتر خط فاصله چاپ شده و دو تا کاراکتر گل ستاره ای و مکان نما به خط بعد رفته،
توی خط دوم به تعداد Height - 3 کاراکتر خط فاصله چاپ شده و سه تا کاراکتر گل ستاره ای و مکان نما به خط بعد رفته،
توی خط سوم به تعداد Height - 4 کاراکتر خط فاصله چاپ شده و چهار تا کاراکتر گل ستاره ای و مکان نما به خط بعد رفته.

الگوریتمی که من برای این مسئله بلدم با الگوریتمی که شما استفاده کردی فرق داره ولی الگوریتم بدی نیست:


86790

laveran
شنبه 06 خرداد 1391, 00:44 صبح
اگه بخواهیم برای همین برنامه ورودی تعریف کنیم چیکار باید بکنیم؟؟ مثلا اگه عدد5 را وارد کنیم ستاره ها در 5 سطر چاپ بشن

ssbostan
شنبه 06 خرداد 1391, 09:15 صبح
سلام؛
كدي كه در پست بالا نوشتم رو نگاه كنيد...
مقدار ورودي كاربر در cx و يك مقدار بيشتر از اون در di و يك نمونه هم به اين صورت:





mov ah, 01h
int 21h

sub al, 30h
mov cx, 0
mov cl, al
mov di, cx
inc di

mov ah, 09h
lea dx, ent
int 21h

mov si, -1
do_1:
mov cx, di
dec di
do_sp:
cmp di, 0
jz exit
mov ah, 02h
mov dl, ' '
int 21h
loop do_sp
push cx
add si, 2
mov cx, si
do_2:
mov ah, 02h
mov dl, '*'
int 21h
loop do_2
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
pop cx
loop do_1

exit:

mov ax, 4c00h
int 21h


ent db 13, 10, 24h



موفق باشيد.

Mo-Resa
شنبه 21 دی 1392, 20:02 عصر
سلام مثلث بالا را برعکس میخوام با گرفتن عدد چاپ کنه چطوری میشه این کاررا انجام داد؟