PDA

View Full Version : سوال: اجرای نامناسب!



shayan7210
جمعه 18 اسفند 1391, 23:38 عصر
سلام دوستان...
این برنامه برای حذف صفر اعداد هست.ولی نمیدونم چرا درست اجرا نمیشه!؟!...(dev c++)

#include<iostream>
#include<math.h>
#include<conio.h>
using namespace std;
int main()
{
int s=0,r,p;
int a=1;
int n;
cin>>n;
while(n>0)
{
r=n%10;
n=n/10;
p=pow(10,a-1);
if(r!=0)
{
s=(r*p)+p;}
else
if(r==0)
{
s=r+p;}
a++;
}
cout<<s;
getch();
return(0);
}

the king
جمعه 18 اسفند 1391, 23:56 عصر
سلام دوستان...
این برنامه برای حذف صفر اعداد هست.ولی نمیدونم چرا درست اجرا نمیشه!؟!...(dev C++‎)

1) شما باید مقدار قبلی s رو با مقدار r * p جمع کنید، یعنی (s = s + (r * p یا (s += (r * p . شما بجای s نوشتید p

if(r!=0)
{
s=(r*p)+p;}


2) موقعی که r صفر است، باید نادیده اش بگیرید. دیگه رقمی نیست که بخواهید داخل s قرار دهید. این کد نباید باشه، مخصوصا که مقدار قبلی s رو از دست میده :

if(r==0)
{
s=r+p;}


3) وقتی r برابر 0 است، ارزش رقم های بعدی کاهش پیدا می کنه، یعنی باید جلوی افزایش a رو بگیرید.
چون اگه وقتی صفر است افزایش پیدا کنه (p=pow(10,a-1 جای خالی اون رقم رو با صفر پر می کنه، نتیجه همون عدد n اول میشه، بدون حذف رقم های صفر.
شما می خواهید رقم های صفر حذف شوند پس نباید a رو زمانی که r برابر 0 است افزایش بدید. این افزایش در کد شما بدون شرط ئه :

a++;


کد رو بهینه نمی کنم تا ساختار کد تون تغییر اساسی نکنه :


#include <iostream>
#include <math.h>
#include <conio.h>

using namespace std;

int main()
{
int s = 0, r, p;
int a = 1;
int n;
cin >> n;
while (n > 0)
{
r = n % 10;
n = n / 10;
if (r != 0)
{
p = pow(10.0, a - 1);
s = s + (r * p);
a++;
}
}
cout << s;
getch();
return 0;
}

shayan7210
شنبه 19 اسفند 1391, 11:02 صبح
ممنون از راهنمایی تونthe king
اما برنامه اخری که خودتون ویرایش کردید هم یه مشکل کوچیک داره!مثلا اگرعدد1024راوارد کنیم 123را چاپ میکنه!!!:لبخندساده:
ممکنه دوباره راهنمایی کنید؟!

the king
شنبه 19 اسفند 1391, 18:55 عصر
ممنون از راهنمایی تونthe king
اما برنامه اخری که خودتون ویرایش کردید هم یه مشکل کوچیک داره!مثلا اگرعدد1024راوارد کنیم 123را چاپ میکنه!!!:لبخندساده:
ممکنه دوباره راهنمایی کنید؟!

من همچین خروجی ای نمی بینم. کامپایلر تون چیه؟ یک نمونه کامپایل شده ++Microsoft Visual C اش رو پیوست می کنم.

101163

smemamian
شنبه 19 اسفند 1391, 21:57 عصر
من نوشتم ولی کسی بهینه تر می تونه بنویسه ؟
یک تابع بود که کاراکتر به کاراکتر دریافت می کرد.. یادم نمیاد.. با اون برنامه زیر کوچکتر میشه !
#include <iostream>

using namespace std;

int main()
{
char Num1[20],Num2[20];
cout << "Plz Enter Number : \n" ;
cin >> Num1 ;
int k = 0 ;
for(int j = 0 ; j <strlen(Num1) ; j++)
{
if(Num1[j]!='0')
{
Num2[k]=Num1[j];
k++;

}
}
for(int l=0 ; l <k ; l++ )
cout << Num2[l] ;
cout << endl ;
return 0 ;
}

shayan7210
شنبه 19 اسفند 1391, 23:06 عصر
من همچین خروجی ای نمی بینم. کامپایلر تون چیه؟ یک نمونه کامپایل شده ++Microsoft Visual C اش رو پیوست می کنم.

101163
این فایل زیپ برای من باز نمیشه!
یعنیexeباز نمیشه!...
اگر خودم هم دوباره اجراش کنم همون مشکل قبل رو داره...!
درهرصورت ممنون از کمکتون:لبخندساده:

shayan7210
شنبه 19 اسفند 1391, 23:11 عصر
(از انجایی که بنده تازه وارد و مبتدی هستم)چطور بفهمم نوع کامپایلرم چیه؟

the king
یک شنبه 20 اسفند 1391, 01:29 صبح
(از انجایی که بنده تازه وارد و مبتدی هستم)چطور بفهمم نوع کامپایلرم چیه؟

معمولا اون محیطی که کد رو داخلش می نویسید یک منوی دراز در بالای کادر اش داره. منوی Help رو انتخاب کنید، معمولا یک
گزینه ...About داخلش هست. در کادری که با کلیک کردن روی اون گزینه About نشون داده میشه، اصولا اولین موردی که نوشته شده
عنوان محیط ئه. مثلا ++Turbo C یا ++Microsoft Visual C یا Quincy 2005 و ...
اینها اگه عنوان خود کامپایلر هم نباشند باز میشه از روی عنوان شون فهمید از کدوم کامپایلر هایی استفاده می کنند.

shayan7210
یک شنبه 20 اسفند 1391, 09:52 صبح
معمولا اون محیطی که کد رو داخلش می نویسید یک منوی دراز در بالای کادر اش داره. منوی Help رو انتخاب کنید، معمولا یک
گزینه ...About داخلش هست. در کادری که با کلیک کردن روی اون گزینه About نشون داده میشه، اصولا اولین موردی که نوشته شده
عنوان محیط ئه. مثلا ++Turbo C یا ++Microsoft Visual C یا Quincy 2005 و ...
اینها اگه عنوان خود کامپایلر هم نباشند باز میشه از روی عنوان شون فهمید از کدوم کامپایلر هایی استفاده می کنند.
انجا که ننوشته بود...امادرسربرگ fileگزینه importنوشته شدهms visual ++c
ممنون

the king
یک شنبه 20 اسفند 1391, 16:43 عصر
انجا که ننوشته بود...امادرسربرگ fileگزینه importنوشته شدهms visual ++c
ممنون

اگه گزینه Import برای پروژه های ++MS Visual C داره پس خودش نمی تونه ++Microsoft Visual C باشه.
عنوان برنامه و عنوان پنجره اصلی اش Code::Blocks نیست؟

پیشنهاد می کنم از Quincy 2005 استفاده کنید. ساده و جمع جوره، به حجم 18 مگابایت :

Q2005v1_3setup.exe (http://www.codecutter.net/tools/quincy/2005v1.3/Q2005v1_3setup.exe)

لینک صفحه اصلی :

Quincy 2005 - A Simple IDE for C/C++‎ Programmers (http://www.codecutter.net/tools/quincy/)

در Quincy 2005 منوی File گزینه New رو انتخاب می کنید (Ctrl + N) و C++‎ Source File رو فعال کرده و OK خواهید کرد.
کد برنامه تان را در ویرایشگر اش نوشته و جایی Save کرده (Ctrl + S) و بعد با کلید F9 اجرا می کنید.

Salar Ashgi
سه شنبه 22 اسفند 1391, 22:54 عصر
روش ها زیاده ، فعلا کد زیر را داشته باشید :



#include <iostream>
#include <conio>
#include <math>
int main()
{
int n,f=1,sum=0,q;
cout<<"Enter n :\n";
cin>>n;
while(n!=0)
{
q=n%10;
n/=10;
if(q!=0)
{
sum+=f*q;
f*=10;
}
}
cout<<"With out zero : "<<sum<<endl;
getch();
}


ولی چیزی که من همیشه گفتم اینه که یه برنامه نویس خوب باید با تموم جونش منطق برنامه رو درک کرده باشه.
یعنی همیشه سعی کنید مفهومی کدنویسی کنید .

موفق باشید ./