Witam.
Napisałem program na ćwiczenia analizujący złożoność poszczególnych metod przeszukiwania tablicy na podstawie liczby porównań.
Mam tylko problem program działa normalnie lecz w niektórych momentach zawiesza się.
Proszę o 2 rzeczy:
Znalezienie miejsca które powoduje zwiechy.
Sprawdzenie czy dobrze zliczam liczbę porównań(zmienna liczbap w funkcjach bezwartownika, zwartownikiem, binarnie)
W załączniku zamieszczam treść zadania a poniżej kod.
Z góry dzięki.
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
void wyswietl(int *tablica, int wielkosc)
{
for(int i = 0; i < wielkosc - 1;i++)
{
printf("%i ", tablica[i]);
}
printf("\n");
}
void addDane(int *tablica, int wielkosc)
{
srand((unsigned)time(NULL));
int i = 0;
for(int i = 0; i < wielkosc - 1;i++)
{
tablica[i] = 0 + rand() % (400 + 1);
}
}
void sort(int *tablica, int wielkosc)
{
bool swapped; // Czy zamieniono w ostatnim obrocie?
do {
swapped = false;
for (int i = 0; i < wielkosc - 1; ++i)
{
if (tablica[i] > tablica[i + 1])
{
swap(tablica[i], tablica[i + 1]);
swapped = true;
}
}
} while (swapped);
}
void bezwartownika(int *tablica, int wielkosc)
{
int x, liczbap = 0;
printf("Podaj szukana: \n");
scanf("%i", &x);
int i = 1;
for(int i = 0; i < wielkosc; i++)
{
liczbap++;
if(tablica[i] == x)
{
liczbap++;
printf("Element o wartosci x: %i znajduje sie na pozycji: %i\n", x, i);
return;
}
}
printf("Nie ma elementu x w tablicy\n");
printf("Liczba porownan: %i\n", liczbap);
}
void zwartownikiem(int *tablica, int wielkosc)
{
int x, liczbap = 0;
printf("Podaj szukana: \n");
scanf("%i", &x);
int i = 0;
tablica[wielkosc] = x;
for(int i = 0; tablica[i] != x; i++)
liczbap++;
liczbap++;
if(i == wielkosc)
{
printf("Nie ma elementu x w tablicy\n");
}
else
printf("Element o wartosci x: %i znajduje sie na pozycji: %i\n", x, i);
printf("Liczba porownan: %i\n", liczbap);
}
void binarnie(int *tablica, int wielkosc)
{
int x, liczbap = 0;
printf("Podaj szukana: \n");
scanf("%i", &x);
int ip = 0;
int ik = wielkosc - 1;
int isr;
do
{
liczbap++;
isr = (ip + ik) / 2;
if(x > tablica[isr])
{
liczbap++;
ip++;
}
else
ik--;
}while((tablica[isr] != x) || !(ip > ik));
liczbap = liczbap + 2;
if(tablica[isr] != x)
{
liczbap++;
printf("Nie ma elementu x w tablicy\n");
}
else
{
printf("Element o wartosci x: %i znajduje sie na pozycji: %i\n", x, isr);
}
printf("Liczba porownan: %i\n", liczbap);
}
int main()
{
int wielkosc = 10;
printf("**********Tablica ustawiona na 10 elementow**********\n");
int *tablica = new int(wielkosc);
addDane(tablica, wielkosc);
wyswietl(tablica, wielkosc);
printf("**********Podawaj x ktory jest w tablicy.**********\n");
printf("Bez wartownika 10 elementow.\n");
bezwartownika(tablica, wielkosc);
printf("Z wartownikiem 10 elementow\n");
zwartownikiem(tablica, wielkosc);
printf("**********Podawaj x ktorego nie ma w tablicy.**********\n");
printf("Bez wartownika 10 elementow.\n");
bezwartownika(tablica, wielkosc);
printf("Z wartownikiem 10 elementow\n");
zwartownikiem(tablica, wielkosc);
sort(tablica, wielkosc);
printf("**********Podawaj x ktory jest w tablicy (dla posortowanych danych).**********\n");
printf("Binarnie 10 elementow\n");
binarnie(tablica, wielkosc);
printf("**********Podawaj x ktorego nie ma w tablicy (dla posortowanych danych).**********\n");
printf("Binarnie 10 elementow\n");
binarnie(tablica, wielkosc);
delete []tablica;
wielkosc = 100;
printf("**********Tablica ustawiona na 100 elementow**********\n");
tablica = new int(wielkosc);
addDane(tablica, wielkosc);
wyswietl(tablica, wielkosc);
printf("**********Podawaj x ktory jest w tablicy.**********\n");
printf("Bez wartownika 100 elementow.\n");
bezwartownika(tablica, wielkosc);
printf("Z wartownikiem 100 elementow\n");
zwartownikiem(tablica, wielkosc);
printf("**********Podawaj x ktorego nie ma w tablicy.**********\n");
printf("Bez wartownika 100 elementow.\n");
bezwartownika(tablica, wielkosc);
printf("Z wartownikiem 100 elementow\n");
zwartownikiem(tablica, wielkosc);
sort(tablica, wielkosc);
printf("**********Podawaj x ktory jest w tablicy (dla posortowanych danych).**********\n");
printf("Binarnie 100 elementow\n");
binarnie(tablica, wielkosc);
printf("**********Podawaj x ktorego nie ma w tablicy (dla posortowanych danych).**********\n");
printf("Binarnie 100 elementow\n");
binarnie(tablica, wielkosc);
delete []tablica;
wielkosc = 1000;
printf("**********Tablica ustawiona na 1000 elementow**********\n");
tablica = new int(wielkosc);
addDane(tablica, wielkosc);
wyswietl(tablica, wielkosc);
printf("**********Podawaj x ktory jest w tablicy.**********\n");
printf("Bez wartownika 1000 elementow.\n");
bezwartownika(tablica, wielkosc);
printf("Z wartownikiem 1000 elementow\n");
zwartownikiem(tablica, wielkosc);
printf("**********Podawaj x ktorego nie ma w tablicy.**********\n");
printf("Bez wartownika 1000 elementow.\n");
bezwartownika(tablica, wielkosc);
printf("Z wartownikiem 1000 elementow\n");
zwartownikiem(tablica, wielkosc);
sort(tablica, wielkosc);
printf("**********Podawaj x ktory jest w tablicy (dla posortowanych danych).**********\n");
printf("Binarnie 1000 elementow\n");
binarnie(tablica, wielkosc);
printf("**********Podawaj x ktorego nie ma w tablicy (dla posortowanych danych).**********\n");
printf("Binarnie 1000 elementow\n");
binarnie(tablica, wielkosc);
delete []tablica;
wielkosc = 10000;
printf("Tablica ustawiona na 10000 elementow\n");
tablica = new int(wielkosc);
addDane(tablica, wielkosc);
wyswietl(tablica, wielkosc);
printf("Podawaj x ktory jest w tablicy.\n");
printf("Bez wartownika 10000 elementow.\n");
bezwartownika(tablica, wielkosc);
printf("Z wartownikiem 10000 elementow\n");
zwartownikiem(tablica, wielkosc);
printf("Podawaj x ktorego nie ma w tablicy.\n");
printf("Bez wartownika 10000 elementow.\n");
bezwartownika(tablica, wielkosc);
printf("Z wartownikiem 10000 elementow\n");
zwartownikiem(tablica, wielkosc);
sort(tablica, wielkosc);
printf("Podawaj x ktory jest w tablicy (dla posortowanych danych).\n");
printf("Binarnie 10000 elementow\n");
binarnie(tablica, wielkosc);
printf("Podawaj x ktorego nie ma w tablicy (dla posortowanych danych).\n");
printf("Binarnie 1000 elementow\n");
binarnie(tablica, wielkosc);
delete []tablica;
system("pause");
}