Informatyka jako dziedzina wiedzy

Download Report

Transcript Informatyka jako dziedzina wiedzy

Wprowadzenie do informatyki
Wykład 4
Programowanie imperatywne i język C
[email protected]
http://www.cs.put.poznan.pl/jnawrocki/wsb-wdi/
Copyright, 2004 © Jerzy R. Nawrocki
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 BCPL
1969: Język B
1972: Język C
Ken Thompson, UNIX
B.Kernighan, D.Ritchie,
The C Programming Language.
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
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
drukowania
void main() {
printf("Fly by Lot\n");
return;
}
J.Nawrocki, Programowanie imperatywne i C
Program z jedną instrukcją
Nazwa
instrukcji
void main() {
printf("Fly by Lot\n");
return;
}
J.Nawrocki, Programowanie imperatywne i C
Program z jedną instrukcją
Drukowany tekst
void main() {
printf("Fly by Lot\n");
return;
}
Fly by Lot
J.Nawrocki, Programowanie imperatywne i C
Kompilacja programu i wykonanie obliczeń
1. Zapisanie
2. Kompilacja Fly.exe
Fly.c
programu
np.
w pliku
tcc Fly.c
Dane wejściowe 3. Wykonanie Wyniki Fly by Lot
obliczeń przez
Fly.exe
J.Nawrocki, Programowanie imperatywne i C
Program z dwiema instrukcjami
void main() {
printf("Historia Poznania\n");
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");
return;
}
void main() {
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 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
20 Zmienna SUMA
Zapisz w X 18
Zapisz w Y 2
Zapisz w SUMA sumę X+Y
Ukryty odczyt
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
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
void main() {
int X, Y, SUMA;
X = 18;
Y = 2;
SUMA = X + Y;
printf("%d + %d = %d \n", X, Y, SUMA);
return;
}
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
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
}
Tak
else {
Drukuj(X) Drukuj(Y)
printf("min(%d, %d)= %d \n", X, Y, Y);
}
return;
}
J.Nawrocki, Programowanie imperatywne i C
Instrukcja warunkowa
0 5
void main() {
int X, Y;
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);
}
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);
if ( X < Y ) {
printf("min(%d, %d)= %d \n", X, Y, X);
}
else {
printf("min(%d, %d)= %d \n", X, Y, Y);
}
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
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
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 ( 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;
}
3
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
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
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
C C+1
G  G * 10
Drukuj C
J.Nawrocki, Programowanie imperatywne i C
X
87
Nie
C
G
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
87
Nie
C
1
G
10
2
100
87 ma cyfr: 2
Instrukcja powtarzania
Czytaj X
C1
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
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.Nawrocki, Programowanie imperatywne i C
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;
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;
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;
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 ;
}
TypWyniku NazwaFun ( 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
void main() {
printf("Fly by Lot\n");
return;
}
Brak wyniku
J.Nawrocki, Programowanie imperatywne i C
Problem stopu
Dany jest podprogram X.
Czy ten podprogram skończy obliczenia
w skończonym czasie?
ZatrzymaSie(F) – funkcja „wyrocznia”.
X – funkcja nieprzewidywalna.
J.Nawrocki, Programowanie imperatywne i C
Problem stopu
funkcja X
ZatrzymaSie(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’.
Instrukcja powtarzania ‘while’.
Funkcje (podprogramy).
Nie wszystko można obliczyć.
Język schematów blokowych jest
wygodnym narzędziem opisu
algorytmów.
J.Nawrocki, Programowanie imperatywne i C