Wprowadzenie do informatyki Wykad 4 Programowanie imperatywne i

  • Slides: 54
Download presentation
Wprowadzenie do informatyki Wykład 4 Programowanie imperatywne i język C Jerzy. Nawrocki@put. poznan. pl

Wprowadzenie do informatyki Wykład 4 Programowanie imperatywne i język C Jerzy. Nawrocki@put. poznan. pl http: //www. cs. put. poznan. pl/jnawrocki/wsb-wdi/ J. Nawrocki, Programowanie Copyright, 2004 © Jerzy R. Nawrockiimperatywne i C

Klasy języków programowania Języki programowania Imperatywne Ciąg rozkazów Fortran Algol Pascal C C++ Java

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

Historia języka C 1966: Kompilator języka BC 1969: Język B 1972: Język C Ken

Historia języka C 1966: Kompilator języka BC 1969: Język B 1972: Język C Ken Thompson, UNIX B. Kernighan, D. Ritchie, The C Programming Langua Lex, YACC, AWK Stroustrap, C++, 1983 J. Nawrocki, Programowanie imperatywne i C

Plan wykładu • • Programy z jedną instrukcją Dwie instrukcje i n Koncepcja zmiennej

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’ • Funkcje • Problem stopu J. Nawrocki, Programowanie imperatywne i C

Program z jedną instrukcją Instrukcja drukowani a void main() { printf("Fly by Lotn"); return;

Program z jedną instrukcją Instrukcja drukowani a void main() { printf("Fly by Lotn"); return; } J. Nawrocki, Programowanie imperatywne i C

Program z jedną instrukcją Nazwa instrukcji void main() { printf("Fly by Lotn"); return; }

Program z jedną instrukcją Nazwa instrukcji void main() { printf("Fly by Lotn"); return; } J. Nawrocki, Programowanie imperatywne i C

Program z jedną instrukcją Drukowany tekst void main() { printf("Fly by Lotn"); return; }

Program z jedną instrukcją Drukowany tekst void main() { printf("Fly by Lotn"); return; } Fly by Lot J. Nawrocki, Programowanie imperatywne i C

Kompilacja programu i wykonanie obliczeń 1. Zapisanie 2. Kompilacja Fly. ex Fly. programu np.

Kompilacja programu i wykonanie obliczeń 1. Zapisanie 2. Kompilacja Fly. ex Fly. programu np. c e w pliku tcc Fly. c Dane wejściowe 3. Wykonanie Wyni obliczeń przezki Fly. exe J. Nawrocki, Programowanie imperatywne i C Fly by Lot

Program z dwiema instrukcjami void main() { printf("Historia Poznanian"); printf("warta jest poznania. n"); return;

Program z dwiema instrukcjami void main() { printf("Historia Poznanian"); printf("warta jest poznania. n"); return; } Historia Poznania warta jest poznania. J. Nawrocki, Programowanie imperatywne i C

Znak nowej linii n void main() { printf("Historia Poznania n"); printf("warta jest poznania. n");

Znak nowej linii n void main() { printf("Historia Poznania n"); printf("warta jest poznania. n"); void main() { return; printf("Historia Poznania nwarta jest } poznania. n"); return; } Historia Poznania warta jest poznania. J. Nawrocki, Programowanie imperatywne i C

Zmienna jako pamięć Cel: Pamiętanie wartości (np. liczby) Dwie operacje do wyboru: • Zapisanie

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 jako pamięć W programie można używać wielu zmiennych Dlatego trzeba je nazywać. 18 Zmienna X 2 Zmienna Y 20 Zmienna SUMA Zapisz w X 18 Zapisz w Y 2 Zapisz w SUMA sumę X+Y J. Nawrocki, Programowanie imperatywne i C Ukryty odczyt

Zmienna jako pamięć 18 Zmienna X 2 Zmienna Y 20 Zmienna SUMA void main()

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 Zapisz w SUMA sumę X+Y + Y; . . . } J. Nawrocki, Programowanie imperatywne i C

Typy zmiennych Komputer inaczej przetwarza • Liczby całkowite (. . , -2, -1, 0,

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', '+', '-', '*', '$', • 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 Deklarac void main() { je. . . zmienny. . .

Prosty program ze zmiennymi Deklarac void main() { je. . . zmienny. . . ch return; Instrukcj } e Zmienna: typ + nazwa Deklaracje zmiennych: typ nazwy_oddzielone_przecinka J. Nawrocki, Programowanie imperatywne i C

Zmienna jako pamięć void main() {. . . int X, Y, X = 18;

Zmienna jako pamięć void main() {. . . int X, Y, X = 18; SUMA; Y = 2; X = 18; SUMA = X Y = 2; + Y; SUMA = X +. . . Y; } return; Deklaracje zmiennych: } typ nazwy_oddzielone_przecinka J. Nawrocki, Programowanie imperatywne i C

Drukowanie wartości zmiennej Ogólniejsza postać printf: printf(" format ", zmienne); %d oznacza int void

Drukowanie wartości zmiennej Ogólniejsza postać printf: printf(" format ", zmienne); %d oznacza int void main() { int X, Y, SUMA; X = 18; Y = 2; SUMA = X + Y; printf("X = %d n", X); printf("%d n", SUM X = 18 return; } printf("Y= %d; X= %d n", Y, X); 20 Y= 2; X= 18 J. Nawrocki, Programowanie imperatywne i C

Zadanie Napisać program wyświetlający sumę dowolnych dwóch liczb całkowitych. 18 2 18 + 2

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;

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, S return; } 18 + 2 = 20 J. Nawrocki, Programowanie imperatywne i C

Czytanie liczb Jak wczytać wartości X, Y? scanf(" format ", adresy_zmiennych); scanf(" %d ",

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 ",

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 void main() { int X, Y, SUMA; X = 18; Y =

Czytanie liczb void main() { int X, Y, SUMA; X = 18; Y = 2; SUMA = X + Y; printf("%d + %d = %d n", X, Y, S return; } J. Nawrocki, Programowanie imperatywne i C

Czytanie liczb 18 2 void main() { int X, Y, SUMA; scanf("%d %d", &X,

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, S 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

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

Schemat rozwiązania Start Czytaj X, Y X<Y Nie Tak Drukuj(X) Stop J. Nawrocki, Programowanie

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

Instrukcja warunkowa if ( warunek ) { instrukcje_1 } else { instrukcje_2 } if ( ładna_pogoda ) { o_19 tej_idziemy_na_sp acer; } else { o_19 tej_idziemy_do_kin a; J. Nawrocki, Programowanie imperatywne i C }

Instrukcja warunkowa void main() { int X, Y; scanf("%d %d", &X, &Y); Czytaj X,

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<Y } Tak else { Drukuj(X) Drukuj(Y) printf("min(%d, %d)= %d n", X, } return; } J. Nawrocki, Programowanie imperatywne i C

Instrukcja warunkowa 0 5 void main() { int X, Y; scanf("%d %d", &X, &Y);

Instrukcja warunkowa 0 5 void main() { int X, Y; scanf("%d %d", &X, &Y); if ( X < Y ) { printf("min(%d, %d)= %d n", X, } else { printf("min(%d, %d)= %d n", X, Y } return; } min(0, 5)= 0 J. Nawrocki, Programowanie imperatywne i C

Instrukcja warunkowa 18 2 void main() { int X, Y; scanf("%d %d", &X, &Y);

Instrukcja warunkowa 18 2 void main() { int X, Y; scanf("%d %d", &X, &Y); if ( X < Y ) { printf("min(%d, %d)= %d n", X, Y } else { printf("min(%d, %d)= %d n", X, } return; } min(18, 2)= 2 J. Nawrocki, Programowanie imperatywne i C

Zadanie Napisać program wyświetlający wartość bezwzględną podanej liczby całkowitej. 3 3 0 0 -3

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

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 )

Uproszczona instrukcja warunkowa if ( warunek ) { instrukcje } if ( pożar ) { dzwon. Po. Straz. Pozarna; } J. Nawrocki, Programowanie imperatywne i C

Uproszczona instrukcja warunkowa Czytaj X X<0 Tak X –X Drukuj X Nie void main()

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

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

Uproszczona instrukcja warunkowa -3 X -3 void main() { int X; scanf("%d", &X); if

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

Uproszczona instrukcja warunkowa -3 X 3 void main() { int X; scanf("%d", &X); if

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

Uproszczona instrukcja warunkowa -3 X 3 void main() { int X; scanf("%d", &X); if

Uproszczona instrukcja warunkowa -3 X 3 void main() { int X; scanf("%d", &X); if ( X < 0 ) { X = -X; } printf("%d n", X); return; } 3 J. Nawrocki, Programowanie imperatywne i C

Zadanie Napisać program obliczający liczbę cyfr dziesiętnych podanej liczby naturalnej (0, 1, 2, .

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 ma cyfr: 3 J. Nawrocki, Programowanie imperatywne i C

Analiza zadania 0, . . 9, 1 cyf. X<1 0 C=1 G=10 10, .

Analiza zadania 0, . . 9, 1 cyf. X<1 0 C=1 G=10 10, . . 99, 2 cyf. X<100 X >= G Tak C= C + 1 G= G * 10 C= Cyfr G= Granica 100, . . 999, 3 cyfry X<1000 X >= G Tak C= C + 1 G= G * 10 J. Nawrocki, Programowanie imperatywne i C 1 000, . . 9 999, 4 cyfry X<10000 X >= G Tak C= C + 1 G= G * 10 X >= G

Inny przykład obliczeń 87 Czytaj X C 1 G 10 X >= G Tak

Inny przykład obliczeń 87 Czytaj X C 1 G 10 X >= G Tak C C+1 G G * 10 Drukuj C J. Nawrocki, Programowanie imperatywne i C X Nie C G

Inny przykład obliczeń 87 Czytaj X C 1 G 10 X >= G Tak

Inny przykład obliczeń 87 Czytaj X C 1 G 10 X >= G Tak C C+1 G G * 10 Drukuj C J. Nawrocki, Programowanie imperatywne i C X C 87 Nie G

Inny przykład obliczeń 87 Czytaj X C 1 G 10 X >= G Tak

Inny przykład obliczeń 87 Czytaj X C 1 G 10 X >= G Tak C C+1 G G * 10 Drukuj C J. Nawrocki, Programowanie imperatywne i C Nie X C 87 1 G 10 2 100 87 ma cyfr: 2

Instrukcja powtarzania Czytaj X C 1 G 10 X >= G Tak C C+1

Instrukcja powtarzania Czytaj X C 1 G 10 X >= G Tak C C+1 G G * 10 while ( warunek ) { instrukcje; } Nie while ( X >= G ) { C= C + 1; G= G * 10; } Drukuj C J. Nawrocki, Programowanie imperatywne i C

Program w C Czytaj X C 1 G 10 X >= G Tak C

Program w C Czytaj X C 1 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

Funkcje cos ( /2 ) = 0 Nazwa funkcji Wynik Argument (parametr aktualny) J.

Funkcje cos ( /2 ) = 0 Nazwa funkcji Wynik Argument (parametr aktualny) J. Nawrocki, Programowanie imperatywne i C

Funkcje Napisać program wyświetlający liczbę o 1 większą od podanej. 3 void main() {

Funkcje Napisać program wyświetlający liczbę o 1 większą od podanej. 3 void main() { int X, Y; scanf("%d", &X); Y= X + 1; printf("%d n", Y); return; } 4 J. Nawrocki, Programowanie imperatywne i C nast ( 3 ) = 4 int nast(int n) { return n+1; } void main() { int X, Y; scanf("%d", X); Y= nast(X); printf("%d n", Y) return; }

Funkcje int nast(int n) { return n+1; } void main() { int X, Y;

Funkcje int nast(int n) { return n+1; } void main() { int X, Y; scanf("%d", X); Y= nast(X); printf("%d n", Y) return; } J. Nawrocki, Programowanie imperatywne i C

Funkcje int nast(int n) { return n+1; } void main() { int X, Y;

Funkcje int nast(int n) { return n+1; } void main() { int X, Y; scanf("%d", X); Y= nast(X); printf("%d n", Y) return; } J. Nawrocki, Programowanie imperatywne i C

Funkcje int nast(int n) { return n+1; } void main() { int X, Y;

Funkcje int nast(int n) { return n+1; } void main() { int X, Y; scanf("%d", X); Y= nast(X); printf("%d n", Y) return; } J. Nawrocki, Programowanie imperatywne i C

Funkcje int nast( int n ){ return n+1 ; } Typ. Wyniku Nazwa. Fun

Funkcje int nast( int n ){ return n+1 ; } Typ. Wyniku Nazwa. Fun ( Param ){ Deklaracje Instrukcje return Wynik; } J. Nawrocki, Programowanie imperatywne i C

Funkcje Program = zbiór funkcji Wykonanie zaczyna się od funkcji main Żaden Brak parametrów

Funkcje Program = zbiór funkcji Wykonanie zaczyna się od funkcji main Żaden Brak parametrów void main() { printf("Fly by Lotn"); return; } J. Nawrocki, Programowanie imperatywne i C Brak wyniku

Problem stopu Dany jest podprogram X. Czy ten podprogram skończy obliczenia w skończonym czasie?

Problem stopu Dany jest podprogram X. Czy ten podprogram skończy obliczenia w skończonym czasie? Zatrzyma. Sie(F) – funkcja „wyrocznia”. X – funkcja nieprzewidywalna. J. Nawrocki, Programowanie imperatywne i C

Problem stopu funkcja X Zatrzyma. Sie(X) Nie Tak koniec X J. Nawrocki, Programowanie imperatywne

Problem stopu funkcja X Zatrzyma. Sie(X) Nie Tak koniec X J. Nawrocki, Programowanie imperatywne i C Wniosek: Problem stopu jest nierozstrzygalny

Podsumowanie Wreszcie! • Drukowanie i czytanie liczb w C. • Intrukcje warunkowe ‘if’. •

Podsumowanie Wreszcie! • Drukowanie i czytanie liczb w C. • Intrukcje warunkowe ‘if’. • Instrukcja powtarzania ‘while’. • Funkcje (podprogramy). • Nie wszystko można obliczyć. • Język schematów blokowych jest wygodnym J. Nawrocki, Programowanie imperatywne i C