نمایش نتایج 1 تا 10 از 10

نام تاپیک: مشکل در برنامه....

  1. #1

    مشکل در برنامه....

    سلام ...یه برنامه نوشتم که مالیات کارمندانی که از یک رنج مشخص حقوق دریافت

    مکنند رو بر اساس تعرفه ای مشخص میکنه و بعد هم کارمندی که از همه بیشتر دریافت

    کرده رو به خروجی میبره.....

    من در این برنامه با 2 مشکل مواجه هستم و اول اونی که مهمتر هست رو میگم:

    به کد نگاه کنید:


    #include
    "stdafx.h"//program compiled with vC++‎25 to +
    #include<iostream>
    #include<conio.h>
    usingnamespace std;
    void clrscr();
    int main()
    {
    system(
    "color a");
    shortint 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 (getch()!='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;
    }
    elseif(ho>=500001 && ho<=700000)
    {
    mal=(
    float)(ho-500000) * (float)(15/100);
    cout<<
    "\n maliyate hoghooghe karmandi ba shomare karmandi:"<<sho<<"="<<mal<<endl;
    }
    elseif(ho>1000000){
    mal=(
    float)(ho-1000000) * (float)(17/100);
    cout<<
    "\n maliyate hoghooghe karmandi ba shomare karmandi:"<<sho<<"="<<mal<<endl;
    }
    elseif(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";
    getch();
    return 0;
    }
    //start clrscr function
    void clrscr()
    {
    system(
    "cls");
    }
    /*this program coded by mr.a*
    i hope that you enjoy from it*/



    حالا به یک نمونه از خروجی برنامه نگاه کنید:


    [/COD
    please first enter sho than enter ho by a space betwen them
    ::1 350000 2 450000 3 550000 4 650000 5 750000 6 1000001
    karmandi ba shomare karmandi:1 moaaf az maliyat mibashad
    maliyate hoghooghe karmandi ba shomare karmandi:2=0
    maliyate hoghooghe karmandi ba shomare karmandi:3=0
    maliyate hoghooghe karmandi ba shomare karmandi:4=0
    in meghdar az hoghoogh :750000 kharej az renje barname mibashad
    maliyate hoghooghe karmandi ba shomare karmandi:6=0
    for continue press c and for exit press any key:
    bishtarin daryafti marboot be karmandi ba shomare:6 va hoghooghe:1000001 mibashad


    چرا مقدار مالیات رو حساب نمیکنه؟؟؟؟ و فقط صفر میده

    حالا خودم هم دارم کد دوباره با دقت مطالعه میکنم ...

  2. #2
    کاربر دائمی آواتار SamaPic
    تاریخ عضویت
    مهر 1387
    محل زندگی
    مشهد مقدس
    پست
    329

    نقل قول: مشکل در برنامه....

    با سلام خدمت دوست عزيز.
    شما داريد اين برنامه را با ويژال مي نويسيد .
    شما يك بار حداقل اين برنامه را بصورت دستي تريس كنيد متوجه مي شويد.
    كنار خط اول مين چپ كليك كن سپس F5 را بزن تا اجرا بشه .براي ادامه دادن و رفتن به خط بعدي برنامه هر بار دكمه ي F10 را بزن.
    سپس به متغير ها نگاه كن و ببين كجا صفر مي شود.
    خودت مشكلش را متوجه مي شوي.
    شما كه از ويژال استفاده مي كنيد نبايد همچين اشكالي را بپرسيد.

    مطالبي را كه با رنگ آبي مشخص كردم فقط محض ياد آوري بيان كردم هرچند كه مي دانم شما خودتان اين مطالب را بهتر از من مي دانيد.
    اميد وارم موفق شوي .
    خدانگهدار.

  3. #3
    کاربر جدید
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    مشهد
    پست
    28

    نقل قول: مشکل در برنامه....

    اگه اشتباه نكنم بايد اشتباه تو اين خط باشه

    mal=(float)(ho - 400000) * (float)(10/100);
    و بجاي اون از كد زير استفاده كن ( ساير فرمول ها هم همين طور)

    mal=(float)(ho - 400000) * (float)(0.01);

  4. #4
    کاربر جدید
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    مشهد
    پست
    28

    نقل قول: مشکل در برنامه....

    راستي توي كد زير يك نكته اي هست كه بعضي وقتا كار دست ادم مي ده

    int sho,ho,maxsh,max=0;

    اين دستور فقط مقدار متغير max را برابر صفر قرار مي دهد و مقدار سه متغير ديگر مشخص نيست.

  5. #5

    نقل قول: مشکل در برنامه....

    نقل قول نوشته شده توسط elyascomputer مشاهده تاپیک
    راستي توي كد زير يك نكته اي هست كه بعضي وقتا كار دست ادم مي ده

    int sho,ho,maxsh,max=0;

    اين دستور فقط مقدار متغير max را برابر صفر قرار مي دهد و مقدار سه متغير ديگر مشخص نيست.
    دو تاشون از ورودی مقداردهی میشن و اون یکیشم به صورت انتساب ,و در محاسبه

    یا شرطی شرکت نمیکنه که نیاز به مقدار دهی اولیه بشه.....

    (ولی در کل باید بر روی این مسائل دقت کرد)

    اون مورد هم که شما گفتید درست هست و مشکل برنامه رو حل میکنه:

    mal=(float)(ho - 400000) * (float)(0.10);


    ولی چرا vC++‎ با اینکه type casting کردم محاسبه رو باز هم محاسبه

    10/100
    رو صفر در نظر میگیره؟؟؟؟؟
    آخرین ویرایش به وسیله ...StacK... : سه شنبه 13 اسفند 1387 در 22:50 عصر

  6. #6

    نقل قول: مشکل در برنامه....

    برنامه رو در کامپایلر 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++‎ هست...

  7. #7
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486

    نقل قول: مشکل در برنامه....

    ولی چرا vC++‎ با اینکه type casting کردم محاسبه رو باز هم محاسبه
    وقتی طرفین عملگر تقسیم یک عدد صحیح باشه، تقسیم صحیح انجام میشه نه اعشاری. برای همینه که جواب صفر هست. به vC++‎ ربطی نداره همه به این شکل عمل میکنن.

  8. #8
    کاربر دائمی آواتار SamaPic
    تاریخ عضویت
    مهر 1387
    محل زندگی
    مشهد مقدس
    پست
    329

    نقل قول: مشکل در برنامه....

    با سلام خدمت دوست عزيز.
    اين طور كه از برنامه ي شما بر مي آيد ، شما در محيط ويژال برنامه ي خود را نوشته ايد.
    آن را در توربو اجرا كنيد ببينيد كه آيا باز هم مشكلي دارد يا نه.
    من خودم بار ها شده برنامه اي را در ويژال نوشته ام و با ارور يا موارد ديگر روبرو شده ام ، ولي وقتي در توربو اجرا كردم ديدم هيچ مشكلي ندارد.
    براي مثال من مدتي پيش براي برنامه ي 8 وزير كد زير را در اول برنامه استفاده كردم و برنامه در ريپ مي افتاد و ... .
    for (i=0;i<=8;i++)
    for (j=0;j<=8;j++)
    a[i][j]=1;
    اين تقريبا همان كد است با كمي تغيير.
    من همان برنامه را در توربو اجرا كردم و جواب داد.
    جالب تر از همه اين كه من اين كد را در ويژال 2005 اجرا كردم در ريپ افتاد و وقتي در 2008 اجرا كردم فقط اين كد را تا i=1 اجرا مي كرد و سپس از برنامه خارج مي شد.
    خدانگهدار.

  9. #9

    نقل قول: مشکل در برنامه....

    وقتی می خواهید دو عدد را به صورت اعشاری تقیسم کنید باید حد اقل یکی از متغیر ها (یا عدد) را به float یا double تبدیل کنید. در حالی که شما ابتدا تقیسم را انجام می دهید و سپس جواب آن را که صفر هست به float تبدیل می کنید.

    پس باید به این شکل بنویسید (به پرانتز دقت کنید):

    float y = (float)10/100 ;
    به شکل فوق ابتدا 10 به 10.0 تبدیل می شود و سپس تقسیم بر 100 می شود.

    به شکل دیگر، کد فوق چیزی مانند کد زیر است:

    float y = ( (float) 10) / 100 ;




  10. #10

    نقل قول: مشکل در برنامه....

    نقل قول نوشته شده توسط Nima_NF مشاهده تاپیک
    وقتی می خواهید دو عدد را به صورت اعشاری تقیسم کنید باید حد اقل یکی از متغیر ها (یا عدد) را به float یا double تبدیل کنید. در حالی که شما ابتدا تقیسم را انجام می دهید و سپس جواب آن را که صفر هست به float تبدیل می کنید.

    پس باید به این شکل بنویسید (به پرانتز دقت کنید):

    float y = (float)10/100 ;


    به شکل فوق ابتدا 10 به 10.0 تبدیل می شود و سپس تقسیم بر 100 می شود.





    به شکل دیگر، کد فوق چیزی مانند کد زیر است:




    float y = ( (float) 10) / 100 ;









    دقیقا .!!!

    من کمی ذهنیتم در مورد عملگر / به پاسکال بود که حاصل تقسیم عددی

    به صورت
    10/ 100
    رو به صورت اعشاری میداد و برای تقسیم صحیح

    از عملگر div استفاده میکردیم.
    آخرین ویرایش به وسیله ...StacK... : چهارشنبه 14 اسفند 1387 در 10:41 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •