E-gradiva > Računalništvo > Programiranje > Upravljanje s programirljivimi napravami > Osnove programiranja > Zaporedje stavkov

Prijava

Zaporedje stavkov

Najprej si bomo pogledali kako lahko rešujemo probleme, ki so vezani na izvajanje zaporedja večih stavkov. Večina računalniških programov deluje na principu, da je potrebno najprej vnesti vhodne podatke, nato izračunati rezultat in na koncu ta rezultat izpisati. Preden se lotimo programiranja, moramo podrobneje definirati naš problem. Vprašati se moramo kaj želimo narediti, kakšni so naši vhodni podatki, kaj naj bo rezultat in kako bomo dobili ta rezultat. Računalnik namreč nič ne naredi brez da bi mu mi povedali kako naj to naredi. Naš algoritem moramo pretvoriti v zaporedje večih ukazov v programskem jeziku.

 

Proglejmo si kako bi napisali program, ki  sešteje dve števili in izpiše rezultat. Najprej določimo vhod in izhod: 

 

VHOD: Dve števili.

IZHOD:  Rezultat seštevanja, ki se izpiše na zaslon.

 

Nato določimo operacije, ki jih želimo izvesti: Vhodni števili seštejemo in izpišemo rezultat.

 

Nato definiramo algoritem: 

 

ALGORITEM

Sedaj ta algoritem pretvorimo v programsko kodo v jeziku C++:

 

// Program, ki sešteje dve števili
#include <iostream>
using namespace std;

int
main()
{

int
celo_stevilo_1, celo_stevilo_2, vsota; // deklaracija spremenljivk

// Vnosi števili

cout <<"Vnesi prvo stevilo:"; // pred vsakim vnosom moramo izpisat kaj naj vnesemo!!!
cin >> celo_stevilo_1;

cout <<"Vnesi drugo stevilo:";
// pred vsakim vnosom moramo izpisat kaj naj vnesemo!!! 
cin >> celo_stevilo_2;

// Izračunaj vsoto
vsota = celo_stevilo_1 + celo_stevilo_2;


// Izpiši rezultat
cout << "Izračunana vsota dveh števil je:" << vsota << endl;

return
0;
}
// konec programa

 

V našem programu smo uporabili prireditveni stavek vsota = celo_stevilo_1 + celo_stevilo_2 . V tem stavku se prvič srečamo z operatorji znotraj prireditvenega stavka. V tem primeru smo uporabili operator "+", ki se uporablja, če želimo sešteti dve števili. Pri operacijah s celimi števili uporabljamo naslednje operatorje:

 

 

C++ uporablja infiksno notacijo:

 

LO op Do
  ali /
levi operand operator desni operand

 

 

Primer:

A + B

 

 

Ovrednotenje aritmetičnih izrazov se izvaja po naslednjih prioritetah:

 

( izraz ) najvišja prioriteta izvedbe
*

nižja prioriteta

.

.

.

.

.

.

najnižja prioriteta

/
%
+
-

 

 

Poglejmo primer ovrednotenja izraza (a+6) * (8-a), pri čemer ima spremenljivka a vrednost 2:

 

(a +  6)   * (8 - a)

 

( 2 + 6 ) * ( 8 - 2 )

 

     8 * ( 8 - 2 )

 

     8 * ( 8 - 2 )

 

     8 * 6

 

       48

 

 


 

To drevo ovrednotenj lahko predstavimo tudi grafično:

 

( a + 6 ) * ( 8 - a )

 

Vizualizacija ovrednotenja

Slika 1: Drevo ovrednotenj

 

 

Na sliki 1 vidimo, da se najprej izračunajo  izrazi, ki so v oklepajih. Če ne bi imeli oklepajev pa bi se  najprej zmnožili števili 6*8, nato pa bi se izvajala seštevanja in odštevanja od leve proti desni. Poglejmo na primeru:

 

a +  6   * 8 - a

 

 2 + 6  *  8 - 2

 

  +  48 - 2

 

    50  - 2

 

    48

 

 

V tem primeru slučajno dobimo isti rezultat, vendar pa je kot vidite postopek izračuna drugačen.

 

Nasvet:

 

V primeru, ko hočete v jeziku C++ zapisati sestavljen aritmetični izraz in niste prepričani, če ste pravilno določili prioriteto izvajanja programa, je najboljše, da uporabite eksplicitno določanje prioritete s pomočjo oklepajev v aritmetičnem izrazu.


 

Poskušajte sami rešiti naslednji program:

 

 

Napišite program, ki bo ob podanih dimenzijah sobe, vrat in okna izračunal koliko zavojev tapet potrebujemo za oblepljenje sobe. Upoštevajte, da je pri lepljenju 10% izmeta.

 

  1. VHOD:
        - Dimenzija sobe: širina, višin, dolžina.
        - Dimenzije vrat: širina, višina, dolžina.
        - Dimenzije okna: širina, višina.
        - Dimenzije zavoja tapet: širina, višina.
        - Izmet: 10%.

     

     

    IZHOD:
        - število zavojev tapet.

     

  2. Operacije, ki jih moramo izvesti:

     - Izračunaj površino sobe.

     - Izračunaj površino vrat in oken.

     - Izračunaj število zavojev tapet

     
  3.  

    ALGORITEM:
        - Vnesi dimenzije sobe
        - Izračunaj površino sobe
        - Vnesi dimenzije vrat
        - Izračunaj površino vrat
        - Vnesi dimenzije okna
        - Izračunaj površino okna
        - Izračunaj površino oblepljenja
        - Vnesi dimenzije zavoja
        - Izračunaj površino zavoja
        - Izračunaj število zavojev tapet
        - Izpiši, koliko zavojev tapet potrebuješ

     

    Podrobneje obdelamo kako poteka izračun števila zavojev tapet:
        - Površina sobe = 2 * dolžina * višina + 2 * širina * višina
        - Površina vrat = višina vrat * širina vrat
        - Površina okna = višina okna * širina okna
        - Površina za oblepljenje = površina sobe - površina vrat - površina okna
        - Površina zavoja tapet = širina zavoja * dolžina zavoja
        - Število zavojev tapet = zaokroženo navzgor( (površina za oblepljenje / površina zavoja tapet) * 1.1)

     

  4. // Program za izracun stevila zavojev tapet
    #include <iostream>
    using namespace std;

    int
    main()
    {

    // Vnos dimenzij sobe in izracun povrsine sobe
    int povrsina_sobe, visina_sobe, dolzina_sobe, sirina_sobe;
    cout << "Vnesi visino, sirino in dolzino sobe: ";
    cin >> visina_sobe >> sirina_sobe >> dolzina_sobe;
    povrsina_sobe = 2 * dolzina_sobe * visina_sobe + 2 * sirina_sobe *
    visina_sobe;

    // Vnos dimenzij vrat in izracun povrsine vrat
    int povrsina_vrat, sirina_vrat, visina_vrat;
    cout << "Vnesi visino in sirino vrat: ";
    cin >> visina_vrat >> sirina_vrat;
    povrsina_vrat = sirina_vrat * visina_vrat;

    // Vnos dimenzij okna in izracun povrsine okna
    int povrsina_okna, sirina_okna, visina_okna;
    cout << "Vnesi sirino in visino okna: ";
    cin >> sirina_okna >> visina_okna;
    povrsina_okna = sirina_okna * visina_okna;

    // Izracun povrsine za oblepljenje
    int povrsina_za_oblepljenje;
    povrsina_za_oblepljenje = povrsina_sobe - povrsina_vrat -
    povrsina_okna;

    // Vnos dimenzij zavoja in izracun povrsine zavoja
    int povrsina_zavoja, dolzina_zavoja, sirina_zavoja;
    cout << "Vnesi dolzino in sirino zavoja tapet: ";
    cin >> dolzina_zavoja >> sirina_zavoja;
    povrsina_zavoja = dolzina_zavoja * sirina_zavoja;
    int
    stevilo_zavojev;
    stevilo_zavojev = ((povrsina_za_oblepljenje / povrsina_zavoja) + 1)*1.1;

    // Izpis stevila zavojev
    cout << "Za oblepljenje sobe potrebujemo " << stevilo_zavojev <<
    " zavojev tapet"
    <<endl;;
    return
    0;
    }
    // konec programa