Ćwiczenia z C - deklaracja tablic wielowymiarowych.

Ćwiczenia z C - deklaracja tablic wielowymiarowych.
grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
0

Cześć.

Mam do zrobienia ćwiczenie, w którym muszę wypisać zawartość takich oto tablic:
Kompilator zwraca warningi o braku klamer w tablicach A, C i D.

Kopiuj
 
    int A[2][4]={1,2,3,4,5,6};
    int B[][4]={{1,2},{3,4},{5,6,7}};
    int C[][4]={1,2,{3},{4},5,6};
    int D[][4]={{1},{2,3,4},5,6}

Nie wiem czy dobrze rozpoznałem rozmiary, ale zrobiłem tak:

Kopiuj
#include <stdio.h>

int main(void){

    //  Zad. nr 1
    int A[2][4]={1,2,3,4,5,6};
    int B[][4]={{1,2},{3,4},{5,6,7}};
    int C[][4]={1,2,{3},{4},5,6};
    int D[][4]={{1},{2,3,4},5,6};
    int i,j;
    printf("A[2][4]={1,2,3,4,5,6};\n");
    for(i=0;i<2;i++){
        printf("Rzad:%d ",i+1);
        for(j=0;j<4;j++)
            printf("%d",A[i][j]);
        printf("\n");
    }
    printf("\nB[][4]={{1,2},{3,4},{5,6,7}};\n");
    for(i=0;i<3;i++){
        printf("Rzad:%d ",i+1);
        for(j=0;j<4;j++)
            printf("%d",B[i][j]);
        printf("\n");
    }
    printf("\nC[][4]={1,2,{3},{4},5,6};\n");
    for(i=0;i<2;i++){
        printf("Rzad:%d ",i+1);
        for(j=0;j<4;j++)
            printf("%d",C[i][j]);
        printf("\n");
    }
    printf("\nD[][4]={{1},{2,3,4},5,6};\n");
    for(i=0;i<3;i++){
        printf("Rzad:%d ",i+1);
        for(j=0;j<4;j++)
            printf("%d",D[i][j]);
        printf("\n");
    }
    printf("\n");
    return 0;
}

Wartość 'j' zawsze musi być mniejsza niż 4 ale czy dobrze rozpoznałem 'i'?

Pozdrawiam
Grzesiek

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:14 dni
1

Jest na to dwa sposoby: uniwersalny (dotyczy każdej tablicy zadeklarowanej w aktualnym zakresie) i inteligentny (czyli wystarczyło trochę się zastanowić):
http://ideone.com/GFS8M3


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
0

Czyli jest ok. W pamięci sobie liczyłem. Dziękuję za odp.

Zobacz pozostałe 9 komentarzy
grzesiek51114
grzesiek51114
Tak, kompilator liczy warunek pierwszej pętli, żeby 'y' nie przekroczyło rozmiaru tablicy :)
_13th_Dragon
O rzesz, warunek pętli jest liczony w trakcie wykonania (nie przez kompilator) zaś wyrażenie w warunku (sizeof(A)/sizeof(*A)) liczy kompilator!
grzesiek51114
grzesiek51114
Kompilator określa liczbę (sizeof(A)/sizeof(*A)), a warunek czy 'y'<rozmiar określa się podczas działania programu. Sizeof(typ) może być niekiedy różny, w zależności od kompilatora. No jeżeli teraz źle rozumiem to już masakra :)
_13th_Dragon
Po pierwsze sizeof(typ) (koniecznie z małymi literami), po drugie zależy raczej od platformy i/lub ustawień kompilatora. Bo może być ten sam kompilator działający na kilku platformach np gcc, ustawienia kompilatora mogą powodować zwiększenie "dziur" w strukturach.
grzesiek51114
grzesiek51114
Taaa, napisałem z wielkiej litery, bo była kropka kończąca zdanie. Już wszystko ładnie rozumiem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.