ورود

View Full Version : مبتدی: کمک فوری:|



U_s_e_r
شنبه 13 اردیبهشت 1399, 02:19 صبح
سلام وقتتون بخیر
یه سوالی دارم ک برای بعضی از قسمت هاش نیاز به راهنمایی دارم:
برنامهای بنویسید که هر بار یک عدد مثبت و صحیح از ورودی بخواند و در متغیر n ذخیره نموده و موارد زیر را انجام دهد:
) تعداد داده ها 20 است(
 اگر n زوج بود مجموع فاکتوریل ارقام n را محاسبه و در متغیر �𝑗� دخیره نماید. سپس n و �𝑗� را به همراه پیام
مناسب چاپ کند.
 اگر n فرد بود یک عدد جدید اعشاری در متغیر f بسازد بطوریکه بخش صحیح f از ارقام زوج n و بخش اعشار آن
از ارقام فرد n ساخته شده باشد. سپس n و f را به همراه پیام مناسب چاپ نماید.
به مثال زیر توجه کنید :
اگر 3402=n باشد
𝑗𝑓 = 2! + 0! + 4! + 3! = 2 + 1 + 24 + 6 = 33
اگر 65273=n باشد عدد اعشاری f به صورت زیر است :
𝑓 = 26.573
دقیقا برای قسمت(( فرد)) هیچ ایده ای ندارم.
تشکر میکنم ک وقت میزاری واسه خوندنش.

farhad_shiri_ex
چهارشنبه 24 اردیبهشت 1399, 12:36 عصر
دقیقا برای قسمت(( فرد)) هیچ ایده ای ندارم.


ابتدا عدد را به رشته تبدیل کنید، بعد هر عدد که در یک بایت رشته ای هست را به عدد تبدیل کنید و مقایسه کنید که ببنید عدد زوج هست یا فرد بعد از این مرحله اعداد زوج و فرد را که اکستراکت کردید را مجددا در یک رشته دیگه به ترتیبی که گفتید ذخیره کنید و درانتها رشته را به یک عدد اعشاری تبدیل کنید
البته برنامه ساده ای در زبان سی میشه نوشت، ولی اگر بخواهید با اسمبلی باشه یکم کارتون سختتره اگر نخواهید از ماکروها و api ها استفاده کنید باید خودتون عدد را به رشته تبدیل کنید و باقی سناریو

مثلا یک همچنین کدی را میتونید در اسمبلی بنویسید برای تبدیل عدد به رشته (البته از حلقه و دستورات جدید استفاده نکردم برای اینکه بهتر متوجه بشید که چه کاری انجام شده)

num dd 65273
strnum db dup(0)


lea ax , [data]
mov ds , ax
mov es , ax

mov ax , [num]
mov bx , 10000d
div bx
mov word ptr [strnum+0] , ax
mul bx
mov cx , ax

mov bx , [num]
sub bx , ax
mov ax , bx
mov bx , 1000d
div bx
mov word ptr [strnum+1] , ax
mul bx

add cx , ax

mov bx , [num]
sub bx , cx
mov ax , bx
mov bx , 100d
div bx
mov word ptr [strnum+2] , ax
mul bx


add cx , ax


mov bx , [num]
sub bx , cx
mov ax , bx
mov bx , 10d
div bx
mov word ptr [strnum+3] , ax
mul bx


add cx , ax


mov bx , [num]
sub bx , cx
mov word ptr [strnum+4] , bx



بنابراین اعداد در آرایه strnum اکستراکت شده، وبه راحتی بهشون دسترسی دارید فقط کافی که هر عضو آرایه را به عدد تبدیل کنید

strnum={'6','5','2','7','3'}