Sortowanie tablicy liczb całkowitych

0

Witam.
Mam drobny problem, którego nie potrafię rozwiązać ani w C, ani w PASCAL'u, dlatego zwracam się z prośbą o wytknięcie mi błędu.

Definiując tablicę ( tab[n] ) chciałabym by "n" było deklarowane przez użytkownika na początku działania programu.
Cały program działa mi bez zarzutu, gdy na samym początku deklaruję zamiast "n" jakąś stałą liczbę.

Próbowałam przez zwykłe wczytanie wartości n (scanf("%d",&n); ) , ale ta metoda nie działa.

Proszę o wskazówki :)

0

kpisz Sobie?
Pokaż ten kod.

0

opcja 1

int n;
cin >> n;
int *tab = new int[n];
...
delete [] tab;
return 0;

opcja 2

#include <vector>
...
int n;
vector<int>tab(n);
...
return 0;
0

Pascal:

var Tablica: Array of MojTyp;

Ustawienie rozmiaru:

SetLength(Tablica, Rozmiar);

Btw, ciągle nie kapuje, co to ma do sortowania?

0

Temat nie ma nic wspólnego z treścią postu, zmień to bo się jakiś mod zdenerwuje. ;-)

W C99 jest takie coś co zwie się VLA - variable length array i prosty zabieg z pobraniem wartości n od użytkownika oraz stworzeniem na podstawie tego rozmiaru tablicy powinien działać w kompilatorach zgodnych z C99. Jeżeli Twój kompilator nie jest zgodny musisz poczytać o funkcji malloc, tutorial: http://en.wikipedia.org/wiki/C_dynamic_memory_allocation

0
 int n,*tab;
 scanf("%d",&n);
 tab=malloc(sizeof *tab*(n+1));
 free(tab);
0

Faktycznie chodziło o użycie tego malloc.
Błąd prowadzącego, który nawet nie wspomniał o istnieniu czegoś takiego ;)

Dziękuję za pomoc. :)

p.s. zmieniłabym temat, ale niestety nie dam rady, gdyż pisze jako gość.

1
void QuickSort(int *T,int Lo,int Hi){
   int i,j;
   int x;
   x=T[(Lo+Hi)/2];
   i=Lo;
   j=Hi-1;
   do{
      while(T[i]<x)++i;
      while(T[j]>x)--j;
      if(i<=j){
         int tmp=T[i];
         T[i]=T[j];
         T[j]=tmp;
         ++i;--j;
      }
   }while(i<j);
   if(Lo<j)QuickSort(T,Lo,j);
   if(Hi>i)QuickSort(T,i,Hi);
}
int main(){
    int n,*tab,i=0;
    scanf("%d",&n);
    tab=malloc(sizeof*tab*(n));
    for(i;i<n;i++)
        scanf("%d",&tab[i]);
    for(i=0;i<n;i++)
        printf("%d  ",tab[i]);
    printf("\n\n");
    QuickSort(tab,0,n);
    for(i=0;i<n;i++)
        printf("%d  ",tab[i]);
    free(tab);
    return 0;
}

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