pętla na coraz większe tablice losowe oraz sortowanie ich

0

Dzień dobry

Napisałem kod na tworzenie kilku tablic z losowymi elementami ale chciałbym dodać do tego, żeby każda kolejna tablica zwiększała się o np. 10 i sortowała, np. jest tablica[10] - sortowanie, kolejna tablica[20] - sortowanie i tak 10 razy.
Próbowałem wcisnąć kolejną pętlę for(x ; x >100; x + 10) ale nie trybi. Jakieś podpowiedzi co gdzie wcisnąć lub zmienić?

int main()
{
    int x = 10;
    int tablica[x], i;
    srand(time(NULL));

        for(int nt = 0; nt < 10; nt++) {
            for(int i = 0; i < x; i++)
            {
                tablica[i] = rand()%100;
            }

                printf("| ");
                for (int m = 0; m < x; m++){
                printf("%d", tablica[m]);
                printf(" | ");
    }
    printf("\n\n");

   
    sortuj_wst(tablica);          //generowanie tablic dziala dopoki nie przywoluje tego sortowania z drukowaniem posortowanej tablicy
    printf("\n\n| ");
    for (int m = 0; m < 20; m++) {
        printf("%d", tablica[m]);
        printf(" | ");
    }
}


// sortowanie przez wstawianie

void sortuj_wst(int tab[]){
    int licznik1 = 0;
    int licznik2 = 0;
    for(int i = 1; i < (sizeof tab / sizeof *tab); i++) {
        int k = tab[i];
        int j = i-1;
        licznik2 = licznik2+1;

        while(j>=0 && tab[j]>k) {
            tab[j+1] = tab[j];
            j--;
            licznik1 = licznik1+1;
        }

        tab[j+1] = k;


    }

    printf("\nPodstawienia: %d", licznik1);     // chcialem zeby zliczalo operacje ktore wykonuje przy sortowaniu
    printf("\nPorownania: %d", licznik2);

    printf("\n");

    return tab;
}
```c
2

Nie możesz zmienić wielkości tablicy po jej utworzeniu. Zainteresuj się funkcjami malloc i realloc.
sizeof tab / sizeof *tab - to nie zadziała tak jak myślisz. Wielkość tablicy musi być przekazana w osobnym parametrze funkcji.

3

Jak bardzo Chcesz mieć ładną strukturę, bez problemów z przekazywaniem rozmiaru, (czego nie Możesz zrobić tak jak Zrobiłeś, patrz na post @kq), to Opakuj sobie wskaźnik w strukturkę, plus konstruktor i resize (pozostawiam Ci zaimplementowanie "sprzątania"):

# include <stdio.h>
# include <stdlib.h>

typedef struct {
    int *val;
    int length;
} intArray;

intArray  generateIntArray(int sz) {
	intArray a = {NULL, 0};
	a.val = malloc(sizeof(int) * sz);
	if (a.val == NULL) {
  		fprintf(stderr, "malloc failed\n");
	}
	a.length = sz;
	return a;
}

intArray resizeIntArray(intArray arr, int sz) {
	arr.val = realloc(arr.val, sz * sizeof(int));
	if (arr.val == NULL) {
  		fprintf(stderr, "malloc failed\n");
	}
	arr.length = sz;
	return arr;
}

void printIntArray(intArray a) {
	printf("[");
	for (int i = 0; i < a.length; ++i) {
		printf("%d ", a.val[i]);
	}
	printf("]\n");
}

int main () {
	intArray arr = generateIntArray(1);
	arr.val[0] = 1;
	printIntArray(arr);
	arr = resizeIntArray(arr, 2);
	arr.val[1] = 2;
	printIntArray(arr);
	return 0;
}
0

Jeszcze nie przerobiłem tematu malloc ale przerzuciłem deklarowanie tablicy w pętlę i jakoś działa:

int main()
{
    int x = 10;
    int i;
    srand(time(NULL));
        for(int nt = 0; nt < 10; nt++) {
            int tablica[x];
            for(int i = 0; i < x; i++)
            {
                tablica[i] = rand()%100;
            }
                printf("| ");
                for (int m = 0; m < x; m++){
                printf("%d", tablica[m]);
                printf(" | ");
    }
    printf("\n\n");

    x = x + 10;
    }
}

Pozostaje jedynie problem sortowania i wypisywania jego efektu za każdym razem. Brakuje mi w C javowego tab.length, jeżeli > sizeof tab / sizeof *tab < jest nieprawidłowe to trochę się zgubiłem

1

Brakuje mi w C javowego tab.length, jeżeli > sizeof tab / sizeof *tab < jest nieprawidłowe to trochę się zgubiłem

Wlaśnie, Ci powyżej napisałem, jak to obejść.

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