Reklama
Pokazuje wyniki od 1 do 5 z 5

Temat: [C] Tablica - dziwne zachowanie

  1. #1
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny [C] Tablica - dziwne zachowanie

    Pomagam koledze pisać egzamin, program ma spytac uzytkownika o liczbe n=[2;10] i usupelnic tablice zgodnie z pewnym schematem
    dla 3:
    100
    220
    333
    001
    022
    333

    patrzcie kod:
    Kod:
    #include<stdio.h>
    int main(){
    int i,j,n;
    printf("Podaj n: ");
    do
    {
       scanf("%d",&n);
    }while(n>10 || n<2);
    
    int tab[2*n][n];
    
    for(i=1;i<=(2*n);i++)
        for(j=0;j<n;j++)
    {
        if(i<=n && j<i)
            tab[i][j]=i;
        else if(i>n && j>=(n-(i-n)))
            tab[i][j]=(i-n);
        else
            tab[i][j]=0;
    }
    
    for(i=1;i<=(2*n);i++){
        printf("\n");
        for(j=0;j<n;j++)
            printf("%d",tab[i][j]);
    }
    
    
    return 0;
    }
    i powiedzcie dlaczego przy 9 wychodzą fraglesy a dla reszty jest normalnie ;D


    #EDIT
    juz mam blad. Zapisuje tablice od miejsc tab[1][] a nie tab[0][]. Tylko teraz powiedzcie mi, dlaczego blad zwrocilo dopiero przy 9? Na 10 bylo normalnie
    Ostatnio zmieniony przez Kusterek : 10-02-2014, 12:06

  2. #2

    Data rejestracji
    2009
    Położenie
    EBE
    Wiek
    31
    Posty
    272
    Siła reputacji
    15

    Domyślny

    bo chcesz wpisać liczbę poza tablicę. Pętle masz od 1 do <= 2*n, jak chcesz tak zrobić to rozmiar tablicy powinien być: [2*n+1][n];

    @up sekundy

    @down
    a tego to już nie wiem, czasem różne rzeczy się dzieją. Też ostatnio miałem podobny problem i jak zwykle chodziło o indeksy. Nie wiem czemu dla tamtych liczb śmigało ;/
    Ostatnio zmieniony przez Tommy : 10-02-2014, 12:29

  3. Reklama
  4. #3
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    no okej, tylko dlaczego przy liczbach 2,3,4,5,6,7,8,10 wynik był dobry a przy 9 tylko wywalalo?

    I o ile dobrze pamietam z wykladu, to w C jest konwencja ze mozna przekroczyc tablice o 1 miejsce :P

  5. #4

    Stop saying "I wish",
    start saying "I will"!
    Witek jest teraz offline
    Avatar Witek
    Data rejestracji
    2008
    Wiek
    31
    Posty
    344
    Siła reputacji
    16

    Domyślny

    Przy tworzeniu tablicy

    Kod:
    int tab[2*n][n];
    rezerwujesz blok pamięci. Odwołując się do tablicy w ten sposób: "tab[n][m]" uzyskujesz jej adres (dzięki "tab") oraz odpowiednie przesunięcie ("n" oraz "m"). W języku C nie jest to kontrolowane, więc istnieje możliwość odwołania się do pamięci będącej poza zarezerwowanym obszarem.

    W dwóch przypadkach udało Ci się to osiągnąć. W obu zapisałeś i odczytałeś wartości do/z niezarezerwowanego bloku pamięci, jednak tylko w jednym z nich powstał problem(@edit: widoczny problem). Prawdopodobnie któraś z funkcji printf() zarezerwowała sobie kawałek dostępnego miejsca w pamięci, który pokrywał się z "fraglesami", o których wspomniałeś, bo miała do tego prawo. Stąd ten wymóg (z którym pewnie zapoznałeś się na zajęciach :p), aby poprawnie deklarować i odwoływać się do tablic.

    @down
    Z tego co napisałeś, to udało Ci się przekroczyć tablicę przy n=9 oraz n=10. Odwoływałeś się do istniejącej pamięci, więc liczby zostały tam wpisane poprawnie, ale obszar nie był zarezerwowany, więc kompilator mógł przeznaczyć go dla innej zmiennej. Fakt, że wystarczył tylko kawałek pamięci i nie została ona naruszona przy n=10 można przypisać szczęściu :p
    Ostatnio zmieniony przez Witek : 10-02-2014, 13:12

  6. #5
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    No okej, przemawia do mnie fakt, że obszar pomiędzy do którego chciałem się odwołać został wczesniej zarezerwowany przez coś innego :P

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. [JAVA] Tablica obiektow
    Przez hefalump w dziale Programowanie
    Odpowiedzi: 1
    Ostatni post: 31-10-2014, 23:24
  2. Dziwne zachowanie internetu.
    Przez Wyso52 w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 1
    Ostatni post: 25-09-2014, 22:34
  3. C-tablica dynamiczna
    Przez Puchałke w dziale Programowanie
    Odpowiedzi: 8
    Ostatni post: 29-09-2013, 23:31
  4. Dynamiczna tablica w C (NIE C++)
    Przez zakius w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 2
    Ostatni post: 19-04-2012, 07:49
  5. Dziwne zachowanie jednego z głośników
    Przez Skazaniec w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 7
    Ostatni post: 02-01-2012, 11:37

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •