PDA

View Full Version : خطای EInvalidOp



Tarrah
جمعه 29 خرداد 1388, 13:37 عصر
2 تا متغیر از نوع int به نامهای m و n دارم که تو طول برنامه مقداردهی میشن.
وقتی این کد رو می نویسیم خطای EInvalidOp می گیره. در ضمن a از نوع real هست:


a:=m/(n*n)

tdkhakpur
جمعه 29 خرداد 1388, 13:57 عصر
سلام
خوب کامپایلر مستقیما اعلام میکند که قادر به تفسیر این کد شما نیست بصورت زیر استفاده کنید.
a:=m div (n*n);

Tarrah
جمعه 29 خرداد 1388, 22:27 عصر
مگه div فقط خارج قسمت رو نمی ده؟
من کل جواب رو می خوام، یعنی قسمت اعشاری رو هم لازم دارم

tdkhakpur
جمعه 29 خرداد 1388, 22:57 عصر
مگه div فقط خارج قسمت رو نمی ده؟
من کل جواب رو می خوام، یعنی قسمت اعشاری رو هم لازم دارم

سلام خوب شما باید mو n را از نوع float بگیرید در بالا از نوع int تعریف کرده اید
موفق باشید.

Tarrah
شنبه 30 خرداد 1388, 00:05 صبح
اگه اشتباه نکنم div فقط برا integer کار می کنه
اینم help خود Delphi



Binary arithmetic operators
Operator Operation Operand types Result type Example
+ addition integer, real integer, real X + Y
- subtraction integer, real integer, real Result - 1
* multiplication integer, real integer, real P * InterestRate
/ real division integer, real real X / 2
div integer division integer integer Total div UnitSize
mod remainder integer integer Y mod 6

vcldeveloper
شنبه 30 خرداد 1388, 00:49 صبح
div = تقسیم عدد صحیح
/ = تقسیم اعشاری
mod = باقیمانده تقسیم دو عدد صحیح.

Tarrah
شنبه 30 خرداد 1388, 01:06 صبح
آقای کشاورز فرمایش شما متین
حالا این error چیه پس؟

shervin farzin
شنبه 30 خرداد 1388, 07:32 صبح
سلام
بفرماييد كه از كدوم نسخه دلفي استفاده ميكنيد؟
آيا كدي كه نوشتيد داخل يك حلقه استفاده شده ، يا به طور بازگشتي فراخواني ميشه ؟
آيا پيش از اجراء اين كد محاسبه سنگيني داريد ؟
آيا وقتي اين كد رو به تنهايي مي نويسيد باز هم Error رو دريافت ميكنيد ؟
موفق باشيد.

tdkhakpur
شنبه 30 خرداد 1388, 15:12 عصر
سلام
خوب اعدا را از نوع float بگیر.

Tarrah
سه شنبه 02 تیر 1388, 20:19 عصر
از دلفی 7 استفاده می کنم
نه به تنهایی مشکلی نداره
قبلش یه سری محاسبات پیچیده داره

shervin farzin
چهارشنبه 03 تیر 1388, 15:14 عصر
سلام

نه به تنهایی مشکلی نداره
قبلش یه سری محاسبات پیچیده داره
تا جايي كه من ميدونم واحدي در CPU هست به نام (FPU (Floating Point Unit , در اين واحد چندي
Stack وجود داره ( فكر ميكنم 8 تا ) محاسباتي كه با اعداد اعشاري كار ميكنه توسط اين واحد
مديريت ميشه و در حجم بالاي محاسباتي Stack هاي اين واحد پر ميشه و باعث توليد Error
ميشه كه شما فرموديد .
من پيشنهاد ميكنم يا عمليات پيش از كد مورد نظرتون رو بشكنيد به چند بخش كوچكتر يا دنبال
راهي باشيد كه به ترتيبي واحد FPU رو Reset كنيد .
من اين كار رو عملا هيچ وقت انجام ندادم اينه كه فقط هين مقدار مي تونم خدمتتون بگم .
اگر ساير دوستان و اساتيد نظري دارند من هم بحث رو دنبال ميكنم .
موفق باشيد .

vcldeveloper
چهارشنبه 03 تیر 1388, 16:21 عصر
نه به تنهایی مشکلی نداره
قبلش یه سری محاسبات پیچیده داره
باید محاسبات قبل از این کد، چگونگی تعریف متغیرهای استفاده شده، و محل تعریف این متغیرها را مشخص کنید. با یک خط کدی که گذاشتید نمیشه راهنمایی خاصی کرد. یک احتمال این هست که متغیرها را در داخل یک تابع بصورت Local تعریف کردید، و بدون آنکه آنها را مقداردهی اولیه کنید، در محاسبه استفاده کردید.