[C] Problem z kompilatorem i tablicami

0

Witam, mam problem z kompilatorem, np na ideone albo codechef (gcc 6.3) wszystko działa tak jak powinno, lecz jak próbuję odpalić ten kod w np terminalu, albo w VS to od razu crushuje.
Może używam czegoś co jest dozwolone tylko w jakichś kompilatorach, więc proszę o pomoc co to takiego :D
input to N, a potem N liczb

#include <stdio.h>

int main(void)
{
    int N, x, a;
    int y, max = 0;
    scanf("%d", &N);
    int tab[N];
    int tablica[1000000];
    int tabk[N];
    for (int i = 1; i < N + 1; i++) {
        scanf("%d", &x);
        tablica[i] = x;
        tab[i] = tab[i - 1] + tablica[i];
    }
    for (int i = 1; i < N + 1; i++) {
        for (int i = 1; i < N + 1; i++) {
            if (tab[i] >= (tab[N] - tab[i]) && y < tab[N] - tab[i]) {
                y = (tab[N] - tab[i]);
            }
            else if (tab[i] < (tab[N] - tab[i]) && y < tab[i]) {
                y = tab[i];
            }
        }
        tabk[i] = y;
        y = 0;
        a = tablica[1];
        for (int i = 1; i < N; i++) {
            tablica[i] = tablica[i + 1];
        }
        tablica[N] = a;
        for (int i = 1; i < N + 1; i++) {
            tab[i] = tab[i - 1] + tablica[i];
        }
    }
    for (int i = 1; i < N; i++) {
        if (tabk[i] > max) {
            max = tabk[i];
        }
    }
    printf("%d", max);
    return 0;
}
1

int tab[N]; Może być tak(powinno tak być, dla portable kodu), że rozmiar tablicy musi być znany na etapie kompilacji.

0
lion137 napisał(a):

int tab[N]; Może być tak(powinno tak być, dla portable kodu), że rozmiar tablicy musi być znany na etapie kompilacji.

Właśnie nie pomaga, też o tym myślałem.

1

Jakbyś opisał co ten kod ma robić, etc., To byłoby łatwiej.

0
lion137 napisał(a):

Jakbyś opisał co ten kod ma robić, etc., To byłoby łatwiej.
Już się robi, myslałem, że to będzie coś oczywistego czego nie widzę.

http://prntscr.com/py4lfm
i z tego mam wyznaczyc najwieksza odleglosc pomiedzy tymi z tym, że jak jest droga tak jakby z prawej strony "okręgu" to jest i z lewej i bierzemy tą krótszą.
https://prnt.sc/py4o7g
I wtedy w kodzie przypisywalem tą najdłuższą to tabk, pokolei dla odleglosci z A1, potem z A2 itd.
Mam nadzieję, że zrozumiesz heh

#include <stdio.h>

int main(void) {
int N,x,a;
int y,max=0;
scanf("%d", &N);
int tab[1000000];
int tablica[1000000];
int tabk[1000000];
for(int i = 1; i<N+1; i++)
    {
        scanf("%d", &x);
        tablica[i]=x; //utworzenie tablicy z kolejnych elementow
        tab[i]=tab[i-1]+tablica[i]; //stworzenie tablicy ktora jest powiekszona o kazdy kolejny wyraz z poprzedniej
    }
for (int i = 1; i<N+1; i++)
{
    for(int i = 1; i<N+1; i++)
        {
            if(tab[i]>=(tab[N]-tab[i]) && y<tab[N]-tab[i]) //jeśli np lewa strona kolka jest wieksza 
                    {
                        y=(tab[N]-tab[i]); //to przypisujemy wartosc z prawej strony(mniejszą)
                    }
            else if(tab[i]<(tab[N]-tab[i]) && y<tab[i])
                {
                    y=tab[i];
                }
        }
    tabk[i]=y;
    y=0;
    a=tablica[1];
        for(int i = 1; i<N; i++)
            {
                tablica[i]=tablica[i+1];  //tutaj shuffle tablicy zeby pierwszy wyraz poszedl na koniec a reszta zmienila miejsce o 1
            }
        tablica[N]=a;
        for(int i = 1; i<N+1; i++)
        {
        tab[i]=tab[i-1]+tablica[i]; //shuffle drugiej tablicy
        }
}
for(int i = 1;i<N;i++)
{
    if (tabk[i]>max)
        {
            max=tabk[i];
        }
}
printf("%d",max);
return 0;
}
0

Odkryłem, że w niektórych kompilatorach jak zmieniłem rozmiar tablic na 100000(kazdej) to wszystko działa, a jak był rozmiar 1000 to nie działało.
Jest ktoś w stanie wytłumaczyć dlaczego?

0
pablo3451 napisał(a):

Odkryłem, że w niektórych kompilatorach jak zmieniłem rozmiar tablic na 100000(kazdej) to wszystko działa, a jak był rozmiar 1000 to nie działało.
Jest ktoś w stanie wytłumaczyć dlaczego?

Pewnie nikt...

1

Zmień na static int tab... i sprawdź raz jeszcze.

0
_13th_Dragon napisał(a):

Zmień na static int tab... i sprawdź raz jeszcze.

Pomogło, wielkie dzięki! Takie to proste było.

1
pablo3451 napisał(a):

Odkryłem, że w niektórych kompilatorach jak zmieniłem rozmiar tablic na 100000(kazdej) to wszystko działa, a jak był rozmiar 1000 to nie działało.
Jest ktoś w stanie wytłumaczyć dlaczego?

Miszmasz rzeczy typu: wersja standardu, wersja kompilatora, rozszerzenia danego kompilatora względem danej wersji ANSI C,
gatunek zioła jaki palili programiści w danym czasie i cechy zarządzania pamięcią danego systemu operacyjnego i platformy sprzętowej

Pisząc kod w C i chcąc uniknąć drapania się po głowie zastanawiając się nad tego typu kwestiami jak:

  1. Czy w ogóle wiesz co robisz.
  2. Na jakiej wersji standardu C ma to działać
  3. Czy ma to działać też w innych wersjach kompilatorów na innych platformach.
  4. Czy to co robisz jest w ogóle sprecyzowane w standardzie, czy też podpada pod zachowania niezdefiniowane i za każdym wykonaniem kodu będzie się kończyć różnymi wynikami dla tego samego przypadku wejściowego.

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