C++ pamati - Latvijas Universitāte
Download
Report
Transcript C++ pamati - Latvijas Universitāte
Programmēšana I
Praktiskie darbi
C++ pamati
Zarošanās
Doc. Dr. Sc. Comp. Edgars Rencis, Latvijas Universitāte, Datorikas fakultāte, 18. septembris, 2014.
C++ programmas struktūra
Viena vai vairākas funkcijas
vienmēr tieši viena galvenā funkcija ar nosaukumu main
pēc KD1 parādīsies arī citas funkcijas
Komandas (instrukcijas, priekšraksti)
algoritma secīgie soļi
atrodas funkciju iekšienē
atbilst tādiem blokshēmu elementiem kā deklarācija, komanda,
ievads, izvads, zarošanās
Direktīvas
paziņojumi kompilatoriem, par tiem vēlāk...
Komentāri
paskaidrojumi cilvēkam, atbilst blokshēmu komentāriem
ar šo funkciju tiek sākta izpilde (atbilst blokshēmas starta simbolam)
šīs funkcijas beigās izpilde tiek pārtraukta (atbilst blokshēmas beigu
simbolam)
Vienkārša programmiņa
#include <iostream>
using namespace std;
int main () { //Sākas programmas izpilde
cout << "Hello, world!" << endl;
return 0;
}
Vienkārša programmiņa
#include <iostream>
using namespace std;
funkcijas
priekšraksti
direktīvas
komentāri
int main () { //Sākas programmas izpilde
cout << "Hello, world!" << endl;
return 0;
}
Tuvākie plāni – līdz KD1
Apgūt dažādas C++ komandas
Apgūt dažas C++ datu struktūras
primitīvie datu tipi
masīvi
simbolu virknes
Apgūt C++ izteiksmju un operatoru veidus
mainīgo deklarācijas komandas
piešķiršanas operators un komanda
datu ievades un izvades komandas
zarošanās komandas
ciklu komandas
vadības nodošanas komandas
aritmētiskās izteiksmes un operatori
salīdzināšanas operatori
loģiskās izteiksmes un operatori
Apgūt dažādas C++ programmēšanas viltības un saīsinātos pierakstus
Mainīgie C++
Mainīgais pirms lietošanas ir jādeklarē
jāpaziņo, kāda datu tipa vērtības mainīgais drīkstēs pieņemt
deklarācijā jānorāda datu tipa vārds un mainīgā vārds (drīkst arī
uzreiz piešķirt mainīgajam sākuma vērtību)
int – veselo skaitļu datu tips (17, 3, -5, 0, ...)
double – reālo skaitļu datu tips (17.5, 3.0, 0.0, -5.78, ...)
char – simboliskais datu tips ('a', 'R', '\n', '\\', '5', ...)
bool – loģiskais datu tips (true, false)
int x;
double x,y;
int x=0,y,z=17;
char c,c1='B';
bool b=false;
Pirms mainīgā izmantošanas tam ir jābūt inicializētam
Mainīgā inicializēšana – vērtības iegūšana
Mainīgā vērtību var ievadīt lietotājs, izmantojot
ievades komandu cin
cin >> x;
cin >> x >> y;
Mainīgajam vērtību var piešķirt, izmantojot
piešķiršanas operatoru =
x =
y =
c =
b =
int
17;
5.78;
'A';
true;
x=5, y=8;
Piešķiršanas operators =
Jāatšķir divas lietas
= piešķiršanas operators
x = 17; piešķiršanas komanda
Piešķiršanas operatora semantika
kreisās puses mainīgajam tiek piešķirta labās puses vērtība
piešķiršanas komandai tiek piešķirta labās puses vērtība
sekas – piešķiršanas komandu var lietot kā labās puses vērtību citās piešķiršanas
komandās (un arī citur)
x=y=17;
vispirms mainīgajam y un komandai y=17 tiek piešķirta labās puses vērtība: 17
pēc tam tiek izpildīta otra piešķiršana, līdz ar kuru mainīgajam x tiek piešķirta
labās puses (y=17) vērtība: 17
int x=y=z=5;
Lietojot piešķiršanas operatoru, jāievēro tipu saderība
int x=5.5; kļūda – veselo skaitļu mainīgajam nedrīkst piešķirt daļskaitli
double y=17; reālo skaitļu mainīgajam atļauts piešķirt veselu skaitli
char c=true; kļūda – pilnīga tipu nesaderība
Datu ievade un izvade
Ievade
cin >> x >> y;
Izvade
cout << x;
cout << "Sveiki!";
cout <<x<<" kvadrātā ir " <<y<< endl;
endl – pāreja uz jaunu rindu
cout << "Hello, world!\n";
"\n" – pāreja uz jaunu rindu
Aritmētiskie operatori un izteiksmes
Visi aritmētiskie operatori ir bināri – tiem nepieciešami divi operandi
Aritmētisku operatoru lietošanas rezultātā tiek iegūtas aritmētiskas
izteiksmes
+, -, *, /, %
5+7
x*y
(x+5)/7%(y*(y+1))
Svarīgi prast noteikt aritmētiskas izteiksmes datu tipu
ja abi operandi ir veseli skaitļi, rezultāts ir vesels skaitlis
int x=14, y=10;
cout << x/y; izdrukās 1
ja kaut viens no operandiem ir daļskaitlis (konstante ar komatu vai double
tipa mainīgais), rezultāts ir reāls skaitlis
int x=14;
double y=10;
cout << x/y; izdrukās 1.4
Tipu konvertēšana
Ko izvada šī programma?
int x,y;
cin >> x >> y;
Ja lietotājs ievada skaitļus
double dal = x/y; 17 un 5, tad izvadīs... skaitli 3
cout << dal;
Kā panākt, lai dalīšana notiktu "pa īstam"?
vajag likt kompilatoram uzskatīt kādu no dalīšanas
operācijas operandiem par reālu skaitli
double dal = (double)x/y;
double dal = x/(double)y;
double dal = (double)x/(double)y;
Saīsinātie piešķiršanas pieraksti
Jebkuram aritmētiskajam operatoram – vērtības izmainīšana par
jebkādu lielumu a
x=x<op>a;
... jeb...
x<op>=a;
x=x+5;
y=y-1;
z=z*y;
... jeb...
... jeb...
... jeb...
x+=5;
y-=1;
z*=y;
Aritmētiskajiem operatoriem "+" un "-" – vērtības izmanīšana par 1
x=x<op>1;
... jeb...
x<op><op>;
x=x+1;
y=y-1;
x=x<op>1;
x=x+1;
y=y-1;
... jeb...
... jeb...
x++;
y--;
... jeb...
<op><op>x;
... jeb...
... jeb...
++x;
--y;
"x++" un "++x" atšķirība
Atceroties 8. slaidu...
piešķiršanas operatora semantika
"x++" un "++x" atšķirība ir darbību secībā
x++
piešķiršanas komandai tiek piešķirta x vērtība
x vērtība tiek palielināta par 1
++x
kreisās puses mainīgajam tiek piešķirta labās puses vērtība
piešķiršanas komandai tiek piešķirta labās puses vērtība
x vērtība tiek palielināta par 1
piešķiršanas komandai tiek piešķirta x vērtība
Sekas
x vērtība abos gadījumos tiek palielināta par 1
izteiksmes (piešķiršanas komandas) iegūst dažādas vērtības
Tas pats attiecas uz saīsinātajiem pierakstiem "x--" un "--x"
"x++" un "++x" piemērs
y=x;
int x=17,y;
x++;
y=x++;
cout << x << " " << y; 18 17
int x=17,y;
++x;
y=x;
y=++x;
cout << x << " " << y; 18 18
int x=5;
cout << x;
++x;
cout << x;
cout << ++x;
cout << x;
cout << x++;
x++;
cout << x;
"x++" un "++x" piemērs
int x=17,y;
y=x++;
cout << x <<
int x=17,y;
y=++x;
cout << x <<
int x=5;
cout << x;
cout << ++x;
cout << x++;
cout << x;
y=x;
x++;
" " << y;
18 17
++x;
y=x;
" " << y;
//5
//6
//6
//7
18 18
++x;
cout << x;
cout << x;
x++;
Vienkāršs piemērs
Uzdevums
Lietotājs ievada veselu skaitli. Izvadīt šī skaitļa kvadrātu.
Risinājums
#include <iostream>
using namespace std;
int main() {
int x;
cout << "Ievadiet skaitli: ";
cin >> x;
int y=x*x;
cout << "Šī skaitļa kvadrāts ir " << y <<endl;
return 0;
}
Uzdevums 1
Lietotājs ievada 3 veselus skaitļus. Izvadīt šo skaitļu summu.
#include <iostream>
using namespace std;
int main() {
int x,y,z;
cout << "Ievadiet skaitļus: ";
cin >> x >> y >> z;
int sum = x+y+z;
cout << "Šo skaitļu summa ir " << sum <<endl;
return 0;
}
Salīdzināšanas operatori un loģiskās
izteiksmes
Visi salīdzināšanas operatori ir bināri – tiem
nepieciešami divi operandi
Salīdzināšanas operatoru lietošanas rezultātā tiek
iegūtas loģiskas izteiksmes
<, >, ==, !=, <=, >=
x>0
x+y == 0
(x>5) != (y<=z)
Loģiskas izteiksmes datu tips vienmēr ir bool
tātad loģisku izteiksmi varētu lietot zarošanās komandā...
Zarošanās komanda
Jautājums, uz kuru
var atbildēt ar "jā" vai
"nē"
if (<loģiska izteiksme>) {
...
Komandas, kas izpildāmas, ejot pa "+" zaru
(ja atbilde uz jautājumu ir "jā")
}
else
{
...
Komandas, kas izpildāmas, ejot pa "-" zaru
(ja atbilde uz jautājumu ir "nē")
}
“else” zars ir neobligāts
Figūriekavas blokam obligātas gadījumā, ja tas satur
vairāk par vienu komandu
Zarošanās piemērs
Loģiska izteiksme (iegūta, pielietojot
salīdzināšanas operatoru)
if (a<b) {
x=a;
}
else {
Tā kā ir tikai pa vienai komandai katrā no
x=b;
abiem blokiem, tad figūriekavas drīkst nelietot
}
if (a<b) x=a; else x=b;
Uzdevums 2
Lietotājs ievada 2 veselus skaitļus a un b. Izdrukāt dalījumu a/b.
#include <iostream>
using namespace std;
int main() {
int a,b;
cout << "Ievadiet skaitļus: ";
cin >> a >> b;
if (b==0)
cout << "Ar nulli dalīt nedrīkst!\n";
else {
double dal = (double)a/b;
cout << "Dalījums ir " << dal << endl;
}
return 0;
}
Loģiskie operatori
Loģiskie operatori ir divu veidu
bināri operatori
unāri operatori
&& – loģiskais AND
|| – loģiskais OR
! – loģiskais NOT
A
B
A && B
A || B
!A
true
true
true
true
false
true
false
false
true
false
false
true
false
true
true
false
false
false
false
true
Loģisko operatoru lietošanas rezultātā tiek iegūtas
loģiskas izteiksmes
b && b1
(x+y==0) || (z>0)
!b
!(x>5) && (y<=z || b)
Aritmētisko un loģisko izteiksmju saistība
Visur, kur atļautas loģiskas izteiksmes, atļautas arī aritmētiskas
izteiksmes, ievērojot šādu interpretāciju:
0 false
pārējie skaitļi true
Tātad, ja x ir ar tipu int, tad
if (x) if (x != 0)
if (x-5) if (x-5 != 0) if (x !=5)
if (!x) if (!(x != 0)) if (x == 0)
“if (x=0)” tiek interpretēts šādi
x=0 (veicam piešķiršanas darbību)
if (x=0) if (0) if (false) – vienmēr aiziet pa “else” zaru
if (x==0) ≠ if (x=0) !!!
piešķirt mainīgajam x vērtību 0
piešķirt komandai “x=0” vērtību 0
Uzdevums 3
Lietotājs ievada trīs veselus skaitļus. Noskaidrot, vai eksistē trijstūris ar šādiem malu
garumiem.
#include <iostream>
using namespace std;
int main() {
int a,b,c;
cout << "Ievadiet skaitļus: ";
cin >> a >> b >> c;
if (a+b<=c)
cout << "Trijstūris NEEKSISTĒ!\n";
else
if (a+c<=b)
cout << "Trijstūris NEEKSISTĒ!\n";
else
if (b+c<=a)
cout << "Trijstūris NEEKSISTĒ!\n";
else
cout << "Trijstūris EKSISTĒ!\n";
return 0;
}
Uzdevums 3 – īsāks variants
#include <iostream>
using namespace std;
int main() {
int a,b,c;
cout << "Ievadiet skaitļus: ";
cin >> a >> b >> c;
if (a+b<=c || a+c<=b || b+c<=a)
cout << "Trijstūris NEEKSISTĒ!\n";
else
cout << "Trijstūris EKSISTĒ!\n";
return 0;
}
Uzdevums 3 – cits īsāks variants
#include <iostream>
using namespace std;
int main() {
int a,b,c;
cout << "Ievadiet skaitļus: ";
cin >> a >> b >> c;
if (!(a+b<=c || a+c<=b || b+c<=a))
cout << "Trijstūris EKSISTĒ!\n";
else
cout << "Trijstūris NEEKSISTĒ!\n";
return 0;
}
Uzdevums 3 – vēl cits īsāks variants
#include <iostream>
using namespace std;
int main() {
int a,b,c;
cout << "Ievadiet skaitļus: ";
cin >> a >> b >> c;
if (a+b>c && a+c>b && b+c>a)
cout << "Trijstūris EKSISTĒ!\n";
else
cout << "Trijstūris NEEKSISTĒ!\n";
return 0;
}
Uzdevums 4
Lietotājs ievada 2 naturālus skaitļus. Noskaidrot, vai šo skaitļu summas
pēdējais cipars ir pāra vai nepāra.
#include <iostream>
using namespace std;
int main() {
int a,b;
cout << "Ievadiet skaitļus: ";
cin >> a >> b;
if ((a+b)%2==0)
cout << "PĀRA\n";
else
cout << "NEPĀRA\n";
return 0;
}
Uzdevums 4
Lietotājs ievada 2 naturālus skaitļus. Noskaidrot, vai šo skaitļu summas
pēdējais cipars ir pāra vai nepāra.
#include <iostream>
using namespace std;
int main() {
int a,b;
cout << "Ievadiet skaitļus: ";
cin >> a >> b;
if ((a+b)%2==1)
cout << "NEPĀRA\n";
else
cout << "PĀRA\n";
return 0;
}
Uzdevums 4
Lietotājs ievada 2 naturālus skaitļus. Noskaidrot, vai šo skaitļu summas
pēdējais cipars ir pāra vai nepāra.
#include <iostream>
using namespace std;
int main() {
int a,b;
cout << "Ievadiet skaitļus: ";
cin >> a >> b;
if ((a+b)%2!=0)
cout << "NEPĀRA\n";
else
cout << "PĀRA\n";
return 0;
}
Uzdevums 4
Lietotājs ievada 2 naturālus skaitļus. Noskaidrot, vai šo skaitļu summas
pēdējais cipars ir pāra vai nepāra.
#include <iostream>
using namespace std;
int main() {
int a,b;
cout << "Ievadiet skaitļus: ";
cin >> a >> b;
if ((a+b)%2)
cout << "NEPĀRA\n";
else
cout << "PĀRA\n";
return 0;
}
Uzdevums 4
Lietotājs ievada 2 naturālus skaitļus. Noskaidrot, vai šo skaitļu summas
pēdējais cipars ir pāra vai nepāra.
#include <iostream>
using namespace std;
int main() {
int a,b;
cout << "Ievadiet skaitļus: ";
cin >> a >> b;
if (!((a+b)%2))
cout << "PĀRA\n";
else
cout << "NEPĀRA\n";
return 0;
}
Uzdevums 5
Lietotājs ievada 3 ciparus. Izdrukāt lielāko
skaitli, kādu iespējams sastādīt no šiem
cipariem, izmantojot katru ciparu tieši vienu
reizi.
Uzdevums 5 – risinājums 1
#include <iostream>
using namespace std;
int main() {
int a,b,c;
cout << "Ievadiet ciparus: ";
cin >> a >> b >> c;
if (a>b)
if (b>c)
cout << a << b << c;
else
if (a>c)
cout << a
else
cout << c
else
if (a>c)
cout << b << a << c;
else
if (b>c)
cout << b
else
cout << c
return 0;
}
<< c << b;
<< a << b;
<< c << a;
<< b << a;
Uzdevums 5 – risinājums 2
#include <iostream>
using namespace std;
int main() {
int a,b,c;
cout << "Ievadiet ciparus: ";
cin >> a >> b >> c;
if (a>=b && b>=c) cout << a << b << c;
else
if (a>=c && c>=b) cout << a << c << b;
else
if (b>=a && a>=c) cout << b << a << c;
else
if (b>=c && c>=a) cout << b << c << a;
else
if (c>=a && a>=b) cout << c << a << b;
else cout << c << b << a;
return 0;
}
Uzdevums 5 – risinājums 3
#include <iostream>
using namespace std;
int main() {
int a,b,c,x;
cout << "Ievadiet ciparus: ";
cin >> a >> b >> c;
if (a<b) {
x=a;
a=b;
b=x;
}
if (a<c) {
x=a;
a=c;
c=x;
}
if (b<c) {
x=b;
b=c;
c=x;
}
cout << a << b << c;
return 0;
}