1 / 12

Informatyka I Wykład 9

Informatyka I Wykład 9. TABLICE PREPROCESOR OPERATORY c.d. (nie tylko binarne). Tablice jednowymiarowe. type_name identifier[const_expr];. type_name – nazwa typu elementu tablicy identifier – nazwa tablicy

vesta
Télécharger la présentation

Informatyka I Wykład 9

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informatyka IWykład 9 TABLICE PREPROCESOR OPERATORY c.d. (nie tylko binarne) Jerzy F. Kotowski

  2. Tablice jednowymiarowe type_name identifier[const_expr]; • type_name– nazwa typu elementu tablicy • identifier – nazwa tablicy • const_expr – liczba elementów tablicy. Musi to być wyrażenie stałe (obliczane przez kompilator) • Indeksy: 0, 1, 2, … , const_expr - 1 • Przykłady: int Ala[10]; double Ola[2*7+5]; struct Ula Ela[100]; – kiedyś będzie Ula Ela[100]; – C++ Ala[4] = 3; Jerzy F. Kotowski

  3. Dyrektywy preprocesora • Jak sama nazwa wskazuje preprocesor to narzędzie, które funkcjonuje przed rozpoczęciem procesu właściwego. • Proces – proces kompilacji programu. Preprocesor przygotowuje program źródłowy do kompilaacji. • Przykłady: #include <stdio.h> • #include “c:\Jurek\\C\inf_8_1.cpp” • #define S(x) ((x)*(x)) • #define Ala • #define N 10 Jerzy F. Kotowski

  4. 9_1 Dyrektywa definea wyrażenia stałe • Przykład: #define N10 • ……………… • float Ula[N], Ela[N*N+2]; • int i; • for(i=0;i<N;i++) Ula[i] = 2*i; • Zaleta: Modyfikujemy w jednym miejscu a nie w wielu. • Wady: Tak określona stała nie ma typu. To nie jest nazwa OBIEKTU - nie można testować wartości wyrażeń. • C++: Słowo kluczowe const • const float pi = 3.14; Jerzy F. Kotowski

  5. Inicjalizacja wartości początkowych • Przykłady: float Ula[5] = {0, 3, 4.5, 7.1, -1}; • float Ula[6] = {0, 3, 4.5, 7.1, -1}; - ostrzeżenie • float Ula[4] = {0, 3, 4.5, 7.1, -1}; - ERROR!! • float Ula[ ] = {0, 3, 4.5, 7.1, -1}; - policz sobie • Tablice znakowe: • char Ala[12] = {‘A’,’l’,’a’,’ ‘,’m’,’a’,’ ‘,’k’,’o’,’t’,’a’,’\0’}; - HELP!! • char Ala[12] = “Ala ma kota”; • Dużo lepiej! • Terminating null będzie dodany automatycznie. Trzeba o tym pamiętać, jeżeli go nie chcemy. Jerzy F. Kotowski

  6. Tablice wielowymiarowe type ident[const_ex1] [const_ex2]; • Przykład:float Ala[N][N+1]; • [ ]– operator indeksowy 15 • A[2][3] – przykład użycia. Co to jest B[2,3]? • (A[2])[3] – operator indeksowy jest lewostronnie łączny • Wniosek:Tablice wielowymiarowe w C są tablicami tablic. • Nie ma ograniczenia na wymiar (poza rozsądkiem). • Inicjalizacja: int Ala[2][3]={{1,3,5},{8,2,4}}; • Niepełna inicjalizacja: int Ala[2][3]={1,3,8,2,4}; • Tablica znakowa: char Ola[3][5]={”Ala”,”ma”,”kota”}; • Policz sobie sam: char Ola[3][ ]={”Ala”,”ma”,”kota”}; Jerzy F. Kotowski

  7. Operatory bitowe • Operatory bitowe - jak sama nazwa wskazuje - działają na poszczególnych bitach swoich argumentów • Argumentami tych operatorów nie mogą być dane typu float oraz double • Operator jednoargumentowy (jeden) • ~bitowe uzupełnienie zerojedynkowe 14 • Operatory dwuargumentowe (pięć) • & - bitowa koniunkcja 8 • | - bitowa alternatywa 6 • ^ - bitowa różnica symetryczna 7 • << - przesunięcie w lewo 11 • >> - przesunięcie w prawo 11 Jerzy F. Kotowski

  8. Operatory bitowe - przykłady char s[20]; int x, m=1, i=0; scanf(”%d”,&x); while(m) { if(x&m) s[i++] = ‘1’; else s[i++] = ‘0’; m = m<<1; }// Trzeba odwrócić s w miejscu • Bitowa koniunkcja służy do zasłaniania pewnych bitów: • y = x & m; • m - maska • y = x & 0177; • Przesłania wszystko za wyjątkiem siedmiu najmłodszych bitów Jerzy F. Kotowski

  9. Operatory bitowe - przykłady c.d. • Int x = 2, y, z; • y = x & 1; • z = x && 1; • y = 0 z = 1 • x = 10&7; 2 • x = 10|7; 15 • x = 10^7; 11 • Definicja funkcji zwracającej n bitów liczby x zaczynając od pozycji p • unsigned getbits(x, p, n) • unsigned x, p, n; • { • return(x>>(p+1-n)&~(~0<<n); • } • 0 00000000 ~0<<n 11111000 • ~0 11111111 ~(~0<<n) 00000111 Jerzy F. Kotowski

  10. Operatory i wyrażenia przypisania • Operatory arytmetyczne Operatory bitowe (2 argumentowe) • + - * / % & | ^ << >> . • Definicja operatora • e1 op= e2  e1 = e1 op (e2) • Przykłady: • x /= y  x = x/y • Cechy: Zwięzłość, bliskie językowi naturalnemu • Niebezpieczeństwo!!x = 15; • x = x*2/3; ( x: 10) • x *= 2/3; (x: 0) !! Jerzy F. Kotowski

  11. Operator warunkowy • Jest to jedyny w języku C operator trójargumentowy (i tak jest czasami nazywany) • Oznaczenie: ?: Priorytet: 3 • Definicja operatora • y = e1 ? e2 : e3;  if(e1) y=e2; else y=e3; • Korzyści: zwięzłość i czytelność programu • for(i=0;i<N;i++) printf(„”%d%c”,a[i],(i%10==9||i==N-1)?’\n’:’ ‘); • if(x&m) s[i++]=‘1’;else s[i++]=‘0’; s[i++] = x&m ? ’1’ : ’0’; • y = a>b ? a : b; Jerzy F. Kotowski

  12. Nasz ulubiony przykład char s[20]; int x, m =1, i=0, j=0; printf(”x = ”); scanf(”%d”,&x); while(m) { s[i++] = x&m ?’1’:’0’; m <<= 1; } x[i--] = 0; // term. null printf(”binarnie = ”); for(;j<i;j++,i--) { m = s[i]; s[i] = s[j]; s[j] = m; } printf(s); Jerzy F. Kotowski

More Related