Witajcie, jestem studentem informatyki i mam problem ze znalezieniem błędu w kodzie. Moim zadaniem jest stworzenie tabelki, która ma posiadać liczbę iteracji dla trzech rozkładów: równomiernego, kwadratu równomiernego i dla rozkładu normalnego, dla każdego z trzech algorytmów wyszukiwania ( liniowe, binarne i interpolacyjne ). Prosiłbym o pomoc w znalezieniu błędu w kodzie, który dodaję poniżej. Pozdrawiam :)
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <time.h>
#include <fstream>
#include <math.h>
using namespace std;
int licznik1,licznik2,licznik3;
void losuj_tablice(int *tab, int N)
{
for (int i=0; i<N; i++)
{
tab[i]=rand()%100; // odpowiada za losowanie losowych elementow z tablicy
}
}
void kwadrat_rownomierny(int *tab, int N)
{
for (int i=0; i<N; i++)
{
int k;
k = (rand() % 100);
tab[i] = pow(k,2);
}
}
void rozklad_normalny(int *tab, int N)
{
for (int i=0; i<N; i++)
{
tab[i] = rand() % 100 + rand() % 100;
}
}
void drukuj_tablice(int *tab,int N)
{
for (int i=0;i<N;i++)
{
cout<<tab[i]<<endl; // wyswietla wylosowane liczby z tablicy
}
}
void sortowanie_babelkowe(int *tab,int N)
{
cout<<endl;
for (int i=0;i<N;i++) //petla zewnetrzna
{
for (int j=0;j<N-1-i;j++) // petla wewnetrzna ktora oblicza ktora liczba jest mniejsza
{
if(tab[j]>tab[j+1]) // warunek charakteryzujacy sortowanie babelkowe
{
int bufor;
bufor=tab[j+1];
tab[j+1]=tab[j];
tab[j]=bufor;
}
}
}
}
int wyszukiwanie_liniowe(int *tab, int N, int q)
{
for(int i=0;i<N;i++)
{
if(tab[i]==q) // jezeli tab[i] jest rowna wartosci q okreslonej w int main
{
cout<<tab[i]<<endl; // to wyswietlony zostanie zbior tej tablicy
}
licznik1++;
}
}
int wyszukiwanie_binarne(int *tab, int l, int r, int q) // zmienna l to lewa strona tablicy a r to prawa, q przechowuje numer środkowego elementu tablicy
{
int m=3; // 3 liczba z tablicy posortowanej
m=((l+r)/2); // pozwala wyznaczyc srodkowowy element z tablicy czyli l=0,r=7 bo N=7, zatem 0+7/2 daje nam m=3
licznik2++;
if(tab[m]==q) // jezeli wartosc z rownania m jest rowna wartosci q to zwracane jest m
{
return m;
}
if(tab[m]<q) // jezeli m element tablicy jest mniejszy od q to zwracane jest wyszukiwanie binarne
{
return wyszukiwanie_binarne(tab,m+1,r,q);
}
if(tab[m]>q)
{
return wyszukiwanie_binarne(tab,l,m-1,q);
}
if (r-l<1)
{
return -1;
}
}
int wyszukiwanie_interpolacyjne(int *tab, int l, int r, int q)
{
int m=l+(r-l)/((tab[r]-tab[1])*(q-tab[1]));
licznik3++;
if(tab[m]==q)
{
return m;
}
if(tab[m]<q)
{
return wyszukiwanie_interpolacyjne(tab,m+1,r,q);
}
if(tab[m]>q)
{
return wyszukiwanie_interpolacyjne(tab,l,m-1,q);
}
if (r-l<1)
{
return -1;
}
}
int main()
{
int N=7, q=34, tab[N], l=0, r=N-1,m;
cout<<"--------------------------"<<endl;
cout<<"Rozklad rownomierny"<<endl;
losuj_tablice(tab,N);
sortowanie_babelkowe(tab,N);
drukuj_tablice(tab,N);
sortowanie_babelkowe(tab,N);
wyszukiwanie_liniowe(tab,N,q);
cout<<"licznik dla liniowego:"<<licznik1<<endl;
cout<<endl;
wyszukiwanie_binarne(tab,0,N-1,q);
cout<<wyszukiwanie_binarne(tab,0,N-1,q)<<endl;
cout<<"licznik dla binarnego:"<<licznik2<<endl;
cout<<endl;
wyszukiwanie_interpolacyjne(tab,0,N-1,q);
cout<<wyszukiwanie_interpolacyjne(tab,l,r,q)<<endl;
cout<<"licznik dla intepolacyjnego:"<<licznik3<<endl;
cout<<"--------------------------"<<endl;
cout<<"Kwadrat rownomierny"<<endl;
kwadrat_rownomierny(tab,N);
sortowanie_babelkowe(tab,N);
drukuj_tablice(tab,N);
sortowanie_babelkowe(tab,N);
wyszukiwanie_liniowe(tab,N,q);
cout<<"licznik dla liniowego:"<<licznik1<<endl;
cout<<endl;
wyszukiwanie_binarne(tab,0,N-1,q);
cout<<wyszukiwanie_binarne(tab,0,N-1,q)<<endl;
cout<<"licznik dla binarnego:"<<licznik2<<endl;
cout<<endl;
wyszukiwanie_interpolacyjne(tab,0,N-1,q);
cout<<wyszukiwanie_interpolacyjne(tab,l,r,q)<<endl;
cout<<"licznik dla intepolacyjnego:"<<licznik3<<endl;
cout<<"--------------------------"<<endl;
cout<<"Rozklad normalny"<<endl;
rozklad_normalny(tab,N);
sortowanie_babelkowe(tab,N);
drukuj_tablice(tab,N);
sortowanie_babelkowe(tab,N);
wyszukiwanie_liniowe(tab,N,q);
cout<<"licznik dla liniowego:"<<licznik1<<endl;
cout<<endl;
wyszukiwanie_binarne(tab,0,N-1,q);
cout<<wyszukiwanie_binarne(tab,0,N-1,q)<<endl;
cout<<"licznik dla binarnego:"<<licznik2<<endl;
cout<<endl;
wyszukiwanie_interpolacyjne(tab,0,N-1,q);
cout<<wyszukiwanie_interpolacyjne(tab,l,r,q)<<endl;
cout<<"licznik dla intepolacyjnego:"<<licznik3<<endl;
system("PAUSE");
return 0;
}