Algoritmi un programmēšana Praktiskie darbi
KD1: 4.-6. oktobrī!
Cikli
Cikli
Cikls ar priekšnosacījumu C++
while cikla piemērs C++
Cikls ar priekšnosacījumu Python
Cikls ar pēcnosacījumu C++
do... while cikla piemērs C++
Vadības nodošanas komandas
break un continue
Uzdevums 1
Uzdevums 1 – alternatīvs risinājums
Funkcijas C++
Problēma
Problēma
Problēmas risinājuma variants
Problēmas risinājuma variants
Problēmas risinājuma variants
Problēmas risinājuma variants
Problēmas risinājuma variants
Problēmas risinājuma variants
Kas ir funkcija?
Funkcijas piemērs
Cits funkcijas piemērs
Vēl cits funkcijas piemērs
Vērtību atgriešana
Netukša atgriešanas operatora piemērs
Netukša atgriešanas operatora piemērs
Tukša atgriešanas operatora piemērs
Tukša atgriešanas operatora piemērs
Funkcijas izsaukšana
Funkcijas izsaukšanas piemērs
Funkcijas izsaukšanas piemērs
Funkcijas izsaukšanas piemērs
Parametri un argumenti
Uzdevums 2
Uzdevums 2 – risinājums
Funkcijas Python
Python funkcijas sastāvdaļas
Python funkcijas piemērs
Python funkcijas piemērs
Cits Python funkcijas piemērs
378.00K
Category: programmingprogramming

Algoritmi un programmēšana Praktiskie darbi. Cikli. Funkcijas C++ un Python. Lekcija 4

1. Algoritmi un programmēšana Praktiskie darbi

Cikli
Funkcijas C++ un Python
Doc. Dr. Sc. Comp. Edgars Rencis, Latvijas Universitāte, Datorikas fakultāte, 27.-29. septembris, 2022.

2. KD1: 4.-6. oktobrī!

Blokshēmas
Programmēšana C++ un Python
pamata komandas
zarošanās komanda if
cikla komanda for
Funkcijas nebūs jāzina!

3. Cikli

4. Cikli

Iespēja izpildīt noteiktas darbības atkārtoti
Trīs veidu cikli
ar skaitītāju – for
ar priekšnosacījumu – while
ja precīzi zināms, cik reizes cikls jāizpilda
ja nav zināms, cik reizes cikls jāizpilda
ar pēcnosacījumu – do ... while
ja nav zināms, cik reizes cikls jāizpilda, bet ir zināms, ka tas jāizpilda vismaz
vienu reizi

5. Cikls ar priekšnosacījumu C++

while
(<loģiska izteiksme>) {
...
}
Sākuma vērtības jāpiešķir pirms cikla
Cikla mainīgā izmaiņas jāveic cikla ķermenī
Loģiskās izteiksmes vietā drīkst būt arī aritmētiska izteiksme
Figūriekavas blokam obligātas gadījumā, ja tas satur vairāk
par vienu komandu

6. while cikla piemērs C++

Izdrukāt vienā stabiņā ciparus no 0 līdz 9
int i=0;
while (i<10) {
cout << i << endl;
i++;
}
int i=0;
while (i<10) cout << i++ << endl;

7. Cikls ar priekšnosacījumu Python

while
<loģiska izteiksme>:
...
Izdrukāt vienā stabiņā ciparus no 0 līdz 9
x=0
while x<10:
print(x)
x+=1

8. Cikls ar pēcnosacījumu C++

do {
...
} while (<loģiska izteiksme>)
Sākuma vērtības jāpiešķir pirms cikla
Cikla mainīgā izmaiņas jāveic cikla ķermenī
Loģiskās izteiksmes vietā drīkst būt arī aritmētiska izteiksme
Figūriekavas blokam obligātas gadījumā, ja tas satur vairāk par vienu
komandu
Šāds cikls izpildās vismaz vienu reizi!

9. do... while cikla piemērs C++

Izdrukāt vienā stabiņā ciparus no 0 līdz 9
int i=0;
do {
cout << i << endl;
i++;
} while (i<10);
int i=0;
do cout <<i++<<endl; while (i<10);

10. Vadības nodošanas komandas

Komandu izpildes secība
pamatā atbilst fiziskajai komandu secībai main funkcijā
ir stingri definēta atsevišķām komandām (zarošanās, cikliem, ...)
atsevišķos gadījumos ir koriģējama
Vadības nodošanas komandas
break
continue
nodod vadību laukā no cikla nākamajai komandai
nodod vadību nākamajai cikla iterācijai (for cikla gadījumā izpildot arī pēc-iterācijas
darbību (-as))
goto
nodod vadību citai patvaļīgai komandai (nav ieteicams izmantot, jo padara kodu
nelasāmu)

11. break un continue

for
(int i=0; i<10; i++) {
if (i>6) break;
Ja i>6, iet laukā no cikla (beigt darbu)
Nepāra skaitļiem pārejam pie
if (i%2) continue;
nākamās iterācijas, izlaižot
drukāšanas komandu
cout << i << endl;
}
Līdz šejienei nokļūstam tikai, ja i ir
pāra skaitlis, kas nav lielāks par 6:
0
2
4
6

12. Uzdevums 1

Lietotājs ievada naturālu skaitli. Noskaidrot, vai tas ir pirmskaitlis, uzrakstot
programmu valodā C++.
katram pirmskaitlim ir tieši 2 pozitīvi dalītāji
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
int i,count=0;
for(i=1; i<=x; i++)
if(x%i==0) count++;
if (count==2) cout << "Ir"; else cout << "Nav";
return 0;
}

13. Uzdevums 1 – alternatīvs risinājums

#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
int i;
for(i=2; i<x; i++)
if(x%i==0) break;
if (x==i) cout << "Ir"; else cout << "Nav";
return 0;
}

14. Funkcijas C++

15. Problēma

Uzdevums
Lietotājs vienu pēc otra ievada vairākus naturālus skaitļus. Ievade beidzas, kad
lietotājs ievada kādu pirmskaitli. Izdrukāt visus pirmskaitļus, kas mazāki par
lietotāja ievadīto pirmskaitli.
Algoritms
pirmais cikls – likt lietotājam vadīt skaitļus
katram skaitlim pārbaudīt, vai tas nav pirmskaitlis un iet laukā no cikla, ja ir
otrais cikls – ciklā iet cauri visiem naturālajiem skaitļiem no 2 līdz iepriekš
ievadītajam skaitlim
katram skaitlim pārbaudīt, vai tas nav pirmskaitlis un izdrukāt tos, kas ir

16. Problēma

Uzdevums
Lietotājs vienu pēc otra ievada vairākus naturālus skaitļus. Ievade beidzas, kad
lietotājs ievada kādu pirmskaitli. Izdrukāt visus pirmskaitļus, kas mazāki par
lietotāja ievadīto pirmskaitli.
Algoritms
pirmais cikls – likt lietotājam vadīt skaitļus
katram skaitlim pārbaudīt, vai tas nav pirmskaitlis un iet laukā no cikla, ja ir
otrais cikls – ciklā iet cauri visiem naturālajiem skaitļiem no 2 līdz iepriekš
ievadītajam skaitlim
katram skaitlim pārbaudīt, vai tas nav pirmskaitlis un izdrukāt tos, kas ir

17. Problēmas risinājuma variants

#include <iostream>
using namespace std;
int main() {
int x;
bool isPrime;
do {
cin >> x;
if (x<2) isPrime=false;
else
isPrime=true;
for (int i=2;i<x;i++)
if (x%i==0) isPrime=false;
} while (!isPrime);
cout <<"Pirmskaitļi, kas mazāki par " << x << ":\n";
for (int y=2;y<x;y++) {
isPrime=true;
for (int i=2;i<y;i++)
if (y%i==0) isPrime=false;
if (isPrime) cout << y << endl;
}
return 0;
}

18. Problēmas risinājuma variants

#include <iostream>
using namespace std;
int main() {
int x;
bool isPrime;
do {
cin >> x;
if (x<2) isPrime=false;
else
isPrime=true;
for (int i=2;i<x;i++)
if (x%i==0) isPrime=false;
} while (!isPrime);
cout <<"Pirmskaitļi, kas mazāki par " << x << ":\n";
for (int y=2;y<x;y++) {
isPrime=true;
for (int i=2;i<y;i++)
if (y%i==0) isPrime=false;
if (isPrime) cout << y << endl;
}
return 0;
}
Koda dublēšana –
ļoti slikta lieta

19. Problēmas risinājuma variants

#include <iostream>
using namespace std;
int main() {
int x;
bool isPrime;
do {
cin >> x;
if (x<2) isPrime=false;
else
isPrime=true;
for (int i=2;i<x;i++)
if (x%i==0) isPrime=false;
} while (!isPrime);
cout <<"Pirmskaitļi, kas mazāki par " << x << ":\n";
for (int y=2;y<x;y++) {
isPrime=true;
for (int i=2;i<y;i++)
if (y%i==0) isPrime=false;
if (isPrime) cout << y << endl;
}
return 0;
}
Kods "isPrimeNumber" ar parametru sk
-----------------------------------isPrime=true;
for (int i=2;i<sk;i++)
if (sk%i==0) isPrime=false;

20. Problēmas risinājuma variants

#include <iostream>
using namespace std;
int main() {
Kods "isPrimeNumber" ar parametru sk
int x;
-----------------------------------bool isPrime;
isPrime=true;
do {
for (int i=2;i<sk;i++)
cin >> x;
if (sk%i==0) isPrime=false;
if (x<2) isPrime=false;
else
izsaukt "isPrimeNumber" ar parametru x
ielikt rezultātu iekš mainīgā isPrime
} while (!isPrime);
cout <<"Pirmskaitļi, kas mazāki par " << x << ":\n";
for (int y=2;y<x;y++) {
izsaukt "isPrimeNumber" ar parametru y
ielikt rezultātu iekš mainīgā isPrime
if (isPrime) cout << y << endl;
}
return 0;
}

21. Problēmas risinājuma variants

#include <iostream>
using namespace std;
Funkcija
Kods "isPrimeNumber" ar parametru sk
-----------------------------------if (sk<2) isPrime=false;
else isPrime=true;
for (int i=2;i<sk;i++)
if (sk%i==0) isPrime=false;
int main() {
int x;
bool isPrime;
do {
cin >> x;
izsaukt "isPrimeNumber" ar parametru x
ielikt rezultātu iekš mainīgā isPrime
} while (!isPrime);
cout <<"Pirmskaitļi, kas mazāki par " << x << ":\n";
for (int y=2;y<x;y++) {
izsaukt "isPrimeNumber" ar parametru y
ielikt rezultātu iekš mainīgā isPrime
if (isPrime) cout << y << endl;
}
return 0;
}
Funkcijas izsaukumi

22. Problēmas risinājuma variants

#include <iostream>
using namespace std;
Funkcija
bool isPrimeNumber(int sk) {
if (sk<2) return false;
for (int i=2;i<sk;i++)
if (sk%i==0) return false;
return true;
}
int main() {
int x;
bool isPrime;
do {
cin >> x;
isPrime=isPrimeNumber(x);
} while (!isPrime);
cout <<"Pirmskaitļi, kas mazāki par " << x << ":\n";
for (int y=2;y<x;y++) {
isPrime=isPrimeNumber(y);
if (isPrime) cout << y << endl;
}
return 0;
Funkcijas izsaukumi
}

23. Kas ir funkcija?

Funkcija ir patstāvīgs programmas bloks, kas veic noteiktas
darbības un atgriež noteikta tipa vērtību
Katrā C++ programmā ir vismaz viena funkcija
main
Funkcija sastāv no
nosaukuma
atgriežamā datu tipa
ķermeņa
parametru saraksta

24. Funkcijas piemērs

Atgriežamais datu tips – int
Funkcijas nosaukums – main
int main () { Parametru saraksts – tukšs (0 parametri iekavās)
cout << "Hello!"; Funkcijas ķermenis
(sastāv no 2 komandām)
return 0;
}
Funkcijas atgrieztā vērtība – 0 (atbilst
atgriežamajam datu tipam int)

25. Cits funkcijas piemērs

Viens int tipa parametrs – sk
bool isPrimeNumber(int sk) {
if (sk<2) return false;
for (int i=2;i<sk;i++)
if (sk%i==0) return false;
return true;
}

26. Vēl cits funkcijas piemērs

Divi int tipa parametri – a un b
int sum (int a, int b) {
int c=a+b;
return c;
}
Funkcijas atgriežamā vērtība c – parametru a un b summa
Funkcija izsaucama, padodot kā parametrus divus veselus
skaitļus
int x,y;
cin >> x >> y;
int z=sum(x,y);
cout << z;
int x,y;
cin >> x >> y;
cout << sum(x,y);

27. Vērtību atgriešana

Funkcija var atgriezt tāda datu tipa vērtību, ar kādu šī funkcija definēta
parasts datu tips – int, double, char, bool, ...
speciālais datu tips – void
Vērtības atgriešana notiek ar atgriešanas operatora `return` palīdzību
parastu datu tipu gadījumā
return 0; return c; return 'e';
return a+b; return a>3;
void gadījumā
return;
Atgriešanas operators pārtrauc darbu ar funkciju

28. Netukša atgriešanas operatora piemērs

Atgriezt lielāko pāra skaitli, kas nepārsniedz doto skaitli x
int getEvenNumber(int x) {
if (x%2==0) return x;
else return x-1;
}

29. Netukša atgriešanas operatora piemērs

Atgriezt lielāko pāra skaitli, kas nepārsniedz doto skaitli x
int getEvenNumber(int x) {
if (x%2==0) return x;
return x-1;
}

30. Tukša atgriešanas operatora piemērs

Izdrukāt vienu zem otras divas vērtības – doto veselo skaitli x
un tā apgriezto vērtību 1/x
void printNumbers(int x) {
if (x==0) return;
cout << x << endl << 1.0/x << endl;
return;
}

31. Tukša atgriešanas operatora piemērs

Izdrukāt vienu zem otras divas vērtības – doto veselo skaitli x
un tā apgriezto vērtību 1/x
void printNumbers(int x) {
if (x==0) return;
cout << x << endl << 1.0/x << endl;
}

32. Funkcijas izsaukšana

Funkcija tiek izsaukta, norādot tās vārdu un argumentus
Argumentu skaitam un to datu tipiem jāsakrīt ar attiecīgās
funkcijas parametru skaitu un to datu tipiem (pareizā secībā)
Ja funkcija atgriež vērtību, to var izmantot kā parastu
attiecīgā datu tipa vērtību

33. Funkcijas izsaukšanas piemērs

int sum (int a, int b) {
int c=a+b;
return c;
}
int main () {
int x,y;
cin >> x >> y;
int summa=sum(x,y);
cout << summa << endl;
return 0;
}

34. Funkcijas izsaukšanas piemērs

int sum (int a, int b) {
return a+b;
}
int main () {
int x,y;
cin >> x >> y;
cout << sum(x,y) << endl;
return 0;
}

35. Funkcijas izsaukšanas piemērs

void printNumbers(int x) {
if (x==0) return;
cout << x << endl << 1.0/x << endl;
}
int main () {
int x; cin >> x;
printNumbers(x);
return 0;
}

36. Parametri un argumenti

Parametri – mainīgie, kas norādīti funkcijas deklarēšanas vietā
Argumenti – mainīgie vai vērtības, kas padotas funkcijas
izsaukšanas vietā
Parametri – a un b
int sum (int a, int b) {return a+b;}
int main () {int x,y; cin >>x >>y;
cout << sum(x,y) << endl; return 0;}
Argumenti – x un y

37. Uzdevums 2

Lietotājs ievada divus veselus pozitīvus skaitļus. Noskaidrot,
kuram no šiem skaitļiem ir vairāk dalītāju, izmantojot C++
funkciju, kas prot atrast dotā skaitļa dalītāju skaitu

38. Uzdevums 2 – risinājums

int dalSk(int x) {
int sk=0;
for (int i=1; i<=x; i++)
if (x%i==0) sk++;
return sk;
}
int main() {
int a,b;
cin >> a >> b;
int dalA=dalSk(a),dalB=dalSk(b);
if (dalA==dalB) cout << "Abiem skaitļiem ir vienāds dalītāju skaits\n";
else {
cout << "Vairāk dalītāju ir skaitlim ";
if (dalA>dalB) cout << a << endl; else cout << b << endl;
}
return 0;
}

39. Funkcijas Python

40. Python funkcijas sastāvdaļas

Nosaukums
Parametru saraksts
katram parametram tikai nosaukums
var būt tukšs
Ķermenis
komandu bloks

41. Python funkcijas piemērs

def isPrimeNumber(sk):
if sk<2: return False
for i in range(2,sk):
if sk%i==0: return False
return True

42. Python funkcijas piemērs

def isPrimeNumber(sk):
if sk<2: return False
for i in range(2,sk):
if sk%i==0: return False
bool isPrimeNumber(int sk) {
return True
if (sk<2) return false;
C++
for (int i=2;i<sk;i++)
if (sk%i==0) return false;
return true;
}

43. Cits Python funkcijas piemērs

def sum (a, b):
c=a+b
return c
Funkcija izsaucama, padodot kā parametrus divus saskaitāmus
lielumus
x=5
y=10
print(sum(x,y))
x=5.5
y=10
print(sum(x,y))
x="abc"
y="def"
print(sum(x,y))
English     Русский Rules