prireditveni stavek, BRANJE

 1.        Napišimo program, ki prebere celo število in ga izpiše.

 Potrebovali bomo torej spremenljivko tipa integer. Pred branjem bomo s funkcijo write na zaslon izpisali obvestilo, da bomo vedeli, da program od nas pričakuje vnos podatka.

 

program beri;

var stevilo: integer;

begin

  write('Stevilo = ');

  readln(stevilo);

  writeln('Vnesel si stevilo ', stevilo, '.')

end.

 

2.        Napišimo program, ki izračuna porabo goriva v vožnji z avtomobilom. Podatka sta število porabljenih litrov in število prevoženih kilometrov.

Po branju podatkov o porabljenih litrih in prevoženih kilometrih izpišemo rezultat s formulo l / km * 100

program gorivo;

{izračuna porabo goriva pri vožnji z avtomobilom }

var

  l, km: real;

begin

  write('Vpisi stevilo porabljenih litrov: '); readln(l);

  write('Vpisi stevilo prevozenih kilometrov: '); readln(km);

  write('Poraba goriva je ', l / km * 100,' litrov na 100 km.');

end.

 

3.       Izpis na zaslonu pri prejšnji nalogi je pri mnogih prevajalnikih v eksponentni obliki. Popravimo ga tako, da bo izpisan na eno decimalno mesto: Poraba goriva je 3.7 litrov na 100 km.

Pri izpisu uporabimo formatno določilo 5:1. S tem smo programu naročili naj za izpis rezultata porabi pet mest in pri tem izpiše eno decimalko.

program gorivo2;

{izračuna porabo goriva pri vožnji z avtomobilom }

var

  l, km: real;

begin

  write('Vpisi stevilo porabljenih litrov: '); readln(l);

  write('Vpisi stevilo prevozenih kilometrov: '); readln(km);

  write('Poraba goriva je ', l / km * 100 :5:1,' litrov na 100 km.');

end.

 

Na osnovi tega zgleda naredi samostojno še nalogi

·         Popravi gornji program tako, da bo enačba v drugem stavku izražena z novo spremenljivko v obliki prireditvenega stavka.

·         Preoblikuj program tako, da boš iz podatkov o porabi goriva na 100 km izračunal, koliko km lahko prevoziš z določeno količino goriva.

4.        Preberimo celi števili a in b in izpišimo vrednost izraza  ((a - b)2 + 1)2 + 3(a - b)2 + 7(a - b).

Po branju podatkov vidimo, da je smiselno, da posebej izračunamo vrednost izraza (a - b), saj ga potrebujemo na več mestih v izrazu. Prav tako bomo posebej izračunali še (a - b)2  ter (a - b)2 + 1.

program izraz;

var

  a, b, a_manj_b, kvadrat, kvadrat_p_1: integer;

begin

  write('a = '); readln(a);

  write('b = '); readln(b);

  a_manj_b := (a - b);

  kvadrat := a_manj_b * a_manj_b;

  kvadrat_p_1 := kvadrat + 1;

  writeln('Vrednost izraza je ',  kvadrat_p_1 * kvadrat_p_1 +

                                     3 * kvadrat + 7 * a_manj_b)

end.

 

5.        Napišimo program, ki izračuna koliko enako dolgih elementov dobimo, če jih izžagamo iz deske z določeno dolžino. Pri tem izračunajmo še odpadek, ki pri tem nastane.

Vnesemo dolžino deske in želeno dolžino elementov. Pri izračunu si pomagamo s funkcijama div in mod.

program deska;

{ izračuna število enako dolgih elementov, ki jih izžagamo iz deske

  in odpadek, ki pri tem nastane }

 

var

  dolzina_deske, element: integer;

 

begin

   write('Dolzina deske (cm): '); readln(dolzina_deske);

   write('Dolzina elementa (cm): '); readln(element);

   writeln;

   {kosov - celostevilcno deljenje}

   writeln('Iz deske dolzine ',dolzina_deske, ' cm dobim ', 

           dolzina_deske div element,' kosov ', element, 

           ' cm dolgih elementov.');

   {odpadek - ostanek pri celostevilcnem deljenju}

   writeln('Pri tem nastane odpadek ', dolzina_deske mod element, ' cm.');

end.

6.        Letalo je vzletelo ob u:m:s in letelo l sekund. Izračunajmo čas pristanka. Pri tem bomo predpostavili, da so podatki taki, da bomo ostali v okviru enega dne.

 Najprej bomo čas vzleta pretvorili v sekunde, potekle od polnoči. Prišteli bomo čas leta in dobljeni čas ponovno pretvorili v ure, minute in sekunde. Če čas delimo s 3600, bomo dobili ure. Ostanek, deljen s 60, da minute, ostanek pri deljenju s 60 pa sekunde.

 

program let;

(* iz casa vzleta in trajanja poleta izracunamo cas pristanka *)

var

   u, m, s: integer;

   let, pristanek: integer;

begin

   writeln('Vnesi cas vzleta letala: ');

   write('     ura: '); readln(u);

   write('   minut: '); readln(m);

   write('  sekund: '); readln(s);

   write('Trajanje poleta (v sekundah): ');  readln(let);

   pristanek := u * 3600 + m * 60 + s + let;

   u := pristanek div 3600;

   m := (pristanek mod 3600) mod 60;

   s := pristanek mod 60;

   writeln('Cas pristanka: ', u, ':', m, ':', s);

end.

 

7.        Na osnovi naslednjega programa, ki prebere dvomestno naravno število in ga izpiše v sistemu z osnovo 2, sestavi program, ki bo tromestno število izpisal v sistemu z osnovo 8. Tako za število 99 izpišemo 99(10) = 1100011(2). Izpišemo tudi morebitne vodilne ničle.

 

program dv_zap;

(*

    Program prebere stevilo manjse od 100 in ga izpise v dvojiskem

    zapisu.    Primer:   99 = 1100011 (2)

*)

var

  stevilo, stevka: integer;

begin

  write('Stevilo = '); readln(stevilo);

  writeln;writeln;writeln;

  write(stevilo:1, '(10) = ');  

  (* stevilo ima lahko faktor 2^6 *)

  stevka := stevilo div 64; write(stevka:1);

  stevilo := stevilo mod 64;          (* koliko se za pretvorbo *)

  stevka := stevilo div 32; write(stevka:1);

  stevilo := stevilo mod 32;

  stevka := stevilo div 16; write(stevka:1);

  stevilo := stevilo mod 16;

  stevka := stevilo div 8; write(stevka:1);

  stevilo := stevilo mod 8;

  stevka := stevilo div 4; write(stevka:1);

  stevilo := stevilo mod 4;

  stevka := stevilo div 2; write(stevka:1);

  stevilo := stevilo mod 2;

  stevka := stevilo;

  writeln(stevka, '(2)');

end.

Ker je število v desetiškem sistemu dvomestno, bomo dobili sedemmestno dvojiško število. Največji faktor bo 64. Število torej najprej delimo s 64. Rezultat pove prvo števko v dvojiškem zapisu. Sedaj izračunamo ostanek pri deljenju s 64. Novo število ima lahko največ faktor 25.  Zato delimo z 32, spet izračunamo ostanek, ... Če sedaj želimo enako narediti za osmiški sistem najprej ugotovimo, da bomo pri tromestnem desetiškem sistemu imeli največji faktor 8 * 8 * 8. Popravkov programa torej ne bo veliko:

program osm_zap;

(*

    Program prebere stevilo manjse od 1000 in ga izpise v osimskem

    zapisu.    Primer:   99 = 0143 (8)

*)

var

  stevilo, stevka: integer;

begin

  write('Stevilo = '); readln(stevilo);

  writeln;writeln;writeln;

  write(stevilo, '(10) = ');  

  (* stevilo ima lahko faktor 8^3 *)

  stevka = stevilo div (64*8); write(stevka);

  stevilo = stevilo mod (64*8);          (* koliko se za pretvorbo *)

  stevka = stevilo div 64; write(stevka);

  stevilo = stevilo mod 64;

  stevka = stevilo div 8; write(stevka);

  stevilo = stevilo mod 8;

  stevka = stevilo;

  writeln(stevka, '(8)');

end.

 

8.        Dano je število 5634634. Izpišimo, koliko stotic ima.

Če hočemo priti do števila stotic, bomo število le celoštevilsko delili s 100. Naše število ima namreč 56346 stotic.

program sto;

var

  stevilo, stotice: integer;

begin

  stevilo := 5634634;

  stotice := stevilo div 100;

  writeln('Stevilo ', stevilo,' ima ', stotice, ' stotic.')

end.

Kaj pa če želimo dobiti le 'prave' stotice, v našem primeru torej 4? 

Če imamo celo število, zelo enostavno dobimo enice. Ostanek pri deljenju z 10 namreč določa število enic. V prejšnjem programu po deljenju s 100 le še izračunamo ostanek pri deljenju z 10. ker je število večje kot 32000, bo seveda program deloval le za tiste prevajalnike, ki uporabljajo za tip integer dovolj veliko zalogo vrednosti.

program sto1;

var

  stevilo, stotice: integer;

begin

  stevilo := 5634634;

  stotice := stevilo div 100;

  writeln('Stevilo ', stevilo,' ima ', stotice, ' stotic.')

end.

9.        Ugotovimo, kakšen ostanek dobimo pri deljenju dveh negativnih celih števil. Kaj pa, če je eno število pozitivno in drugo negativno. Kako je pri deljenju?

program posk;

var

  poz, neg1, neg2: integer;

begin

  poz := 29;

  neg1 := -7;

  neg2 := -3;

  writeln('Ostanki: \n');

  writeln(poz, ' mod ', neg1, ' = ', poz mod neg1);

  writeln(neg1, ' mod ', 3, ' = ', neg1 mod 3);

  writeln(neg1, ' mod ', neg2, ' = ', neg1 mod neg2);

  writeln;writeln;writeln('Deljenje: ');

  writeln(poz, ' div ', neg1, ' = ', poz div neg1);

  writeln(neg1, ' div ', 3, ' = ', neg1 div 3);

  writeln(neg1, ' div ', neg2, ' = ', neg1 div neg2)

end.

10.    Preberimo dve realni števili in izračunajmo njun produkt.

Z znanjem, ki smo si ga nabrali do sedaj, to res ni težka naloga, zato kar zapišimo program.

program rea;

(* produkt realnih stevil *)

var

  i, j, p: real;

begin

  write('Vpisi 1. stevilo: '); readln(i);

  write('Vpisi 2. stevilo: '); readln(j);

  writeln('Vpisal si stevili ', i, ' in ', j);

  p = i * j;

  writeln('Njun produkt je enak ', p, '.');

end.

 

11.    Napiši program, ki bo izračunal skupno vsoto denarja (povečano glavnico), ki jo bo po enem letu vrnil posojilojemalec, ki si je v banki izposodil x SIT posojila (glavnica) po obrestni meri p%. Banka naj za takšna posojila zaračunava navadne obresti.

Prebrali bomo glavnico in obrestno mero. Nato bomo izračunali obresti, ter jih prišteli k glavnici. 

program kredit;

{program racuna obresti in povecano glavnico}

{program uporabi podprograma read in readln}

var

  glavnica, obrestm: real;

  obresti, decobr, pov_glavnica: real;

begin

  write( 'Glavnica znasa: ' );  readln( glavnica );

  write( 'Obrestna mera v odstotku: ' );  readln( obrestm );

  decobr := obrestm / 100.0;

  obresti := glavnica * decobr;

  pov_glavnica := glavnica + obresti;

  writeln( 'Znesek obresti je ' , obresti:5:2 );

  writeln( 'Povecana glavnica znasa ' , pov_glavnica:10:2 );

end.

12.    Pri danem x izračunajmo vrednost polinoma p(x) = a x3 + b x2 + c x + d s podanimi realnimi koeficienti a, b, c in d. Izpišimo podatke in rezultat.

Najprej bomo prebrali podatke. Da bomo računalniku prihranili malo dela, bomo vrednost izračunali s Hornerjevim postopkom, torej kot  ((a x + b) x + c) x + d. Nato bomo le še izpisali rezultat.

program horner;

(* izracunamo vrednost kubicnega polinoma *)

var

   a, b, c, d, x, p: real;

begin

   write('Vnesi koeficiente polinoma p(x) = a x^3 + b x^2 + c x + d');

   write('Koeficient a: ');  readln(a);

   write('Koeficient b: ');  readln(b);

   write('Koeficient c: ');  readln(c);

   write('Koeficient d: ');  readln(d);

   write('Vrednost spremenljivke x: ');  readln(x);

   p := ((a * x + b) * x + c) * x + d;

   writeln('p(x) = ', a, 'x^3 + ', b, ' x^2 + ', c, ' x + ', d);

   writeln('p(', x, ') = ', p);

end.

 

13.    Radi bi izračunali, koliko kilogramov, dekagramov in gramov je določena teža, izražena v funtih (1 funt = 0.476 kilograma).

Ker vemo, da je 1 funt 0.476 kilograma, najprej v funtih prebrano težo pomnožimo s tem faktorjem. Dobimo decimalno število, ki pomeni težo, izraženo v kilogramih (denimo 4.536) . Če to vrednost želimo shraniti v celoštevilsko spremenljivko, s funkcijo trunc odrežemo decimalke in tako dobimo kilograme (4). Če te sedaj odštejemo od teže, bomo dobili decimalni del teže (0.536). To pomnožimo z 100. Sedaj imamo preostanek teže izražen v dekagramih. Spet odrežemo decimalke, shranimo v celoštevilsko spremenljivko in z odštevanjem naračunamo nov ostanek. Ko ga pomnožimo z 10, smo prišli do gramov. Tem prištejemo 0.5, da jih, kot smo videli v predhodnem zgledu, zaokrožimo, ko jih shranimo v spremenljivko tipa integer.

 

program pretvori;

(* pretvori tezo iz funtov v kg, dag in g *)

var

  funt_kg: real;    (* 1 funt je 0.476kg  *)

  teza_f: real;     (* teza v funtih *)

  teza: real;       (* teza v kilogramih *)

  kg, dag, g: integer;   (* teza v kg, dag in g *)

begin

  funt_kg := 0.476; (* 1 funt je 0.476kg  *)

  write('Teza predmeta v funtih: '); readln(teza_f);

  teza := teza_f * funt_kg;

  kg := trunc(teza);

  teza := teza - kg;    (* ostalo se za pretvorbo *)

  teza := teza * 100;   (* iz kg ---> dag *)

  dag := trunc(teza);

  teza := teza - dag;   (* ostalo dag za pretvorbo *)

  teza := teza * 10;    (* v gramih *)

  g := round(teza); (* zaokrozanje *)

  writeln(teza_f, 'funtov je ', kg, 'kg ', dag, ' dag in ', g, ' g.');

end.