c wyk+éad 5, Studia, Rok I, Informatyka, informatyka


Tablice

Tablica to ciąg zmiennych (inaczej: obiektów) tego samego typu, które zajmują ciągły obszar w pamięci. Poszczególne składniki tablicy to jej elementy.

Deklaracja tablicy zbudowanej z dziesięciu elementów typu int:

int tabl[10]; - w pamięci zostaje zarezerwowane miejsce dla 10 liczb typu int tj. 40 bajtów. Rozmiar takiej tablicy jest wartością stałą tj. musi być znaną podczas kompilacji.

Zadeklarowana tablica posiada następujące elementy:

tabl[0] tabl[1] tabl[2] tabl[3] tabl[4]

tabl[5] tabl[6] tabl[7] tabl[8] tabl[9]

0x08 graphic

ostatni element 10-elementowej tablicy ma numer 9 (ogólnie dla n-elementowej tablicy) ma numer n-1.

Nadanie wartości poszczególnym elementom (tzw. inicjalizację) można przeprowadzić w momencie definicji tablicy:

int a[3] = {2, 25, 8 };

co jest równoważne zapisowi: int a[] = {2, 25, 8 }; - kompilator utworzy tablicę "a" trójelementową.

Jedynie przy inicjalizacji kompilator sprawdza czy wymiar tablicy nie został przekroczony (tj. czy nie za dużo liczb wstawiono w nawiasy klamrowe).

Gdy liczb będzie mniej niż wymiar tablicy kompilator wstawi zera.

Tablice mogą być wielowymiarowe.

Przykład deklaracji tablicy dwuwymiarowej:

int AGA[4][6];

Tablica AGA:

Ma 4 wiersze o numerach od 0 do 3.

Ma 6 kolumn o numerach od 0 do 5

Zapis AGA[2][4] można traktować jako element w 3 wierszu i 5 kolumnie

0x08 graphic
0x08 graphic

[0][0]

[0][1]

[0][2]

[0][3]

[0][4]

[0][5]

[1][0]

[1][1]

[1][2]

[1][3]

[1][4]

[1][5]

[2][0]

[2][1]

[2][2]

[2][3]

0x08 graphic
[2][4]

[2][5]

[3][0]

[3][1]

[3][2]

[3][3]

[3][4]

[3][5]

WIERSZ 1

WIERSZ 2

0x08 graphic
WIERSZ 3

WIERSZ 4

1 2 3 4 5 6

K O L U M N Y

Traktując tablicę AGA jako tablicę tablic, zapis AGA[2][4] oznacza 5 element w 3 tablicy. W pamięci tablica AGA jest ciągłym obszarem składającym się z 4 zbiorów po 6 liczb każdy:

[0][0]

[0][1]

[0][2]

[0][3]

[0][4]

[0][5]

[1][0]

[1][1]

[1][2]

[1][3]

[2][4]

[2][5]

[3][0]

[3][1]

[3][2]

[3][3]

[3][4]

[3][5]

Tablicę wielowymiarową inicjować można następująco:

int ARA[2][4]= {

{ 1, 2, 3, 4 },

{ 5, 6, 7, 8 },

};

Łańcuchy to tablice składające się ze znaków. Koniec łańcucha jest sygnalizowany przez pierwszy napotkany znak '\0' (=null).

char znaki [5] = {'w', 'i', 't', 'a', 'j'}; - to jest tablica znaków
char znaki [6] = {'w', 'i', 't', 'a', 'j' '\0'}; - to jest łańcuch, ta definicja jest równoważna następującej: char znaki [6] = "witaj";

Przekazywanie tablicy do funkcji

Tablice przesyła się do funkcji podając tylko adres początku tej tablicy. Jest to więc przekazywanie przez parametr - zawartość tablicy można w funkcji zmienić i informacja ta będzie przekazana do segmentu wywołującego funkcję.

0x08 graphic

Przykład

funkcja: void funk(int ADA[]);

tablica: ADA[] = {1, 2, 3, 4, 5};

wywołanie funkcji: funk(ADA);

ponieważ ADA jest adresem zerowego elementu to poniższe zapisy są równoważne:

ADA &ADA[0]

podobnie:

ADA + 2 &ADA[2]

Program: tablica float ADA[] zainicjowana jako zbiór liczb rzeczywistych w funkcji Zmiana(float ADA[]) stanie się zbiorem wartości sinusów dla kolejnych kątów zmieniających się co 100.

0x08 graphic

#include <stdio.h>

#include <math.h>

void zmiana(float []);

void main(void)

{

float ADA[]={0., 1., 2., 3., 4., 5., 6., 7., 8., 9.};

int i;

for (i=0; i<10;i++) printf("%7.1f",ADA[i]);

printf("\n\n");

zmiana(ADA);

for (i=0; i<10;i++) printf("%7.4f",ADA[i]);

printf("\n\n");

}

void zmiana(float TT[])

0x08 graphic
{

int i=0;

while (i<=9)

{

TT[i]=sin(10*TT[i]*3.14/180);

i++;

}

return;

}

0x08 graphic

Prototyp funkcji, której parametrem jest tablica wielowymiarowa wymaga podania wielkości wszystkich kolejnych wymiarów z wyjątkiem pierwszego, to jest np.: void funk(float [] [20] [3]);

Program obliczający iloczyn dwu macierzy WxW (przykładowo W=3)

#include <stdio.h>

#include <math.h>

#define W 3

void wczytaj(int [][W]);

void druk(int [][W]);

void iloczyn(int [][W], int [][W], int [][W] );

void main(void)

{

int ADA[W][W],BET [W][W],ILO[W][W];

wczytaj(ADA);

wczytaj(BET);

printf("\n\n");

druk(ADA);

druk(BET);

iloczyn(ADA,BET,ILO);

druk(ILO);

return;

}

void druk(int A[][W])

{

int i,j;

for (i=0; i<W;i++)

{

for (j=0; j<W;j++) printf("%5d",A[i][j]);

printf("\n");

}

printf("\n\n");

return;

}

void wczytaj(int A[][W])

{

int i,j;

printf("Podaj elementy macierzy\n");

for (i=0; i<W;i++)

for (j=0; j<W;j++) scanf("%d",&A[i][j]);

return;

}

void iloczyn(int A[][W], int B[][W], int C[][W])

{

int i,j,k,s;

for (i=0; i<W;i++)

for (j=0; j<=2;j++)

{

s=0;

for (k=0; k<W;k++) s=s +A[i][k]*B[k][j];

C[i][j]=s;

}

return;

}

0x08 graphic

Program wyznacza kąt pomiędzy dwoma wektorami.

0x08 graphic

#include <stdio.h>

#include <math.h>

#define N 3

void wczytaj(float []);

void druk(float []);

float il_skal (float [],float []);

float dlug (float []);

float kat(float [],float []);

void main(void)

{

float alfa,ADA[N],BET [N];

wczytaj(ADA);

wczytaj(BET);

printf("\n\n");

druk(ADA);

druk(BET);

alfa=kat(ADA,BET);

printf("alfa=%5.2f\n\n",alfa);

return;

}

void druk(float A[N])

{

int i;

for (i=0; i<N;i++) printf("%7.2f",A[i]);

printf("\n\n");

return;

}

void wczytaj(float A[N])

{

int i;

printf("Podaj skladowe wektora\n");

for (i=0; i<N;i++) scanf("%f",&A[i]);

return;

}

float dlug (float A[N])

{

int i;

float d=0;

for (i=0;i<N;i++) d=d+A[i]*A[i];

return sqrt(d);

}

float il_skal (float A[N],float B[N])

{

int i;

float s=0;

for (i=0;i<N;i++) s=s+A[i]*B[i];

return s;

}

float kat(float A[N], float B[N])

{

float a;

a=acos(il_skal(A,B)/dlug(A)/dlug(B));

return a*180./3.1416;

}

0x08 graphic

INFORMATYKA WYKŁAD 5 Temat: Język C 8

0x01 graphic

0x01 graphic

0x01 graphic

Funkcja może być typu void - wynik jej działania to zmiana wartości parametru ADA.

Prototyp funkcji może nie zawierać nazwy tablicy, musi natomiast zawierać informację [], że parametr jest tablicą

0x01 graphic

Nazwa tablicy jest równocześnie adresem jej zerowego elementu

Numeracja elementów tablicy zaczyna się od zera



Wyszukiwarka

Podobne podstrony:
c wyk+éad 4, Studia, Rok I, Informatyka, informatyka
c wyk+éad 0, Studia, Rok I, Informatyka, informatyka
c wyk+éad 6, Studia, Rok I, Informatyka, informatyka
c wyk+éad 8, Studia, Rok I, Informatyka, informatyka
c wyk+éad 3, Studia, Rok I, Informatyka, informatyka
kolos z inf, Studia, Rok I, Informatyka, semestr I
Informatyka 5, Studia, Rok I, Informatyka
Zad domowe 9, Studia, Rok I, Informatyka, semestr I
Ostatni wyk+éad z filozofi, I rok
Wyk+Ă©ady[1], Biotechnologia 3 rok 1 i 2 sem, Bioinformatyka

więcej podobnych podstron