Informatyka 1, Studia Niestacjonarne I Stopnia Dr Inż
Total Page:16
File Type:pdf, Size:1020Kb
Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 2/59 Plan wykładu nr 5 Informatyka 1 Język C § pętla for, operatory ++ i – Klasyfikacja systemów komputerowych (Flynna) Architektura von Neumanna i architektura harwardzka Politechnika Białostocka --WydziałWydział Elektryczny Budowa komputera § jednostka centralna Elektrotechnika, semestr II, studia niestacjonarne I stopnia § płyta główna Rok akademicki 2018/2019 § procesor (mikroarchitektury) Wykład nr 5 (05.04.2019) dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 3/59 Rok akademicki 2018/2019, Wykład nr 5 4/59 Język C --sumasuma kolejnych 10 liczb: 1+2+…+10 Język C --sumasuma kolejnych 100 liczb: 1+2+…+100 Suma wynosi: 55 Suma wynosi: 5050 #include <stdio.h> #include <stdio.h> int main(void ) int main(void ) { { int suma; int suma=0, i; suma = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10; for (i=1; i<=100; i=i+1) suma = suma + i; printf("Suma wynosi: %d\n" ,suma); printf("Suma wynosi: %d\n" ,suma); return 0; } return 0; } Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 5/59 Rok akademicki 2018/2019, Wykład nr 5 6/59 Język C --pętlapętla for Język C --pętlapętla for Najczęściej stosowana postać pętli for for (wyr1; wyr2; wyr3) wyr1 instrukcja int i; for (i = 0; i < 10; i = i + 1) NIE wyr 2 ≠ 0 instrukcja wyr1 , wyr2 , wyr3 - dowolne wyrażenia w języku C TAK Instrukcja zostanie wykonana 10 razy Instrukcja: instrukcja (dla i = 0, 1, 2, … 9 ) § prosta - jedna instrukcja Funkcje pełnione przez wyrażenia zakończona średnikiem wyr3 § złożona - jedna lub kilka instrukcji objętych nawiasami klamrowymi for (inicjalizacja ;test ;aktualizacja ) instrukcja Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 7/59 Rok akademicki 2018/2019, Wykład nr 5 8/59 Język C --pętlapętla for (wyświetlenie tekstu) Język C --pętlapętla for (suma liczb: 1 + 2 + … + N) Programowanie nie jest trudne Suma 1234 liczb to 761995 #include <stdio.h> #include <stdio.h> Programowanie nie jest trudne Programowanie nie jest trudne #define N 1234 int main(void ) Programowanie nie jest trudne { Programowanie nie jest trudne int main(void ) int i; { int i, suma=0; for (i=0; i<5; i=i+1) printf("Programowanie nie jest trudne\n"); for (i=1; i<=N; i++) suma = suma + i; return 0; } printf( "Suma %d liczb to %d\n" , N, suma); return 0; } Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 9/59 Rok akademicki 2018/2019, Wykład nr 5 10/59 Język C --pętlapętla for (przykłady) Język C --pętlapętla for (przykłady) for (i=0; i<10; i++) 0 1 2 3 4 5 6 7 8 9 for (i=1; i<10; i=i+2) 1 3 5 7 9 printf( "%d ",i); printf( "%d ",i); for (i=0; i<10; i++) 1 2 3 4 5 6 7 8 9 10 for (i=10; i>0; i--) 10 9 8 7 6 5 4 3 2 1 printf( "%d ",i+1); printf( "%d ",i); for (i=1; i<=10; i++) 1 2 3 4 5 6 7 8 9 10 for (i=-9; i<=9; i=i+3) -9 -6 -3 0 3 6 9 printf( "%d ",i); printf( "%d ",i); Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 11/59 Rok akademicki 2018/2019, Wykład nr 5 12/59 Język C --pętlapętla for (break, continuecontinue)) Język C --pętlapętla for (najczęstsze błędy) W pętli for można stosować instrukcje skoku: break i continue Postawienie średnika na końcu pętli for int i; int i; 10 for (i=0; i<10; i++); for (i=1; i<10; i++) § continue przerywa bieżącą printf("%d ",i); { if (i%2==0) iterację i przechodzi do obliczania wyr3 continue ; Przecinki zamiast średników pomiędzy wyrażeniami if (i%7==0) break ; int i; printf("%d\n" ,i); § break przerywa for (i=0, i<10, i++) } wykonywanie pętli printf("%d ",i); Błąd kompilacji! 1 3 5 error C2143: syntax error : missing ';' before ')' Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 13/59 Rok akademicki 2018/2019, Wykład nr 5 14/59 Język C --pętlapętla for (najczęstsze błędy) Język C --pętlapętla nieskończona Błędny warunek - brak wykonania instrukcji for (wyr1; wyr2; wyr3) instrukcja int i; for (i=0; i>10; i++) printf("%d ",i); Wszystkie wyrażenia ( wyr1 , wyr2 , wyr3 ) w pętli for są opcjonalne Błędny warunek - pętla nieskończona for ( ; ; ) instrukcja - pętla nieskończona int i; 1 2 3 4 5 6 7 8 9 ... for (i=1; i>0; i++) W przypadku braku wyr2 przyjmuje się, że jest ono prawdziwe printf("%d ",i); Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 15/59 Rok akademicki 2018/2019, Wykład nr 5 16/59 Język C --zagnieżdżaniezagnieżdżanie pętli for Język C --operatoroperator inkrementacji (++) Jako instrukcja w pętli for może występować kolejna pętla for Jednoargumentowy operator ++ zwiększa wartość zmiennej o 1 (nie wolno stosować go do wyrażeń) int i, j; Operator ++ może występować jako przedrostek lub przyrostek for (i=1; i<=3; i++) // p ętla zewn ętrzna for (j=1; j<=2; j++) // p ętla wewn ętrzna printf ("i: %d j: % d\n",i,j ); Zapis Nazwa Znaczenie wartość zmiennej jest modyfikowana ++x preinkrementacji przed jej użyciem i: 1 j: 1 wartość zmiennej jest modyfikowana i: 1 j: 2 x++ postinkrementacji i: 2 j: 1 po użyciu jej poprzedniej wartości i: 2 j: 2 i: 3 j: 1 i: 3 j: 2 Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 17/59 Rok akademicki 2018/2019, Wykład nr 5 18/59 Język C --operatoroperator inkrementacji (++) Język C --operatoroperator inkrementacji (++) Przykład Miejsce umieszczenia operatora ++ nie ma znaczenia w przypadku instrukcji typu: int x = 1, y; int x = 1, y; y = 2 * ++x; y = 2 * x++; x++; równoważne x = x + 1; ++x; Kolejność operacji Nie należy stosować operatora ++ do zmiennych pojawiających się ++ x x = 2 2 * x 2 * 1 w wyrażeniu więcej niż jeden raz 2 * ++x 2 * 2 y = 2 * x y = 2 y = 2 * ++x y = 4 x++ x = 2 x = x++; x = ++x; Wartości zmiennych Zgodnie ze standardem języka C wynik powyższych instrukcji x = 2 y = 4 x = 2 y = 2 jest niezdefiniowany Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 19/59 Rok akademicki 2018/2019, Wykład nr 5 20/59 Język C --operatoroperator dekrementacji ((----)) Język C --priorytetpriorytet operatorów ++ i ---- Jednoargumentowy operator -- zmniejsza wartość zmiennej o 1 Priorytet Operator / opis (nie wolno stosować go do wyrażeń) 1 ++ -- (przyrostki) () [] . -> Operator -- może występować jako przedrostek lub przyrostek ++ -- (przedrostki) sizeof (typ) 2 + - ! ~ * & (jednoargumentowe) Zapis Nazwa Znaczenie 3 * / % wartość zmiennej jest modyfikowana --x predekrementacji 4 + - (dwuargumentowe) przed jej użyciem 5 << >> wartość zmiennej jest modyfikowana x-- postdekrementacji 6 < > <= >= po użyciu jej poprzedniej wartości 7 == != 8 & (bitowy) 9 ^ Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 21/59 Rok akademicki 2018/2019, Wykład nr 5 22/59 Klasyfikacja systemów komputerowych Taksonomia Flynna Taksonomia Flynna - pierwsza, najbardziej ogólna klasyfikacja architektur komputerowych (1972): § Flynn M.J.: „Some Computer Organizations and Their Effectiveness”, IEEE Transactions on Computers, Vol. C-21, No 9, 1972. SI - Single instruction Opiera się na liczbie przetwarzanych strumieni rozkazów i strumieni danych: MI - Multiple Instruction SD - Single Data § strumień rozkazów (Instruction Stream) - odpowiednik licznika rozkazów; system złożony z n procesorów posiada n liczników MD - Multiple Data rozkazów, a więc n strumieni rozkazów § strumień danych (Data Stream) - zbiór operandów, np. system SM - Shared Memory rejestrujący temperaturę mierzoną przez n czujników posiada n DM - Distributed Memory strumieni danych Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 23/59 Rok akademicki 2018/2019, Wykład nr 5 24/59 SISD (Single InstructionInstruction,, Single Data) SISD (Single InstructionInstruction,, Single Data) Jeden wykonywany program Komputer Komputer przetwarza jeden strumień danych IBM PC/AT PCPC Klasyczne komputery zbudowane według architektury von Neumanna SISD Zawierają: § jeden procesor § jeden blok pamięci operacyjnej - instrukcje zawierający wykonywany program. - dane Laptop - wyniki Komputer PCPC Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Informatyka 1, studia niestacjonarne I stopnia dr inż. Jarosław Forenc Rok akademicki 2018/2019, Wykład nr 5 25/59 Rok akademicki 2018/2019, Wykład nr 5 26/59 SIMD (Single InstructionInstruction,, Multiple Data) -SIMD SM-SIMD --KomputerySMKomputery wektorowe Jeden wykonywany program CDC CDC 1 -1-yarC yarC przetwarza wiele strumieni Cyber 205 (1976) danych (1981) Te same operacje wykonywane są na różnych danych SIMD Podział: § SM-SIMD (Shared Memory SIMD): - instrukcje 2 -2-yarC yarC - komputery wektorowe - dane (1985) Hitachi - rozszerzenia strumieniowe procesorów - wyniki 36S00 36S00 (MMX, 3DNow!, SSE, SSE2, SSE3, AVX, …) (1994) § DM-SIMD (Distributed Memory SIMD): - tablice procesorów - procesory kart graficznych (GPGPU ) Informatyka 1, studia niestacjonarne I stopnia dr inż.