Witajcie,
Mam problem z poniższym kodem. Program wysypuje się na liczniku czasu wykonania i zupełnie nie mam pojęcia jak z tego problemu wybrnąć a czas niestety nagli.
// Defines the entry point for the console application.
//
#include "limits.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "stdafx.h"
#include "time.h"
#include <cstdio>
/* Zdefiniuj typ strukturalny zawierający 3 pola (int, char, double ). Następnie zaimplementuj funkcje do obsługi zdefiniowanego typu:
losowanie – funkcja, kasowanie – funkcja, sortowanie – funkcja, zliczanie znaków – funkcja.
W funkcji main() programu wywołaj następująco sekwencję funkcji (oznaczenia czas start, czas stop oznaczają początek i koniec pomiaru czasu wykonania wraz z wyświetleniem czasu wykonania) */
struct DATA {
int liczba_int;
char znak;
double liczba_double;
};
/*funkcja losowania znaków*/ char Losuj_char() {
char znak = rand() % 255;
return(znak);
}
/*funkcja losowania liczb*/ int Losuj_int() {
int no = rand() % INT_MAX;
return (no);
}
DATA** Losuj_dane(int N) {
/*dynamiczna tablice wskaznikow na struktury typu DATA */
struct DATA **ptr_tab;
/*rezerwowanie miejsca na tablicę wskaźników*/
ptr_tab = (struct DATA**)malloc(N*sizeof(int));
/*rezerwowanie pod każdy wskaźnik pamięci na DATA*/
for (int i = 0; i<N; i++) {
ptr_tab[i] = (struct DATA*) malloc(sizeof(struct DATA));
ptr_tab[i]->liczba_int = Losuj_int();
ptr_tab[i]->znak = Losuj_char();
ptr_tab[i]->liczba_double = 0;
}
return(ptr_tab);
}
void Kasuj_dane(struct DATA** ptr_tab, int N) {
for (int i = 0; i<N; i++){
free(ptr_tab[i]);
}
free(ptr_tab);
}
void Sortuj_dane(struct DATA** ptr_tablica, int N) {
do
{
for (int i = 1; i<N; i++)
{
if (ptr_tablica[i-1]->liczba_int > ptr_tablica[i]->liczba_int)
{
struct DATA *wsk = ptr_tablica[i];
ptr_tablica[i-1] = ptr_tablica[i];
ptr_tablica[i] = wsk;
wsk = NULL;
}
}
N--;
} while (N>1);
}
void Zliczanie_znakow(DATA** ptr_tablica, int N, char znak){
int licznik_znakow = 0;
for (int i = 0; i<N; i++)
{
do {
licznik_znakow++;
} while (ptr_tablica[i]->znak == znak);
printf("Znak: %c \n", znak);
printf("liczba wystapien znaku: %d", licznik_znakow);
}
}
void LOSOWANIE(int N, char szukaj_znak) {
clock_t start, stop;
double time;
struct DATA** ptr_tablica;
start = clock(); /*start programu*/
ptr_tablica = Losuj_dane(N);
Sortuj_dane(ptr_tablica, N);
Zliczanie_znakow(ptr_tablica, N, szukaj_znak);
stop = clock();
time = (stop - start) / CLK_TCK;
Kasuj_dane(ptr_tablica, N);
//stop = clock();
//time = (stop - start) / CLK_TCK;
printf("Losowanie: %d \n", N);
printf("Czas wykonania: %0.50f", time);
getchar();
}
int _tmain(int argc, _TCHAR* argv[])
{
LOSOWANIE(1000, 'A');
LOSOWANIE(10000, 'B');
LOSOWANIE(100000, 'C');
system("pause");
getchar();
getchar();
return 0;
}