عنوان پروژه :
برنامه ۱۰ عدد از کاربر بگیرد و ماکزیمم و مینیمم و نزدیک ترین عدد به میانگین را نمایش دهد :
توضیحات :
ابتدا می بایست ۱۰ عدد از کاربر دریافت کنیم :
برای هر عدد ما باید عدد را به صورت یک رشته کاراکتر دریافت کنیم و با توسط تابع زیر مقدار عددی آن رشته را محاسبه نماییم ! فرض شده است که اعداد کوچکتر از ۶۵۵۳۵ هستند که در دو بایت جا بگیرند!
برای ذخیره سازی این ۱۰ عدد از یک آرایه ۱۰ عضوی استفاده کرده ایم :
NUM DW 10 DUP(?) ; ARRAY OF 10 NUMBER
ابتدا عدد را به صورت رشته از کاربر میگیریم ، حال کافیست رشته را به تابع زیر بدهیم تا مقدار عددی آن را در خانه آرایه ذخیره کند ! برای دخیره سازی ۱۰ عدد از یک حلقه استفاده می کنیم و در ثبات سی ایکس مقدار ۱۰ را میریزیم که حلقه ۱۰ بار تکرار شود و با اشاره گر دی آی یا اس آی روی آرایه حرکت می کنیم.
پس از ذخیره سازی مقدار عددی ۱۰ عدد در آرایه ، حال می بایست ماکزیمم و مینیمم رو از طریق پیمایش آرایه توسط ثبات اشاره گر بیابیم!
CALL MAXFINDER
CALL MINFINDER
در ماکزیمم ، ابتدا عنصر اول آرایه را به عنوان ماکزیمم در نظر می گیریم و اط طریق حلقه در ۹ خانه باقیمانده آرایه پیمایش انجام میدهیم ، و توسط دستور مقایسه محتوای خانه آرایه اندیس و ماکزیمم رو مقایسه می کنیم و در صورتی که از ماکزیمم بزرگتر بود مقدار ماکزیمم را با آن عوض می نماییم
به همین ترتیب برای مینیمم
برای محاسبه ی کمترین فاصله از میانگین ابتدا باید حاصل جمع را محاسبه نماییم و بر ۱۰ تقسیم نماییم!
پس ابتدا روی کل آرایه ۱۰ عضوی خود پیمایش می کنیم و حاصل جمع تمام خانه ها را به دست می آوریم و در متغیر سام می ریزیم
در تقسیم سام بر ۱۰ دو بایتی باید توجه کنیم که سام دو بایتی است و باید ابتدا توسط دستور زیر در ۴ بایت ذخیره شود و سپس تقسیم شود ، حال خارج قسمت در ثبات آ ایکس و باقیمانده در دی ایکس دخیره می شود !
Mov Ax,Sum
CWD ; Sum now is in DX:AX
پس از محاسبه میانگین باید در تابع دیف فایندر فاصله تک تک عناصر آرایه از مقدار میانگین را توسط دستور ساب بدست آوریم ! دقت کنید که اگر عدد ما از میانگین کوچکتر باشد حاصل تفریق منفی می شود و بنابراین آن را توسط ضرب علامت دار در -۱ ضرب می نماییم تا مقدار قدر مطلق فاصله را بدست آوریم ، در هر مرحله مقدار تفریق را با مینیمم فاصله از میانگین مقایسه می نماییم و اگر کوچکتر بود ، مینیمم را با مقدار جدید جایگزین می نماییم، ضمنا آدرس حافظه عنصری که کمترین فاصله از میانگین را دارد را نیز دخیره می نماییم تا در انتها چاپ نماییم
نکته : برای چاپ یک رشته روی صفحه به صورت زیر عمل می نماییم :
تعریف رشته در دیتا سگمنت :
MSG1 DB ‘ENTER 10 NUMBERS(NUMBER<65535)’,’$’
چاپ رشته در کد سگمت :
MOV AH,09H
LEA DX,MSG1
INT ۲۱H
نکته : برای گرفتن یک رشته از کاربر به صورت زیر عمل می نماییم :
تعریف رشته در دیتا سگمنت :
M1 LABEL BYTE
MAXL1 DB ۵ ; maximum length of string
ACL1 DB ?
ST1 DB ۵ DUP(‘ ‘) ; ST1 IS FOR GETTING NUMBER IN STRING < 32765
دریافت رشته در کد سگمت :
MOV AH,0AH
LEA DX,M1
INT 21H
قیمت سورس به همراه پشتیبانی فنی : توافقی
میشه پروژه بفرستید به ایمیلم لازم دارم خواهش میکنم
سلام
خیلی ممنون از سایتتون.خیلی کمکم کرد.
برنامه ای رو میخواستم ک یک جمله از ورودی دریافت کند وحروف اول کلمات رو به حروف بزرگ تبدیل کند.ممنون میشم اگ برام ایمیل کنید.
باتشکر
برنامه ای بنویسید که در یک ارایه صد عدد را دریافت کند و میانکین و مینیمم و ماکسیمم را به صورت صعودی در خروجی نشان دهد در زبان اسمبلی تو رو خدا سریع جواب بدید