Informa wyklad petle id 716506 Nieznany

background image

Podstawy Informatyki

Instrukcje warunkowe i pętle

w języku C i C++

mgr inż. Piotr Kaczmarek

Piotr.Kaczmarek@put.poznan.pl

background image

Inkrementacja, przypisanie

pre- i post- inkrementacja

int liczba=1;
cout<<i++; //wyświetli: 1 (i jest zwiększane na

końcu wykonywania wyrażenia)

natomiast:

int liczba=1;
cout<<++i; //wyświetli: 2 (i jest zwiększane na

początku wykonywania wyrażenia)

analogicznie: i--; --i;

operatory +=,-=,*=, /=

liczba +=2; jest to samo co liczba = liczba+2;
liczba -=2;
jest to samo co liczba = liczba-2;

liczba *=2; jest to samo co liczba = liczba*2;

background image

Tablice

Tablice służą do przechowywania wielu
elementów tego samego typu. (np
wyników pomiaru itp)

Tablica jest zmienną przypominającą
wektor

Definicja tablicy:

typ nazwa_tablicy[ilosc_elementow];

np:

int tablica_calkowite[100];
double tablica_zmiennoprzcinkowe[30];

background image

Operacje na tablicach

Tablica umożliwia dostęp do swoich elementów
za pomocą operatora [index], gdzie index jest

numerem porządkowym elementu

Index pierwszego elementu wynosi 0

Index ostatniego elementu N-elementowej

tablicy wynosi N-1.

np

int tab[12];

tab[0]=5;//pierwszy element tablicy

tab[1]=tab[0]+2;

...

tab[11]=tab[10]+2;//ostatni element tablicy

cout<<”trzeci element tablicy:”<<tab[2];

0

1

2

3

4

5

6

7

8

9 10 11

Nr

elementu

Wartość

5

7

9 11 13 15 17 19 21 23 25 27

background image

Operatory logiczne

Operatory logiczne tym różnią się od operatorów
arytmetycznych, że jako wynik operacji otrzymujemy 2

wartości 'prawda' lub 'fałsz'

Do operatorów zalicza się:

operatory dwuargumentowe:

==

- czy równy

<=,>= - czy mniejszy-, większy-równy

<,>

- czy mniejszy, większy

!=

- czy różny

Operatory sumy i iloczynu

|| - suma logiczna

&& - iloczyn logiczny

Operatory jednoargumentowe

! - negacja (nie prawda że)

background image

Operacje logiczne

W języku C fałsz oznaczany jest przez 0, natomiast
prawda przez 1.

Operacje logiczne mogą być realizowane na liczbach typu
całkowitego lub zmiennoprzecinkowego, oraz na
zmiennych tych typów

Wyrażenie:

(6 <= 6) && (5 < 3)

(6 <= 6) || (5 < 3)

(5 != 6)

(5 < 3) && (6 <= 6) || (5 != 6)

(5 < 3) && ((6 <= 6) || (5 != 6))

!((5 < 3) && ((6 <= 6) || (5 != 6)))

Wynik:

false (0)

true (1)

true (1)

true (1)

false (0)

true (1)

background image

Operacje logiczne a

operacje arytmetyczne

Operacja logiczna może być rozpatrywana jako
dwuwartościowa operacja arytmetyczna przekazująca

wynik całkowity 0 lub 1

np.:

int a=3;

int b=a>2;

//zmienna b ma wartość 1;

int c=(a==3)*5; //zmienna c ma wartość 5;

Analogiczne wartość całkowita różna od 0 traktowana jest

jako logiczna wartość 'prawda'

background image

Instrukcje warunkowe

rozgałęzienie programu

if(warunek)

//program
if(warunek)

{

//sekcja wykonywana

gdy warunek jest
prawdziwy

}

else
{

//sekcja wykonywana

gdy warunek jest
fałszywy

}

//Dalszy ciąg programu

Sekcja program,

wykonywana gdy

prawda

prawda

Sekcja program,

wykonywana gdy

fałsz

fałsz

Dalszy ciąg programu

background image

Instrukcje warunkowe

przykłady (1)

int a;
cout<<”podaj liczbę 0-100”;

cin>>a;
if(a<0)

{

cout <<”liczba za mala”;

return -1; //wyjscie

}

else

{

if(a<=100)

cout<<”liczba ok”;

else
{

cout<<”liczba za

duza”; return -2;

}

}

//Dalszy ciąg programu

int a;

cout<<”podaj liczbę 0-100”;
cin>>a;
if(a<0||a>100)

{

cout <<”liczba spoza

zakresu”;

return -1; //blad!!

wyjscie

}

else

cout<<”liczba ok”;

//Dalszy ciąg programu

alternatywny zapis warunku:

a<0||a>100
ma postać:

!((a>=0)&&(a<=100))

(na podstawie prawa de Morgana)

background image

Instrukcje warunkowe

przykłady (2)

int a;
cout<<”podaj liczbę

parzystą”;

cin>>a;
if(a%2==1)

{

cout <<”błąd liczba

nieparzysta”;

return -1; //wyjscie

}

//Dalszy ciąg programu

int a;

cout<<”podaj liczbę

parzystą”;

cin>>a;
if(a%2) //krotszy zapis

{

cout <<”błąd liczba

nieparzysta”;

return -1; //wyjscie

}

//Dalszy ciąg programu

Operacja % - modulo – reszta z dzielenia

1%2 ----> 1 (prawda)
2%2 ----> 0 (fałsz)
3%2 ----> 1 (prawda)
4%2 ----> 0 (fałsz)
5%3-----> 2 (prawda)

background image

Instrukcje warunkowe

przykłady (3)

char klawisz;

cout<<”czy chcesz przerwac (t/n)”;
klawisz=_getch();
if(klawisz=='t'||klawisz=='T')
{

cout <<”Zakonczono”<<endl;
return -1; //wyjscie

}

//Dalszy ciąg programu

zmienna klawisz zawiera nr znaku w tablicy ASCII

stąd warunek może również mieć postać:

if(klawisz==0x55||klawisz==0x74)

{
...
}

background image

Warunki złożone

wielokrotne rozgałęzienie

if(a=={wart1, wart2,wart3})

sekcja3

a==wart3

a==wart1

Dalszy ciąg programu

a==wart2

sekcja2

sekcja1

if(a==wart1)

{

//sekcja 1

}

else if(a==wart2)

{

//sekcja 2

}

else if(a==wart3)

{

//sekcja 3

}

else

{

//sekcja 4

}

//Dalszy ciąg programu

sekcja4

a!=wart{1,2,3)

background image

Warunki złożone

switch... case

if(a=={wart1, wart2,wart3})

sekcja3

a==wart3

a==wart1

Dalszy ciąg programu

a==wart2

sekcja2

sekcja1

switch(a)

{
case wart1:
{

//sekcja 1
break;

}

case wart2: {

//sekcja 2
break;

}

case wart3: {

//sekcja 3
break;
}

default:{

//sekcja4
}

}

//Dalszy ciąg programu

sekcja4

a!=wart{1,2,3)

background image

Warunki złożone

switch... case

wart1,wart2,wart3 oznaczają
możliwe wartości zmiennej a

program sprawdza, czy zmienna
przyjmuje którąś z tych wartości,
jeśli tak, wykonywana jest

pierwsza i następne linie za 'case
wartn:'

gdy program napotka instrukcję
break, następuje wyjście do

sekcji 'Dalszy ciąg programu'

gdy instrukcja break nie zostanie
umieszczona program będzie
wykonywany linia po linii

jeśli wartość zmiennej jest różna
od listy wartości, wykonywana
jest sekcja default:

switch(a)

{
case wart1:
{

//sekcja 1
break;

}

case wart2: {

//sekcja 2
break;

}

case wart3: {

//sekcja 3
break;
}

default:{

//sekcja4
}

}

//Dalszy ciąg programu

background image

switch... case

Przykłady (1)

cout<<”MENU:”<<endl;

cout<<”1 – zrob cos\n2- zrob cos innego\n x- wyjscie”;
char a=_getch();
switch
(a)

{

case '1': {

//zrob cos

break;

}

case '2': {

//zrob cos innego

break;

}

case 'x': case 'X':

{

return 0;

}

}

//Dalszy ciąg programu

background image

switch... case

Przykłady (2)

cout<<”MENU:”<<endl;

cout<<”1 – zrob cos\n2- zrob cos innego\n 3- wyjscie”;
int liczba;
cin>>liczba;
switch
(liczba)

{

case 1: {

//zrob cos
break;

}

case 2: {

//zrob cos innego
break;

}

case 3: {

return 0;

}

}

//Dalszy ciąg programu

background image

Alternatywny zapis

instrukcji warunkowych

if(znak=='t')

a*=3;

else

a*=2;

//Dalszy ciąg programu

cout<<”wprowadz liczbe”;

int a;

scanf(„%d”,&a);

printf(„czy chcesz ja pomnozyc *3? (t/n) w innym

przypdku liczba bedzie pomnozona przez 2”);

char znak=getchar();

printf(''liczba wynosi: %d'',a);

a*=(znak=='t')?3:2;

//Dalszy ciąg programu

(warunek) ? wart_prawda : wart_fałsz;

background image

Pętla for

Pętla służy do wielokrotnego
wykonania pewnego

fragmentu kodu

pętla typu for wykonywana
jest aż warunek_powtórzenia

jest nieprawdziwy

kod w polu inicjacji
wykonywany jest raz

kod w polu aktualizacja
wykonywany jest na końcu
przy każdym obrocie pętli

for (inicjacja; warunek_powtórzenia ; aktualizacja)

{

//kod sekcja pętli
}

//dalszy ciąg programu

Inicjacja

warunek_powtórzenia

dalszy ciąg programu

fałsz

kod sekcji

pętli

prawda

aktualizacja

background image

Pętla for

for(int i=1; i<7; i++)

{

cout<<i<<”, ”;

}

wyświetli na ekranie:

1, 2, 3, 4, 5, 6,

for(int i=1; i<7; i+=2)

{

cout<<i<<”, ”;

}

wyświetli na ekranie:
1, 3, 5,

Inicjacja

warunek_powtórzenia

dalszy ciąg programu

fałsz

kod sekcji

pętli

prawda

aktualizacja

for (inicjacja; warunek_powtórzenia ; aktualizacja)

{

//kod sekcja pętli
}

//dalszy ciąg programu

background image

Pętla while

int i=1

while(i<7)
{

cout<<i<<”, ”;
i++;

}
jest tym samym co wywołanie:
for(int i=1; i<7; i++)

{

cout<<i<<”, ”;

}

i wyświetli na ekranie:
1, 2, 3, 4, 5, 6,

warunek_powtórzenia

dalszy ciąg programu

fałsz

kod sekcji

pętli

prawda

while

(warunek_powtórzenia)

{

//kod sekcja pętli

}

//dalszy ciąg programu

background image

Pętla do.. while

int i=1

do
{

cout<<i<<”, ”;
i++;

}while(i<7);
jest tym samym co wywołanie:
for(int i=1; i<7; i++)

{

cout<<i<<”, ”;

}

i wyświetli na ekranie:
1, 2, 3, 4, 5, 6,

warunek_powtórzenia

dalszy ciąg programu

fałsz

kod sekcji

pętli

prawda

do

{

//kod sekcja pętli

}while (warunek_powtórzenia);

//dalszy ciąg programu

background image

Różnice pomiędzy

for,while, do.. while

int i=1

int d;
do
{

cout<<i<<”, ”;

i++;

}while(i<d);

for(int i=1; i<d; i++)

{

cout<<i<<”, ”;

}

każdą pętlę typu for
można zapisać w

formie pętli while

Pętla do..while różni
się od pozostałych,

ponieważ zawsze
wykonywana jest

przynajmniej raz

gdy d<=i np d=1 to pętla
do while wyświetli:

1,

natomiast for nie wyświetli niczego.

Gdy d>1 obie pętle będą działać tak samo

background image

Pętle nieskończone

for(;;)
{

//kod wykonywany bez końca

}

while(1)
{

//kod wykonywany bez końca

}

background image

Pętle: break, continue

Umieszczenie w pętli instrukcji break powoduje

wyjście z pętli i przetwarzanie dalszej części
programu

Umieszczenie w pętli instrukcji continue, powoduje
skok do końca pętli i realizację kolejnego cyklu

int i, l;

for (;;)

{

printf(''wprowadz liczbe'');

scanf("%d", &l);

if (l < 0)

{

printf(''blad - sproboj jeszcze raz'');

continue;

}

printf("%d! = %d\n", l, silnia(l));

}

int i, l;

for (;;)

{

printf(''wprowadz liczbe'');

scanf("%d", &l);

if (l < 0)

{

printf(''blad - wyjscie'');

break;

}

printf("%d! = %d\n", l, silnia(l));

}

\\dalszy ciag

background image

Pętle i instrukcje

warunkowe - przykłady

Wyświetlanie wszystkich liczb z zakresu 100 do 0 bez liczb
podzielnych przez 3 i 5

for(int i=100; i>=0;i--)

{

if((i%3)&&(i%5))

cout<<i<<endl;

}

spowoduje wyświetlenie
100
98
97

94
92
91
...
2

1

background image

Pętle i instrukcje

warunkowe - przykłady

Obsługa tablic:

float tab[10];
//wczytanie danych

for(int i=0; i<10;i++)

{

cout<<”Podaj element nr”<<i <<”: '';
scanf(''%f”,&tab[i]);

}

//suma wszystkich elementów
float suma=0;
for(int i=0;i<10;i++) suma+=tab[i];

//wyswietlenie wszystkich elementów
for(int i=0;i<10;i++) printf(''element nr %d:

%f\n”,i,tab[i]);

//wyswietlenie sredniej
cout<<”srednia elementów wynosi”<<suma/10<<endl;

background image

Pętle i instrukcje

warunkowe - przykłady

Silnia

Pobierz wartość N

Wynik=1

i=1

N>=0

koniec

NIE

N>0

Wynik=1

NIE

TAK

TAK

i<=N

TAK

Wyświetl Wynik

NIE

Wynik=Wynik*i;

i++;

Stwórz opis słowny tego co widać

5!=1*2*3*4*5

1: Wynik*=1; //(1)
2: Wynik*=2; //(2)
3: Wynik*=3; //(6)
4: Wynik*=4; //(24)
5: Wynik*=5; //(120)

background image

Pętle i instrukcje

warunkowe - przykłady

NWD (algorytm Euklidesa)

1. Mamy dwie liczby u i v

2. Jeżeli liczby są równe to NWD(u, v) = u

3a. Jeżeli u > v to u = u - v i idziemy do

punktu 2.

3b. Jeżeli u < v to v = v - u i idziemy do

punktu 2.

NWW

NWW=u*v/NWD(u,v)

Stwórz opis graficzny

dla algorytmu Euklidesa

background image

Sortowanie

bąbelkowe

|4|2|5|1|7| -> |2|4|5|1|7| -> |2|4|5|1|7| -> |2|4|1|5|7|
^-^ ^-^ ^-^ ^-^
|2|4|1|5|7| -> |2|4|1|5|7| -> |2|1|4|5|7|

^-^ ^-^ ^-^
|2|1|4|5|7| -> |1|2|4|5|7| ->
^-^ ^-^

|1|2|4|5|7| ->
^-^

Inne algorytmy sortowania:

- bąbelkowy (bubble sort)
- przez wstawianie (insertion sort)
- szybki (quick sort)
- kopcowy (heap sort)
- Shella (shellsort)

background image

Sortowanie bąbelkowe

double tab[5]={4,2,5,1,7};

int rozmiar=5;

double b;

bool przestawiono=true;

while(przestawiono)

{

przestawiono = false;

for(int a=0; a<rozmiar-1;

a++)

{

if(tab[a]>tab[a+1])

{

b=tab[a];

tab[a]=tab[a+1];

tab[a+1]=b;

przestawiono = true;

}

}

}}

background image

Sortowanie przez

wstawianie

Jest dwukrotnie szybsze niż sortowanie bąbelkowe

Algorytm:

1. Utwórz zbiór elementów posortowanych i przenieś do niego

dowolny element ze zbioru nieposortowanego.

2. Weź dowolny element ze zbioru nieposortowanego.

3. Wyciągnięty element porównuj z kolejnymi elementami

zbioru posortowanego póki nie napotkasz elementu
równego lub elementu większego (jeśli chcemy otrzymać
ciąg niemalejący) lub nie znajdziemy się na początku/końcu

zbioru uporządkowanego.

4. Wyciągnięty element wstaw

w miejsce gdzie skończyłeś
porównywać.

5. Jeśli zbiór elementów

nieuporządkowanych jest
niepusty wróć do punkt 2.

5

7

0

3

4

2

6

1

(0)

5

7

0

3

4

2

6

1

(0)

0

5

7

3

4

2

6

1

(2)

0

3

5

7

4

2

6

1

(2)

0

3

4

5

7

2

6

1

(2)

0

2

3

4

5

7

6

1

(4)

0

2

3

4

5

6

7

1

(1)

0

1

2

3

4

5

6

7

(6)

background image

Zasięg widoczności

zmiennych

Zmienna zadeklarowana

w danym miejscu,
istnieje aż do znaku '}'

zamykającego poziom
programu na którym

została zadeklarowana

Poza tym poziomem i

poziomami
wewnętrznymi jej nazwa

nie jest rozpoznawana,

Poza tym poziomem

można zadeklarować
zmienną o tej samej

nazwie, ale będzie to
inna zmienna.

double tab[5]={4,2,5,1,7};

int rozmiar=5;

bool przestawiono=true;

while(przestawiono)

{

przestawiono = false;

for(int a=0; a<rozmiar-1;a++)

{

if(tab[a]>tab[a+1])

{

double b;

b=tab[a];

tab[a]=tab[a+1];

tab[a+1]=b;

przestawiono = true;

}

}

}

}


Wyszukiwarka

Podobne podstrony:
AiSD Wyklad4 dzienne id 53497 Nieznany (2)
3 Wyklad OiSE id 33284 Nieznany
Informacje dla inwestora id 213 Nieznany
or wyklad 4b id 339029 Nieznany
Informa cz4 v6 id 213362 Nieznany
Materialy do wykladu nr 5 id 28 Nieznany
Finanse Wyklady FiR id 172193 Nieznany
AiSD Wyklad9 dzienne id 53501 Nieznany
Folie wyklad2 Krakow id 286699 Nieznany
OP wyklad nr 3 id 335762 Nieznany
prc wyklad zagad 5 id 388963 Nieznany
hydrologia wyklad 06 id 207845 Nieznany
hydrologia wyklad 05 id 207839 Nieznany
F II wyklad 11 id 167234 Nieznany
BHP Wyklad 10 id 84576 Nieznany (2)
AiSD Wyklad11 dzienne id 53494 Nieznany
elektro wyklad 03b id 157928 Nieznany

więcej podobnych podstron