نقل قول: مشکل در برنامه....
با سلام خدمت دوست عزيز.
شما داريد اين برنامه را با ويژال مي نويسيد .
شما يك بار حداقل اين برنامه را بصورت دستي تريس كنيد متوجه مي شويد.
كنار خط اول مين چپ كليك كن سپس F5 را بزن تا اجرا بشه .براي ادامه دادن و رفتن به خط بعدي برنامه هر بار دكمه ي F10 را بزن.
سپس به متغير ها نگاه كن و ببين كجا صفر مي شود.
خودت مشكلش را متوجه مي شوي.
شما كه از ويژال استفاده مي كنيد نبايد همچين اشكالي را بپرسيد.
مطالبي را كه با رنگ آبي مشخص كردم فقط محض ياد آوري بيان كردم هرچند كه مي دانم شما خودتان اين مطالب را بهتر از من مي دانيد.
اميد وارم موفق شوي .
خدانگهدار.
نقل قول: مشکل در برنامه....
اگه اشتباه نكنم بايد اشتباه تو اين خط باشه
mal=(float)(ho - 400000) * (float)(10/100);
و بجاي اون از كد زير استفاده كن ( ساير فرمول ها هم همين طور)
mal=(float)(ho - 400000) * (float)(0.01);
نقل قول: مشکل در برنامه....
راستي توي كد زير يك نكته اي هست كه بعضي وقتا كار دست ادم مي ده
int sho,ho,maxsh,max=0;
اين دستور فقط مقدار متغير max را برابر صفر قرار مي دهد و مقدار سه متغير ديگر مشخص نيست.
نقل قول: مشکل در برنامه....
نقل قول:
نوشته شده توسط
elyascomputer
راستي توي كد زير يك نكته اي هست كه بعضي وقتا كار دست ادم مي ده
int sho,ho,maxsh,max=0;
اين دستور
فقط مقدار متغير max را برابر صفر قرار مي دهد و مقدار سه متغير ديگر
مشخص نيست.
دو تاشون از ورودی مقداردهی میشن و اون یکیشم به صورت انتساب ,و در محاسبه
یا شرطی شرکت نمیکنه که نیاز به مقدار دهی اولیه بشه.....
(ولی در کل باید بر روی این مسائل دقت کرد)
اون مورد هم که شما گفتید درست هست و مشکل برنامه رو حل میکنه:
mal=(float)(ho - 400000) * (float)(0.10);
ولی چرا vC++ با اینکه type casting کردم محاسبه رو باز هم محاسبه
10/100
رو صفر در نظر میگیره؟؟؟؟؟
نقل قول: مشکل در برنامه....
برنامه رو در کامپایلر g++ لینوکس هم کامپایل کردم هیچ تتفاوتی نداشت:
#include <iostream>//compiled with g++ in linux or cygwin compilers
using namespace std;
int main()
{
system("clear");
short int flag=1;
int sho,ho,maxsh,max=0;
float mal=0;
cout<<"please first enter sho than enter ho by a space betwen them\n::";//har bar recorde 6 karmand daryaft khaha shod
while(flag){
if (flag%7==0){
cout<<"\nfor continue press c and for exit press any key:";
if (cin.get()!='c')break;
}
cin>>sho>>ho;
if(ho>=400001 && ho <=500000)
{
mal=(float)(ho - 400000) * (float)(10/100);
cout<<"\n maliyate hoghooghe karmandi ba shomare karmandi:"<<sho<<"="<<mal<<endl;
}
else if(ho>=500001 && ho<=700000)
{
mal=(float)(ho-500000) * (float)(15/100);
cout<<"\n maliyate hoghooghe karmandi ba shomare karmandi:"<<sho<<"="<<mal<<endl;
}
else if(ho>1000000){
mal=(float)(ho-1000000) * (float)(17/100);
cout<<"\n maliyate hoghooghe karmandi ba shomare karmandi:"<<sho<<"="<<mal<<endl;
}
else if(ho<=400000)
cout<<"\nkarmandi ba shomare karmandi:"<<sho<<" moaaf az maliyat mibashad\n";
else cout<<"\nin meghdar az hoghoogh :"<<ho<<" kharej az renje barname mibashad\n";
if(ho>max){
max=ho;
maxsh=sho;
}
flag++;
}//end of while loop
cout<<"\nbishtarin daryafti marboot be karmandi ba shomare:"<<maxsh<<" va hoghooghe:"<<max<<" mibashad";
cin.get();
return 0;
}
مثل اینکه جز ansi C++ هست...
نقل قول: مشکل در برنامه....
نقل قول:
ولی چرا vC++ با اینکه type casting کردم محاسبه رو باز هم محاسبه
وقتی طرفین عملگر تقسیم یک عدد صحیح باشه، تقسیم صحیح انجام میشه نه اعشاری. برای همینه که جواب صفر هست. به vC++ ربطی نداره همه به این شکل عمل میکنن.
نقل قول: مشکل در برنامه....
با سلام خدمت دوست عزيز.
اين طور كه از برنامه ي شما بر مي آيد ، شما در محيط ويژال برنامه ي خود را نوشته ايد.
آن را در توربو اجرا كنيد ببينيد كه آيا باز هم مشكلي دارد يا نه.
من خودم بار ها شده برنامه اي را در ويژال نوشته ام و با ارور يا موارد ديگر روبرو شده ام ، ولي وقتي در توربو اجرا كردم ديدم هيچ مشكلي ندارد.
براي مثال من مدتي پيش براي برنامه ي 8 وزير كد زير را در اول برنامه استفاده كردم و برنامه در ريپ مي افتاد و ... .
نقل قول:
for (i=0;i<=8;i++)
for (j=0;j<=8;j++)
a[i][j]=1;
اين تقريبا همان كد است با كمي تغيير.
من همان برنامه را در توربو اجرا كردم و جواب داد.
جالب تر از همه اين كه من اين كد را در ويژال 2005 اجرا كردم در ريپ افتاد و وقتي در 2008 اجرا كردم فقط اين كد را تا i=1 اجرا مي كرد و سپس از برنامه خارج مي شد.
خدانگهدار.
نقل قول: مشکل در برنامه....
وقتی می خواهید دو عدد را به صورت اعشاری تقیسم کنید باید حد اقل یکی از متغیر ها (یا عدد) را به float یا double تبدیل کنید. در حالی که شما ابتدا تقیسم را انجام می دهید و سپس جواب آن را که صفر هست به float تبدیل می کنید.
پس باید به این شکل بنویسید (به پرانتز دقت کنید):
float y = (float)10/100 ;
به شکل فوق ابتدا 10 به 10.0 تبدیل می شود و سپس تقسیم بر 100 می شود.
به شکل دیگر، کد فوق چیزی مانند کد زیر است:
float y = ( (float) 10) / 100 ;
نقل قول: مشکل در برنامه....
نقل قول:
نوشته شده توسط
Nima_NF
وقتی می خواهید دو عدد را به صورت اعشاری تقیسم کنید باید حد اقل یکی از متغیر ها (یا عدد) را به float یا double تبدیل کنید. در حالی که شما ابتدا تقیسم را انجام می دهید و سپس جواب آن را که صفر هست به float تبدیل می کنید.
پس باید به این شکل بنویسید (به پرانتز دقت کنید):
float y = (float)10/100 ;
به شکل فوق ابتدا 10 به 10.0 تبدیل می شود و سپس تقسیم بر 100 می شود.
به شکل دیگر، کد فوق چیزی مانند کد زیر است:
float y = ( (float) 10) / 100 ;
دقیقا .!!!
من کمی ذهنیتم در مورد عملگر / به پاسکال بود که حاصل تقسیم عددی
به صورت 10/ 100
رو به صورت اعشاری میداد و برای تقسیم صحیح
از عملگر div استفاده میکردیم.