Witam mam zrobic program w c++ ktory ma za zadanie znalesc poszukiwany element x , gdzie mozna wybrac sposob przeszukiwania: liniowego lub binarnego.

Mysle ze powinno to byc cos takiego ale mam sporo bledow w tym kodzie wiec prosze o poprawe:

# include <iostream>
using namespace std;

int liniowe(int tab[n], int x)
{
for(int i=0; (i<n)&&(tab[i]!=x); i++);
return i;
cout<<i;
}

int binarne(int tab[], int x)
{
enum{TAK,NIE} znalazlem=NIE;
int left=0, right=n-1, mid;
while(left<=right && znalazlem!=TAK)
{
mid=(left+right)/2;
if(tab[mid]==x)
znalazlem=TAK;
else
if(tab[mid]<x)
left=mid+1;
else
right=mid-1;
}
if(znalazlem==TAK)
return mid;
else return -1;
cout<<mid;
}

int main()
{
int tab[n];
int z;
int u;
cout<<"ile elementow ma miec zbior";
cin>>n;
cout<<"do jakiej liczby ma byc zakres losowanych liczb";
cin>>z;
cout<<"podaj szukany element";
cin>>x;
srand(time(0));
for(int i=0; i<n; i++)
{
tab[n] = rand() %z;
}
cout<<"Wybierz metode przeszukiwania:";
cout<<"1 - liniowe";
cout<<"2 - binarne";
cin>>u;

if(u==1)
{
liniowe(tab[n], x)
}
if(u==2)
{
binarne(tab[n], x)
}

system("PAUSE");
return 0;
}

1

Odpowiedzi

2010-01-17T15:35:20+01:00
Poniżej zamieszczam Twój kod, z drobnymi poprawkami:

# include <iostream>
using namespace std;

int n;

int liniowe(int *tab, int x)
{
for(int i=0; i<n; i++)
if (tab[i]==x)
{
cout << "Znalazlem " << x " na pozycji " << i+1 << endl;
return i;
}
cout << "Nie znalazlem " << x << endl;
return -1;
}

int binarne(int *tab, int x)
{
int left=0, right=n-1, mid;
while(left<right)
{
mid=(left+right)/2;
if(tab[mid]==x)
{
cout << "Znalazlem " << x " na pozycji " << mid+1 << endl;
return mid;
}
if(tab[mid]<x)
left=mid+1;
else
right=mid-1;
}
if (left==right && tab[left]==x)
{
cout << "Znalazlem " << x " na pozycji " << mid+1 << endl;
return mid;
}
cout << "Nie znalazlem " << x << endl;
return -1
}

int main()
{
int *tab;
int z;
int u;
cout<<"ile elementow ma miec zbior";
cin>>n;
tab = new int[n];
cout<<"do jakiej liczby ma byc zakres losowanych liczb";
cin>>z;
cout<<"podaj szukany element";
cin>>x;
srand(time(0));
for(int i=0; i<n; i++)
{
tab[n] = rand() % z;
}
cout<<"Wybierz metode przeszukiwania:";
cout<<"1 - liniowe";
cout<<"2 - binarne";
cin>>u;

if(u==1)
{
liniowe(tab, x)
}
if(u==2)
{
binarne(tab, x)
}

//system("PAUSE");
return 0;
}