PDA

View Full Version : سوال: مشکل این کد چیه(آرایه)؟



vb8334
شنبه 14 مرداد 1391, 14:23 عصر
با سلام به تمامی دوستان

دوستان من یه کد نوشتم با ++c برای حذف اعداد تکراری توی آرایه ولی نمیدونم چه مرگشه ؟
یه نگاه بهش بندازید ممنون میشم



مرسی


#include <iostream>

using namespace std;

int main()
{

int arr[5];
int arr1[5];

cout << "\t\t\t*In The Name Of God*\n";
//------------------------------------------

for(int i=0; i<5; i++)
{
cout<<"Enter your Number ["<< i <<"]:";
cin>>arr[i];
}
for(int j=0; j<5; j++)
{

if(arr[j]!=arr1[j])
{

for(int k=j; k<5; k++)
{

if(arr[j]==arr[k+1])
{
arr1[j]=arr[j];
}
}
}

}

for(int r=0; r<5; r++)
{

if(arr[r]!=arr1[r])
{
cout<<"\narr["<<r<<"]:"<<arr[r];
}



}


return 0;
}

amir.bakhtiari
شنبه 14 مرداد 1391, 19:25 عصر
من برنامتون رو چک کردم - عناصری که تکراری هستن رو حذف میکنه و بقیه عناصر رو چاپ مینکه
میشه بگید مشکل کجاست؟

vb8334
شنبه 14 مرداد 1391, 20:01 عصر
ممنون از اینکه پاسخ دادین

ببینید به این برنامه این اعداد رو بده

مثلآ :11515

باید اینجوری بشه
5 1

یا اینکه این عدد رو بدی 00313

باید اینجوری بشه 031

ولی ایراد داره تست میکنم.

مرسی

amir.bakhtiari
شنبه 14 مرداد 1391, 20:33 عصر
برنامه شما مشکلی نداره
و این اعدادی که شما گفتی وارد کردم جواب درست داده

ایناها:
http://img4up.com/up2/90600406670973835780.bmp


http://img4up.com/up2/73249613673383259879.bmp

the king
شنبه 14 مرداد 1391, 22:48 عصر
این کد یک ایراد الگوریتمی داره، اینکه آرایه [int arr1[5 پیش از اینکه مقدار دهی بشه مقایسه شده، این شرط ([if(arr[r]!=arr1[r زمانی داره
اجرا میشه که هنوز مشخص نیست در [arr1[r چه مقداری هست، و طبیعتا ممکنه روی یک کامپایلر یا در یک شرایطی درست کار کنه یا نکنه،
چون مقادیری که در یک آرایه مقدار دهی نشده هست قابل پیشبینی کردن نیست، ممکنه مقادیر 0 باشه یا هر مقدار تصادفی ای که
نتیجه اجرای برنامه های قبلی بوده، باید نحوه جستجو کردن مقادیر تکراری رو تغییر بدهید.

vb8334
یک شنبه 15 مرداد 1391, 03:38 صبح
دوستان من هر چی فکر میکنم به راه حلی نمیرسم لطفآ کمک کنین


مرسی

the king
یک شنبه 15 مرداد 1391, 03:53 صبح
دوستان من هر چی فکر میکنم به راه حلی نمیرسم لطفآ کمک کنین

مرسی

این اصلاح شده کد شما است :

#include <iostream>

using namespace std;

int main()
{

int arr[5];
int arr1[5];

cout << "\t\t\t*In The Name Of God*\n";
//------------------------------------------

for(int i=0; i<5; i++)
{
cout<<"Enter your Number ["<< i <<"]:";
cin>>arr[i];
}
int k, c = 0;
for(int j = 0; j<5; j++)
{
for(k = 0; k < c; k++)
if (arr[j] == arr1[k])
break;
if (k == c)
{
arr1[c] = arr[j];
c++;
}
}

for(int r=0; r<c; r++)
{

cout<<"\narr["<<r<<"]:"<<arr1[r];
}
return 0;
}


اما اگر بخواهید نیازی به آرایه دوم نیست و میشه در همان آرایه اول درجا تکراری ها رو حذف کرد :

#include <iostream>

using namespace std;

int main()
{

int arr[5];

cout << "\t\t\t*In The Name Of God*\n";
//------------------------------------------

for(int i=0; i<5; i++)
{
cout<<"Enter your Number ["<< i <<"]:";
cin>>arr[i];
}
int k, c = 0;
for(int j = 0; j<5; j++)
{
for(k = 0; k < c; k++)
if (arr[j] == arr[k])
break;
if (k == c)
{
arr[c] = arr[j];
c++;
}
}

for(int r=0; r<c; r++)
{

cout<<"\narr["<<r<<"]:"<<arr[r];
}
return 0;
}

vb8334
یک شنبه 15 مرداد 1391, 04:08 صبح
مرسی دوست عزیز که این موقع دارین پاسخ میدین

ولی هر 2 کد ارور میده :error: stray '\375' in programs

مرسی

the king
سه شنبه 17 مرداد 1391, 01:59 صبح
مرسی دوست عزیز که این موقع دارین پاسخ میدین

ولی هر 2 کد ارور میده :error: stray '\375' in programs

مرسی

مشکل مربوط به Copy Paste شدن کد ئه، اون کدی که در کامپایلر تون دارید رو چک کنید، ببینید کاراکتر " در ابتدا و انتهای رشته ها در چه وضعیتی اند.
ممکنه رشته "sample" بصورت رشته “sample” در اومده باشه که اون دو کاراکتر “ و ” توسط کامپایلر قابل قبول نیست.

empireamir
سه شنبه 17 مرداد 1391, 02:29 صبح
سلام
من میخام یه پیشنهاد بدم.شما سعی کن الگوریتمی که تو ذهنت برای پیاده سازی این برنامه داری رو عوض کنی.ببین،من رشته ام سخت افزاره،ولی برنامه نویسی ام هم خ خوبه.اگه یه کمی با برنامه نویسی آشنا باشی،الگوریتم مرتب سازی حبابی برای آرایه ها رو باید دیده باشی.حالا شما تو برنامه خودت کد مرتب سازی حبابی رو پیاده سازی کن با این تفاوت که بجای شرطش،شرط مساوی بودن دو درآیه از آرایه رو بذار و بجای جواب شرط،حذف کردن یکی از دو درآیه ی یکسان و قرار دادن یک عدد خاص ک امکان نداره تو بقیه درآیه ها باشه (مثل عدد خیلی بزرگ یا عدد منفی) به جای عدد حذف شده رو قرار بده.بعد تو آخر برنامه ات با ی حلقه میتونی اون خونه هایی که عدد خاص دارن رو حذف کنی و آرایه رو مرتب کنی.من کدش رو تو پست بعدی مینویسم.

empireamir
سه شنبه 17 مرداد 1391, 02:54 صبح
int main()
{

int arr[5];
int result[5];
int help=-1;
for(int i=0;i<5;i++)
{
cout<<"Please Enter Your Number";
cin>>arr[i];
}
//ta inja adad ha ro migire

for(int j=0;j<4;j++)
for(int k=j;k<5;k++)
{
if(arr[j]==arr[k] && arr[j]>=0 && arr[k]>=0)
{
arr[j]==help;
help--;
}
}


//ta inja ham adad haye tekrari hazf shodan va bajashun adad haye manfi gharar gereftan.

int p,q=0;

for(p=0;p<5;p++)
{
if(arr[p]>=0)
{
result[q]=arr[p];
q++;
}
}

//inja ham adadhaye "arr" ro be gheyr az unayi k manfi hastan mirizim tu "result" va "result" ro b onvane khuruji dar nazar migirim
return 0;
}