PDA

View Full Version : اشکال در تابع



دلفی در قلب من
یک شنبه 10 آذر 1387, 13:49 عصر
بنظر شما کجای این برنامه اشکال داره که result نهایی را به خارج از تابع ارسال نمی کنه و به صفر بجای آن قرار میده.

function calcul(bedeh : Real):Integer;
var x:Integer;
begin
if (((50000)<(bedeh))and((bedeh)<(500000)))then
x:= 2 ;
if ((500000< bedeh)and(bedeh<1000000)) then
x:=3 ;
if ((1000000<bedeh)and(bedeh<1500000)) then
x:=4 ;
Result:=x;
end

mafazel
یک شنبه 10 آذر 1387, 15:13 عصر
پارامتری که به تابع میدید یا کمتر از 50.000 هست یا بیشتر از 1.500.000 یا عددی برابر با یکی از اعداد 50.000 ، 500.000 ، 1.000.000 ، 1.500.000 . (در شرط ها تون برابری رو چک نکردید.) ضمنا حتما کامپایلر این تذکر رو بهتون میده که ممکنه x مقدار نگیره (حالتی که هیچکدوم از شرطها درست نشن).

دلفی در قلب من
دوشنبه 11 آذر 1387, 10:31 صبح
با تشکر از پاسخ شما ولی مشکل من اینه که حتی موقعی که یکی از شرطها درست باشد و x هم مقدار درستی بگیرد در نهایت باز هم result برابر با x قرار نمی دهد.و صفر به خارج تابع ارسال می کنه

mafazel
دوشنبه 11 آذر 1387, 11:24 صبح
تابع هیچ مشکلی نداره. اگر عددی که به تابع می فرستید توی یکی از رنجها باشه مثلا 70000 توی شرط اول، جواب حتما درست بر میگرده. شاید مشکل از نحوه فراخوانی تابع و استفاده از عدد برگشتی آن است. بهر حال مشکل از تابع نیست.

Hamid.Kad
دوشنبه 11 آذر 1387, 12:53 عصر
دوست عزيز فكر كنم مشكل شما بخاطر استفاده از result هست كه بايد يه راهنماي كامپايلر رو فعال كنيد(الان $؟+يادم نيست چه حرفي بود دسترسي به دلفي هم ندارم:( ) بجاي Result بنويسيد: Calcul:= x
اميدوارم مشكلتون حل باشه

vcldeveloper
دوشنبه 11 آذر 1387, 18:09 عصر
فكر كنم مشكل شما بخاطر استفاده از result هست كه بايد يه راهنماي كامپايلر رو فعال كنيد
استفاده از Result مشکلی نداره.

البته در اون کد اصلا تعریف X هم بی معنی هست، بجای اینکه در هر شرط به X مقدار داده بشه، و در نهایت Result := X بشه، می تونستید در شرط ها به Result مقدار بدید، و کلا X را حذف کنید. در ضمن، برای اینکه هر سه شرط اجرا نشند، باید بینشان else هم اضافه کنید، چون در هر بار فراخوانی تابع، فقط یکی از سه شرط میتونه درست باشه، نه هر سه با هم، پس خروجی یا 1 هست، یا 2، یا 3.