PDA

View Full Version : مبتدی: جستجوی ترتیبی و دودویی



ferry_2020
پنج شنبه 15 اسفند 1392, 20:23 عصر
با عرض سلام و احترام
من این برنامه را با کمک گرفتن از کتاب نوشتم ولی جواب مورد نظر را نگرفتم.سوال اینه :
برنامه اي بنویسید که 10 عدد را از ورودي خوانده و در آرایه اي قرار دهد سپس یک عدد را خوانده و آن را به دو روش ترتیبی و دودویی جستجو کند.
ولی بعد از اجرا نمیخوام پیغام اینو بده که عدد وجود داره یا نداره
میخوام مکانشو بهم بگه
نمیدونم چطوری میتونم درستش کنم
ممنون میشم راهنمائیم کنید




#include <iostream>
using namespace std;
void inputData(int[ ],int);
void bubblesort (int [ ] , int);
int linearsearch (int [ ] , int , int );
int binearysearch (int [ ] , int , int );
void main( )
{
const int m=10;
int ar[ m ],n ;
inputData(ar,m);
cout<<"Enter a number for searching : "<<endl;
cin >> n ;
cout<<"Result of linear search : ";
if(linearsearch(ar,m,n == -1))
cout<<"Number "<<n<<"not exist in list."<<endl;
else
bubblesort(ar,m);
cout<<"Result of binarry search : ";
if(binearysearch(ar,m,n) == -1)
cout<<"Number "<<n<<"not exist in list."<<endl;
else
cout<<"Number "<<n<<" exist in list."<<endl;
}
void inputData(int ar[ ],int len)
{
int i;
for(i=0;i<len;i++)
cin>>ar[i];
}
int binearysearch (int ar[ ] , int Len , int n )
{
int start=0,end=Len-1,mid ;
while (start <= end )
{
mid =( start + end )/2 ;
if (ar[mid] < n )
start = mid+1 ;
else if (ar[mid] > n )
end = mid-1 ;
else return mid ;
}
return -1 ;
}
void bubblesort (int ar[ ] , int len )
{


int temp ;
for ( int i= len-1 ; i>0 ; i-- )
{


for ( int j=0 ; j< i ; j++ )
{
if ( ar[j] > ar[j+1] )
{
temp = ar[ j ] ;
ar[ j ] = ar[ j+1 ] ;
ar[ j+1] = temp ;
}
}
}
}


int linearsearch (int ar[ ] , int Len , int n )
{
for ( int i=0 ; i< Len ; i++ )
if ( ar[ i ] == n )
return i ;
return -1 ;
}

motherboard
پنج شنبه 15 اسفند 1392, 20:47 عصر
با عرض سلام و احترام
من این برنامه را با کمک گرفتن از کتاب نوشتم ولی جواب مورد نظر را نگرفتم.سوال اینه :
برنامه اي بنویسید که 10 عدد را از ورودي خوانده و در آرایه اي قرار دهد سپس یک عدد را خوانده و آن را به دو روش ترتیبی و دودویی جستجو کند.
ولی بعد از اجرا نمیخوام پیغام اینو بده که عدد وجود داره یا نداره
میخوام مکانشو بهم بگه
نمیدونم چطوری میتونم درستش کنم
ممنون میشم راهنمائیم کنید




#include <iostream>
using namespace std;
void inputData(int[ ],int);
void bubblesort (int [ ] , int);
int linearsearch (int [ ] , int , int );
int binearysearch (int [ ] , int , int );
void main( )
{
const int m=10;
int ar[ m ],n ;
inputData(ar,m);
cout<<"Enter a number for searching : "<<endl;
cin >> n ;
cout<<"Result of linear search : ";
if(linearsearch(ar,m,n == -1))
cout<<"Number "<<n<<"not exist in list."<<endl;
else
bubblesort(ar,m);
cout<<"Result of binarry search : ";
if(binearysearch(ar,m,n) == -1)
cout<<"Number "<<n<<"not exist in list."<<endl;
else
cout<<"Number "<<n<<" exist in list."<<endl;
}
void inputData(int ar[ ],int len)
{
int i;
for(i=0;i<len;i++)
cin>>ar[i];
}
int binearysearch (int ar[ ] , int Len , int n )
{
int start=0,end=Len-1,mid ;
while (start <= end )
{
mid =( start + end )/2 ;
if (ar[mid] < n )
start = mid+1 ;
else if (ar[mid] > n )
end = mid-1 ;
else return mid ;
}
return -1 ;
}
void bubblesort (int ar[ ] , int len )
{


int temp ;
for ( int i= len-1 ; i>0 ; i-- )
{


for ( int j=0 ; j< i ; j++ )
{
if ( ar[j] > ar[j+1] )
{
temp = ar[ j ] ;
ar[ j ] = ar[ j+1 ] ;
ar[ j+1] = temp ;
}
}
}
}


int linearsearch (int ar[ ] , int Len , int n )
{
for ( int i=0 ; i< Len ; i++ )
if ( ar[ i ] == n )
return i ;
return -1 ;
}





سلام.منظورتون از مکان دقیقا چیه؟

ferry_2020
پنج شنبه 15 اسفند 1392, 20:55 عصر
سلام.منظورتون از مکان دقیقا چیه؟

منظورم مکانِ عدد مورد جستجو در آرایه است.

amirhossein.ha
پنج شنبه 15 اسفند 1392, 21:13 عصر
خب توی همون شرط میتونید بگید اگه -1 بود بگه توی لیست وجود نداره و اگه نبود اوون عدد رو چاپ کنه : http://paste.ubuntu.com/7045512/

motherboard
پنج شنبه 15 اسفند 1392, 21:32 عصر
منظورم مکانِ عدد مورد جستجو در آرایه است.

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

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

using namespace std;

void inputData(int[ ],int);

void bubblesort (int [ ] , int);

int linearsearch (int [ ] , int , int );

int binearysearch (int [ ] , int , int );

int main( )

{

const int m=2;

int ar[ m ],n ;

inputData(ar,m);

cout<<"Enter a number for searching : "<<endl;

cin >> n ;

cout<<"Result of linear search : ";

if(linearsearch(ar,m,n == -1))

cout<<"Number "<<n<<"not exist in list."<<endl;

else

bubblesort(ar,m);

cout<<"Result of binarry search : ";


getch();}

void inputData(int ar[ ],int len)

{

int i;

for(i=0;i<len;i++)

cin>>ar[i];

}


void bubblesort (int ar[ ] , int len )

{





int temp ;

for ( int i= len-1 ; i>0 ; i-- )

{





for ( int j=0 ; j< i ; j++ )

{

if ( ar[j] > ar[j+1] )

{

temp = ar[ j ] ;

ar[ j ] = ar[ j+1 ] ;

ar[ j+1] = temp ;

}

}

}

}





int linearsearch (int ar[ ] , int Len , int n )

{

for ( int i=0 ; i< Len ; i++ )

if ( ar[ i ] == n )

return i ;

return -1 ;

}

motherboard
پنج شنبه 15 اسفند 1392, 22:19 عصر
خب توی همون شرط میتونید بگید اگه -1 بود بگه توی لیست وجود نداره و اگه نبود اوون عدد رو چاپ کنه : http://paste.ubuntu.com/7045512/

لینکی که ارائه فرمودید مشکلی رو که برنامه کاربرferri 20_20 داشت رو حل کرد.اما به نظرم باز هم برنامه نقص داره چون که شرط جست وجوی دودویی مرتب بودن داده ها در ارایه است و وقتی برنامه رو اجرا کردم زمانی که اعداد رو به صورت نامرتب در ارایه می ریختم در جست و جوی دودویی نمایش می داد و برای من تازگی داره.اخه تو ساختمان داده خونده بودم که در روش جست و جوی دودویی باید اعضا مرتب باشه.

ferry_2020
پنج شنبه 15 اسفند 1392, 22:31 عصر
لینکی که ارائه فرمودید مشکلی رو که برنامه کاربرferri 20_20 داشت رو حل کرد.اما به نظرم باز هم برنامه نقص داره چون که شرط جست وجوی دودویی مرتب بودن داده ها در ارایه است و وقتی برنامه رو اجرا کردم زمانی که اعداد رو به صورت نامرتب در ارایه می ریختم در جست و جوی دودویی نمایش می داد و برای من تازگی داره.اخه تو ساختمان داده خونده بودم که در روش جست و جوی دودویی باید اعضا مرتب باشه.

به نظر من خود برنامه،اعداد را اول مرتب میکنه،بعد جستجوی دودویی رو انجام میده.تنها مشکل این برنامه این بود که آرایه از صفر شروع میشه،بنابراین باید برای چاپ موقعیت یک واحد به اون اضافه بشه
من خودم این قسمت را به این شکل تغییر دادم




if( Lres == -1)
cout<<"Number "<<n<<" not exist in list."<<endl;
else
cout<<"Number "<<n<<" exist in the " << Lres+1 << "th cell of the list."<<endl;


bubblesort(ar,m);
cout<<"Result of binarry search : ";
int Bres=binearysearch(ar,m,n);
if(Bres == -1)
cout<<"Number "<<n<<" not exist in list."<<endl;
else
cout<<"Number "<<n<<" exist in the " << Bres+1 << "th cell of the list."<<endl;

amirhossein.ha
جمعه 16 اسفند 1392, 15:59 عصر
درسته باید یدونه اضافه کرد همچنین توی خود برنامه ارایه رو سورت میکنه پس مشکلی نیست