Algoritmi un programmēšana Praktiskie darbi

Slides:



Advertisements
Similar presentations
While Loops Programming. COMP102 Prog Fundamentals I: while Loops/Slide 2 Shortcut Assignments l C++ has a set of shortcut operators for applying an operation.
Advertisements

File I/O. COMP104 Lecture 20 / Slide 2 Using Input/Output Files (Review) * A computer file n is stored secondary storage devices (hard drive, CD) n can.
Slide 1 Summary Two basic concepts: variables and assignments Some C++ practical issues: division rule, operator precedence  Sequential structure of a.
Conditional Operator (?:) Conditional operator (?:) takes three arguments (ternary) Syntax for using the conditional operator:
More on Functions Programming. COMP104 Lecture 19 / Slide 2 Passing Parameters by Reference l To have a function with multiple outputs, we have to use.
Programming Switch command. COMP102 Prog. Fundamentals: Switch command / Slide 2 Multiple Selection: The switch Statement value1 action 1 value2 action.
If Statements. COMP104 If / Slide 2 Three Program Structures * Sequence - executable statements which the computer processes in the given order * Choice.
Local, Global Variables, and Scope. COMP104 Slide 2 Functions are ‘global’, variables are ‘local’ int main() { int x,y,z; … } int one(int x, …) { double.
What is the out put #include using namespace std; void main() { int i; for(i=1;i
Loops Programming. COMP104 Lecture 9 / Slide 2 Shortcut Assignment l C++ has a set of operators for applying an operation to a variable and then storing.
Sociālā darba un sociālās pedagoģijas augstskola “Attīstība” Krīze laulības dzīvē Psihosociālais darbs ar ģimeni Lektore: K. Dūdiņa Darbu sagatavoja: I.
VARIABLES, TYPES, INPUT/OUTPUT, ASSIGNMENT OPERATION Shieu-Hong Lin MATH/CS Department Chapel.
1 LoopsBranching Condition Statement list T F Condition Statement list T F.
Functions Parameters & Variable Scope Chapter 6. 2 Overview  Using Function Arguments and Parameters  Differences between Value Parameters and Reference.
CS1201: Programming Language 2 Recursion By: Nouf Almunyif.
Current Assignments Homework 3 is due tonight. Iteration and basic functions. Exam 1 on Monday.
While Loops Programming. COMP102 Prog Fundamentals I: while Loops/Slide 2 Shortcut Assignments l C++ has a set of shortcut operators for applying an operation.
1 C++. 2 Literatūra 3 Saturs Informācijas ievads un izvads; Sazarošanās; Cikli; Masīvi;
CSC1201: Programming Language 2 Lecture 1 Level 2 Course Nouf Aljaffan (C) CSC 1201 Course at KSU1.
COMP102 – Programming Fundamentals I LA2B (Mon 5-7pm) LA2E (Fri 3-5pm) LA2F (Fri 5-7pm) TA: Jackie Lo.
Lecture 7: Making Decisions Professor: Dr. Miguel Alonso Jr. Fall 2008 CGS2423/COP1220.
April 11, 2005 More about Functions. 1.Is the following a function call or a function header? calcTotal(); 2.Is the following a function call or a function.
2/19/2016IT 279, Chung-Chih Li1 Branching Condition Statement list 1 T F Statement list 2 Condition Statement list T F.
1 CSC 1111 Introduction to Computing using C++ C++ Basics (Part 1)
Int fact (int n) { If (n == 0) return 1; else return n * fact (n – 1); } 5 void main () { Int Sum; : Sum = fact (5); : } Factorial Program Using Recursion.
Chapter five exercises. a. false; b. true; c. false; d. true; e. true; f. true; g. true; h. false.
משפטי תנאי ( לוגיקה ) קרן כליף. 2 © Keren Kalif ביחידה זו נלמד :  משפטי תנאי  משפט switch  משפט if מקוצר.
Looping I (while statement). CSCE 1062 Outline  Looping/repetition construct  while statement (section 5.1)
T/F  The following code will compile without error. int x = 3, y = 4, z = 5; double k = 3.4; cout
C++ : Operator overloading example
LESSON 2 Basic of C++.
#define #include<iostream> using namespace std; #define GO
Section 3 Review Mr. Crone.
Intro to Programming Week # 6 Repetition Structure Lecture # 10
Command Line Arguments
לולאות קרן כליף.
Quiz Next Monday.
Reserved Words.
Jānis Zuters, Ratnieki Latvijas Universitāte Datorikas fakultāte
Baltic Way: Skaitļu teorija
Function Basics.
Dr. Pharm. Maija Dambrova
Darbības - sazarojuma operatori
Ieskats vielu mikropasaulē 2.3. Ķīmisko elementu periodiskā tabula
Random Number Generation
Algoritmi un programmēšana Praktiskie darbi
פונקציות לעיתים קרובות לא נוח להגדיר את כל התוכנה בתוך גוף אחד.
Komandu faili Komandu fails (pakešdatne) – specializēta datne ar secīgi vienu pēc otras izpildāmu operētājsistēmas komandu sarakstu. BAT datne – operētājsistēmas.
Strukturētie datu tipi - Masīvi
Programmēšanas valodu pamati
אבני היסוד של תוכנית ב- C++
אבני היסוד של תוכנית ב- C++
מחרוזות-String בשפת C++ ישנו תפקיד מיוחד למערך מסוג char רצף של תווים הנמצאים במערך מסוג char המסתיימת בתו אפס (הכוונה לאפס ממש '0\' , ולא לתו '0')
הרצאה 03 אבני היסוד של תוכנית ב- C
Counting Loops.
Starting Out with C++: From Control Structures through Objects
Pointers & Functions.
اصول کامپیوتر ۱ مبانی کامپیوتر و برنامه‌سازی
Programmēšanas valodas Valoda C++
Pass by Reference.
Summary Two basic concepts: variables and assignments Basic types:
If Statements.
CS1201: Programming Language 2
Arrays of Two-Dimensions
Degëzimet.
Statements and flow control
Pointers & Functions.
(Dreaded) Quiz 2 Next Monday.
TOPIC: FUNCTION OVERLOADING
Programming Strings.
Presentation transcript:

Algoritmi un programmēšana Praktiskie darbi Cikli Funkcijas C++ Doc. Dr. Sc. Comp. Edgars Rencis, Latvijas Universitāte, Datorikas fakultāte, 27. septembris, 2018.

Cikli

Cikli Iespēja izpildīt noteiktas darbības atkārtoti Trīs veidu cikli ar skaitītāju – for ja precīzi zināms, cik reizes cikls jāizpilda ar priekšnosacījumu – while 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

Cikls ar priekšnosacījumu 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

Cikla ar priekšnosacījumu piemērs Izdrukāt vienā stabiņā ciparus no 0 līdz 9 int i=0; while (i<10) { cout << i << endl; i++; } while (i<10) cout << i++ << endl;

Cikls ar pēcnosacījumu 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!

Cikla ar pēcnosacījumu piemērs Izdrukāt vienā stabiņā ciparus no 0 līdz 9 int i=0; do { cout << i << endl; i++; } while (i<10); do cout <<i++<<endl; while (i<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 nodod vadību laukā no cikla nākamajai komandai continue 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)

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

Uzdevums 1 Lietotājs ievada naturālu skaitli. Noskaidrot, vai tas ir pirmskaitlis! 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; }

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; }

Funkcijas C++

Problēma Uzdevums Algoritms 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

Problēma Uzdevums Algoritms 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

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++) { for (int i=2;i<y;i++) if (y%i==0) isPrime=false; if (isPrime) cout << y << endl; } return 0;

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++) { 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

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++) { 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;

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 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 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;

Problēmas risinājuma variants #include <iostream> using namespace std; 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 if (isPrime) cout << y << endl; } return 0; 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; Funkcija Funkcijas izsaukumi

Problēmas risinājuma variants #include <iostream> using namespace std; 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; bool isPrimeNumber(int sk) { if (sk<2) return false; for (int i=2;i<sk;i++) if (sk%i==0) return false; return true; } Funkcija Funkcijas izsaukumi

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

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

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; }

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; } Funkcija izsaucama, padodot kā parametrus divus veselus skaitļus int x,y; cin >> x >> y; int z=sum(x,y); cout << z; Funkcijas atgriežamā vērtība c – parametru a un b summa int x,y; cin >> x >> y; cout << sum(x,y);

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

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; }

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; }

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; }

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; }

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

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;

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;

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;

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ā int sum (int a, int b) {return a+b;} int main () {int x,y; cin >>x >>y; cout << sum(x,y) << endl; return 0;} Parametri – a un b Argumenti – x un y

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

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;