Witam. Mógłby mi ktoś pomóc w przerobieniu dwóch programów a konkretnie:
-------------PIERWSZY PROGRAM-----------------
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <ctime>
using namespace std;
//======================================================================
/*
Dwuwymiarowa tablica z danymi. Pierwszy indeks to numer paczki o rozmiarze [indeks+1]*10 000, drugi to zawartosc paczki.
Przyklad:
dane[0] to tablica z (0+1)*10000 = 10000 elementow
dane[1] to tablica z (1+1)*10000 = 20000 elementow
dane[2] to tablica z (2+1)*10000 = 30000 elementow
dane[9] przechowuje paczke z (9+1)*10000 = 100 000 elementow
*/
int *dane[10];
// zakres danych w paczce, z ktorego beda losowane liczby
// (losowane od 0 do dane_max)
int dane_max = 10000;
void generuj_dane()
{
// tworzymy paczki z danymi
for (int i = 0; i < 10; i++)
{
// liczba elementow w paczce
int n = (i+1) * 10000;
// tworzymy tablice z paczka
dane[i] = new int[n];
// wypelniamy paczke losowymi wartosciami z zakresu
for (int j = 0; j < n; j++)
{
dane[i][j] = rand() % (dane_max+1);
}
}
}
void zwolnij_dane()
{
for (int i = 0; i < 10; i++)
{
if (dane[i])
{
delete [] dane[i];
dane[i] = NULL;
}
}
}
//======================================================================
/*
Jak naliczane sa porownania? W kazdym wywolaniu petli for dodajemy
jedno, a po jej zakonczeniu kolejne - petla for wykonuje sie n+1 razy
dla n elementow, poniewaz ostatni jest sprawdzany przed zakonczeniem
petli.
*/
// sortujemy tablice za pomoca metody przez wybor
// w porownania i operacje zapisuje odpowiednie wartosci
void sortuj_wybor(int *tablica, int n, unsigned int &porownania, unsigned int &operacje)
{
// tablica pomocnicza, ktora zawiera posortowane dane
int *tablica_s = new int[n];
// przepisanie tablicy, zeby nie operowac na porcji danych
for (int i = 0; i < n; i++)
{
tablica_s[i] = tablica[i];
}
// dzialania algorytmu
for (int i = 0; i < n; i++)
{
++porownania;
int min = i;
for (int j = i+1; j < n; j++)
{
++porownania;
if (tablica_s[j] < tablica_s[min])
{
min = j;
}
++porownania;
}
++porownania;
swap(tablica_s[i], tablica_s[min]);
++operacje;
}
++porownania;
// zwalniamy pamiec i zwracamy wynik
if (tablica_s)
{
delete [] tablica_s;
}
}
// sortowanie przez zliczanie
void sortuj_zliczanie(int *tablica, int n, unsigned int &porownania, unsigned int &operacje)
{
// tablica pomocnicza, ktora zawiera zliczone wartosci
int *tablica2 = new int[dane_max+1];
// tablica pomocnicza, ktora zawiera posortowane dane
int *tablica_s = new int[n];
// zerowanie tablicy
for (int i = 0; i <= dane_max; i++)
{
tablica2[i] = 0;
++porownania;
}
++porownania;
// zliczanie wystapien poszczegolnych elementow
for (int i = 0; i < n; i++)
{
tablica2[tablica[i]]++;
++porownania;
++operacje;
}
++porownania;
// przepisanie tablicy pomocniczej do tablicy wyjsciowej
int k = 0;
for (int i = 0; i < dane_max; i++)
{
++porownania;
for (int j = 0; j < tablica2[i]; j++)
{
tablica_s[k++] = i;
++operacje;
++porownania;
}
++porownania;
}
++porownania;
// zwolnienie pamieci
if (tablica2)
delete [] tablica2;
if (tablica_s)
delete [] tablica_s;
}
//======================================================================
// uruchomienie testu dla danej partii
// partia - 1...10
void test(int partia)
{
generuj_dane();
cout << "Test dla partii " << ((partia) * 10000) << " elementow - porownania/przestawienia:" << endl;
cout << "==============================================================================" << endl;
int ilosc_testow = 10;
// czas1 - sortowanie przez zliczanie, czas2 - sortowanie przez wybor
unsigned int porownania1_suma = 0, operacje1_suma = 0, porownania2_suma = 0, operacje2_suma = 0;
cout << setw(12) << "Test";
cout << setw(25) << "Zliczanie";
cout << setw(25) << "Wybor";
cout << endl;
// wykonanie okreslonej ilosci testow
for (int i = 1; i <= ilosc_testow; i++)
{
generuj_dane();
// wykonanie testow
unsigned int p1 = 0, p2 = 0, o1 = 0, o2 = 0;
sortuj_zliczanie(dane[partia-1], (partia)*10000, p1, o1);
sortuj_wybor(dane[partia-1], (partia)*10000, p2, o2);
porownania1_suma += p1;
operacje1_suma += o1;
porownania2_suma += p2;
operacje2_suma += o2;
// wyswietlenie wynikow
cout << setw(12) << i;
cout << setw(12) << p1 << "/" << setw(12) << o1;
cout << setw(12) << p2 << "/" << setw(12) << o2;
cout << endl;
// zwalniamy dane
zwolnij_dane();
}
cout << setw(12) << "Srednia";
cout << setw(12) << (porownania1_suma/ilosc_testow) << "/";
cout << setw(12) << (operacje1_suma/ilosc_testow);
cout << setw(12) << (porownania2_suma/ilosc_testow) << "/";
cout << setw(12) << (operacje2_suma/ilosc_testow);
cout << endl;
cout << "Koniec testu";
cout << endl << endl;
}
//======================================================================
// uruchamiamy testy
int main()
{
srand(time(NULL));
while (true)
{
int partia = 0;
cout << "Uruchom test nr (testy: 1...10, wyjscie: 0): ";
cin >> partia;
if (partia >= 1 && partia <= 10)
{
system("cls");
test(partia);
}
else
{
break;
}
}
system("pause");
return 0;
}
------------DRUGI PROGRAM--------------
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <ctime>
using namespace std;
//======================================================================
/*
Dwuwymiarowa tablica z danymi. Pierwszy indeks to numer paczki o rozmiarze [indeks+1]*10 000, drugi to zawartosc paczki.
Przyklad:
dane[0] to tablica z (0+1)*10000 = 10000 elementow
dane[1] to tablica z (1+1)*10000 = 20000 elementow
dane[2] to tablica z (2+1)*10000 = 30000 elementow
dane[9] przechowuje paczke z (9+1)*10000 = 100 000 elementow
*/
int *dane[10];
// zakres danych w paczce, z ktorego beda losowane liczby
// (losowane od 0 do dane_max)
int dane_max = 10000;
void generuj_dane()
{
// tworzymy paczki z danymi
for (int i = 0; i < 10; i++)
{
// liczba elementow w paczce
int n = (i+1) * 10000;
// tworzymy tablice z paczka
dane[i] = new int[n];
// wypelniamy paczke losowymi wartosciami z zakresu
for (int j = 0; j < n; j++)
{
dane[i][j] = rand() % (dane_max+1);
}
}
}
void zwolnij_dane()
{
for (int i = 0; i < 10; i++)
{
if (dane[i])
{
delete [] dane[i];
dane[i] = NULL;
}
}
}
//======================================================================
// sortujemy tablice za pomoca metody przez wybor
// w porownania i operacje zapisuje odpowiednie wartosci
double sortuj_wybor(int *tablica, int n)
{
// tablica pomocnicza, ktora zawiera posortowane dane
int *tablica_s = new int[n];
// przepisanie tablicy, zeby nie operowac na porcji danych
for (int i = 0; i < n; i++)
{
tablica_s[i] = tablica[i];
}
clock_t start = clock();
// dzialania algorytmu
for (int i = 0; i < n; i++)
{
int min = i;
for (int j = i+1; j < n; j++)
{
if (tablica_s[j] < tablica_s[min])
{
min = j;
}
}
swap(tablica_s[i], tablica_s[min]);
}
double czas = (clock()-start)/(double)CLOCKS_PER_SEC;
// zwalniamy pamiec i zwracamy wynik
if (tablica_s)
{
delete [] tablica_s;
}
return czas;
}
// sortowanie przez zliczanie
double sortuj_zliczanie(int *tablica, int n)
{
// tablica pomocnicza, ktora zawiera zliczone wartosci
int *tablica2 = new int[dane_max+1];
// tablica pomocnicza, ktora zawiera posortowane dane
int *tablica_s = new int[n];
double start = clock();
// zerowanie tablicy
for (int i = 0; i <= dane_max; i++)
{
tablica2[i] = 0;
}
// zliczanie wystapien poszczegolnych elementow
for (int i = 0; i < n; i++)
{
tablica2[tablica[i]]++;
}
// przepisanie tablicy pomocniczej do tablicy wyjsciowej
int k = 0;
for (int i = 0; i < dane_max; i++)
{
for (int j = 0; j < tablica2[i]; j++)
{
tablica_s[k++] = i;
}
}
double czas = (clock()-start)/(double)CLOCKS_PER_SEC;
// zwolnienie pamieci
if (tablica2)
delete [] tablica2;
if (tablica_s)
delete [] tablica_s;
return czas;
}
//======================================================================
// uruchomienie testu dla danej partii
// partia - 1...10
void test(int partia)
{
generuj_dane();
cout << "Test dla partii " << ((partia) * 10000) << " elementow - czas wykonywania:" << endl;
cout << "==============================================================================" << endl;
int ilosc_testow = 10;
// czas1 - sortowanie przez zliczanie, czas2 - sortowanie przez wybor
double czas1_suma = 0.0, czas2_suma = 0.0;
cout << setw(10) << "Test";
cout << setw(13) << "Zliczanie";
cout << setw(13) << "Wybor";
cout << endl;
// wykonanie okreslonej ilosci testow
for (int i = 1; i <= ilosc_testow; i++)
{
generuj_dane();
// wykonanie testow
double czas1 = sortuj_zliczanie(dane[partia-1], (partia)*10000);
double czas2 = sortuj_wybor(dane[partia-1], (partia)*10000);
czas1_suma += czas1;
czas2_suma += czas2;
// wyswietlenie wynikow
cout << setw(10) << i;
cout << setw(10) << czas1 << " s.";
cout << setw(10) << czas2 << " s.";
cout << endl;
// zwalniamy dane
zwolnij_dane();
}
cout << setw(10) << "Srednia";
cout << setw(10) << (czas1_suma/ilosc_testow) << " s.";
cout << setw(10) << (czas2_suma/ilosc_testow) << " s.";
cout << endl;
cout << "Koniec testu";
cout << endl << endl;
}
//======================================================================
// uruchamiamy testy
int main()
{
srand(time(NULL));
while (true)
{
int partia = 0;
cout << "Uruchom test nr (testy: 1...10, wyjscie: 0): ";
cin >> partia;
if (partia >= 1 && partia <= 10)
{
system("cls");
test(partia);
}
else
{
break;
}
}
system("pause");
return 0;
}
z góry dzięki za pomoc.