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
Instrukcja powtarzania
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ą
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 );
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)= 5
-3
1
min(-3, 1)= -3
5
5
min(5, 5)= 5
J.Nawrocki, Programowanie imperatywne i C
Język schematów blokowych
Start
R1
SS+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
Czytaj X,Y
X<Y
Nie
Tak
Drukuj(X)
void main() {
int X, Y;
scanf("%d %d", &X, &Y);
if ( X < Y ) {
printf("min(%d, %d)= %d \n", X, Y, X);
}
else {
Drukuj(Y)
}
return;
}
min(0, 5)= 0
J.Nawrocki, Programowanie imperatywne i C
Instrukcja warunkowa
Czytaj X,Y
X<Y
Nie
Tak
Drukuj(X)
void main() {
int X, Y;
scanf("%d %d", &X, &Y);
if ( X < Y ) {
printf("min(%d, %d)= %d \n", X, Y, X);
}
else {
Drukuj(Y)
}
return;
}
min(0, 5)= 0
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
Liczba automorficzna
Jak
obliczyć
rzad(n) ?
rząd(n) = 10liczba_cyfr(n)
rząd(1)= .. = rząd(9)=10
rząd(10)= .. = rząd(99)=100
rząd(100)= .. = rząd(999)=1000
rząd(n) = 10, 100, 1000, ..
rząd(n) > n
J.Nawrocki, Programowanie imperatywne i C
Liczba automorficzna
We
n
Jak to
sprawdzi
ć?
Wyj
rz
25
rz  10
rz <= n
Nie
Tak
rz  rz * 10
J.Nawrocki, Programowanie imperatywne i C
Wynik  rz
Problem stopu
Dany jest podprogram X. Czy ten podprogram
skończy obliczenia w skończonym czasie?
ZatrzymaSie – Podprogram „wyrocznia”.
X – Podprogram nieprzewidywalny.
J.Nawrocki, Programowanie imperatywne i C
Podprogram nieprzewidywalny
Wniosek:
Problem stopu
jest nierozstrzygalny.
poczatek X
ZatrzymaSie(X)
Nie
Tak
koniec X
J.Nawrocki, Programowanie imperatywne i C
Podsumowanie
Wreszcie!
• Drukowanie i czytanie liczb
całkowitych.
• Instrukcje warunkowe i
powtarzania.
• Język schematów blokowych jest
wygodnym narzędziem opisu
algorytmów.
• Nie wszystko można obliczyć.
J.Nawrocki, Programowanie imperatywne i C
Ocena wykładu
1. Wrażenie ogólne? (1 - 6)
2. Zbyt wolno czy zbyt
szybko?
3. Czy dowiedziałeś się
czegoś ważnego?
4. Co poprawić i jak?
J.Nawrocki, Programowanie imperatywne i C