PDA

View Full Version : سوال: لطفادر تصحیح کد کمک کنید.(مبتدی).کامپایلر ---------> visual studio2010



nima.ebrazi
یک شنبه 15 تیر 1393, 01:42 صبح
این برنامه رو نوشتم اما وقتی -1 رو میدم حلقه تموم نمیشه....شرط اینکه وقتی -1 رو میدم برنامه تموم بشه.
برنامه این هس که مسافت طی شده به مایل و بنزین مصرفی به گالن رو بگیره و مایل / گالن رو نشون بده


کد برنامه:




#include "stdafx.h"
#include <stdio.h>
#include <conio.h>


int main(){


float gallons;
int miles;
int counter;
counter = 0;
float m_g;


while( miles != -1){

//Daryafte masafate peymoode shode
printf("Enter the miles driven: ");
scanf("%d" ,&miles);




//Dryafte gallone estefade shode
printf("Enter the gallons used: ");
scanf("%f" ,&gallons);



m_g = (float)miles / gallons;
printf(" Miles / Gallons = %f\n" ,m_g);


counter++;


}//end while


getch();
return 0;
} //end main



بعد یه سوال کلی داشتم من کلا تو حلقه while نمیدونم شمارنده رو واسه چی و کجا به کار ببرم وسط راه گیج میشم نمیتونم باقی برنامه رو بنویسم.اینو چی کارشکنم.با اینکه تمام قوانین رو بلدم
و می دونم یه حلقه while یه شرط و بدنه و شمارنده داره؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟/

parvizwpf
یک شنبه 15 تیر 1393, 04:10 صبح
while فقط شرط میگیره ، شمارنده رو توی for میتونید استفاده کنید.
while( miles >=0)

nima.ebrazi
یک شنبه 15 تیر 1393, 04:33 صبح
while فقط شرط میگیره ، شمارنده رو توی for میتونید استفاده کنید.
while(miles>=0)

اگه میشه کد اصلاح شده رو بفرستید.من چیزی متوجه نشدم.اصلا آیا نیازی به شمارنده تو این کد هست یا نه؟
در ضمن وقتی برنامه رو کامپایل میکنم تو خط while ........خطا میدهwarning

a.r.khoshghalb
یک شنبه 15 تیر 1393, 04:59 صبح
دوست عزیز برنامه شما باید خطای اجرا بده (Runtime error) بخاطر اینکه متغیر miles مقدار اولیه نداره ولی دارید مقدارش رو چک می کنید (اولین دفعه ای که حلقه while شما اجرا بشه متغیر هیچ مقداری نداره ولی مقدارشو مقایسه می کنید) من هم که تو VS اجرا کردم Runtime error داد.

متغیر رو مقدار اولیش رو 0 کنید ببینید مشکل حل میشه یا نه (من تست کردم حل شد مشکل)


#include "stdafx.h"
#include <stdio.h>
#include <conio.h>


int main(){


float gallons;
int miles = 0;
int counter;
counter = 0;
float m_g;


while( miles != -1){

//Daryafte masafate peymoode shode
printf("Enter the miles driven: ");
scanf("%d" ,&miles);




//Dryafte gallone estefade shode
printf("Enter the gallons used: ");
scanf("%f" ,&gallons);



m_g = (float)miles / gallons;
printf(" Miles / Gallons = %f\n" ,m_g);


counter++;


}//end while


getch();
return 0;
} //end main

a.r.khoshghalb
یک شنبه 15 تیر 1393, 04:59 صبح
دوست عزیز برنامه شما باید خطای اجرا بده (Runtime error) بخاطر اینکه متغیر miles مقدار اولیه نداره ولی دارید مقدارش رو چک می کنید (اولین دفعه ای که حلقه while شما اجرا بشه متغیر هیچ مقداری نداره ولی مقدارشو مقایسه می کنید) من هم که تو VS اجرا کردم Runtime error داد.

متغیر رو مقدار اولیش رو 0 کنید ببینید مشکل حل میشه یا نه (من تست کردم حل شد مشکل)


#include "stdafx.h"
#include <stdio.h>
#include <conio.h>


int main(){


float gallons;
int miles = 0;
int counter;
counter = 0;
float m_g;


while( miles != -1){

//Daryafte masafate peymoode shode
printf("Enter the miles driven: ");
scanf("%d" ,&miles);




//Dryafte gallone estefade shode
printf("Enter the gallons used: ");
scanf("%f" ,&gallons);



m_g = (float)miles / gallons;
printf(" Miles / Gallons = %f\n" ,m_g);


counter++;


}//end while


getch();
return 0;
} //end main


به خط 10 توجه کنید.

nima.ebrazi
یک شنبه 15 تیر 1393, 05:13 صبح
دوست عزیز برنامه شما باید خطای اجرا بده (Runtime error) بخاطر اینکه متغیر miles مقدار اولیه نداره ولی دارید مقدارش رو چک می کنید (اولین دفعه ای که حلقه while شما اجرا بشه متغیر هیچ مقداری نداره ولی مقدارشو مقایسه می کنید) من هم که تو VS اجرا کردم Runtime error داد.

متغیر رو مقدار اولیش رو 0 کنید ببینید مشکل حل میشه یا نه (من تست کردم حل شد مشکل)


#include "stdafx.h"
#include <stdio.h>
#include <conio.h>


int main(){


float gallons;
int miles = 0;
int counter;
counter = 0;
float m_g;


while( miles != -1){

//Daryafte masafate peymoode shode
printf("Enter the miles driven: ");
scanf("%d" ,&miles);




//Dryafte gallone estefade shode
printf("Enter the gallons used: ");
scanf("%f" ,&gallons);



m_g = (float)miles / gallons;
printf(" Miles / Gallons = %f\n" ,m_g);


counter++;


}//end while


getch();
return 0;
} //end main


به خط 10 توجه کنید.


مرسی خطای runtime حل شد ولی وقتی میخام حلقه تموم شه -1 باید بدم ولی این عدد رو به عنوان یه دونه از متغییر هام میشناسه و حلقه تا بینهایت اجرا میشه

a.r.khoshghalb
یک شنبه 15 تیر 1393, 05:21 صبح
مطمئنید که تا بینهایت اجرا میشه؟!
توجه کنید که شما اول ورودی رو میگیرید و کارتون رو انجام میدید و خروجی میدید بعدش شرط چک میشه پس بعد از دادن -1 حلقه شما یک بار دیگه اجرا میشه
و همچنین توجه کنید که در انتهای برنامه getch() گذاشته اید!
الان باید بعد از دادن -1، یک خروجی بگیرید بعد یک دکمه بزنید و با پیام Press any key to continue... مواجه می شوید! سپس یک دکمه دیگر هم بزنید و تمام
اما پیشنهاد من برای برنامه شما استفاده از do-while هست، میدونید چیه و چه جوری کار می کنه یا توضیح بدم؟

nima.ebrazi
یک شنبه 15 تیر 1393, 05:40 صبح
بله اینو میدونم اما تمرینی که کتاب داده گفته فقط با while حل کنید...گیر من اینجاس که حلقه تموم نمیشه مثلا من مایل و گالن رو -1 میدم اونارو حساب میکه و جواب 1.0000000 رو میده در حالی که وقتی مایل رو -1 میدی با حلقه تموم شه.
مگه اشکالی داره از getch استفاده کنم؟
چون فقط واسم کنسول رو نمیزاره اتومات ببنده

nima.ebrazi
یک شنبه 15 تیر 1393, 06:10 صبح
این برنامه رو یه جور دیگه هم نوشتم.بجای اینکه کاربر بخاد وسط کار تصمیم بگیره حلقه رو تموم کنه اول تعداد ماشینا رو وارد میکنه بعد محاسبات انجام میشن
اما اگه دوستان لطف کنن برنامه اول رو باز نویسی کنن ممنون میشم . راه حل اونم برام مهم

اینم از کد:


//programmer : Nima Ebrazi//in barname meghdare benzine masrafi , kiloomet ra migirad va myangin an ra mohasebe mikonad
//dar akhar ham miangin kol benzin va kiloometr ra hesab mikonad




#include "stdafx.h"
#include <stdio.h>
#include <conio.h>


int main()
{
float litrs;
int kilometer;


int counter =0;//shomarandeh


float k_l;//kiloometr/litr


//marboot be mohasebate loop
float jame_litrs=0;
float jame_kilometer=0;
float jk_jl;


//Daryafte tedade mashin
int tedade_mashin;
printf("Tedade mashinha ra vared konid: ");
scanf("%d" ,&tedade_mashin);


while(counter < tedade_mashin){


//Daryafte litre masrafi
printf("\nKhodro chand litr benzin masraf karde ast? ");
scanf("%f" ,&litrs);



//Dryafte masafat
printf("Khodro chand kiloometr masafat peymoode? ");
scanf("%d" ,&kilometer);




//Mohasebe litre masrafi dar har kiloometr
k_l=(float)kilometer/litrs;
printf("Meghdar Kiloometr/Liter = %f\n\n" ,k_l);


//Mohasebate miangin kiloometr/litr
jame_kilometer += kilometer;
jame_litrs += litrs;
jk_jl= jame_kilometer/jame_litrs;




//Shomarande ke bayad az tedade_mashin kamtar bashad
counter++;


}//end while


printf("Miangin = %f" ,jk_jl);


getch();
return 0;


}//end main

a.r.khoshghalb
یک شنبه 15 تیر 1393, 06:40 صبح
این هم بازنویسی اون کدتون :


#include "stdafx.h"
#include <stdio.h>
#include <conio.h>


int main(){


float gallons;
int miles = 0;
int counter;
counter = 0;
float m_g;


while(1)
{
//Daryafte masafate peymoode shode
printf("Enter the miles driven: ");
scanf("%d" ,&miles);

//Sharte -1 nabudane mile

if (miles == -1)
break;

//Dryafte gallone estefade shode
printf("Enter the gallons used: ");
scanf("%f" ,&gallons);



m_g = (float)miles / gallons;
printf(" Miles / Gallons = %f\n" ,m_g);


counter++;


}//end while


getch();
return 0;
} //end main


خط 24 و 25

nima.ebrazi
یک شنبه 15 تیر 1393, 07:11 صبح
خیلی ممنون
مرسی