Cikli. Mainīgo redzamības apgabali

Download Report

Transcript Cikli. Mainīgo redzamības apgabali

Programmēšana I

Praktiskie darbi

Cikli

Doc. Dr. Sc. Comp. Edgars Rencis, Latvijas Universitāte, Datorikas fakultāte, 25. septembris, 2014.

Cikli

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

Cikls ar skaitītāju

  

for (

<1>; <2>; <3>

) {

<4> – cikla darbības

}

<1> – sākuma stāvokļa uzstādīšana <2> – cikla nosacījums <3> – cikla solis Jebkurš no <1>, <2>, <3>, <4> drīkst būt tukšs Figūriekavas blokam obligātas gadījumā, ja tas satur vairāk par vienu komandu

Cikla ar skaitītāju piemērs

 Izdrukāt vienā stabiņā ciparus no 0 līdz 9

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

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

Kas ir kas?

 

for (int i=0;

 sākuma vērtību uzstādīšana

i<10;

 loģiska (vai aritmētiska) izteiksme, kuras vērtība tiek pārbaudīta pirms katras cikla iterācijas

i++)

 iterācijas darbības, kas jāveic pēc katras cikla Var lietot arī vairākas darbības vienuviet

for (i=0,j=0; i<10 && j<10; i++,j++) cout << i*j << endl;

0 1 4 9 16 25 36 49 64 81

Piemērs for ciklam ar tukšu ķermeni

  Lietotājs ievada veselu pozitīvu skaitli. Izvadīt lielāko veselo skaitli, kas mazāks par dotā skaitļa pozitīvo kvadrātsakni.

#include using namespace std; int main() { int i,x; cin >> x;

for(i=0;i*i

cout << i-1; return 0; }

Uzdevums 1

  Lietotājs ievada 2 naturālus skaitļus a un b, kur a<=b. Izvadīt visus naturālos skaitļus, kas atrodas intervālā [a,b],

izmantojot for ciklu

.

#include using namespace std;  int main() { int a,b,i; cin >> a >> b; for(i=a; i<=b; i++) cout << i << endl; return 0; }  Neizmantojot palīg-mainīgo i for(; a<=b; a++) cout << a << endl;

Cikls ar priekšnosacījumu

    

while (

) { ...

}

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

} int i=0; while (i<10) cout << i++ << endl;

Uzdevums 2

  Lietotājs ievada 2 naturālus skaitļus a un b, kur a<=b. Izvadīt visus naturālos skaitļus, kas atrodas intervālā [a,b],

izmantojot while ciklu

.

#include using namespace std;  int main() { int a,b; cin >> a >> b; while (a<=b) { cout << a << endl; a++; } return 0; }  Izmantojot saīsinātu pierakstu while (a<=b) cout << a++ << endl;

Cikls ar pēcnosacījumu

     

do { ...

} while (

)

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); int i=0; do cout <

Uzdevums 3

  Lietotājs ievada 2 naturālus skaitļus a un b, kur a<=b. Izvadīt visus naturālos skaitļus, kas atrodas intervālā [a,b],

izmantojot do ciklu

.

#include using namespace std; } int main() { int a,b; cin >> a >> b; do { Šādu ciklu varam taisīt tikai tāpēc, ka skaidri zinām, ka vismaz viens skaitlis būs jāizvada!

cout << a++ << endl; } while (a<=b); return 0;

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;

Ja i>6, iet laukā no cikla (beigt darbu)

} if (i%2) continue; cout << i << endl;

Nepāra skaitļiem pārejam pie nākamās iterācijas, izlaižot drukāšanas komandu

2 4 6

Līdz šejienei nokļūstam tikai, ja i ir pāra skaitlis, kas nav lielāks par 6:

0

Uzdevums 4

  Lietotājs ievada naturālu skaitli. Noskaidrot, vai tas ir pirmskaitlis!

 katram pirmskaitlim ir tieši 2 pozitīvi dalītāji #include 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 4 – alternatīvs risinājums

 #include using namespace std; int main() { int x; cin >> x; int i; for(i=2; i

Mainīgo redzamības apgabali

    Mainīgais redzams (eksistē) no tās vietas, kur tas deklarēts, līdz tā bloka beigām, kurā tas deklarēts   deklarācija funkcijas ķermenī – redzami visā funkcijā deklarācija iekšējā blokā (piemēram, cikla vai zarošanās ķermenī) – redzami līdz šī bloka beigām Dažādos redzamības apgabalos drīkst deklarēt mainīgos ar vienādiem vārdiem  tie tiks uzskatīti par dažādiem mainīgajiem Diviem vienāda vārda mainīgajiem nedrīkst būt vienādi redzamības apgabali Ja divu vienāda vārda mainīgo redzamības apgabali šķeļas, šķēlumā redzams ir tuvāk deklarētais mainīgais

Mainīgo redzamības apgabali – piemēri

int i=11; if (i>10) { int x=5; cout << x; //5 } cout << x; //Kļūda – mainīgais x nav deklarēts

Mainīgo redzamības apgabali – piemēri

int i=11, x=7; if (i>10) { int x=5; cout << x; //5 } cout << x; //7

Mainīgo redzamības apgabali – piemēri

int i=11, x=7; if (i>10) { x=5; cout << x; } cout << x;

Mainīgo redzamības apgabali – piemēri

int i=11, x=7; if (i>10) { x=5; cout << x; //5 } cout << x; //5

Mainīgo redzamības apgabali – piemēri

int x; cin >> x; for (int i=0; i*i

Mainīgo redzamības apgabali – piemēri

int x; cin >> x; for (int i=0; i*i

Uzdevums 5

  Izdrukāt uz ekrāna reizrēķina tabulu skaitļiem no 1 līdz 10.

#include using namespace std; int main() { for (int x=1; x<=10; x++) { for (int y=1; y<=10; y++) cout << x*y << ” ”; cout << endl; } return 0; }

Uzdevums 5 – alternatīvs risinājums

 #include using namespace std; int main() { for (int i=0;i<100;i++) { cout << (i/10+1)*(i%10+1) << ” ”; if (i%10==9) cout << endl; } return 0; }