Post on 27-Feb-2019
Podstawy Programowania
Wykład 1
• Jerzy Grębosz Symfonia C++
• Bjarne Stroustrup Język C++
• Bruce Eckel Thinking in C++
• Tony L. Hansen C++ zadania i odpowiedzi
Jak się uczyć programowania?
Wykład i laboratorium
Literatura
Tutoriale w Internecie
Samodzielne pisanie programów!!!
Komputer może być traktowany jako urządzenie
służące do przechowywania i przetwarzania
informacji.
Działanie komputera jest kontrolowane przez
wykonywany przez niego program.
Podstawowe pojęcia
Procesor zawiera dwa podstawowe elementy
• element nadzorujący i koordynujący działania
komputera (CU – control unit)
• element odpowiedzialny za operacje arytmetyczne i
logiczne (ALU – arithmetic logic unit)
Pamięć (wewnętrzna)
Przechowuje m.in. uruchamiany program, dane
niezbędne do poprawnego działania uruchamianego
programu.
Podstawowe pojęcia
Pojęcia podstawowe
Pamięć komputera może być traktowana jako ciąg
komórek pamięci (nazywanych czasami słowami).
Każda komórka pamięci ma pewien adres,
określający jej pozycję w pamięci.
Komórka pamięci składa sie z pewnej liczby bitów
(zazwyczaj 8, 16, 32 lub 64).
Wykonywany program zajmuje grupę powiązanych z
sobą komórek pamięci.
Komórki lub grupy komórek zawierają poszczególne
instrukcje programu.
Różne instrukcje są reprezentowane przez różne
kombinacje bitów w komórkach pamięci.
Program
Program to ciąg ciąg instrukcji
Podczas wykonywania programu CU czyta kolejne
instrukcje z pamięci i zapewnia, że są one
wykonywane w odpowiednim porządku.
Instrukcja „mówi” komputerowi, że powinien wykonać
jakieś zadanie (np. dodać dwie liczby w ALU)
Program
Program
Instrukcja może być traktowana jako pewien ciąg zer i
jedynek.
Instrukcja o takiej samej roli może mieć różną postać
na różnych modelach komputerów.
Początkowo programy były pisane tylko w kodzie
maszynowym.
Obecnie programy pisze sie w językach wysokiego
poziomu zrozumiałych dla człowieka.
Przykładowe języki: Ada, Pascal, C, C++, Cobol,
Fortran
Programy napisane w językach wysokiego poziomu
są tłumaczone na kod maszynowy za pomocą
specjalnego translatora ( kompilator).
Języki programowania
Kod maszynowy (przykład): 1100111101011000
100000011111010
1100110011001010
Język asembler: push beer
call printf
add esp,16
pop ecx
Program jest tłumaczony na kod maszynowy przy
użyciu programu – asemblera.
Język wysokiego poziomu:
int c=a+b;
cout<<”dane o uzytkownikach”;
Języki programowania
Etapy tworzenia programu
• określenie zadań programu (faza analizy wymagań i
specyfikacji)
• zaprojektowanie sposobu rozwiązania problemu
(algorytmu) (faza projektowa)
• zapis projektu w wybranym języku programowania
(faza implementacji)
• kompilacja i uruchomienie programu
• sprawdzenie czy program działa poprawnie (faza
testowania)
Etapy tworzenia programu
• zapis algorytmu w wybranym języku
programowania (faza implementacji)
• kompilacja i uruchomienie programu
• sprawdzenie czy program działa poprawnie (faza
testowania)
Na wykładzie z Podstaw Programowania interesują nas
3 ostatnie punkty:
Uczymy się programować w
języku C++
Tworzenie programu
Program piszemy posługując się edytorem tekstu
Powstaje wówczas tzw. kod źródłowy (w języku C++
plik z rozszerzeniem cpp).
Tworzenie programu
W czasie zajęć laboratoryjnych będziemy wyko-
rzystywać darmową aplikację:
Bloodshed Dev-C++
Bloodshed Dev C++
Kod źródłowy programu
Wersja źródłowa programu musi zostać
przetłumaczona na język maszyny (procesora).
Kompilacja programu
Służy do tego kompilator danego języka progra-
mowania
Kompilator sprawdza przy tym czy w programie nie
ma błędów składniowych.
Kompilacja programu – Dev C++
Informacja o błędach w składni
Wskazanie błędu
Kompilacja programu
Skompilowana wersja (zazwyczaj zapisywana w pliku
na dysku jako tzw. plik obiektowy – object file z
rozszerzeniem obj) jest zapisana w języku
maszynowym.
Nie jest to jeszcze gotowy program.
Aby tak się stało muszą zostać dołączone do niego tzw.
biblioteki.
Rezultatem linkowania jest gotowy do uruchomienia
program (plik z rozszerzeniem exe)
Linkowanie (konsolidacja) programu
Biblioteki zawierają dodatkowe instrukcje programu,
napisane wcześniej bądź przez kogoś innego i
oddzielnie skompilowane.
Proces łączenia (tzw. linkowanie, polska nazwa -
konsolidacja) programu z bibliotekami wykonywany
jest przez program zwany linkerem.
Linkowanie (konsolidacja) programu
Dołączanie bibliotek (include)
Uruchomienie programu – Dev C++
Debugger
W tworzeniu programów pomocnym narzędziem jest
tzw. debugger (po polsku - odpluskiwacz).
Debugger umożliwia śledzenie działania programu i
usuwanie w nim błędów (ang. bug).
Debugger – Dev C++
Jak stworzyć program?
1. Znajdź odpowiedni algorytm.
2. Stwórz wersje źródłową programu.
3. Uruchom kompilację.
4. Jeśli są błędy (kompilacji), wróć do punktu 2
(ewentualnie uruchom Debugger).
5. Uruchom program.
6. Jeśli są błędy (wykonania), wróć do punktu 2.
5. Sprzedaj program za ogromne pieniądze .
Język programowania
Każdy język programowania ma swoją składnię:
o nazwy
o słowa kluczowe
o instrukcje
o struktura programu
o operatory
o znaki specjalne
Operacje wejścia/wyjścia, nie są częścią definicji języka
C++.
Operacje wejścia/wyjścia (obiektowo)
cout<<...
Wyjście
cin>>...
Wejście
Strumienie cin i cout są zdefiniowane w bibliotece
iostream (InputOutputStream)
Operacje wejścia/wyjścia -
#include <iostream>
using namespace std;
int main()
{
cout<<"Niedziela-wyklad z Programowania"<<endl;
system("PAUSE");
return 0;
}
Operacje wejścia/wyjścia (obiektowo)
#include <iostream>
using namespace std;
int main()
{
cout<<"Niedziela - "<<"wyklad z"<<
"Programowania"<<endl;
system("PAUSE");
return 0;
}
Operacje wejścia/wyjścia (obiektowo)
#include <iostream>
using namespace std;
int main()
{
cout<<"Niedziela - ";
cout<<"wyklad z"<<" Programowania"<<endl;
system("PAUSE");
return 0;
}
Język C++ rozróżnia rozmiar liter w nazwach (ale np.
język Pascal nie rozróżnia).
Nazwy
Nazwy (identyfikatory, ang. identifiers) mogą odnosić
się do (pod)programów, zmiennych, stałych etc.
Zwykle nazwą może być dowolnie długi ciąg liter (bez
polskich!), cyfr i znaków podkreślenia zaczynający sie
od litery.
Nazwy poprawne: a_1, liczba1, y, dom1
Nazwy niepoprawne: 1a, 1_a, zm_1/2,
Słowa kluczowe są zwykle wyróżnione przez Edytor
przystosowany do pracy z danym językiem.
Słowa kluczowe
W każdym języku programowania występują tzw.
słowa kluczowe.
Słowa takie mają specjalne znaczenie. Mogą być
np. elementem instrukcji, nazwami predefi-
niowanego typu itp.
Słów kluczowych nie można użyć jako nazw.
Słowami kluczowymi w języku w C++ są np.: int,
if, else, float, typedef, using ...
Słowa kluczowe
Słowa kluczowe są
pogrubione
Znaki specjalne
Przykład
#include <iostream>
using namespace std;
int main()
{
cout<<"Nie\tdzie\nla"<<endl;
system("PAUSE");
return 0;
}
Struktura programu
W każdym języku program ma pewną ustalona
strukturę:
W języku C++ struktura ta jest następująca:
#include <iostream>
…
int main()
{
…
}
Zwykle układ tekstu w linii czy też fakt rozłożenia go
na kilka linii nie ma znaczenia.
Struktura programu
W języku C++ poszczególne instrukcje programu
kończymy zazwyczaj średnikami.
Program 1
#include <iostream>
using namespace std;
int main()
{
cout<<"Wyklad z programowania";
system("PAUSE");
return 0;
}
Program 1
#include <iostream>
using namespace std;
int main()
{
cout <<
"Wyklad z programowania"
;
system("PAUSE");
return 0;
}
Definicje zmiennych
Zwykle na początku programu musimy określić, jakiego
typu będą używane przez nas zmienne oraz
spowodować, żeby została zarezerwowana pamięć na
ich przechowanie.
Zmienna to symboliczne oznaczenie identyfikujące
określone miejsce w pamięci komputera.
W miejscu tym przechowywana jest wartość zmiennej.
Deklaracje zmiennych C++
typ_zmiennej nazwa_zmienej;
W języku C++ definicja zmiennej ma postać:
Aby móc definiować zmienne musimy poznać tzw. typy
predefiniowane w języku C++.
Typy predefiniowane
Zwykle w każdym języku programowania istnieją
pewne predefiniowane typy np.:
liczbowe
logiczne
znakowe
Przyjmujemy, że zmienne całkowite są ze znakiem. Domyślne traktowanie typu char zależy od
kompilatora.
Typy predefiniowane – C++
Do przechowywania liczb całkowitych:
short int
int
long int
Do przechowywania znaków alfanumerycznych:
char
Wszystkie powyższe typy mogą występować w dwóch
wersjach: ze znakiem (signed) i bez znaku (unsigned).
Do przechowywania liczb zmiennoprzecinkowych:
Typy predefiniowane – C++
float
double
long double
Zakresy poszczególnych typów mogą być albo ściśle
określone, albo zależeć od implementacji (czyli od
kompilatora)
Typy predefiniowane – C++
Program 2
#include <iostream>
using namespace std;
int main()
{
int a,b,xyz,LiczbaOsob;
float wsp;
system("PAUSE");
return 0;
}
Operatory
W każdym języku zdefiniowane są pewne operatory,
których można używać do konstruowania różnych
wyrażeń np. arytmetycznych, logicznych.
Operatory arytmetyczne: + - * /
Specyficzne operatory arytmetyczne: % (reszta z
dzielenia, zdefiniowany dla liczb całkowitych)
Typ zwracanego wyniku zależy zazwyczaj od typu
argumentów operacji.
Operatory
Operatory porównywania: <, <=, =<, >
Operatory logiczne koniunkcji i alternatywy:
&& - i
|| - lub
Operator przypisania
Do przypisania zmiennej wartości innej zmiennej lub
wyrażenia służy operator przypisania:
=
#include <iostream>
using namespace std;
int main()
{
int a,b,xyz;
a=5;
xyz=a+6;
system("PAUSE");
return 0;
}
Program 3
Komentarze w programie
Tekst ujęty w znaki komentarza nie jest
kompilowany/wykonywany
tekst od znaku // do końca linii (komentarze tego
typu można zagnieżdżać, w tym również w
komentarzach /* .... */
tekst ujęty w znaki /* .... */
(uwaga - komentarzy tego typu nie można zagnie-
żdżać)
Program 4
#include <iostream>
using namespace std;
int main()
{
//int a,b,xyz;
/*a=5;
xyz=z+6;*/
system("PAUSE");
return 0;
}
Biblioteki
Pewne operacje, np. związane z wprowadzaniem i
wyprowadzaniem informacji na urządzenia takie jak
np. ekran, mogą nie być częścią definicji języka
programowania.
Podprogramy odpowiedzialne za te czynności mogą
znajdować sie w jednej ze standardowych bibliotek,
w które zwykle wyposażane są kompilatory.
Aby można było skorzystać z zawartości biblioteki,
należy ją dołączyć do programu:
#include <nazwa_biblioteki>
Program 5
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
cout<<sqrt(4)<<endl;
system("PAUSE");
return 0;
}
Funkcja sqrt jest
zdefiniowana w biblio-tece cmath.
Instrukcje sterujące
Instrukcji sterujące umożliwiają warunkowe
lub iteracyjne wykonywanie pewnych
fragmentów kodu.
Instrukcja warunkowa
jeżeli warunek to instrukcje Wersja 1
jeżeli warunek to
instrukcje1
w_przeciwnym_wypadku
instrukcje2
Wersja 2
jeżeli warunek1 to
instrukcje1
jeżeli warunek2 to
instrukcje2
.......
w_przeciwnym_wypadku
instrukcje3
Wersja 3
Instrukcja warunkowa – C++
if(warunek) then instrukcje Wersja 1
If(warunek) then
instrukcje1
else
instrukcje2
Wersja 2
if(warunek1) then
instrukcje1
else if(warunek2) then
instrukcje2
.......
else
instrukcje3
Wersja 3
Program 6 #include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
if(a>0)
cout<<"liczba dodatnia"<<endl;
system("PAUSE");
return 0;
}
Program 7 #include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
if(a>0)
cout<<"liczba ";
cout<<"dodatnia"<<endl;
system("PAUSE");
return 0;
}
Program 7
Program 8 #include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
if(a>0)
{
cout<<"liczba ";
cout<<"dodatnia"<<endl;
}
system("PAUSE");
return 0;
}
Program 9
int a;
cin>>a;
if(a>0)
{
cout<<"liczba dodatnia"<<endl;
}
else
{
cout<<"liczba nie jest dodatnia"<<endl;
}
Program 10
int a;
cin>>a;
if(a>0)
{
cout<<"liczba dodatnia"<<endl;
}
else if(a<0)
{
cout<<"liczba ujemna"<<endl;
}
else
{
cout<<"zero"<<endl;
}
Instrukcje pętli
Pętle służą do iteracyjnego wykonywania pewnych
kroków.
Istnieją dwa rodzaje pętli:
• pętle wykonujące się określoną liczbę razy
• pętle wykonujące się wtedy gdy jest
spełniony pewien warunek
Pętle wykonujące się określoną liczbę razy
Liczba powtórzeń pętli jest z góry zadana.
W pętli funkcjonuje pewna zmienna, zwana licznikiem
pętli, „pamiętająca” ile razy pętla została wykonana.
for(instr_incjalizujaca;warunek;instr_kroku)
{
zawartosc_petli;
}
Pętle wykonujące się określoną liczbę razy
„licznik pętli” należy wcześniej zadeklarować.
Zawartość pętli jest wykonywana tylko gdy warunek jest
spełniony.
Instrukcji inicjalizujących może być kilka (wtedy są
oddzielone przecinkami), podobnie jest w przypadku
instrukcji kroku.
Jeżeli zawartość pętli to kilka instrukcji, to grupujemy je
za pomocą nawiasów klamrowych.
Program 11
#include <iostream>
using namespace std;
int main()
{
for(int i=0;i<4;i++)
{
cout<<"X";
}
system("PAUSE");
return 0;
}
Program 12
#include <iostream>
using namespace std;
int main()
{
for(int i=4;i>0;i--)
{
cout<<"X";
}
system("PAUSE");
return 0;
}
Program 13 #include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
for(int i=4;(i>0)&&(a>0);i--)
{
cout<<"X";
}
system("PAUSE");
return 0;
}
Program 14 #include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
for(int i=4;i>0,a>0;i--)
{
cout<<"X";
}
system("PAUSE");
return 0;
}
Pętle których wykonanie zależy od warunku
W pętlach wykonujących się dopóki zachodzi pewien
warunek:
warunek sprawdzamy PRZED pierwszym wykonaniem
instrukcji wewnątrz pętli, a wiec pętla może nie być
wykonana ani razu.
while(warunek)
{
zawartosc_petli;
}
Program 15 #include <iostream>
using namespace std;
int main()
{
int a=5;
while(a>1)
{
cout<<"X";
a--;
}
system("PAUSE");
return 0;
}
Program 16 #include <iostream>
using namespace std;
int main()
{
int a=5;
while(a>1)
{
cout<<"X";
}
system("PAUSE");
return 0;
}
Program 17 #include <iostream>
using namespace std;
int main()
{
int a=5;
while(a>1)
{
cout<<"X";
}
a--;
system("PAUSE");
return 0;
}
Pętle których wykonanie zależy od warunku
W pętli do..while warunek sprawdzamy PO
pierwszym wykonaniu instrukcji wewnątrz pętli, a wiec
pętla będzie wykonana przynajmniej raz.
do
{
zawartosc_petli;
}
while(warunek);
Program 18 #include <iostream>
using namespace std;
int main()
{
int a=5;
do
{
cout<<"X";
}
while(a<0);
system("PAUSE");
return 0;
}
Program 18 #include <iostream>
using namespace std;
int main()
{
int a=5;
do
{
cout<<"X";
a--;
}
while(a>1);
system("PAUSE");
return 0;
}
Wyjście z pętli
Wyjście z pętli umożliwiają nam instrukcje break i
continue.
break - przerywa wykonanie pętli w której jest
bezpośrednio umieszczone.
contimue - przerywa dany obieg pętli, przechodząc
do wykonywania następnego obiegu.