Wstęp do informatyki Wykład 2 Programowanie imperatywne i język C [email protected] http://www.cs.put.poznan.pl/jnawrocki/wsb-wdi/ Copyright, 2005 © Jerzy R. Nawrocki Imperatywność łac. imperare rozkazywać Oktawian August 63 p.n.e – 14 n.e. Pierwszy Imperator Rzymu J.Nawrocki, Programowanie imperatywne i C Klasy języków programowania Języki programowania Imperatywne Ciąg rozkazów Fortran Algol Pascal C C++ Java J.Nawrocki, Programowanie imperatywne i C Deklaratywne Opis problemu Prolog ILOG Plan wykładu • • • • Programy z jedną instrukcją Dwie instrukcje i \n Koncepcja zmiennej Drukowanie wartości zmiennej • Czytanie liczb • Instrukcja warunkowa • Uproszczona instrukcja warunkowa • Instrukcja powtarzania ‘while’. J.Nawrocki, Programowanie imperatywne i C Plan wykładu Pisz „Bitwa pod Akcjum”. • Programy z jedną instrukcją • • • • • • • Dwie instrukcje i \n Koncepcja zmiennej Drukowanie wartości zmiennej Czytanie liczb Instrukcja warunkowa Uproszczona instrukcja warunkowa Instrukcja powtarzania ‘while’ J.Nawrocki, Programowanie imperatywne i C Program z jedną instrukcją Drukowany tekst void main() { printf("Bitwa pod Akcjum\n"); return; } Bitwa pod Akcjum J.Nawrocki, Programowanie imperatywne i C Kompilacja programu i wykonanie obliczeń 1. Zapisanie Akc.c 2. Kompilacja Akc.exe programu np. w pliku tcc Akc.c Dane wejściowe 3. Wykonanie Wyniki Bitwa pod Akcjum obliczeń przez Akc.exe J.Nawrocki, Programowanie imperatywne i C Program z dwiema instrukcjami void main() { printf("Bitwa pod Akcjum.\n"); printf("Zwyciestwo.\n"); return; } Bitwa pod Akcjum. Zwyciestwo. J.Nawrocki, Programowanie imperatywne i C Znak nowej linii \n void main() { printf(„Bitwa pod \n Akcjum."); printf(„Zwyciestwo.\n"); return; } Bitwa pod Akcjum. Zwyciestwo. J.Nawrocki, Programowanie imperatywne i C Znak nowej linii \n void main() { printf("Bitwa pod Akcjum \n"); printf("Zwyciestwo.\n"); return; } void main() { printf("Bitwa pod Akcjum. \nZwyciestwo.\n"); return; } Bitwa pod Akcjum. Zwyciestwo. J.Nawrocki, Programowanie imperatywne i C Zmienna jako pamięć Cel: Pamiętanie wartości (np. liczby) Dwie operacje do wyboru: • Zapisanie jakieś wartości. • Odczytanie wartości. 121 Zmienna Zapisz 5 Zapisz 121 Odczytaj Jest 121 J.Nawrocki, Programowanie imperatywne i C Zmienna jako pamięć W programie można używać wielu zmiennych. Dlatego trzeba je nazywać. 18 Zmienna X 2 Zmienna Y 33 Zmienna SUMA Zapisz w X 18 Zapisz w Y 2 Zapisz w SUMA sumę X+Y J.Nawrocki, Programowanie imperatywne i C Zmienna jako pamięć 18 Zmienna X 2 Zmienna Y 20 Zmienna SUMA void main() { ... Zapisz w X 18 X = 18; Zapisz w Y 2 Y = 2; SUMA = X + Y; Zapisz w SUMA sumę X+Y ... } J.Nawrocki, Programowanie imperatywne i C 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) J.Nawrocki, Programowanie imperatywne i C Prosty program ze zmiennymi Deklaracje zmiennych void main() { ... ... return; Instrukcje } Zmienna: typ + nazwa Deklaracje zmiennych: typ nazwy_oddzielone_przecinkami ; J.Nawrocki, Programowanie imperatywne i C Zmienna jako pamięć void main() { ... X = 18; Y = 2; SUMA = X + Y; ... } void main() { int X, Y, SUMA; X = 18; Y = 2; SUMA = X + Y; return; } Deklaracje zmiennych: typ nazwy_oddzielone_przecinkami ; J.Nawrocki, Programowanie imperatywne i C Drukowanie wartości zmiennej Nie widać wyników! void main() { int X, Y, SUMA; X = 18; Y = 2; SUMA = X + Y; return; } J.Nawrocki, Programowanie imperatywne i C Drukowanie wartości zmiennej Ogólniejsza postać printf: printf(" format ", zmienne); %d oznacza int printf("X = %d \n", X); X = 18 printf("Y= %d; X= %d \n", Y, X); Y= 2; X= 18 void main() { int X, Y, SUMA; X = 18; Y = 2; SUMA = X + Y; printf("%d \n", SUMA); return; } 20 J.Nawrocki, Programowanie imperatywne i C Zadanie Napisać program wyświetlający sumę dowolnych dwóch liczb całkowitych. 18 2 18 + 2 = 20 0 5 0 + 5 = 5 -3 1 -3 + 1 = -2 J.Nawrocki, Programowanie imperatywne i C Czytanie liczb Jak wczytać wartości X,Y? void main() { int X, Y, SUMA; X = 18; Y = 2; SUMA = X + Y; printf("%d + %d = %d \n", X, Y, SUMA); return; } 18 + 2 = 20 J.Nawrocki, Programowanie imperatywne i C Czytanie liczb Jak wczytać wartości X,Y? scanf(" format ", adresy_zmiennych); scanf(" %d ", &X ); void main() { int X; scanf("%d", &X); printf("%d \n", X ); return; } J.Nawrocki, Programowanie imperatywne i C Czytanie liczb Jak wczytać wartości X,Y? scanf(" format ", adresy_zmiennych); scanf(" %d ", &X ); scanf(" %d %d ", &X, &Y ); & - bardzo ważny! J.Nawrocki, Programowanie imperatywne i C Czytanie liczb 18 2 void main() { int X, Y, SUMA; scanf("%d %d", &X, &Y); SUMA = X + Y; printf("%d + %d = %d \n", X, Y, SUMA); return; } 18 + 2 = 20 J.Nawrocki, Programowanie imperatywne i C Zadanie Napisać program wyświetlający minimum z dwóch liczb całkowitych. 18 2 min(18, 2)= 2 0 5 min(0, 5)= 0 -3 1 min(-3, 1)= -3 5 5 min(5, 5)= 5 J.Nawrocki, Programowanie imperatywne i C Język schematów blokowych Start R1 SS+1 R2 > 0 Tak J.Nawrocki, Programowanie imperatywne i C Nie Stop Schemat rozwiązania Start Czytaj X,Y X<Y Nie Tak Drukuj(X) Stop J.Nawrocki, Programowanie imperatywne i C Drukuj(Y) Instrukcja warunkowa if ( warunek ) { instrukcje_1 } else { instrukcje_2 } if ( ładna_pogoda ) { o_19tej_idziemy_na_spacer; } else { o_19tej_idziemy_do_kina; } J.Nawrocki, Programowanie imperatywne i C Instrukcja warunkowa void main() { int X, Y; scanf("%d %d", &X, &Y); Czytaj X,Y if ( X < Y ) { Nie printf("min(%d, %d)= %d \n", X, Y, X); X<Y }else { Tak printf("min(%d, %d)= %d \n", X, Y, Y); Drukuj(X) Drukuj(Y) } return; } J.Nawrocki, Programowanie imperatywne i C Plan wykładu Jeśli Marek Antoniusz nie ustąpi, to wypowiemy wojnę Egiptowi. • • • • • • Programy z jedną instrukcją Dwie instrukcje i \n Koncepcja zmiennej Drukowanie wartości zmiennej Czytanie liczb Instrukcja warunkowa • Uproszczona instrukcja warunkowa • Instrukcja powtarzania ‘while’ J.Nawrocki, Programowanie imperatywne i C Zadanie Napisać program wyświetlający wartość bezwzględną podanej liczby całkowitej. 3 3 0 0 -3 3 J.Nawrocki, Programowanie imperatywne i C Schemat rozwiązania Czytaj X X<0 Tak X –X Drukuj X J.Nawrocki, Programowanie imperatywne i C Nie Uproszczona instrukcja warunkowa if ( warunek ) { instrukcje } if ( pożar ) { dzwonPoStrazPozarna; } J.Nawrocki, Programowanie imperatywne i C Uproszczona instrukcja warunkowa Czytaj X X<0 Tak X –X Drukuj X Nie void main() { int X; scanf("%d", &X); if ( X < 0 ) { X = -X; } printf("%d \n", X); return; } J.Nawrocki, Programowanie imperatywne i C Uproszczona instrukcja warunkowa -3 X -3 void main() { int X; scanf("%d", &X); if ( X < 0 ) { X = -X; } printf("%d \n", X); return; } J.Nawrocki, Programowanie imperatywne i C Plan wykładu Jak długo Marek Antoniusz jest z Kleopatrą, będziemy walczyć. • • • • • • • Programy z jedną instrukcją Dwie instrukcje i \n Koncepcja zmiennej Drukowanie wartości zmiennej Czytanie liczb Instrukcja warunkowa Uproszczona instrukcja warunkowa • Instrukcja powtarzania ‘while’ J.Nawrocki, Programowanie imperatywne i C Zadanie Napisać program obliczający liczbę cyfr dziesiętnych podanej liczby naturalnej (0, 1, 2, ..). 0 0 ma cyfr: 1 9 9 ma cyfr: 1 10 10 ma cyfr: 2 99 99 ma cyfr: 2 100 100 ma cyfr: 3 J.Nawrocki, Programowanie imperatywne i C Analiza zadania Napisać program obliczający liczbę cyfr dziesiętnych podanej liczby naturalnej (0, 1, 2, ..). 0, .. 9, 10, .. 99, 100, .. 999, 1 000, .. 9 999, 10 000, .. J.Nawrocki, Programowanie imperatywne i C Analiza zadania 0, .. 9, 10, .. 99, 100, .. 999, 1 cyf. X<10 C=1 G=10 2 cyf. X<100 3 cyfry X<1000 X >= G Tak C= C + 1 G= G * 10 C= Cyfr G= Granica X >= G Tak C= C + 1 G= G * 10 J.Nawrocki, Programowanie imperatywne i C 1 000, .. 9 999, 10 000, .. 4 cyfry X<10000 X >= G Tak C= C + 1 G= G * 10 X >= G Przykładowe obliczenie Jak to sprawdzić ? 9 Czytaj X C1 G 10 X >= G Tak C C+1 G G * 10 Drukuj C J.Nawrocki, Programowanie imperatywne i C X Nie C G Instrukcja powtarzania Czytaj X C1 G 10 while ( warunek ) { instrukcje; } X >= G Tak C C+1 G G * 10 Nie while ( X >= G ) { C= C + 1; G= G * 10; } Drukuj C J.Nawrocki, Programowanie imperatywne i C Program w C Czytaj X C1 G 10 X >= G Tak C C+1 G G * 10 Drukuj C Nie void main() { int X, C, G; scanf("%d", X); C= 1; G= 10; while (X >= G) { C= C + 1; G= G * 10; } printf("%d ma cyfr: %d \n", X, C); return; } J.Nawrocki, Programowanie imperatywne i C Podsumowanie Podsumujmy. • • • • Drukowanie i czytanie liczb w C. Instrukcje warunkowe ‘if’. Instrukcja powtarzania ‘while’. Język schematów blokowych jest wygodnym narzędziem opisu algorytmów. J.Nawrocki, Programowanie imperatywne i C