Stefan Sokołowski JĘZYKIPROGRAMOWANIA Inst Informatyki UG, Gdańsk, 2012/2013
Wykład1OGÓLNEINFORMACJEOC,str1 JĘZYKI PROGRAMOWANIA reguły gry Zasadnicze informacje: http://infugedupl/ stefan/dydaktyka/jezprog szkicowy program wykładu i laboratorium spis literatury slajdydowykładów wartorobićnotatki ale nie warto przepisywać slajdów z ekranu zadania z laboratorium w moich grupach itd
Wykład1OGÓLNEINFORMACJEOC,str2 JĘZYKI PROGRAMOWANIA reguły gry Kontakt ze mną: konsultacje: czwartki 12:15 13:00 w pok 57 e-mail: ssokolowski@infugedupl antyspam: unikać frikoprowajderów, np: o2pl wppl gazetapl najlepiej używać konta mailowego w II UG
Wykład1OGÓLNEINFORMACJEOC,str2 JĘZYKI PROGRAMOWANIA reguły gry Kontakt ze mną: konsultacje: czwartki 12:15 13:00 w pok 57 e-mail: ssokolowski@infugedupl antyspam: unikać frikoprowajderów, np: o2pl wppl gazetapl najlepiej używać konta mailowego w II UG Zaliczenie przedmiotu: zaliczenie laboratorium, egzamin, znajdowanie błędów w wykładzie Najłatwiej jest zaliczyć laboratoria przez sprawdziany Zaliczenie przez rozbójnika na koniec semestru jest trudniejsze Laboratorium musi być zaliczone przed egzaminem
Wykład1OGÓLNEINFORMACJEOC,str2 JĘZYKI PROGRAMOWANIA reguły gry Kontakt ze mną: konsultacje: czwartki 12:15 13:00 w pok 57 e-mail: ssokolowski@infugedupl antyspam: unikać frikoprowajderów, np: o2pl wppl gazetapl najlepiej używać konta mailowego w II UG Zaliczenie przedmiotu: zaliczenie laboratorium, egzamin, znajdowanie błędów w wykładzie Najłatwiej jest zaliczyć laboratoria przez sprawdziany Zaliczenie przez rozbójnika na koniec semestru jest trudniejsze Laboratorium musi być zaliczone przed egzaminem
Wykład1OGÓLNEINFORMACJEOC,str2 JĘZYKI PROGRAMOWANIA reguły gry Kontakt ze mną: konsultacje: czwartki 12:15 13:00 w pok 57 e-mail: ssokolowski@infugedupl antyspam: unikać frikoprowajderów, np: o2pl wppl gazetapl najlepiej używać konta mailowego w II UG Zaliczenie przedmiotu: zaliczenie laboratorium, egzamin, znajdowanie błędów w wykładzie Najłatwiej jest zaliczyć laboratoria przez sprawdziany Zaliczenie przez rozbójnika na koniec semestru jest trudniejsze Laboratorium musi być zaliczone przed egzaminem
Wykład1OGÓLNEINFORMACJEOC,str2 JĘZYKI PROGRAMOWANIA reguły gry Kontakt ze mną: konsultacje: czwartki 12:15 13:00 w pok 57 e-mail: ssokolowski@infugedupl antyspam: unikać frikoprowajderów, np: o2pl wppl gazetapl najlepiej używać konta mailowego w II UG Zaliczenie przedmiotu: zaliczenie laboratorium, egzamin, znajdowanie błędów w wykładzie Najłatwiej jest zaliczyć laboratoria przez sprawdziany Zaliczenie przez rozbójnika na koniec semestru jest trudniejsze Laboratorium musi być zaliczone przed egzaminem
Wykład1OGÓLNEINFORMACJEOC,str2 JĘZYKI PROGRAMOWANIA reguły gry Kontakt ze mną: konsultacje: czwartki 12:15 13:00 w pok 57 e-mail: ssokolowski@infugedupl antyspam: unikać frikoprowajderów, np: o2pl wppl gazetapl najlepiej używać konta mailowego w II UG Zaliczenie przedmiotu: zaliczenie laboratorium, egzamin, znajdowanie błędów w wykładzie Najłatwiej jest zaliczyć laboratoria przez sprawdziany Zaliczenie przez rozbójnika na koniec semestru jest trudniejsze Laboratorium musi być zaliczone przed egzaminem
Ramowy program Wykład1OGÓLNEINFORMACJEOC,str3 językc szczegółowo podstawowa książka: K&R, czyli Kernighan BW, Ritchie DM Język ANSI C Wydawnictwa Naukowo-Techniczne, Warszawa 2003 ISBN 83-204-2804-1 Należy ją samodzielnie czytać! językjava podstawy inne języki imperatywne informacyjnie
Ramowy program Wykład1OGÓLNEINFORMACJEOC,str3 językc szczegółowo podstawowa książka: K&R, czyli Kernighan BW, Ritchie DM Język ANSI C Wydawnictwa Naukowo-Techniczne, Warszawa 2003 ISBN 83-204-2804-1 Należy ją samodzielnie czytać! językjava podstawy inne języki imperatywne informacyjnie
Ramowy program Wykład1OGÓLNEINFORMACJEOC,str3 językc szczegółowo podstawowa książka: K&R, czyli Kernighan BW, Ritchie DM Język ANSI C Wydawnictwa Naukowo-Techniczne, Warszawa 2003 ISBN 83-204-2804-1 Należy ją samodzielnie czytać! językjava podstawy inne języki imperatywne informacyjnie
Ramowy program Wykład1OGÓLNEINFORMACJEOC,str3 językc szczegółowo podstawowa książka: K&R, czyli Kernighan BW, Ritchie DM Język ANSI C Wydawnictwa Naukowo-Techniczne, Warszawa 2003 ISBN 83-204-2804-1 Należy ją samodzielnie czytać! językjava podstawy inne języki imperatywne informacyjnie
Ramowy program Wykład1OGÓLNEINFORMACJEOC,str3 językc szczegółowo podstawowa książka: K&R, czyli Kernighan BW, Ritchie DM Język ANSI C Wydawnictwa Naukowo-Techniczne, Warszawa 2003 ISBN 83-204-2804-1 Należy ją samodzielnie czytać! językjava podstawy inne języki imperatywne informacyjnie
Ramowy program Wykład1OGÓLNEINFORMACJEOC,str3 językc szczegółowo podstawowa książka: K&R, czyli Kernighan BW, Ritchie DM Język ANSI C Wydawnictwa Naukowo-Techniczne, Warszawa 2003 ISBN 83-204-2804-1 Należy ją samodzielnie czytać! językjava podstawy inne języki imperatywne informacyjnie Wszystkie imperatywne języki programowania ogólnego zastosowania są do siebie podobne Wystarczy zrozumieć, jak działa jeden, żeby umieć stosować wszystkie
Ramowy program Wykład1OGÓLNEINFORMACJEOC,str3 językc szczegółowo podstawowa książka: K&R, czyli Kernighan BW, Ritchie DM Język ANSI C Wydawnictwa Naukowo-Techniczne, Warszawa 2003 ISBN 83-204-2804-1 Należy ją samodzielnie czytać! językjava podstawy inne języki imperatywne informacyjnie Wszystkie imperatywne języki programowania ogólnego zastosowania są do siebie podobne Wystarczy zrozumieć, jak działa jeden, żeby umieć stosować wszystkie
Historia C Wykład1OGÓLNEINFORMACJEOC,str4 1971: pierwsza wersja C, Ken Thompson& Dennis Ritchie
Historia C Wykład1OGÓLNEINFORMACJEOC,str4 1971: pierwsza wersja C, Ken Thompson& Dennis Ritchie 1972: system operacyjny UNIX napisany w C, Ken Thompson& Dennis Ritchie
Historia C Wykład1OGÓLNEINFORMACJEOC,str4 1971: pierwsza wersja C, Ken Thompson& Dennis Ritchie 1972: system operacyjny UNIX napisany w C, Ken Thompson& Dennis Ritchie 1978: The C Programming Language, Brian Kernighan& Dennis Ritchie podręcznik języka, służący jako jego nieformalna specyfikacja
Historia C Wykład1OGÓLNEINFORMACJEOC,str4 1971: pierwsza wersja C, Ken Thompson& Dennis Ritchie 1972: system operacyjny UNIX napisany w C, Ken Thompson& Dennis Ritchie 1978: The C Programming Language, Brian Kernighan& Dennis Ritchie podręcznik języka, służący jako jego nieformalna specyfikacja 1989: standaryzacja języka C89, American National Standards Institute
Historia C Wykład1OGÓLNEINFORMACJEOC,str4 1971: pierwsza wersja C, Ken Thompson& Dennis Ritchie 1972: system operacyjny UNIX napisany w C, Ken Thompson& Dennis Ritchie 1978: The C Programming Language, Brian Kernighan& Dennis Ritchie podręcznik języka, służący jako jego nieformalna specyfikacja 1989: standaryzacja języka C89, American National Standards Institute 1999: poprawiona standaryzacja języka C99, American National Standards Institute
Historia C Wykład1OGÓLNEINFORMACJEOC,str4 1971: pierwsza wersja C, Ken Thompson& Dennis Ritchie 1972: system operacyjny UNIX napisany w C, Ken Thompson& Dennis Ritchie 1978: The C Programming Language, Brian Kernighan& Dennis Ritchie podręcznik języka, służący jako jego nieformalna specyfikacja 1989: standaryzacja języka C89, American National Standards Institute 1999: poprawiona standaryzacja języka C99, American National Standards Institute 2011: następna poprawiona standaryzacja języka C11, American National Standards Institute
Dlaczego trzeba znać C? Wykład1OGÓLNEINFORMACJEOC,str5 najbardziej rozpowszechniony język programowania ogólnego zastosowania
Dlaczego trzeba znać C? Wykład1OGÓLNEINFORMACJEOC,str5 najbardziej rozpowszechniony język programowania ogólnego zastosowania, stosunkowo prosty, więc nietrudny do nauczenia się
Dlaczego trzeba znać C? Wykład1OGÓLNEINFORMACJEOC,str5 najbardziej rozpowszechniony język programowania ogólnego zastosowania, stosunkowo prosty, więc nietrudny do nauczenia się, pozwala programować blisko maszyny, czyli pisać bardzo wydajne programy(ale to jest żmudne)
Dlaczego trzeba znać C? Wykład1OGÓLNEINFORMACJEOC,str5 najbardziej rozpowszechniony język programowania ogólnego zastosowania, stosunkowo prosty, więc nietrudny do nauczenia się, pozwala programować blisko maszyny, czyli pisać bardzo wydajne programy(ale to jest żmudne), większość współczesnych języków programowania ma zewnętrzną składnię wzorowaną na C(mimo głębokich różnic)
Dlaczego trzeba znać C? Wykład1OGÓLNEINFORMACJEOC,str5 najbardziej rozpowszechniony język programowania ogólnego zastosowania, stosunkowo prosty, więc nietrudny do nauczenia się, pozwala programować blisko maszyny, czyli pisać bardzo wydajne programy(ale to jest żmudne), większość współczesnych języków programowania ma zewnętrzną składnię wzorowaną na C(mimo głębokich różnic) Wady C: niektóre jego cechy stoją w sprzeczności z naturalną intuicją i logiką
Dlaczego trzeba znać C? Wykład1OGÓLNEINFORMACJEOC,str5 najbardziej rozpowszechniony język programowania ogólnego zastosowania, stosunkowo prosty, więc nietrudny do nauczenia się, pozwala programować blisko maszyny, czyli pisać bardzo wydajne programy(ale to jest żmudne), większość współczesnych języków programowania ma zewnętrzną składnię wzorowaną na C(mimo głębokich różnic) Wady C: niektóre jego cechy stoją w sprzeczności z naturalną intuicją i logiką, słabo wspiera programistę w poszukiwaniu i poprawianiu błędów
Dlaczego trzeba znać C? Wykład1OGÓLNEINFORMACJEOC,str5 najbardziej rozpowszechniony język programowania ogólnego zastosowania, stosunkowo prosty, więc nietrudny do nauczenia się, pozwala programować blisko maszyny, czyli pisać bardzo wydajne programy(ale to jest żmudne), większość współczesnych języków programowania ma zewnętrzną składnię wzorowaną na C(mimo głębokich różnic) Wady C: niektóre jego cechy stoją w sprzeczności z naturalną intuicją i logiką, słabo wspiera programistę w poszukiwaniu i poprawianiu błędów Łacina jest piękniejsza i logiczniejsza od angielskiego, ale dzisiaj można nie znać łaciny, a trzeba znać angielski
Wykład1OGÓLNEINFORMACJEOC,str6 Hierarchia bytów w języku programowania WYRAŻENIA reprezentujące wartości(arytmetyczne i inne) Np x, 0, x+y WARUNKI LOGICZNE reprezentujące relacje między wartościami(spełnione lub nie) Np x<0 KOMENDY nakazujące dokonanie zmiany stanu (np zmiany wartości zmiennych) Np if(x<0) x=-x; WYRAŻENIA MODUŁY stanowiące autonomiczne zestawy komend wykonujące pewną logicznie zamkniętą czynność Np double wartbezwzgl(doublex) { if(x<0) x=-x; return x; }
Wykład1OGÓLNEINFORMACJEOC,str6 Hierarchia bytów w języku programowania WYRAŻENIA reprezentujące wartości(arytmetyczne i inne) Np x, 0, x+y WARUNKI LOGICZNE reprezentujące relacje między wartościami(spełnione lub nie) Np x<0 WARUNKI LOGICZNE WYRAŻENIA KOMENDY nakazujące dokonanie zmiany stanu (np zmiany wartości zmiennych) Np if(x<0) x=-x; MODUŁY stanowiące autonomiczne zestawy komend wykonujące pewną logicznie zamkniętą czynność Np double wartbezwzgl(doublex) { if(x<0) x=-x; return x; }
Wykład1OGÓLNEINFORMACJEOC,str6 Hierarchia bytów w języku programowania WYRAŻENIA reprezentujące wartości(arytmetyczne i inne) Np x, 0, x+y KOMENDY WARUNKI LOGICZNE WYRAŻENIA WARUNKI LOGICZNE reprezentujące relacje między wartościami(spełnione lub nie) Np x<0 KOMENDY nakazujące dokonanie zmiany stanu (np zmiany wartości zmiennych) Np if(x<0) x=-x; MODUŁY stanowiące autonomiczne zestawy komend wykonujące pewną logicznie zamkniętą czynność Np double wartbezwzgl(doublex) { if(x<0) x=-x; return x; }
Wykład1OGÓLNEINFORMACJEOC,str6 Hierarchia bytów w języku programowania MODUŁY KOMENDY WARUNKI LOGICZNE WYRAŻENIA WYRAŻENIA reprezentujące wartości(arytmetyczne i inne) Np x, 0, x+y WARUNKI LOGICZNE reprezentujące relacje między wartościami(spełnione lub nie) Np x<0 KOMENDY nakazujące dokonanie zmiany stanu (np zmiany wartości zmiennych) Np if(x<0) x=-x; MODUŁY stanowiące autonomiczne zestawy komend wykonujące pewną logicznie zamkniętą czynność Np double wartbezwzgl(doublex) { if(x<0) x=-x; return x; }
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str7 Wszystko poplątane
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str7 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str7 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str7 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi warunek jest spełniony, jeśli ma wartość różną od zera
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str7 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi warunek jest spełniony, jeśli ma wartość różną od zera; warunek jest niespełniony, jeśli ma wartość zero
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str7 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi warunek jest spełniony, jeśli ma wartość różną od zera; warunek jest niespełniony, jeśli ma wartość zero Npwarunek0>1mawartość0;awarunek0<=1mawartośćróżnąodzera
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str7 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi warunek jest spełniony, jeśli ma wartość różną od zera; warunek jest niespełniony, jeśli ma wartość zero Npwarunek0>1mawartość0;awarunek0<=1mawartośćróżnąodzera Przykład: M #include<stdioh> intmain(){ printf(" 1+(0>1) ==%i\n", 1+(0>1)); printf(" 1+(0<=1) ==%i\n", 1+(0<=1)); return 0; }
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str7 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi warunek jest spełniony, jeśli ma wartość różną od zera; warunek jest niespełniony, jeśli ma wartość zero Npwarunek0>1mawartość0;awarunek0<=1mawartośćróżnąodzera Przykład: M #include<stdioh> intmain(){ printf(" 1+(0>1) ==%i\n", 1+(0>1)); printf(" 1+(0<=1) ==%i\n", 1+(0<=1)); return 0; } drukuje 1+(0>1)==1 1+(0<=1) == 2
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str7 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi warunek jest spełniony, jeśli ma wartość różną od zera; warunek jest niespełniony, jeśli ma wartość zero Npwarunek0>1mawartość0;awarunek0<=1mawartośćróżnąodzera Przykład: M #include<stdioh> intmain(){ printf(" 1+(0>1) ==%i\n", 1+(0>1)); printf(" 1+(0<=1) ==%i\n", 1+(0<=1)); return 0; } drukuje 1+(0>1)==1 1+(0<=1) == 2 chociaż warunków logicznych w zasadzie nie powinno się dodawać do liczb
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str8 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi warunek jest spełniony, jeśli ma wartość różną od zera; warunek jest niespełniony, jeśli ma wartość zero
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str8 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi warunek jest spełniony, jeśli ma wartość różną od zera; warunek jest niespełniony, jeśli ma wartość zero Np komenda if traktuje test-1 jako spełniony; a test 0 jako niespełniony
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str8 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi warunek jest spełniony, jeśli ma wartość różną od zera; warunek jest niespełniony, jeśli ma wartość zero Np komenda if traktuje test-1 jako spełniony; a test 0 jako niespełniony Przykład: M #include<stdioh> intmain(){ if(-1) printf(" spelniony\n"); else printf(" niespelniony\n"); return 0; }
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str8 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi warunek jest spełniony, jeśli ma wartość różną od zera; warunek jest niespełniony, jeśli ma wartość zero Np komenda if traktuje test-1 jako spełniony; a test 0 jako niespełniony Przykład: M #include<stdioh> intmain(){ if(-1) printf(" spelniony\n"); else printf(" niespelniony\n"); return 0; } drukuje spelniony
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str8 Wszystko poplątane WARUNKI LOGICZNE są również WARTOŚCIAMI, w dodatku całkowitymi warunek jest spełniony, jeśli ma wartość różną od zera; warunek jest niespełniony, jeśli ma wartość zero Np komenda if traktuje test-1 jako spełniony; a test 0 jako niespełniony Przykład: M #include<stdioh> intmain(){ if(-1) printf(" spelniony\n"); else printf(" niespelniony\n"); return 0; } drukuje spelniony chociaż w zasadzie nie powinno się uzależniać drogi w programie od liczby
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str9 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr;
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str9 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr; wartością komendy czytania jest liczba wczytanych rzeczy;
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str9 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr; wartością komendy czytania jest liczba wczytanych rzeczy; wartością komendy drukowania jest liczba wydrukowanych znaków
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str9 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr; wartością komendy czytania jest liczba wczytanych rzeczy; wartością komendy drukowania jest liczba wydrukowanych znaków Przykład: M #include<stdioh> intmain(){ double x; printf(" wartosc komendy x = 05+05;:%lf\n", x = 05+05); return 0; }
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str9 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr; wartością komendy czytania jest liczba wczytanych rzeczy; wartością komendy drukowania jest liczba wydrukowanych znaków Przykład: M #include<stdioh> intmain(){ double x; printf(" wartosc komendy x = 05+05;:%lf\n", x = 05+05); return 0; } drukuje wartosc komendy x = 05+05;: 1000000
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str9 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr; wartością komendy czytania jest liczba wczytanych rzeczy; wartością komendy drukowania jest liczba wydrukowanych znaków Przykład: M #include<stdioh> intmain(){ double x; printf(" wartosc komendy x = 05+05;:%lf\n", x = 05+05); return 0; } drukuje wartosc komendy x = 05+05;: 1000000 chociaż w zasadzie komendy powinno się wykonywać, a nie drukować
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str10 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr; wartością komendy czytania jest liczba wczytanych rzeczy; wartością komendy drukowania jest liczba wydrukowanych znaków Przykład: M #include<stdioh> intmain(){ intn; doublex,y; n=scanf("%lf%lf",&x,&y); printf(" wartosc komendy czytania:%i\n", n); return 0; }
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str10 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr; wartością komendy czytania jest liczba wczytanych rzeczy; wartością komendy drukowania jest liczba wydrukowanych znaków Przykład: M #include<stdioh> intmain(){ intn; doublex,y; n=scanf("%lf%lf",&x,&y); printf(" wartosc komendy czytania:%i\n", n); return 0; } drukuje wartosc komendy czytania: 2
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str10 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr; wartością komendy czytania jest liczba wczytanych rzeczy; wartością komendy drukowania jest liczba wydrukowanych znaków Przykład: M #include<stdioh> intmain(){ intn; doublex,y; n=scanf("%lf%lf",&x,&y); printf(" wartosc komendy czytania:%i\n", n); return 0; } drukuje wartosc komendy czytania: 2 chociaż w zasadzie czytanie jest czynnością a nie wartością
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str11 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr; wartością komendy czytania jest liczba wczytanych rzeczy; wartością komendy drukowania jest liczba wydrukowanych znaków Przykład: M #include<stdioh> intmain(){ intk; k=printf("123456789\n"); printf(" wartosc komendy drukowania:%i\n", k); return 0; }
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str11 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr; wartością komendy czytania jest liczba wczytanych rzeczy; wartością komendy drukowania jest liczba wydrukowanych znaków Przykład: M #include<stdioh> intmain(){ intk; k=printf("123456789\n"); printf(" wartosc komendy drukowania:%i\n", k); return 0; } drukuje 123456789 wartosc komendy drukowania: 11
Hierarchia bytów w C Wykład1OGÓLNEINFORMACJEOC,str11 Wszystko poplątane KOMENDY również mają WARTOŚCI wartością przypisania x = wyr; jest wartość wyrażenia wyr; wartością komendy czytania jest liczba wczytanych rzeczy; wartością komendy drukowania jest liczba wydrukowanych znaków Przykład: M #include<stdioh> intmain(){ intk; k=printf("123456789\n"); printf(" wartosc komendy drukowania:%i\n", k); return 0; } drukuje 123456789 wartosc komendy drukowania: 11 chociaż w zasadzie drukowanie również jest czynnością a nie wartością
Wykład1OGÓLNEINFORMACJEOC,str12 Typy wyrażeń całkowity int int 012 - +-*/% ==!=<><=>=
Wykład1OGÓLNEINFORMACJEOC,str13 Typy wyrażeń rzeczywisty double double int 001 1231 602E-23 -fabsfloorsqrtlogexpsincostan +-*/pow ==!=<><=>=
Typy wyrażeń znakowy char Wykład1OGÓLNEINFORMACJEOC,str14 a W @ char ==!=<><=>= int
Wykład1OGÓLNEINFORMACJEOC,str15 Jawne konwersje typów(rzutowania) (int) (char) double int char (double) (int) Przykład: M (int)(char)(int)357 = =(int)(char)35 =(int) # =35
Niejawne konwersje typów Wykład1OGÓLNEINFORMACJEOC,str16 int double Prawie w każdym kontekście, w którym dopuszczalna jest wartość rzeczywista, można użyć wartości całkowitej
Niejawne konwersje typów Wykład1OGÓLNEINFORMACJEOC,str16 int double Prawie w każdym kontekście, w którym dopuszczalna jest wartość rzeczywista, można użyć wartości całkowitej Np double x; x=1; powoduje zamianę wartości całkowitej 1 na rzeczywistą 10, a dopiero potem jej przypisanie zmiennej x
Niejawne konwersje typów Wykład1OGÓLNEINFORMACJEOC,str16 int double Prawie w każdym kontekście, w którym dopuszczalna jest wartość rzeczywista, można użyć wartości całkowitej Np double x; x=1; powoduje zamianę wartości całkowitej 1 na rzeczywistą 10, a dopiero potem jej przypisanie zmiennej x Wyjątek: printf("%lf\n", 1); działa błędnie
Niejawne konwersje typów Wykład1OGÓLNEINFORMACJEOC,str16 int double Prawie w każdym kontekście, w którym dopuszczalna jest wartość rzeczywista, można użyć wartości całkowitej Np double x; x=1; powoduje zamianę wartości całkowitej 1 na rzeczywistą 10, a dopiero potem jej przypisanie zmiennej x Wyjątek: printf("%lf\n", 1); działa błędnie char int Jak wyżej Ale printf("%i\n", a ); nie drukuje znaku ea tylko liczbę97(kodasciiznakua)
Niejawne konwersje typów Wykład1OGÓLNEINFORMACJEOC,str16 int double Prawie w każdym kontekście, w którym dopuszczalna jest wartość rzeczywista, można użyć wartości całkowitej Np double x; x=1; powoduje zamianę wartości całkowitej 1 na rzeczywistą 10, a dopiero potem jej przypisanie zmiennej x Wyjątek: printf("%lf\n", 1); działa błędnie char int Jak wyżej Ale printf("%i\n", a ); nie drukuje znaku a tylko liczbę97(kodasciiznakua)
Niejawne konwersje typów Wykład1OGÓLNEINFORMACJEOC,str16 int double Prawie w każdym kontekście, w którym dopuszczalna jest wartość rzeczywista, można użyć wartości całkowitej Np double x; x=1; powoduje zamianę wartości całkowitej 1 na rzeczywistą 10, a dopiero potem jej przypisanie zmiennej x Wyjątek: printf("%lf\n", 1); działa błędnie char int Jak wyżej Ale printf("%i\n", a ); nie drukuje znaku a tylko liczbę97(kodasciiznakua) OinnychtypachwCbędziejeszczemowa
Wykład1OGÓLNEINFORMACJEOC,str17 Priorytety i łączność operatorów w C Ponieważ wszystko ma wartość, do wszystkiego można stosować operacje, trzeba tylko wiedzieć, jakie są ich priorytety
Wykład1OGÓLNEINFORMACJEOC,str17 Priorytety i łączność operatorów w C Ponieważ wszystko ma wartość, do wszystkiego można stosować operacje, trzeba tylko wiedzieć, jakie są ich priorytety Przykład: MCo wydrukuje #include<stdioh> intmain(){ int x,y; x=0; y=1; if(x==y+y) printf(" TAK\n"); else printf("nie\n"); return 0; }
Wykład1OGÓLNEINFORMACJEOC,str17 Priorytety i łączność operatorów w C Ponieważ wszystko ma wartość, do wszystkiego można stosować operacje, trzeba tylko wiedzieć, jakie są ich priorytety Przykład: MCo wydrukuje #include<stdioh> intmain(){ int x,y; x=0; y=1; if(x==y+y) printf(" TAK\n"); else printf("nie\n"); return 0; } Czy test x==y+y oznacza (x==y)+y czy x==(y+y)?
Wykład1OGÓLNEINFORMACJEOC,str18 Priorytety i łączność operatorów w C(K&R, str82) Priorytet Operatory Łączność wysoki () [] -> lewostronna! ++ -- + - * & (typ) sizeof prawostronna * / % lewostronna + - lewostronna << >> lewostronna < <= > >= lewostronna ==!= lewostronna & lewostronna ^ lewostronna lewostronna && lewostronna lewostronna?: prawostronna = += -= *= /= %= ^= = <<= >>= prawostronna niski, lewostronna
Wykład1OGÓLNEINFORMACJEOC,str18 Priorytety i łączność operatorów w C(K&R, str82) Priorytet Operatory Łączność wysoki () [] -> lewostronna! ++ -- + - * & (typ) sizeof prawostronna * / % lewostronna + - lewostronna << >> lewostronna < <= > >= lewostronna ==!= lewostronna & lewostronna ^ lewostronna lewostronna && lewostronna lewostronna?: prawostronna = += -= *= /= %= ^= = <<= >>= prawostronna niski, lewostronna Ponieważ priorytet porównania == jest niższy od priorytetu dodawania +, test x==y+y oznacza x==(y+y)
Wykład1OGÓLNEINFORMACJEOC,str19 Priorytety i łączność operatorów w C Ponieważ wszystko ma wartość, do wszystkiego można stosować operacje, trzeba tylko wiedzieć, jakie są ich priorytety Przykład: MCo wydrukuje #include<stdioh> intmain(){ printf(" 4-2-1 ==%i\n", 4-2-1); return 0; }
Wykład1OGÓLNEINFORMACJEOC,str19 Priorytety i łączność operatorów w C Ponieważ wszystko ma wartość, do wszystkiego można stosować operacje, trzeba tylko wiedzieć, jakie są ich priorytety Przykład: MCo wydrukuje #include<stdioh> intmain(){ printf(" 4-2-1 ==%i\n", 4-2-1); return 0; } Czy wyrażenie 4-2-1 oznacza (4-2)-1 czy 4-(2-1)?
Wykład1OGÓLNEINFORMACJEOC,str20 Priorytety i łączność operatorów w C(K&R, str82) Priorytet Operatory Łączność wysoki () [] -> lewostronna! ++ -- + - * & (typ) sizeof prawostronna * / % lewostronna + - lewostronna << >> lewostronna < <= > >= lewostronna ==!= lewostronna & lewostronna ^ lewostronna lewostronna && lewostronna lewostronna?: prawostronna = += -= *= /= %= ^= = <<= >>= prawostronna niski, lewostronna Ponieważ odejmowanie - łączy do lewej, wyrażenie 4-2-1 oznacza (4-2)-1 ijegowartościąjest 1
Wykład1OGÓLNEINFORMACJEOC,str21 Priorytety i łączność operatorów w C Trzebauważać
Wykład1OGÓLNEINFORMACJEOC,str21 Priorytety i łączność operatorów w C Trzebauważać Przykład: MCo wydrukuje #include<stdioh> intmain(){ if(! 1==2) printf(" nierowne\n"); else printf(" rowne\n"); return 0; }
Wykład1OGÓLNEINFORMACJEOC,str21 Priorytety i łączność operatorów w C Trzebauważać Przykład: MCo wydrukuje #include<stdioh> intmain(){ if(! 1==2) printf(" nierowne\n"); else printf(" rowne\n"); return 0; } Jesteśmy skłonni tak czytać: Jeśli nieprawdą jest, że 1==2, to drukować nierowne, w przeciwnym razie drukować rowne Ponieważ 1==2 jest nieprawdą, więc powinno zostać wydrukowane nierowne
Wykład1OGÓLNEINFORMACJEOC,str21 Priorytety i łączność operatorów w C Trzebauważać Przykład: MCo wydrukuje #include<stdioh> intmain(){ if(! 1==2) printf(" nierowne\n"); else printf(" rowne\n"); return 0; } Jesteśmy skłonni tak czytać: Jeśli nieprawdą jest, że 1==2, to drukować nierowne, w przeciwnym razie drukować rowne Ponieważ 1==2 jest nieprawdą, więc powinno zostać wydrukowane nierowne
Wykład1OGÓLNEINFORMACJEOC,str21 Priorytety i łączność operatorów w C Trzebauważać Przykład: MCo wydrukuje #include<stdioh> intmain(){ if(! 1==2) printf(" nierowne\n"); else printf(" rowne\n"); return 0; } Jesteśmy skłonni tak czytać: Jeśli nieprawdą jest, że 1==2, to drukować nierowne, w przeciwnym razie drukować rowne Ponieważ 1==2 jest nieprawdą, więc powinno zostać wydrukowane nierowne Tymczasem: Program drukuje rowne!
Wykład1OGÓLNEINFORMACJEOC,str22 Priorytety i łączność operatorów w C(K&R, str82) Priorytet Operatory Łączność wysoki () [] -> lewostronna! ++ -- + - * & (typ) sizeof prawostronna * / % lewostronna + - lewostronna << >> lewostronna < <= > >= lewostronna ==!= lewostronna & lewostronna ^ lewostronna lewostronna && lewostronna lewostronna?: prawostronna = += -= *= /= %= ^= = <<= >>= prawostronna niski, lewostronna Ponieważ priorytet negacji! jest wyższy niż priorytet równości ==, test! 1==2 oznacza (!1)==2 i jego wartością jest fałsz
Wykład1OGÓLNEINFORMACJEOC,str23 Priorytety nie rozstrzygają wszystkich wątpliwości Przykład: MCzykomenda y=(x=1)+(x=2); nadazmiennej y wartość2,czy3, czy4?
Wykład1OGÓLNEINFORMACJEOC,str23 Priorytety nie rozstrzygają wszystkich wątpliwości Przykład: MCzykomenda y=(x=1)+(x=2); nadazmiennej y wartość2,czy3, czy4? Testnamoimkomputerzedaje4,alenainnychmożebyćinaczej
Wykład1OGÓLNEINFORMACJEOC,str23 Priorytety nie rozstrzygają wszystkich wątpliwości Przykład: MCzykomenda y=(x=1)+(x=2); nadazmiennej y wartość2,czy3, czy4? Testnamoimkomputerzedaje4,alenainnychmożebyćinaczej Przykład: MCzykomenda i=0;a[i]=i++; wpisze0czy1,doa[0]czydoa[1]?
Wykład1OGÓLNEINFORMACJEOC,str23 Priorytety nie rozstrzygają wszystkich wątpliwości Przykład: MCzykomenda y=(x=1)+(x=2); nadazmiennej y wartość2,czy3, czy4? Testnamoimkomputerzedaje4,alenainnychmożebyćinaczej Przykład: MCzykomenda i=0;a[i]=i++; wpisze0czy1,doa[0]czydoa[1]? Testnamoimkomputerzedaje0wa[0],alenainnychmożebyćinaczej
Wykład1OGÓLNEINFORMACJEOC,str23 Priorytety nie rozstrzygają wszystkich wątpliwości Przykład: MCzykomenda y=(x=1)+(x=2); nadazmiennej y wartość2,czy3, czy4? Testnamoimkomputerzedaje4,alenainnychmożebyćinaczej Przykład: MCzykomenda i=0;a[i]=i++; wpisze0czy1,doa[0]czydoa[1]? Testnamoimkomputerzedaje0wa[0],alenainnychmożebyćinaczej programowanie w poprzek naturalnej hierarchii logicznej
Wykład1OGÓLNEINFORMACJEOC,str23 Priorytety nie rozstrzygają wszystkich wątpliwości Przykład: MCzykomenda y=(x=1)+(x=2); nadazmiennej y wartość2,czy3, czy4? Testnamoimkomputerzedaje4,alenainnychmożebyćinaczej Przykład: MCzykomenda i=0;a[i]=i++; wpisze0czy1,doa[0]czydoa[1]? Testnamoimkomputerzedaje0wa[0],alenainnychmożebyćinaczej programowanie w poprzek naturalnej hierarchii logicznej, naruszanie dyscypliny typów
Wykład1OGÓLNEINFORMACJEOC,str23 Priorytety nie rozstrzygają wszystkich wątpliwości Przykład: MCzykomenda y=(x=1)+(x=2); nadazmiennej y wartość2,czy3, czy4? Testnamoimkomputerzedaje4,alenainnychmożebyćinaczej Przykład: MCzykomenda i=0;a[i]=i++; wpisze0czy1,doa[0]czydoa[1]? Testnamoimkomputerzedaje0wa[0],alenainnychmożebyćinaczej programowanie w poprzek naturalnej hierarchii logicznej, naruszanie dyscypliny typów, korzystanie z komend o nieustalonej kolejności wykonania
Wykład1OGÓLNEINFORMACJEOC,str23 Priorytety nie rozstrzygają wszystkich wątpliwości Przykład: MCzykomenda y=(x=1)+(x=2); nadazmiennej y wartość2,czy3, czy4? Testnamoimkomputerzedaje4,alenainnychmożebyćinaczej Przykład: MCzykomenda i=0;a[i]=i++; wpisze0czy1,doa[0]czydoa[1]? Testnamoimkomputerzedaje0wa[0],alenainnychmożebyćinaczej programowanie w poprzek naturalnej hierarchii logicznej, naruszanie dyscypliny typów, korzystanie z komend o nieustalonej kolejności wykonania to złe praktyki, których nie wolno stosować
Wykład1OGÓLNEINFORMACJEOC,str24 Operatory charakterystyczne dla C ++,-- dodanie(odjęcie) jedynki od zmiennej całkowitej
Wykład1OGÓLNEINFORMACJEOC,str24 Operatory charakterystyczne dla C ++,-- dodanie(odjęcie) jedynki od zmiennej całkowitej; n++ oznacza n=n+1,n-- oznacza n=n-1
Wykład1OGÓLNEINFORMACJEOC,str24 Operatory charakterystyczne dla C ++,-- dodanie(odjęcie) jedynki od zmiennej całkowitej; n++ oznacza n=n+1,n-- oznacza n=n-1 Np a[n++]=0; oznacza a[n]=0; n=n+1; a[++n]=0; oznacza n=n+1; a[n]=0; Toniejesttosamo!
Wykład1OGÓLNEINFORMACJEOC,str24 Operatory charakterystyczne dla C ++,-- dodanie(odjęcie) jedynki od zmiennej całkowitej; n++ oznacza n=n+1,n-- oznacza n=n-1 Np a[n++]=0; oznacza a[n]=0; n=n+1; a[++n]=0; oznacza n=n+1; a[n]=0; Toniejesttosamo! +=,-=,*=,/=,%= połączenie operacji z przypisaniem
Wykład1OGÓLNEINFORMACJEOC,str24 Operatory charakterystyczne dla C ++,-- dodanie(odjęcie) jedynki od zmiennej całkowitej; n++ oznacza n=n+1,n-- oznacza n=n-1 Np a[n++]=0; oznacza a[n]=0; n=n+1; a[++n]=0; oznacza n=n+1; a[n]=0; Toniejesttosamo! +=,-=,*=,/=,%= połączenie operacji z przypisaniem; Np n+=1 oznacza n=n+1 lubn++ n*=4 oznacza n=n*4
Wykład1OGÓLNEINFORMACJEOC,str24 Operatory charakterystyczne dla C ++,-- dodanie(odjęcie) jedynki od zmiennej całkowitej; n++ oznacza n=n+1,n-- oznacza n=n-1 Np a[n++]=0; oznacza a[n]=0; n=n+1; a[++n]=0; oznacza n=n+1; a[n]=0; Toniejesttosamo! +=,-=,*=,/=,%= połączenie operacji z przypisaniem; Np n+=1 oznacza n=n+1 lubn++ n*=4 oznacza n=n*4 &,,, ˆ,<<,>> operacjebitowe(koniunkcja,alternatywa,negacja, różnica symetryczna, przesunięcia)