ograiczenie przy wielkosci tablicy

0

Witam mam tu program przedstawiajacy 3 sortowania do wyboru.
Natomisat mam problem dorbny.
W programie jest : podaj rozmiar tablicy (czyli domyslnie ustala go użytkownik).
Natomisat jest ograniczony, nie można wybrac tablicy wiekszej niż 10;//
Chcialbym wiedziec czym to jest spowodowane i gdzie można to zmienic.
Pozdrawiem

#include <iostream>
#include <conio.h>
#include <ctime>
#include <stdlib.h>

using namespace std;
int rozmiar;
int m;
int nr_sort;

int sort_wyb (int tablica[], int n)
{
for(int i=0; i<=n-1; i++)
{
int min_index = i;
int min = tablica[i];
for(int j=i+1; j<n; j++)
if(tablica[j]<min)
{
min_index=j;
min=tablica[j];
}
tablica[min_index]=tablica[i];
tablica[i]=min;

}

return 0;
}

int sort_wstaw (int tablica[], int n)

{
for (int i=1; i<n; i++)
{
int j=i;
int k=tablica[i];
while(tablica[j-1]>k && j>0)
{
tablica[j]=tablica[j-1];
j--;
}
tablica[j]=k;
}
return 0;
}

int mergesort(int tablica[], int pocz, int kon)
{
int srodek;
int temp[rozmiar];
srodek=(pocz+kon+1)/2;
if(srodek-pocz > 1)
mergesort(tablica, pocz, srodek-1);
if(kon-srodek > 0)
mergesort(tablica, srodek, kon);
int j=pocz;
int k=srodek;
for(int i=pocz; i<=kon; i++)
temp[i]=(j==srodek || (k<=kon && tablica[j]>tablica[k])) ? tablica[k++] : tablica[j++];
for(int i=pocz; i<=kon; i++)
tablica[i]=temp[i];

return 0;
}

int main ()

{

int tab[rozmiar];

cout<<"Podaj rozmiar tablicy:\n";

cin >>rozmiar;
cout<<"Podaj przedzial:\n";
cin>>m;
srand(time(NULL));
for(int i=0; i<rozmiar; i++)
tab[i]=rand() % (m+1);

    cout<<"Tablica przed sortowaniem\n";
     for(int i=0; i<rozmiar; i++)
    cout << tab[i] <<"\t";

cout << "\nWybierz rodzaj sortowania:\n\n";
cout << "1. Sortowanie przez wstawianie.\n";

cout << "2. Metoda merge sort.\n";
cout << "3. Sortowanie wybor.\n";

cout << "Wybieram: ";

cin>>nr_sort;

cout << "\n";
switch(nr_sort) {
case 1:
cout << "\nalgorytmem sortowania przez wstawianie:\n\n";
sort_wstaw(tab, rozmiar);

        break;
    case 2:

     cout << "\nmerge sort:\n\n";
        mergesort(tab, 0, rozmiar-1);
       
        break;
  case 3:

     cout << "\nsortowaniem wybor:\n\n";
     sort_wyb(tab, rozmiar);
       
        break;
        
    default:
     break;

}

  cout<<"Tablica posortowana:\n";
    for(int i=0; i<rozmiar; i++)
  cout << tab[i] <<"\t";
  system("pause>>NULL");
   
  return 0;

}

0
  1. tak się nie tworzy tablic dynamicznych - jest to niezgodne ze standardem
  2. Wg. Ciebie jaką wartość ma zmienna rozmiar w momencie deklaracji tablicy?? Ma wartość "tylko Bóg wie jaką" :/
0

W tym przypadku nie ma "Bóg wie jaką" ale ściśle określone ZERO.

0

jest to niezgodne ze standardem

Heh, za każdym razem ktoś musi zwrócić na to uwagę. Tak, jest to niezgodne ze standardem. Ale działa, bo GCC taką „niezgodność ze standardem” obsługuje. Nie ma powodu wytykać każdego rozszerzenia składni „bo to niezgodne”. Bo póki autor używa GCC to mu to będzie działać, a jak kiedyś na innym kompilatorze nie zadziała, to i tak zorientuje się dlaczego.

tak się nie tworzy tablic dynamicznych
To nie jest tablica dynamiczna, powstaje na stosie jak każda zwykła tablica. Jest tylko złagodzona reguła, że jako rozmiar nie musi być podana stała.
W kodzie są poważniejsze problemy, jak użycie system(pause) czy użycie stdio.h zamiast cstdio. Zresztą część tych nagłówków można by spokojnie wywalić.

0

Bo w GCC zrobili to dla zgodności z C99. Niby wg idei C++ kod C powinien być kompilowalny bez większych zmian (różnice w automatycznym rzutowaniu z void*, ale to jest chyba najpoważniejsza zmiana).

0

No że zero to ja wiem tylko nie o to pytam.
Chodzi mi ze wielkość tablicy nie moze byc wieksza niz 10 a z reszta sobie jakos poradze:)

0

Przecież już to zostało powiedziane.
Jaką wartość ma zmienna rozmiar w momencie tworzenia tablicy?? MA ROZMIAR 0. Więc nie ma ograniczenia do 10 tylko ogólnie operujesz gdzieś w kosmosie, a nie na tablicy.

0

Tablice o zerowym rozmiarze są nieprawidłowe...
warning: ISO C++ forbids zero-size array 'pusta_tablica'
Ale oczywiście "się skompiluje" bez paru flag. Z tym, że taki kod różnie będzie działać na różnych poziomach optymalizacji:

#include <iostream>

int pusta_tablica[0];
int raz, dwa, trzy, cztery;

int main() {
    pusta_tablica[1] = 111;
    pusta_tablica[2] = 222;
    pusta_tablica[3] = 333;
    pusta_tablica[4] = 444;
    
    std::cout << raz << " "
            << dwa << " "
            << trzy << " "
            << cztery << "\n";
    
    return 0;
}
 
$ g++ -O0 kod.cpp && ./a.exe
111 222 333 444
$ g++ -O1 kod.cpp && ./a.exe
111 222 333 444
$ g++ -O2 kod.cpp && ./a.exe
0 0 0 0
$ g++ -O3 kod.cpp && ./a.exe
0 0 0 0
0
 
  int *tab,d;
  cout<<"podaj rozmiar tablicy ";
  cin>>d;
  tab=new int[d];  
......
......
delete []tab;

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