WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 1
PODSTAWY
PROGRAMOWANIA
Wykład 4
PROWADZCY: dr inż. Marcin Głowacki
E-Mail: Marcin.Glowacki@pwr.wroc.pl
Pok.907 C-5
Wrocław 2014
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 2
4. OPERATORY ARYTMETYCZNE
Operator Działanie Postać matematyczna
= instrukcja przypisania z = x;
+ dodawanie z = x + y;
- odejmowanie z = x y;
* mnożenie z = x * y;
/ dzielenie z = x / y;
% dzielenie modulo = reszta z dzielenia z = x % y;
-- zmniejszanie o jeden (dekrementacja) z = z 1;
++ zwiększanie o jeden (inkrementacja) z = z + 1;
+= skrót przypisania z += x; to samo co: z = z + x;
-= skrót odejmowania z -= x; to samo co: z = z x;
*= skrót mnożenia z *= x; to samo co: z = z * x;
/= skrót dzielenia z /= x; to samo co: z = z / x;
Ogólna postać instrukcji przypisania wygląda następująco:
zmienna = wyrażenie;
Można też stosować wielokrotnie takie instrukcje, np.:
z = x = y = 0;
Program realizujący operację dodawania dwóch liczb typu float.
#include
#include
int main()
{
float x, y, z; // deklaracja zmiennych
using std::cout; using std::endl; using std::cin;
cout << endl << "Podaj dwie liczby " << endl;
cin >> x >> y;
z = x + y;
cout << x << " + " << y <<" = " << z<return 0;
}
W przykładzie wykorzystano operatory dodawania + oraz przypisania =.
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 3
OPERATORY RELACYJNE i LOGICZNE
Każda różna od zera liczba, z którą spotykamy się w C, posiada wartość TRUE (prawda) ,
natomiast liczba 0 posiada wartość FALSE (nieprawda). Wyrażenia, w których występują
operatory relacyjne bądz logiczne, zwracają wartość 1 (TRUE) lub 0 (FALSE). W zależności
od potrzeb posługujemy się następującymi operatorami:
Operatory relacyjne
Operator Działanie
> większy
< mniejszy
>= większy lub równy
<= mniejszy bądz równy
== równy
!= różny
Operatory logiczne
Operator Działanie
&& koniunkcja AND (i)
|| alternatywa OR (lub)
! negacja NOT (nie)
Posługując się przedstawionymi operatorami należy zawsze pamiętać, że posiadają one różny
priorytet wykonywania kolejnych działań. Rozpatrzmy to na przykładzie wyrażenia 5-4 != 0.
Jego wartość obliczana jest w taki sposób, że najpierw zostanie wykonana operacja odejmowania
liczb, a dopiero potem sprawdzony warunek, czy rezultat odejmowania jest różny od zera, tzn.:
(5-4) != 0. Należy też pamiętać, że operator () ma największy priorytet. Jeżeli nie jesteśmy
pewni priorytetów stosowanych operatorów zawsze w wątpliwych sytuacjach możemy posłużyć
się właśnie operatorem ().
OPERATORY BITOWE
Operator Działanie
& bitowa koniunkcja AND (i)
| bitowa alternatywa OR (lub)
~ bitowa negacja NOT (nie)
^ bitowa różnica symetryczna XOR
<< przesuniecie bitów w lewo (mnożenie przez 2)
>> przesuniecie bitów w prawo (dzielenie przez 2)
Możliwe jest w pewnych szczególnych zastosowaniach wykonywanie operacji na liczbach w
logice bitowej.
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 4
PRZEDROSTKI I PRZYROSTKI
Zarówno operator inkrementacji (++), jak i dekrementacji (--) występuje w dwóch odmianach:
" przedrostkowej (np. ++x) jest obliczany przed przypisaniem (zwiększ wartość zmiennej i
zapamiętaj ją)
x=5;
int y = ++x;
cout <" przyrostkowej (np. x++) jest obliczany po przypisaniu (pamiętaj pierwotną wartość
zmiennej, po czym zwiększ wartość)
x=5;
int y = x++;
cout <Przykład działania operatora przedrostkowego i przyrostkowego
1: #include
2: int main() {
3: using std::cout;
4: int mojWiek = 39; // inicjalizujemy dwie zmienne całkowite
5: int twojWiek = 39;
6: cout << "Ja mam: " << mojWiek << " lat.\n";
7: cout << "Ty masz: " << twojWiek << " lat\n";
8: mojWiek++; // inkrementacja przyrostkowa
9: ++twojWiek; // inkrementacja przedrostkowa
10: cout << "Minal rok...\n";
11: cout << "Ja mam: " << mojWiek << " lat.\n";
12: cout << "Ty masz: " << twojWiek << " lat\n";
13: cout << "Minal kolejny rok\n";
14: cout << "Ja mam: " << mojWiek++ << " lat.\n";
15: cout << "Ty masz: " << ++twojWiek << " lat\n";
16: cout << "Wypiszmy to jeszcze raz.\n";
17: cout << "Ja mam: " << mojWiek << " lat.\n";
Efekt:
18: cout << "Ty masz: " << twojWiek << " lat\n";
Ja mam: 39 lat.
19: return 0;
Ty masz: 39 lat
20: }
Minal rok...
Ja mam: 40 lat.
Ty masz: 40 lat
Minal kolejny rok
Ja mam: 40 lat.
Ty masz: 41 lat
Wypiszmy to jeszcze raz.
Ja mam: 41 lat.
Ty masz: 41 lat
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 5
INSTRUKCJA DECYZYJNA if
Instrukcja if jest pytaniem czy jest spełniony warunek, który może być wyrażeniem logicznym
TRUE/ FALSE lub wprost wartością odpowiednio różną od zera (!=0) lub równą zero (==0).
if (warunek) { //jeśli warunek spełniony TRUE (!=0)
instrukcja;
instrukcja;
...
};
lub
if (warunek)
instrukcja; //jeśli jedna instrukcja to może być bez klamry
TAK
if (warunek)
NIE
instrukcja;
instrukcja;
...
Można też stosować wielobok zamiast rombu.
NIE TAK
if (warunek)
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 6
INSTRUKCJA DECYZYJNA if ... else
Instrukcja if ... else jest pytaniem czy jest spełniony warunek, który może być wyrażeniem
logicznym TRUE/ FALSE lub wprost wartością odpowiednio różną od zera (!=0) lub równą zero
(==0). W przypadku nie spełnienia warunku następuje wykonanie instrukcji występujących po
else. Dopiero wtedy wykonywane są następne instrukcje w programie. W przypadku spełnienia
warunku instrukcje po else są omijane.
if (warunek) { //jeśli warunek spełniony TRUE (!=0)
instrukcja;
instrukcja;
...
}
else { //jeśli warunek nie jest spełniony FALSE (0)
instrukcja;
instrukcja;
...
};
lub
if (warunek)
instrukcja; //jeśli jedna instrukcja to może być bez klamry
else
instrukcja;
TAK
if (warunek)
NIE
else
instrukcja; instrukcja;
instrukcja; instrukcja;
... ...
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 7
Program ilustracja złożonych warunków logicznych dla if ... else
#include
int main()
{
using std::cout; using std::endl; using std::cerr;
enum KOLORY {bialy=1, czerwony, zielony, zolty, niebieski, fioletowy};
KOLORY kolor=zielony;
int liczba=2;
//liczba musi być w zakresie koloru i nieparzysta to kolor też musi być nieparzysty lub
// gdy parzysta to kolor też parzysty
if(((liczba<=6)&&(liczba>=1))&&(((!(kolor%2))&&(!(liczba%2)))||((kolor%2)&&(liczba%2))))
cout<<"Liczba: "<else
cerr<<"Bledna kombinacja liczb i kolorow"< return 0;
}
UWAGA: Przy niespełnionym warunku przy if nie wiemy, które z kryteriów nie było spełnione
Program Ten sam program i te same warunki logiczne rozbite na kaskadę wielu if ... else
#include
int main()
{
using std::cout; using std::endl; using std::cerr;
enum KOLORY {bialy=1, czerwony, zielony, zolty, niebieski, fioletowy};
KOLORY kolor=bialy;
int liczba=4;
//jesli liczba jest w zakresie koloru i parzysta to kolor tez parzysty
if((liczba<=6)&&(liczba>=1)){ //sprawdzanie zakresu liczby
if((!(kolor%2))&&(!(liczba%2))) //sprawdzanie parzystej liczby i koloru
cout<<"Liczba parzysta: "<else
if ((kolor%2)&&(liczba%2)) //sprawdzanie nieparzystej liczby i koloru
cout<<"Liczba nieparzysta: "<else
cerr<<"Liczba w zakresie, ale nie pasuje do koloru"<}
else
cerr<<"Liczba poza zakresem"<return 0;
}
Sprawdzane są poszczególne kryteria i wiadomo jakie występują kombinacje liczby i koloru. W
ten sposób użytkownik jest dokładnie informowany o szczegółach zarówno wyników
sprawdzania oraz występujących błędów.
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 8
INSTRUKCJA DECYZYJNA switch
Instrukcja switch porównuje wyrażenie z wartością dla wybranych przypadków (case). Przy
zgodności wartości wykonane zostaną instrukcje zawarte po case oraz wszystkie instrukcje po
case umieszczonych poniżej oraz po default, chyba że pojawi się rozkaz wyjścia z instrukcji:
break. W przypadku braku zgodności ze wszystkimi wartościami po case może być wykonany
ciąg instrukcji dla przypadku domyślnego default.
switch (wyrażenie) {
case wartość_1:
instrukcja;
instrukcja;
...
break;
case wartość_2:
instrukcja;
instrukcja;
...
break;
...
case wartość_n:
instrukcja;
instrukcja;
...
break;
default: //fragment wykonywany domyślnie dla braku zgodności
//wartości wyrażenia w sprawdzanych przypadkach case
instrukcja;
instrukcja;
};
lub
switch (wyrażenie) {
case wartość_1: //można łączyć wartości, które posiadają wspólne instrukcje
case wartość_2:
instrukcja;
instrukcja;
...
break;
...
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 9
switch (wyrażenie)
case wartość_1:
instrukcja;
break;
TAK
if (wyrażenie==wartość_1) instrukcja;
...
NIE
case wartość_2:
instrukcja;
break;
TAK
if (wyrażenie==wartość_2) instrukcja;
...
NIE
. . . . . .
case wartość_n:
instrukcja;
break;
TAK
if (wyrażenie==wartość_n) instrukcja;
...
NIE
default:
instrukcja;
instrukcja;
...
break;
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 10
Program przykład użycia instrukcji switch
#include
int main()
{
using std::cout; using std::endl; using std::cerr;
enum OCENA {mierny=1,ndst,dst,db,bdb,celujacy};
OCENA zaliczenie=mierny;
switch (zaliczenie) {
case mierny:
case ndst: cout <<"Ocena: "< break;
case dst:
case db:
case bdb:
case celujacy: cout <<"Ocena: "< break;
default: cerr<<"Błędna ocena"< }; return 0;
}
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 11
INSTRUKCJA CYKLICZNA while
Instrukcje cykliczne nazywane w żargonie pętlami.
Instrukcja while sprawdza czy zachodzi warunek i jeśłi tak (ang. while = podczas gdy warunek
spełniony) wykonuje instrukcje zawarte w klamrze. Następnie ponownie sprawdza warunek. Po
pierwszym wejściu w cykl instrukcja while może zakończyć działanie jeśli instrukcje wewnątrz
while lub zdarzenia wejścia/wyjścia wpłyną na dane w taki sposób, że warunek przestanie być
spełniany lub zostanie wykonana instrukcja break przerywająca pętlę while w dowolnym
momencie. W dowolnym momencie podczas wykonywania pętli może być wydana komenda
continue, która spowoduje przejście do ponownego sprawdzenia warunku.
while(warunek) {
instrukcja;
instrukcja;
...
};
lub
while(warunek) instrukcja; //jeśli jedna instrukcja to może być bez klamry
while (warunek)
continue;
TAK
if (warunek)
NIE
continue;
instrukcja;
break;
instrukcja;
...
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 12
Program demonstruje działanie while
#include
int main()
{
using std::cout; using std::cin;
long int iSuma=0,iIloczyn=1,iLiczba=0; //lepiej dać long int
cout<<"Podaj liczby (0 - konczy): ";
cin>>iLiczba;
while(iLiczba) { //zero kończy program warunek: iLiczba!=0
iSuma+=iLiczba;
iIloczyn*=iLiczba;
cout<<"Suma liczb = "< cout<<"Iloczyn liczb = "< cout<<"Nastepna liczba (0 - konczy): ";
cin>>iLiczba;
}
return 0;
}
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 13
INSTRUKCJA CYKLICZNA do ... while
Instrukcja do ... while działa podobnie do while z tą różnicą, że najpierw są wykonywane
instrukcje a potem sprawdzany warunek. Powoduje to przynajmniej jednokrotne wykonanie
cyklu instrukcji w pętli. Po pierwszym wejściu w cykl instrukcja do ... while może zakończyć
działanie jeśli warunek nie jest spełniony. Przy kolejnych wykonaniach jedynie instrukcje
wewnątrz do ... while lub zdarzenia wejścia/wyjścia wpłyną na dane w taki sposób, że warunek
przestanie być spełniany lub zostanie wykonana instrukcja break przerywająca pętlę do ... while
w dowolnym momencie. W dowolnym momencie podczas wykonywania pętli może być wydana
komenda continue, która spowoduje przejście do ponownego sprawdzenia warunku.
do {
instrukcja;
instrukcja;
...
}
while(warunek);
lub
do instrukcja
while(warunek); //jeśli jedna instrukcja to może być bez klamry
do
instrukcja;
break; continue;
instrukcja;
...
while (warunek)
TAK
if (warunek)
NIE
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 14
Program demonstruje działanie do ... while
#include
int main()//Program oblicza dlugość szeregu wprowadzanych liczb
{
using std::cout; using std::cin;
int iDlugosc=0, iLiczba;
do {
cout<<"Podaj liczbe z szeregu (0 - konczy): ";
cin >>iLiczba;
iDlugosc++;
} while (liczba);
iDlugosc--; //korekta dlugosci o liczbe 0, która jest sygnalem do wyjscia
cout<<"Dlugosc szeregu liczb wynosi " <return 0;
}
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 15
INSTRUKCJA CYKLICZNA for
Instrukcja cykliczna for służy do wykonywania zadań na skończonym zbiorze danych. Dzięki
wykorzystaniu dodawania (inkrementacji) lub odejmowania (dekrementacji) możliwe jest
iteracyjne (krokowe) ze zdefiniowanym krokiem przetwarzanie lub dostęp do danych, np.
operacje na tablicach, obliczenia dla ciągu argumentów itp.
for (instrukcje_1;warunek; iteracje) {
instrukcja;
instrukcja;
...
};
lub
for (instrukcje_1;warunek; iteracje) //jeśli jedna instrukcja to może być bez klamry
instrukcja;
for(instrukcje_1; warunek; iteracje)
instrukcje_1
iteracje
TAK
if (warunek)
NIE
continue;
instrukcja;
break;
instrukcja;
...
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 16
Przykłady:
for(int i=1;i<11;i++) //dziesięć cykli dla i=1,2,3,4,5,6,7,8,9,10
cout<< Liczby rosnąco: <a teraz w odwrotnej kolejności:
for(int i=10;i>0;i--) //dziesięć cykli dla i=10,9,8,7,6,5,4,3,2,1
cout<< Liczby malejąco: <Jaka jest różnica ?
1 2
for(int i=1; i<11 ;i++) for(int i=1; i<11 ;i++)
for(int j=1;j<11;j++) for(int j=i;j<11;j++)
instrukcja1; instrukcja2;
//Pytanie: ile cykli ? //Pytanie: ile cykli ?
//Odpowiedz: 100<- //Odpowiedz: 55<-
// // ?dlaczego: 10+9+8+7+6+5+4+3+2+1 <-
3 4
for(int i=1,j=100; i<11 ;i++,j++) for(int i=1,j=100; j<101 ;i++,j++)
instrukcja3; instrukcja4;
//Pytanie: ile cykli ? //Pytanie: ile cykli ?
//Odpowiedz: 10<- //Odpowiedz: 1<-
// //
5 6
for(int i=1,j=1; (i<11)&&(j<101);i++,j++) for(int i=1,j=1; (i<11)||(j<101);i++,j++)
instrukcja5; instrukcja6;
//Pytanie: ile cykli ? //Pytanie: ile cykli ?
//Odpowiedz: 10<- //Odpowiedz: 100<-
// //
Program demonstruje działanie for
#include
int main() {
const unsigned int SZEROKOSC=4;
using std::cout; using std::endl;
for(int i=1;i<11;i++) {
if (i>1) cout< for(int j=1;j<11;j++) {
cout.width(SZEROKOSC); cout< }
}
cout< return 0;
}
Jaki będzie rezultat wykonania programu ?
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 17
I J i*j Ekran
1 1 1 1
1 2 2 1 2
1 3 3 1 2 3
... ... ... ...
2 1 2
... ... ...
10 10 100 1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 ...
...
...
...
...
10 20 30 40 50 60 70 80 90 100
WYKAADY W04 (2014) Podstawy programowania 1 (dr.inż Marcin Głowacki) 18
INSRUKCJE CYKLICZNE ZAGADKA
To samo ?
for (instrukcje_1;warunek; iteracje) { instrukcje_1;
instrukcja; while(warunek) {
instrukcja; instrukcja;
... instrukcja;
if (warunek) continue; ...
... if (warunek) { iteracja; continue;}
instrukcja; ...
instrukcja; instrukcja;
... instrukcja;
if (warunek) break; ...
... if (warunek) break;
instrukcja; ...
instrukcja; instrukcja;
}; instrukcja;
iteracje;
};
A może są różnice ?: sprawdz działanie break lub continue<-
Odpowiedz różnica jest w działaniu: continue <-
Wyszukiwarka
Podobne podstrony:
PodstawyAutomatyki w04
PiS15 W04 Podstawy statystyki matematycznej
Wyk6 ORBITA GPS Podstawowe informacje
Podstawowe informacje o Rybnie
3 podstawy teorii stanu naprezenia, prawo hookea
W04 zaopatrzenie 2
zestawy cwiczen przygotowane na podstawie programu Mistrz Klawia 6
podstaw uniw
Jezyk angielski arkusz I poziom podstawowy (5)
07 GIMP od podstaw, cz 4 Przekształcenia
Podstawy dzialania routerow i routingu
Podstawy Cyfrowego Przetwarzania Sygnalów
więcej podobnych podstron