[C++] Crash przy duzych liczbach :/

0

Witam, mam taki programik generujacy liczby, sortuje je i zapisujace je do pliku. Przy duzych tablicach powyzej 100 000 , jest crash :/ Fakt ze jest typ int, lecz zmienialem na long, long int i jest to samo :/ Jakies pomysly ? Jestem poczatkujacy i fakt jest zlepek c i c++ ;p Wczesniej programowalem tylko w c.

#include <cstdlib>
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;


void sortSzybkie(int *tablica, int lewy, int prawy)
{
int v=tablica[(lewy+prawy)/2];
int i,j,x;
i=lewy;
j=prawy;
   do{
     while (tablica[i]<v) i++;
     while (tablica[j]>v) j--;
     if (i<=j){
               x=tablica[i];
               tablica[i]=tablica[j];
               tablica[j]=x;
               i++; j--;
     }
   } while (i<=j);

   if (j>lewy) sortSzybkie(tablica,lewy, j);
   if (i<prawy) sortSzybkie(tablica, i, prawy);

}

void sortSzybkie2(int *tablica, int lewy, int prawy)
{
int v=tablica[(lewy+prawy)/2];
int i,j,x;
i=lewy;
j=prawy;
   do{
     while (tablica[i]>v) i++;
     while (tablica[j]<v) j--;
     if (i<=j){
               x=tablica[i];
               tablica[i]=tablica[j];
               tablica[j]=x;
               i++; j--;
     }
   } while (i<=j);

   if (j<lewy) sortSzybkie(tablica,lewy, j);
   if (i>prawy) sortSzybkie(tablica, i, prawy);

}

int main(){
cout<<"Program tworzy tablice o rozmiarze podanym przez uzytkownika \n";
int n;
cout<<"Podaj wielkosc tablicy: ";
cin>>n;
int t[n];

srand(static_cast<unsigned int>(time(0)));

for(int a=0; a<n; a++){
*(t+a)=rand() % 201-100;  // losowanie w zakresie <-100;100>
}

FILE *out;
out=fopen("sort_random.txt","w"); // zapisywanie do pliku liczb wygenerowanych losowo
fprintf(out,"%i ",n);          // zapisanie do pliku pierwszej liczby oznaczającej wielkosc tablicy
for (int a=0;a<n;a++){
        fprintf(out,"%i ",*(t+a)); // zapisanie do pliku reszty wygenerowanych liczb
}
fclose(out);

sortSzybkie(t,0,n-1);   // sortowanie quicksort rosnaco

FILE *out1;
out1=fopen("sort_rosnaco.txt","w"); // zapisywanie do pliku liczb posortowanych rosnaco
fprintf(out1,"%i ",n);       // zapisanie do pliku pierwszej liczby oznaczającej wielkosc tablicy
for (int a=0;a<n;a++){
        fprintf(out1,"%i ",*(t+a));     // zapisanie do pliku reszty wygenerowanych liczb
}
fclose(out1);

sortSzybkie2(t,0,n-1);       // sortowanie quicksort malejaco

FILE *out2;
out2=fopen("sort_malejaco.txt","w"); // zapisywanie do pliku liczb posortowanych malejaco
fprintf(out2,"%i ",n);       // zapisanie do pliku pierwszej liczby oznaczającej wielkosc tablicy
for (int a=0;a<n;a++){
        fprintf(out2,"%i ",*(t+a));           // zapisanie do pliku reszty wygenerowanych liczb
}
fclose(out2);

}
0
m1entus napisał(a)

Witam, mam taki programik generujacy liczby, sortuje je i zapisujace je do pliku. Przy duzych tablicach powyzej 100 000 , jest crash :/ Fakt ze jest typ int, lecz zmienialem na long, long int i jest to samo :/ Jakies pomysly ? Jestem poczatkujacy i fakt jest zlepek c i c++ ;p Wczesniej programowalem tylko w c.

#include <cstdlib>
#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;


void sortSzybkie(int *tablica, int lewy, int prawy)
{
int v=tablica[(lewy+prawy)/2];
int i,j,x;
i=lewy;
j=prawy;
   do{
     while (tablica[i]<v) i++;
     while (tablica[j]>v) j--;
     if (i<=j){
               x=tablica[i];
               tablica[i]=tablica[j];
               tablica[j]=x;
               i++; j--;
     }
   } while (i<=j);

   if (j>lewy) sortSzybkie(tablica,lewy, j);
   if (i<prawy) sortSzybkie(tablica, i, prawy);

}

void sortSzybkie2(int *tablica, int lewy, int prawy)
{
int v=tablica[(lewy+prawy)/2];
int i,j,x;
i=lewy;
j=prawy;
   do{
     while (tablica[i]>v) i++;
     while (tablica[j]<v) j--;
     if (i<=j){
               x=tablica[i];
               tablica[i]=tablica[j];
               tablica[j]=x;
               i++; j--;
     }
   } while (i<=j);

   if (j<lewy) sortSzybkie(tablica,lewy, j);
   if (i>prawy) sortSzybkie(tablica, i, prawy);

}

int main(){
cout<<"Program tworzy tablice o rozmiarze podanym przez uzytkownika \n";
int n;
cout<<"Podaj wielkosc tablicy: ";
cin>>n;
int t[n];

srand(static_cast<unsigned int>(time(0)));

for(int a=0; a<n; a++){
*(t+a)=rand() % 201-100;  // losowanie w zakresie <-100;100>
}

FILE *out;
out=fopen("sort_random.txt","w"); // zapisywanie do pliku liczb wygenerowanych losowo
fprintf(out,"%i ",n);          // zapisanie do pliku pierwszej liczby oznaczającej wielkosc tablicy
for (int a=0;a<n;a++){
        fprintf(out,"%i ",*(t+a)); // zapisanie do pliku reszty wygenerowanych liczb
}
fclose(out);

sortSzybkie(t,0,n-1);   // sortowanie quicksort rosnaco

FILE *out1;
out1=fopen("sort_rosnaco.txt","w"); // zapisywanie do pliku liczb posortowanych rosnaco
fprintf(out1,"%i ",n);       // zapisanie do pliku pierwszej liczby oznaczającej wielkosc tablicy
for (int a=0;a<n;a++){
        fprintf(out1,"%i ",*(t+a));     // zapisanie do pliku reszty wygenerowanych liczb
}
fclose(out1);

sortSzybkie2(t,0,n-1);       // sortowanie quicksort malejaco

FILE *out2;
out2=fopen("sort_malejaco.txt","w"); // zapisywanie do pliku liczb posortowanych malejaco
fprintf(out2,"%i ",n);       // zapisanie do pliku pierwszej liczby oznaczającej wielkosc tablicy
for (int a=0;a<n;a++){
        fprintf(out2,"%i ",*(t+a));           // zapisanie do pliku reszty wygenerowanych liczb
}
fclose(out2);

}

Nie znasz podstaw języka.

cout<<"Program tworzy tablice o rozmiarze podanym przez uzytkownika \n";
int n;
cout<<"Podaj wielkosc tablicy: ";
cin>>n;
int t[n];

Jeżeli tablica ma mieć dynamiczny rozmiar, który nie jest znany w czasie kompilacji musisz utworzyć ją przy użyciu operatora new(poczytaj o dynamicznej alokacji pamięci).

cout<<"Program tworzy tablice o rozmiarze podanym przez uzytkownika \n";
int n;
cout<<"Podaj wielkosc tablicy: ";
cin>>n;
int * t=new int[n];

Kiedy tablica już nie jest potrzebna zwalniasz ją operatorem delete :

delete [] t;

W przypadku tak tworzonych tablic możesz odnosić się do poszczególnych elementów operatorem [] więc reszta powinna być ok(nie patrzyłem na całość).

0

Wlasnie tego brakowalo, wszystko dziala, wielkie dzieki ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1