PDA

View Full Version : سوال در مورد اشکال برنامه



mmvalinezhad
سه شنبه 01 بهمن 1392, 22:53 عصر
با سلام
می خواهیم یک برنامه بنویسیم که وقتی عدد مثل 15.33 را وارد می کنیم،دو جزء 15 و 23 را چاپ کند.صورت کلی اجرای این برنامه به گونه اس است که وقتی enter را زدیم کار تمام شود.من این برنامه را نوشتم ولی در جایی مشکلی دارد که نتیجه ی درست نمی دهد.لطفا کمک کنید
با تشکر
#include <stdio.h>
#include <conio.h>

int main()
{
int m,b,a,c=0;
for(;;)
{
m=getche();
c=(c+m)*10;
if(m=='.')
{
c=c/10;
a=c;
c=0;
for(;;)
{
m=getche();
c=(c+m)*10;
if(m=='\r')
{
c=c/10;
b=c;
goto l1;
}
}
}
}
l1:printf("\n%d\n%d",a,b);
getch();
return 0;
}

samin_panahi
چهارشنبه 02 بهمن 1392, 16:09 عصر
سلام
زیاد با قابلیت هایی که C در اختیار برنامه نویس قرار می ده آشنا نیستم و با C برنامه نویسی نمی کنم ولی یه چیز تو این ما یه ها باید بنویسید


int main()
{
float MyNumber=0;

printf("Enter Your Number: ");
scanf ("%f", &MyNumber);
printf ("\n%d", (int)MyNumber);
printf ("\n%f",MyNumber-(int)MyNumber );


getch();
return 0;
}

Tiyana
چهارشنبه 02 بهمن 1392, 18:42 عصر
دوست عزیز تو برنامت دو تا اشکال بود اول این که وقتی یه عدد رو با getch میگیری تنها کد اسکی اعداد وارد متغیری که مساوی getch گذاشتی میشن پس باید کد اسکی 0 ازشون کم بشه دوم اینکه وقتی به ممیز میرسی باید از continue استفاده کنی تا ممیز تو پردازش وارد نشه در ضمن توصیه میکنم که از goto تو برنامه زیاد استفاده نکنید و برای متغیرهاتون هم اسمی متناسب با کاری که انجام میدن بذارید چون در غیر اینصورت تو برنامه های بزرگ به مشکل برمیخورید.

اینم از کد:



#include <stdio.h>
#include <conio.h>
int main()
{
int num1=0,num2=0,flag1=1,flag2=0;
char ch;
while((ch=getche())!='\r')
{
if(ch=='.')
{
flag1=0;
flag2=1;
continue;
}
if(flag1)
num1=(num1+(ch-'0'))*10;
if(flag2)
num2=(num2+(ch-'0'))*10;
}
printf("\n%d\n%d",num1/10,num2/10);
getch();
return 0;
}

mmvalinezhad
پنج شنبه 03 بهمن 1392, 11:31 صبح
دوست عزیز تو برنامت دو تا اشکال بود اول این که وقتی یه عدد رو با getch میگیری تنها کد اسکی اعداد وارد متغیری که مساوی getch گذاشتی میشن پس باید کد اسکی 0 ازشون کم بشه دوم اینکه وقتی به ممیز میرسی باید از continue استفاده کنی تا ممیز تو پردازش وارد نشه در ضمن توصیه میکنم که از goto تو برنامه زیاد استفاده نکنید و برای متغیرهاتون هم اسمی متناسب با کاری که انجام میدن بذارید چون در غیر اینصورت تو برنامه های بزرگ به مشکل برمیخورید.

لطفا درباره ی مکانیسم برنامه توضیح بدهید:
1-flag1 و flag2 را برای چه تعریف کریدم؟
2-if(flag1 و if(flag2 دقیقا چه هستند؟

Tiyana
پنج شنبه 03 بهمن 1392, 17:24 عصر
در زبان c صفر عددی به عنوان ارزش نادرست درنظر گرفته میشه و بقیه اعداد(اعداد منفی رو مطمئن نیستم) به عنوان ارزش درست درنظر گرفته میشن حالا اگه صفر به عنوان شرط if یا حتی while قرار داده بشه دستور اجرا نمیشه چون صفر ارزش نادرست داره اما اگه عددی مانند 1 گذاشته بشه همواره دستور اجرا میشه مگه این که تغییرش بدیم...
تو کد بالا هم از همین روش برای کنترل شرط ها استفاده شده و با تغییر کردن flag ها نحوه پردازش ما هم روی کاراکترها عوض میشه.