Deklaracje W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane: int i,j,n; double x, tab[1000]; przykładowe deklaracje w C Pierwsze użycie zmiennej niezadeklarowanej w języku bez obowiązkowych deklaracji prowadzi do tego, że zmienna sama się deklaruje Pierwsze użycie zmiennej niezadeklarowanej w języku z obowiązkowymi deklaracjami prowadzi do komunikatu błędu w trakcie kompilacji programu: testc: In function main : testc:2: error: i undeclared(first use in this function) testc:2: error:(each undeclared identifier is reported only once testc:2: error: for each function it appears in) Deklaracje Wykład5TYPYDANYCH,str2 Pierwsze użycie zmiennej niezadeklarowanej w języku bez obowiązkowych deklaracji prowadzi do tego, że zmienna sama się deklaruje W takim razie po co wymagać jawnego deklarowania zmiennych? 1 Jawne deklarowanie zmiennych ułatwia znalezienie błędu wynikającego z pomylenia litery Np napisanie zm0 zamiast zm 0 powoduje: w języku bez obowiązkowych deklaracji automatyczną deklarację nowej zmiennej zm0 i błędne działanie programu, w języku z obowiązkowymi deklaracjami sygnał błędu w trakcie kompilowania 2Wdeklaracjipodajesiętypzmiennej;acozatymidzie,zestawoperacji dozwolonych na niej 3 Deklaracja typu zmiennej pomaga kompilatorowi dobrać właściwą implementację zmiennej
Deklaracje Wwielujęzykachprogramowania(wtymwC)operacja/madwa znaczenia: dzielenie całkowite(z resztą): 7/3=2 iloraz 7%3=1 reszta dzielenie rzeczywiste: 70/30=2333 Któreztychdziałańwywoływanejestkomendąx=y/z;wprogramie? W języku z obowiązkowymi deklaracjami kompilator podejmuje decyzję w oparciu o zadeklarowany typ argumentów: jeśli oba argumenty są całkowite, to dzielenie całkowite, jeśli któryś argument jest rzeczywisty, to dzielenie rzeczywiste Wykład5TYPYDANYCH,str4 JęzykC:typint (od ang integer) liczby całkowite: 012:int stałe; -:int int zmianaznaku; +-*/%:int int int dodawanie,odejmowanie,mnożenie, dzielenie całkowite, reszta z dzielenia; ==!=<><=>=:int int int równe,nierówne,mniejsze, większe, mniejsze-równe, większe-równe(wartości logiczne są włączonedotypu int,prawda=1,fałsz=0)
int 012 - +-*/% ==!=<><=>= Wykład5TYPYDANYCH,str6 Język C: typ double (od ang double precision floating point) liczby rzeczywiste: 0011231602E-23:double stałe; -fabsfloorsqrtlogexpsincostan:double double zmiana znaku, wartość bezwzględna, część całkowita, pierwiastek kwadratowy,logarytmnaturalny,eksponens(exp(x)=e x ),sinus, cosinus, tangens; +-*/pow:double double double dodawanie,odejmowanie, mnożenie, dzielenie, potęgowanie; ==!=<><=>=:double double int równe,nierówne, mniejsze, większe, mniejsze-równe, większe-równe
+-*/pow 001 1231 602E-23 double ==!=<><=>= int -fabsfloorsqrtlogexpsincostan Wykład5TYPYDANYCH,str8 JęzykC:typchar (od ang character) znaki(czcionki): a W @ :char stałe; ==!=<><=>=:char char int równe, nierówne, mniejsze, większe, mniejsze-równe, większe-równe(porównania wg kolejności ASCII, na literach alfabetyczne, na cyfrach wg wielkości)
a W @ char ==!=<><=>= int Wykład5TYPYDANYCH,str10 Konwersje typów(rzutowania) (int) (char) double int char (double) (int) Przykład: M (int)(char)(int)357 = =(int)(char)35 =(int) # =35
Konwersja char int (znaki ASCII) 32: 46: 60:< 74:J 88:X 102:f 116:t 33:! 47:/ 61:= 75:K 89:Y 103:g 117:u 34:" 48:0 62:> 76:L 90:Z 104:h 118:v 35:# 49:1 63:? 77:M 91:[ 105:i 119:w 36:$ 50:2 64:@ 78:N 92:\ 106:j 120:x 37:% 51:3 65:A 79:O 93:] 107:k 121:y 38:& 52:4 66:B 80:P 94:^ 108:l 122:z 39: 53:5 67:C 81:Q 95:_ 109:m 123:{ 40:( 54:6 68:D 82:R 96: 110:n 124: 41:) 55:7 69:E 83:S 97:a 111:o 125: 42:* 56:8 70:F 84:T 98:b 112:p 126:~ 43:+ 57:9 71:G 85:U 99:c 113:q 44:, 58:: 72:H 86:V 100:d 114:r 45:- 59:; 73:I 87:W 101:e 115:s Wykład5TYPYDANYCH,str12 Język C: typy tablicowe double tab[1000]; char napis[50]; Tablica o deklaracji <typ> <nazwa>[n]; zawiera n zmiennych typu <typ> numerowanychod0don 1włącznie Zmiennym w tablicy można nadać wartość podając nazwę tablicy i indeks (wyrażenie) Np jeśli k == 3, to tab[k*k+2]=314; oznacza tab[11]=314; Zmiennych z tablicy można użyć podając nazwę tablicy i indeks(wyrażenie) Npjeślii==5,to tab[2*i+1] oznacza tab[11]
Język C: typy tablicowe double tab[n]; tab 0 2183 1-0002 2 3006 N 1 2123 tab[0] == 2183 tab[1] ==-0002 tab[2] == 3006 tab[n-1] == 2123 Przykład: sortowanie bąbelkowe Wykład5TYPYDANYCH,str14 char tab[6]; 0 1 2 3 4 5 tab: b e a q v z
Przykład: sortowanie bąbelkowe #include<stdioh> #define ILE 100 main(){ doubletab[ile],x; intk,n; printf("\ndane:\n"); for(k=0; k<ile; k=k+1){ printf(" tab[%i]==",k); scanf("%lf",&tab[k]); for(n=ile; n>1; n=n-1) for(k=1; k<n; k=k+1) if(tab[k-1]>tab[k]){ x=tab[k-1]; tab[k-1]=tab[k]; tab[k]=x; printf("\nwyniki:\n\n"); for(k=0; k<ile; k=k+1) printf(" tab[%i] ==%lf\n", k, tab[k]); definicja stałej deklaracje zmiennych wczytywanie danych sortowanie drukowanie wyników Wykład5TYPYDANYCH,str16 Język C: tablice wyżej-wymiarowe #definep30 #defineq40 #definer50 double macierz1[p][q], macierz2[q][r], macierz[p][r]; char tekst[50][80]; Tablica o deklaracji <typ> <nazwa>[n][k]; zawiera n k zmiennych typu <typ> numerowanychod0,0don 1,k 1włącznie Zmiennym w tablicy można nadać wartość podając nazwę tablicy i indeksy (wyrażenia) Npjeślik==3, to tab[k*k+2][2*k-1]=314 oznacza tab[11][5]=314 Zmiennych z tablicy można użyć podając nazwę tablicy i indeksy(wyrażenia) Np jeśli i == 5, to tab[2*i+1][i] oznacza tab[11][5]
Język C: tablice wyżej-wymiarowe double tab[k][n]; tab[0] tab[1] tab[2] 0 1 2 N 1 2183-0002 3006 2123 0-170 0 53 1235 1834 515151 0 tab[k-1] -1235-0018 -1005 15 tab[1][1] ==-170 Wykład5TYPYDANYCH,str18 Język C: tablice wyżej-wymiarowe doubletab[l][k][n]; tab składa się zlwarstw pokwierszy po N elementów K N L
Przykład: drukowanie w kolumnach Jakwydrukowaćliczbywkolumnachzgórynadół? 0 5 10 15 1 6 11 16 2 7 12 17 3 8 13 18 4 9 14 19 Wskazówka: Zapisać te liczby do tablicy dwuwymiarowej kolumnami i drukować wierszami Przykład: drukowanie w kolumnach Wykład5TYPYDANYCH,str20 Jakwydrukowaćliczbywkolumnachzgórynadół? #include<stdioh> #define WIERSZE 5 #define KOLUMNY 4 main(){ int i, j, k, a[wiersze][kolumny]; k=0; for(i=0; i<kolumny; i=i+1) for(j=0;j<wiersze; j=j+1){ a[j][i] = k; k=k+1; printf("\n"); for(j=0; j<wiersze; j=j+1){ for(i=0; i<kolumny; i=i+1) printf(" %i",a[j][i]); printf("\n"); printf("\n"); definicje stałych deklaracje zapis do tablicy kolumnami wydruk z tablicy wierszami