Jerzy Nawrocki, Jerzy Nawrocki Wydział Informatyki Politechnika Poznańska jerzy.nawrocki@put.poznan.pl Cel wykładu Programowanie imperatywne i język C Zaprezentować paradygmat programowania imperatywnego na przykładzie języka C. Programowanie imperatywne (2) Imperatywność Klasy języków programowania Języki programowania łac. imperare rozkazywać Oktawian August 63 p.n.e 14 n.e. Pierwszy Imperator Rzymu Programowanie imperatywne (3) Imperatywne Ciąg rozkazów Fortran Algol Pascal C C++ Java Deklaratywne Opis problemu Prolog ILOG Programowanie imperatywne (4) Historia języka C Pisz Bitwa pod Plan wykładu Akcjum. 1966: Kompilator języka BCPL 1969: Język B 1972: Język C Ken Thompson, UNIX B.Kernighan, D.Ritchie, The C Programming Language. Lex, YACC, AWK Stroustrup, C++, 1983 Programowanie imperatywne (5) Koncepcja Instrukcja Programowanie imperatywne (6) Programowanie imperatywne i język C 1
Jerzy Nawrocki, Program z instrukcją drukowania Kompilacja programu i wykonanie obliczeń Start #include <stdio.h> printf ("Bitwa pod Akcjum\n"); 1. Zapisanie Akc.c programu w pliku 2. Kompilacja np. tcc Akc.c Akc.exe... Stop Bitwa pod Akcjum writeln ('Bitwa pod Akcjum') Programowanie imperatywne (7) Dane wejściowe 3. Wykonanie obliczeń przez Akc.exe Wyniki Bitwa pod Akcjum Programowanie imperatywne (8) Plan wykładu Zapamiętaj sobie 31. Koncepcja Instrukcja Programowanie imperatywne (9) 121 Zapisz 5 Zapisz 121 Odczytaj Jest 121 Zmienna Cel: Pamiętanie wartości (np. liczby) Dwie operacje do wyboru: Zapisanie jakieś wartości. Odczytanie wartości. Programowanie imperatywne (10) W programie można używać wielu zmiennych. Dlatego trzeba je nazywać. 11 22 33 Zmienna X Zmienna Y Zmienna SUMA W programie można używać wielu zmiennych. Dlatego trzeba je nazywać. 18 2 20 Zmienna X Zmienna Y Zmienna SUMA Zapisz w X 18 Zapisz w Y 2 Zapisz w SUMA sumę X+Y Ukryty odczyt Programowanie imperatywne (11) Programowanie imperatywne (12) Programowanie imperatywne i język C 2
Jerzy Nawrocki, 18 2 20 Zmienna X Zmienna Y Zmienna SUMA Zapisz w X 18 Zapisz w Y 2 Zapisz w SUMA sumę X+Y Programowanie imperatywne (13) X := 18; Y := 2; SUMA := X + Y; 18 2 20 Zmienna X Zmienna Y Zmienna SUMA Zapisz w X 18 Zapisz w Y 2 Zapisz w SUMA sumę X+Y Programowanie imperatywne (14) Typy zmiennych Komputer inaczej przetwarza Liczby całkowite (.., -2, -1, 0, 1, 2,..) Liczby rzeczywiste (-1.5, 0.5, 2.3,..) Pojedyncze znaki ('a', 'b', 'z', 'A', 'Z', '+', '-', '*', '$', '0', '9',..) Ciągi znaków ("on", "rok 1956",..) Zmienna: typ + nazwa Przykładowe typy zmiennych w języku C: int liczby całkowite (ang. integer) float liczby rzeczywiste (ang. floating point) char znaki (ang. character) integer real char Deklaracje zmiennych Instrukcje Zmienna: typ + nazwa Prosty program ze zmiennymi Deklaracje zmiennych: typ nazwy_oddzielone_przecinkami ; Programowanie imperatywne (15) Programowanie imperatywne (16) int X, Y, SUMA; int X, Y, SUMA; var X, Y, SUMA: integer; X := 18; Y := 2; SUMA := X + Y; Deklaracje zmiennych: typ nazwy_oddzielone_przecinkami ; Programowanie imperatywne (17) Deklaracje zmiennych: nazwy_oddzielone_przecinkami : typ; Programowanie imperatywne (18) Programowanie imperatywne i język C 3
Jerzy Nawrocki, Plan wykładu Pisz co zapamiętałeś. Koncepcja Instrukcja Programowanie imperatywne (19) widać wyników! Drukowanie wartości int X, Y, SUMA; Programowanie imperatywne (20) Ogólniejsza postać printf: printf(" format ", zmienne); %d oznacza int printf("x = %d \n", X); X = 18 Drukowanie wartości Drukowanie wartości var X, Y, SUMA: integer; X := 18; Y := 2; SUMA := X + Y; writeln(suma); 20 Programowanie imperatywne (21) Programowanie imperatywne (22) Czytaj, co pisze Plan wykładu Livia Drusilla Koncepcja Instrukcja Programowanie imperatywne (23) Zadanie Napisać program wyświetlający sumę dowolnych dwóch liczb całkowitych. 18 2 0 5-3 1 18 + 2 = 20 0 + 5 = 5-3 + 1 = -2 Programowanie imperatywne (24) Programowanie imperatywne i język C 4
Jerzy Nawrocki, Jak wczytać wartości X,Y? Czytanie liczb int X, Y, SUMA; printf("%d + %d = %d \n", X, Y, SUMA); 18 + 2 = 20 Jak wczytać wartości X,Y? Czytanie liczb scanf(" format ", adresy_zmiennych); scanf(" %d ", &X ); int X; printf("%d \n", X ); Programowanie imperatywne (25) Programowanie imperatywne (26) Czytanie liczb Czytanie liczb 0 5 int X, Y, SUMA; printf("%d + %d = %d \n", X, Y, SUMA); int X, Y, SUMA; scanf("%d %d", &X, &Y); printf("%d + %d = %d \n", X, Y, SUMA); 0 + 5 = 5 Programowanie imperatywne (27) Programowanie imperatywne (28) 0 5 Czytanie liczb Jeśli idzie > 1 legion, to Plan wystaw wykładu 2; w przeciwnym razie wystaw 1. var X, Y, SUMA: integer; read(x, Y); SUMA := X + Y; writeln(x, ' + ', Y, ' = ', SUMA); 0 + 5 = 5 Koncepcja Instrukcja Programowanie imperatywne (29) Programowanie imperatywne (30) Programowanie imperatywne i język C 5
Jerzy Nawrocki, Napisać program wyświetlający minimum z dwóch liczb całkowitych. 18 2-3 1 min(18, 2)= 2 min(-3, 1)= -3 5 5 min(5, 5)= 5 Zadanie Schemat rozwiązania Start Czytaj X,Y X < Y Drukuj(X) Drukuj(Y) Programowanie imperatywne (31) Stop Programowanie imperatywne (32) Instrukcja 18 2 Instrukcja if ( warunek ) { instrukcje_1 else { instrukcje_2 if ( ładna_pogoda ) { o_19tej_idziemy_na_spacer; else { o_19tej_idziemy_do_kina; Programowanie imperatywne (33) scanf("%d %d", &X, &Y); if ( X < Y ) { printf("min(%d, %d)= %d \n", X, Y, X); else { printf("min(%d, %d)= %d \n", X, Y, Y); min(18, 2)= 2 Programowanie imperatywne (34) 18 2 Instrukcja var X, Y: integer; read(x, Y); if ( X < Y ) then writeln('min(', X, ', ', Y, ')= ', X); end else writeln('min(', X, ', ', Y, ')= ', Y); end min(18, 2)= 2 Programowanie imperatywne (35) Jeśli Marek Antoniusz Plan nie wykładu ustąpi, to wypowiemy wojnę Egiptowi. Koncepcja Instrukcja Programowanie imperatywne (36) Programowanie imperatywne i język C 6
Jerzy Nawrocki, Zadanie Napisać program wyświetlający wartość bezwzględną podanej liczby całkowitej. 3-3 3 3 Czytaj X X < 0 X X Schemat rozwiązania Drukuj X Programowanie imperatywne (37) Programowanie imperatywne (38) Uproszczona instrukcja if ( warunek ) { instrukcje if ( pożar ) { dzwonpostrazpozarna; X Uproszczona instrukcja 3 int X; if ( X < 0 ) { X = -X; printf("%d \n", X); Programowanie imperatywne (39) Programowanie imperatywne (40) 1 5 Relacje w języku C int a, b; scanf("%d %d", &a, &b); if (a < b) {printf("%d mniejsze niz %d\n", a, b); if (a <= b) {printf("%d mniejsze lub rowne %d\n",a, b); if (a == b) {printf("%d rowne %d\n", a, b); if (a!= b) {printf("%d rozne od %d\n", a, b); if (a >= b) {printf("%d wieksze lub rowne %d\n", a, b); if (a > b) {printf("%d wieksze niz %d\n", a, b); Programowanie imperatywne (41) Jak długo Marek Antoniusz Plan wykładu jest z Kleopatrą, będziemy walczyć. Koncepcja Instrukcja Programowanie imperatywne (42) Programowanie imperatywne i język C 7
Jerzy Nawrocki, Zadanie Napisać program obliczający liczbę cyfr dziesiętnych podanej liczby naturalnej (0, 1, 2,..). 0 9 10 0 ma cyfr: 1 9 ma cyfr: 1 10 ma cyfr: 2 99 99 ma cyfr: 2 100 100 ma cyfr: 3 Programowanie imperatywne (43) 0,.. 9, 10,.. 99, 100,.. 999, 1 000,.. 9 999, 10 000,.. 1 cyf. X<10 C=1 G=10 C= Cyfr G= Granica 2 cyf. X<100 C= C + 1 G= G * 10 3 cyfry X<1000 C= C + 1 G= G * 10 4 cyfry X<10000 C= C + 1 G= G * 10 Programowanie imperatywne (44) Jak to sprawdzić? Czytaj X C 1 G 10 C C + 1 G G * 10 Przykładowe obliczenie 9 X C G Czytaj X C 1 G 10 C C + 1 G G * 10 while ( warunek ) { instrukcje; while ( ) { Instrukcja powtarzania Drukuj C Drukuj C Programowanie imperatywne (45) Programowanie imperatywne (46) Program w C Program w C Czytaj X C 1 G 10 C C + 1 G G * 10 Czytaj X C 1 G 10 C C + 1 G G * 10 while () { Drukuj C Drukuj C Programowanie imperatywne (47) Programowanie imperatywne (48) Programowanie imperatywne i język C 8
Jerzy Nawrocki, 87 Program w Pascalu Plan wykładu var X, C, G: integer; read(x); C:= 1; G:= 10; while () do end; writeln(x, ' ma cyfr: ', C); 87 ma cyfr: 2 Programowanie imperatywne (49) Koncepcja Instrukcja Programowanie imperatywne (50) Koncepcja modularyzacji Koncepcja modularyzacji System wahadłowca tg(x) Rakieta ET Discovery sin(x) cos(x) tg(x) = sin(x) / cos(x) Monitor Start wahadłowca Discovery (26.VII.2005) Programowanie imperatywne (51) Programowanie imperatywne (52) Nazwa funkcji cos ( /2 ) = 0 Argument (parametr aktualny) Wynik Napisać program wyświetlający liczbę o 1 większą od podanej. 3 Y= X + 1; printf("%d \n", Y); 4 nast ( 3 ) == 4 int nast(int n) { return n+1; Y= nast(x); printf("%d \n", Y); Programowanie imperatywne (53) Programowanie imperatywne (54) Programowanie imperatywne i język C 9
Jerzy Nawrocki, int nast(int n) { return n+1; Y= nast(x); printf("%d \n", Y); int nast(int n) { return n+1; Y= nast(x); printf("%d \n", Y); Programowanie imperatywne (55) Programowanie imperatywne (56) int nast(int n) { return n+1; Y= nast(x); printf("%d \n", Y); TypWyniku NazwaFun ( Param ){ Deklaracje Instrukcje return Wynik; int nast( int n ){ return n+1 ; Programowanie imperatywne (57) Programowanie imperatywne (58) Program = zbiór funkcji Wykonanie zaczyna się od funkcji main int nast( int n ){ return n+1 ; Y= nast(x); printf("%d \n", Y); Program = zbiór funkcji Wykonanie zaczyna się od funkcji main Brak parametrów printf("fly by Lot\n"); Programowanie imperatywne (59) Programowanie imperatywne (60) Programowanie imperatywne i język C 10
Jerzy Nawrocki, while () { void Ile main() cyfr { ma podana liczba X? int X, C; C= LiczbaCyfr(X); int LiczbaCyfr(int n) { int C, G; while (n >= G) { return C; int LiczbaCyfr(int n) { int C, G;... return C; int X, C; C= LiczbaCyfr(X); Wszystkie funkcje w jednym pliku Programowanie imperatywne (61) Programowanie imperatywne (62) function LiczbaCyfr(n: integer): integer; var C, G: integer;... LiczbaCyfr:= C; end; var X, C: integer; being read(x); C:= LiczbaCyfr(X); writeln(x, ' ma cyfr: ', C); w Pascalu Podsumowanie Plan wykładu Programowanie imperatywne (63) Programowanie imperatywne (64) Podsumowanie Operacje wejścia-wyjścia scanf / printf read / writeln Instrukcje złożone if ( ) { else { if then else while ( ) { while do Wyrażenia logiczne a == b a = b a!= b a <> b Instrukcja przypisania (zapamiętania) a = b; a := b Programowanie imperatywne (65) int F ( int x) { int LokalnyWynik; // instrukcje return LokalnyWynik; Podsumowanie Podprogramy (funkcje) Definicja function F (x: integer): integer; var LokalnyWynik: integer; (* instrukcje *) F:= LokalnyWynik; end; Podprogramy (funkcje) Wywołanie Zmienna = 1 + F(2*a); Zmienna := 1 + F(2*a); Programowanie imperatywne (66) Programowanie imperatywne i język C 11
Jerzy Nawrocki, Programowanie sterowane testami 5 Programowanie sterowane testami 87 5 ma cyfr: 1 87 ma cyfr: 1 Programowanie imperatywne (67) Programowanie imperatywne (68) Programowanie sterowane testami 87 while () { Jak to sprawdzić? Symboliczne wykonanie schematu Czytaj X C 1 G 10 C C + 1 G G * 10 Drukuj C 9 X C G 9 87 ma cyfr: 2 Programowanie imperatywne (69) Programowanie imperatywne (70) 9 Symboliczne wykonanie programu Dziękuję za uwagę! while () { X C G 9 Programowanie imperatywne (71) Rzym, Lungo Tevere (foto: Giampaolo Macorig; dostępne Programowanie na www.flickr.com) imperatywne (72) Programowanie imperatywne i język C 12