Changes between Version 10 and Version 11 of python


Ignore:
Timestamp:
Nov 28, 2011, 10:05:13 AM (13 years ago)
Author:
Leon Kos
Comment:

Predelanih prvih 13 nalog

Legend:

Unmodified
Added
Removed
Modified
  • python

    v10 v11  
    1 
     1[[PageOutline]]
    22= Python =
    33
     
    132132}}}
    133133
    134 Za prekintev zanke for uporabimo ukaz break. 
     134Za prekinitev zanke for uporabimo ukaz break. 
    135135Ta ukaz takoj prekine vse nadaljnjne iteracije.
    136136Ukaz continue v zankah pa nadaljuje z naslednjim elementom.
     
    151151}}}
    152152
    153 
    154 
     153= Vaje programiranja v jeziku Python =
     154
     155Znanje programskega jezika Python najlažje pridobimo z vajo. Namen domačih nalog
     156predstavljenih na tej strani je predvsem utrditi določene programske konstrukte,
     157ki se lahko rešijo v krajših programih, katere pravilnost delovanja ni težko
     158preveriti. Naloge se izdelujejo z orodji (Tortoise, Idle, PythonOcc), ki so predvidene za izdelavo projekta.
     159To pomeni, da je vsako vsako vajo, ki jo izdelujemo najprej preveriti na lokalnem
     160računalniku. Ko naloga št.??? deluje, jo shranimo na strežnik z Tortoise (Add, Checkin) ter preverimo
     161njeno delovanje.
     162
     163= Vprašanja za utrjevanje =
     164 1. Zakaj je potrebno napisati vrstico {{{import szs}}}
     165 2. Kako uporabljamo komentarje?
     166 3. Zakaj je zamikanje stavkov pomembno? Ali interpreter Pythona upošteva zamikanje?
     167 4. Koliko decimalk hrani tip {{{integer}}} in {{{float}}}?
     168 5. Kakšna je razlika pri prireditvi konstante spremenljivkama '''c''' in '''d'''
     169{{{
     170#!python
     171   c = 3/2;
     172   d = 3.0/2;
     173}}} 
     174 6. Kaj je funkcija dvopičja v kontrolnem stavku? Naštej kje vse ga je potrebno uporabiti.
     175 7. Koliko je numerična vrednost naslednjega izraza
     176{{{
     177#!python
     178   i = 7 / 3;
     179}}}
     180 8. Pod katerimi pogoji naslednja koda izpiše '''voda'''? Kako bi jasneje napisali
     181napisane pogojne stavke z uporabo zavitih oklepajev in primernejšega zamikanja?
     182{{{
     183#!python
     184  if(temp < 0):
     185    print "led"
     186  else if (temp < 100):
     187    print  "voda"
     188  else:
     189    print "para")
     190}}}
     191 9. Kaj izpiše naslednja koda?
     192{{{
     193#!python
     194  x = 3;
     195  if(x):
     196     print "da"
     197  else:
     198     print "ne"
     199}}}
     200 10. Kaj bo izpisala naslednja koda?
     201{{{
     202#!python
     203  int i;
     204  for i in range(3):
     205    print "a"
     206  print "b"
     207
     208  print "c"
     209}}}
     210 11. Koliko elementov vsebuje polje oz. vektor '''a'''? Kateri je prvi element? Kateri je zadnji?
     211{{{
     212#!python
     213  a = [1,2,3,4,5];
     214}}}
     215 12. Kaj je narobe v naslednjem izvlečku kode?
     216{{{
     217#!python
     218  a = [];
     219  for i in range(5):
     220    a[i] = 0;
     221}}}
     222 13. Kateri so štirje pomembni deli funkcije? Katere tri mora klicoči program poznati?
     223
     224
     225
     226
     227
     228/// TODO
     229
     230 1. Kakšna je razlika med ''prefix'' in ''postfix'' operatorjem ++. Kakšna je razlika med naslednjima izrazoma:
     231{{{
     232#!c
     233  r = i++;
     234  r = ++i;
     235}}}
     236 1. Kaj je narobe z naslednjim predprocesorskim izrazom?
     237{{{
     238#!c
     239#define N 10;
     240}}}
     241 1. Če smo na primer definirali makro
     242{{{
     243#!rst
     244.. code-block:: c
     245
     246 #define SQR(x) x*x
     247 
     248Zakaj nam potem izraz
     249
     250.. code-block:: c
     251
     252 y = 1/SQR(x);
     253
     254ne deluje pravilno? Kako bi morali pravilno napisati makro SQR(x), da bi delal tudi za izraze
     255
     256.. code-block:: c
     257
     258 y = 1/SQR(1-x);
     259
     260}}}
     261 1. Kakšna je razlika v uporabnosti med '''i''' in '''J''', ki sta napisana kot
     262{{{
     263#!rst
     264.. code-block:: c
     265
     266  int i = 10;
     267  #define J 10
     268
     269Napotek: Poskusi napisati ``J = 2`` ali ``int a[i]``.
     270
     271}}}
     272 1. Zakaj je potrebno v {{{scanf()}}} argumente za formatnim stavkom pisati z &, pri {{{printf()}}} pa tega ne smemo?
     273 1. Koliko spomina klic
     274{{{
     275#!rst
     276.. code-block:: c
     277
     278  malloc(10)
     279
     280alocira?
     281
     282Kaj moramo napisati če želimo alocirati spomin za 10 spremenljivk tipa float?
     283}}}
     284 1. Kaj mislimo z ''enakostjo med polji in kazalci'' v C-ju?
     285 1. Če je {{{p}}} kazalec, kaj potem pomeni {{{p[i]}}}?
     286 1. Kako odpiramo datoteko za branje podatkov iz nje? Kaj se spremeni, če bi datoteko želeli odpreti za pisanje?
     287
     288
     289= Uporaba zank in izpis =
     290{{{
     291#!comment
     292http://www.eskimo.com/~scs/cclass/asgn.beg/PS1.html
     293}}}
     294
     295
     296== vaja1 ==
     297Napiši program, ki zahteva vnos dveh celih številk in nato izpiše njihovo vsoto.
     298
     299== vaja2 ==
     300Gaussovo kvadratura naj vpraša za meji integriranja funkcije f(x) = 2x^4^- x^3^ +1
     301in rezultat izpiše na zaslon.
     302
     303
     304== vaja3 ==
     305Izdelaj program ki izpiše naslednje zanke:
     306{{{
     307#!c
     308for(i = 0; i < 10; i = i + 2)
     309        printf("%d\n", i);
     310
     311for(i = 100; i >= 0; i = i - 7)
     312        printf("%d\n", i);
     313
     314for(i = 1; i <= 10; i = i + 1)
     315        printf("%d\n", i);
     316
     317for(i = 2; i < 100; i = i * 2)
     318        printf("%d\n", i);
     319}}}
     320Razjasni si, kako te zanke delujejo in program popravi tako, da
     321bodo v zanki uporabljeni operatorji +=, -=, *=
     322
     323== vaja4 ==
     324Napiši program ki izpiše ta trikotnik:
     325{{{
     326        *
     327        **
     328        ***
     329        ****
     330        *****
     331        ******
     332        *******
     333        ********
     334        *********
     335        **********
     336}}}   
     337Ne uporabi desetih printf() ampak uporabi zanko.
     338{{{
     339#!c
     340for(i = 0; i < 10; i = i + 1)
     341 {
     342  /* Več stavkov */
     343  /* gre lahko tukaj */
     344 }
     345}}}
     346
     347== vaja5 ==
     348Izpiši v zanki cela števila od 1 do 10 in njihove kvadrate.
     349{{{
     350        1       1
     351        2       4
     352        3       9
     353        ...
     354        10      100
     355}}}
     356
     357== vaja6 ==
     358Stavek '''for''' je prav zaprav, okrajšava za stavek '''while'''.
     359
     360Predelaj program, ki izpiše naslednjo zanko:
     361{{{
     362#!c
     363 for(i = 0; i < 10; i = i + 1)
     364   printf("i je %d\n", i);
     365}}}
     366z uporabo stavka '''while''', ki ima naslednjo obliko
     367{{{
     368#!c
     369  while(pogoj)
     370  {
     371    /* vpiši stavek za povečanje števca in izpis */
     372  }
     373}}}
     374Napotek: V primeru da se nam program ''obesi'' v neskončni zanki,
     375ga prekinemo s pritiskom na crtl-C
     376
     377
     378== vaja7 ==
     379Pretipkaj in poženi naslednji program:
     380{{{
     381#!c
     382#include <stdio.h>
     383
     384int main()
     385{
     386  int i;
     387
     388  printf("stavek 1\n");
     389  printf("stavek 2\n");
     390  for(i = 0; i < 10; i = i + 1)
     391   {
     392        printf("stavek 3\n");
     393        printf("stavek 4\n");
     394   }
     395  printf("stavek 5\n");
     396 
     397  return 0;
     398}
     399}}}
     400Program ne naredi nič posebnega. Z njim želimo le pojasniti vpliv
     401zavitih oklepajev v zanki in dobiti željen ''potek programa''.
     402
     403
     404== vaja8 ==
     405Pretipkaj in poženi naslednji program:
     406{{{
     407#!c
     408#include <stdio.h>
     409
     410int main()
     411{
     412 int i, j;
     413
     414 printf("začetek programa\n");
     415
     416 for(i = 0; i < 3; ++i)
     417  {
     418        printf("i je %d\n", i);
     419        for(j = 0; j < 5; j++)
     420                printf("i je %d, j je %d\n", i, j);
     421        printf("konec v zanki i = %d\n", i);
     422  }
     423
     424 printf("konec programa\n");
     425
     426 return 0;
     427}
     428}}}
     429Tudi ta program ne naredi kaj dosti koristnega. Želi pokazati, kako zanke
     430delujejo in kako jih ''gnezdimo''. V vaji 4 je potrebno uporabiti prikazani
     431način dvojne zanke.
     432
     433== vaja9 ==
     434Program naj prebere štiri cele številke in izpiše povprečno vrednost kot realno številko.
     435
     436== vaja10 ==
     437Program naj prebere vrednost x, izračuna kvadrat prebranega števila (x^2^) in  ga izpiše na zaslon.
     438Izdelaj podprogram sqr(x).
     439 
     440== vaja11 ==
     441Program naj prebere vrednost x in n, kot celi števili. Izdelaj podprogram power(x, n), ki izračuna n to potenco
     442števila x in jo izpiše na zaslon.
     443
     444= Pogojni stavek in zahtevnejše zanke =
     445
     446== vaja20 ==
     447Napiši program, ki z zanko in pogojnim stavkom ugotovi, koliko števil od 1 do 10 je večjih od 3 in seveda
     448izpiše rezultat 7.
     449
     450== vaja21 ==
     451Program naj poleg številk od 1 do 20 izpiše še ali je liha ali soda v obliki
     452{{{
     453#!rst
     454.. code-block:: c
     455
     456 1 je liha
     457 2 je soda
     458 3 je liha
     459 ...
     460
     461Napotek: Uporabi operator ``%``
     462}}}
     463
     464== vaja22 ==
     465Izdelaj program, ki izpiše v katero smer se je 2D točka največ premaknila, glede na
     466koordinatno izhodišče. Možni odgovori so:
     467 - levo
     468 - desno
     469 - gor
     470 - dol
     471Za prebrano točko 2 1 bo program odgovoril ''desno''.
     472
     473== vaja23 ==
     474Tako kot v vaji 22 naj dodatno še izpiše v kater smer se je premaknila. S tem da
     475se najprej izpiše večji pomik in nato manjši. Za prebrano točko 2 1 bo program odgovoril {{{desno gor}}}.
     476
     477== vaja24 ==
     478Napiši program, ki izpiše prvih 7 pozitivnih števil in njihovo faktorielo (fakulteto). (Faktoriela 1 je 1,
     479faktoriela 2 je 1*2=2, faktoriela 3 je 1 * 2 * 3 = 6, faktoriela 4 je 1 * 2 * 3 * 4 = 24, itd.)
     480
     481== vaja25 ==
     482Program naj izračuna prvih 30 [http://sl.wikipedia.org/wiki/Fibonaccijevo_%C5%A1tevilo Fibonaccijevih števil].
     483Vsaka Fibonaccijeva številka je vsota prejšnjih dveh števil F(n) = F(n-1) + F(n-2), F(0) = 1, F(1) = 1.
     484Izpis naj bo v obliki:
     485{{{
     486 1 + 1 = 2
     487 1 + 2 = 3
     488 2 + 3 = 5
     489 3 + 5 = 8
     490 5 + 8 = 13
     491...
     492}}}
     493
     494== vaja26 ==
     495Napiši program ji za podano število izpiše {{{je praštevilo}}} ali {{{ni praštevilo}}}.
     496[http://sl.wikipedia.org/wiki/Pra%C5%A1tevilo  Práštevílo] je naravno število n > 1, če ima natanko dva pozitivna delitelja (faktorja), število 1 in samega sebe kot edini prafaktor.
     497
     498== vaja27 ==
     499Pohitri {{{vaja26}}} z dejstvom, da razen 2 nobeno sodo število ni praštevilo. Glej {{{vaja21}}}.
     500
     501== vaja28 ==
     502Napiši program, ki tabelira poštevanko od 1 do 10, tako da izpiše vse skupaj v 10 vrsticah v
     503obliki:
     504{{{
     5051*1=1 1*2=2 1*3=3
     506...
     50710*1=1 10*2=20 ...
     508}}}
     509
     510== vaja29 ==
     511Za dan vektor {{{B[7]}}} uredi števila po velikosti od najmanjšega do največjega in jih zapiši v vekotor v
     512naslednji obliki -> {{{B[min]...B[max]}}}. S pomočjo for zanke izpiši vrednosti urejenega vektorja {{{B}}}
     513na zaslon po vrsticah od najmanjšega do največjega.
     514{{{
     515  float B[7] = {3.3, -23.2, -4.5, 56.0, 45.5, 69.9, 40.5};
     516}}}
     517
     518== vaja30 ==
     519Za matriko {{{A[25]}}} podano v vaja46 določi mesto maksimalnega števila in vrednost elementa izpiši na zaslon.
     520
     521== vaja31 ==
     522Na zaslon izpiši [http://en.wikipedia.org/wiki/Pascal's_triangle Pascal-ov trikotnik] ([http://sl.wikipedia.org/wiki/Pascalov_trikotnik Pascal's triangle]) za 8 vrstic v spodaj prikazani obliki.
     523
     5241
     525
     5261 1
     527
     5281 2 1
     529
     5301 3 3 1
     531
     5321 4 6 4 1
     533
     5341 5 10 10 5 1
     535
     5361 6 15 20 15 6 1
     537
     5381 7 21 35 35 21 7 1
     539
     540
     541= Nizi, vektorji, matrike =
     542
     543== vaja40 ==
     544Program iz vaje 28 priredi tako, da bo se zmnožek najprej predizračunal v polje
     545{{{
     546#!rst
     547
     548.. code-block:: c
     549
     550  int a[100];
     551
     552in nato naj program vpraša za dve števili, ter izpiše rezultat, ki ga vzame iz polja ``a[]``.
     553}}}
     554
     555== vaja41 ==
     556Napiši program ki bo v polje števil nadomesitil z njihovnimi kvadrati. Program naj vpraša
     557kateri indeks iz polja želimo in naj izpiše vrednost v polju. S stavkom if mora
     558tudi kontrolirati meje indeksov.
     559{{{
     560#!c
     561  int a[] = {1, 2, 9, 33, 22, 11, 3, 4, 3, 55,
     562             66, 33, 22, 22, 33, 54, 5, 6, 7,
     563             8, 223, 34};
     564}}}
     565
     566
     567== vaja42 ==
     568Za podano kvadratno matriko {{{a[16]}}} in vektor {{{x[4]}}}
     569{{{
     570#!rst
     571.. code-block:: c
     572
     573  float a[16] = {1, 2, 3, 4,
     574                 0, 1, 2, 3,
     575                 2, 3, 4, 5,
     576                 3, 2, 2, 1};
     577  float x[4], b[4];
     578
     579napiši program, ki prebere štiri vrednosti in izpiše zmnožek matrike
     580in vektorja s stavkom
     581
     582.. code-block:: c
     583
     584  printf("%.1f %.1f %.1f %.1f\n", b[0], b[1], b[2], b[3]);
     585
     586}}}
     587
     588
     589== vaja43 ==
     590Program naj prebere datoteko. Prvo število je n, drugo število je št. delitev div, nato pa
     591prva dva stolpca sta x in y točke p0, druga dva stolpca sta (x1, y1) točke p1,
     592ter zadnji stolpec je pretok q.
     593{{{
     5948 1
     59500 00 06 00 0
     59606 00 14 00 -1
     59714 00 20 00 0
     59820 00 20 10 0
     59920 10 14 10 0
     60014 10 06 10 1
     60106 10 00 10 0
     60200 10 00 00 0
     603}}}
     604
     605Datoteko preberite v spremenljivke
     606{{{
     607#!c
     608#define MAXN 100
     609float p0[MAXN*2], p1[MAXN*2], q[MAXN];
     610int n, div;
     611}}}
     612in vsako vrstico v zanki izpišite z naslednjim formatnim stavkom:
     613
     614{{{
     615#!c
     616   printf("%4.1f %4.1f %4.1f %4.1f %4.1f\n", ...
     617}}}
     618prve in druge točke elementa ter q.
     619
     620== vaja44 ==
     621Za podano kvadratno matriko {{{A[]}}} zmanjšaj diagonalne elemente za vrednost 1 in
     622spremenjene diagonalne elemente matrike {{{A}}} s pomočjo for zanke izpiši na zaslon .
     623{{{
     624#!c
     625float A[25] =   {3, 5, 90, 2 ,1,
     626                 1, 71, 59, 5, 5,
     627                 1, 2, 3, 54, 2,
     628                 12, 56, 32, 11, 1,
     629                 34, 56, 78, 45, 12
     630                 };
     631}}}
     632== vaja45 ==
     633Polje {{{a[]}}} iz vaje 41 prepišite v matriko {{{float b[]}}}
     634velikost 8x3. S tem sa so elementi, ki manjkajo postavljeni na 0.
     635Vrstice izpišite na eno decimalko natančno.
     636
     637== vaja46 ==
     638Za podano kvadratno matriko {{{A[25]}}} zmanjšaj diagonalne elemente za vrednost 1.1, prepiši
     639enodimenzionalno polje A v dvodimenzionalno polje B, ki ga računamo kot matriko 5x5
     640izpišemo z dvojno zanko na zaslon.
     641{{{
     642  float A[25] = {3.3, 5.2, 90.5, 2.3 ,1.1,
     643                   1.9, 71.0, 59.5, 5.3, 5.5,
     644                   1.0, 2.2, 3.5, 54.3, 2.2,
     645                   12.4, 56.1, 32.2, 11.4, 1.6,
     646                   34.8, 56.4, 78.9, 45.3, 12.3
     647                   };
     648}}}
     649
     650== vaja47 ==
     651Za izračun Pascal-ovega trikotnika (glej vaja31) uporabi podprogram pascals_triangle(n), kjer je n=8.
     652Vsako vrstico Pascal-ovega trikotnika zapiši v vrstico matrike P[64]. Prazna mesta matrike postavi
     653na vrednost 0. Izpiši matriko na zaslon (Uporabi for zanko).
     654Primer izgleda izpisa ene vrstice:
     655{{{
     656  printf("%d %d %d %d %d %d %d %d\n", P[0], P[1], P[2], P[3], P[4], P[5], P[6], P[7], P[8]);
     657}}}
     658
     659
     660= Podprogrami =
     661== vaja60 ==
     662Predelajte program za množenje matrike z vektorjem iz vaje 42, tako da boste
     663pred izpisom uporabili klic podprograma s stavkom
     664{{{
     665#!c
     666   mat_vec4(b, a, x);
     667   printf("%.1f %.1f %.1f %.1f\n", b[0], b[1], b[2], b[3]);
     668}}}
     669
     670== vaja61 ==
     671Predelajte program vaje4 tako, da boste napisali podprogram, ki ga boste klicali
     672v naslednji zanki
     673{{{
     674#!c
     675  for(i = 0; i < 10; i++)
     676    print_stars(i);
     677}}}
     678
     679
     680== vaja62 ==
     681Napišite podprogram {{{float celsius(float fahrenheit)}}}, ki pretvori Fahrenheitove stopinje v Celsiusove.
     682Formula za pretvorbo je °C = 5/9 * (°F - 32). Program naj naprej vpraša za
     683stopinje F in nato na decimalko natačno izpiše vrednost v Celzija. Zapomnite si, da
     684celoštevilčni izraz 5/9 da rezultat 0, zato ne smete uporabiti celoštevilčnega deljenja.
     685
     686== vaja63 ==
     687Stavek {{{ r = rand()*N/RAND_MAX + 1 }}} vrne naključno številko med 1 in N.
     688Izdelajte program, ki simulira metanje kocke. Izdelajte program, ki simulira zaporedno
     689metanje dveh kock in izriše histogram za 100 metov v (približno) taki obliki:
     690{{{
     691#!rst
     692::
     693
     694 2: 2    **
     695 3: 5    *****
     696 4: 4    ****
     697 5: 10   **********
     698 6: 15   ***************
     699 7: 28   ****************************
     700 8: 12   ************
     701 9: 9    *********
     702 10: 7   *******
     703 11: 5   *****
     704 12: 3   ***
     705
     706Prva številka pomeni vsoto pik na obeh kockah, druga številka pa pomeni koliko
     707krat se je dogodek zgodil, kar je tudi grafično narisano z podprogramom iz vaje 23.
     708
     709Napotek: Pogled v navodila za funkcijo rand vam bo razkril, da je
     710potrebno vklučiti header ``<stdlib.h>`` in povezovati z ``-lc``.
     711}}}
     712
     713== vaja64 ==
     714
     715Izdelajte podprogram za linearno interpolacijo. Program naj vpraša za dve
     716točki (x,,0,,,y,,0,,) in (x,,1,,,y,,1,,) ter mesto na osi ''x'' za katero
     717želimo vrednost ''y''. Npr. za
     718{{{
     7190 0
     7201 1
     7210.5
     722}}}
     723 mora vrniti 0.5.
     724Podprogram naj ima naslednji prototip:
     725{{{
     726#!c
     727  float linear_interpolation(float x, float p0[2], float p1[2])
     728}}}
     729
     730
     731== vaja65 ==
     732Podprogram za parametrizacijo daljice naj izpiše koordinato glede na
     733parameter ''t'', ki je v mejah od 0 do 1. Podobno kot pri vaji 64 preberemo
     734točki (x,,0,,,y,,0,,) in (x,,1,,,y,,1,,) in parameter ''t''. Prototip
     735{{{
     736#!c
     737  void linear_interpolation(float t, float p0[2], float p1[2])
     738}}}
     739naj izpiše točko s formatom "%.1f %.1f". Prednost parametrične interpolacije
     740je v tem, da deluje tudi za navpično daljico. Npr.
     741{{{
     7420 0
     7430 2
     7440.5
     745}}}
     746vrne 0.0 1.0
     747
     748Ko je parameter t=0 se izpiše začetna točka. Pri t=1 pa končna.
     749
     750
     751== vaja66 ==
     752Podobno kot v vaji 65 izdelajte podprogram, ki za parameter t v mejah
     753od -1 do 1 izpiše točko med podanima točkama.
     754Ko je parameter t=-1 se izpiše začetna točka. Pri t=1 pa končna. Za t=0 se izpiše točka na sredini.
     755
     756== vaja67 ==
     757Napiši podprogram decToBin(x), ki poljubno vrednost celega števila x prebranega iz zaslona pretvori
     758v binarni zapis in vrednost izpiše na zaslon.
     759Primer:
     760||25||:2||
     761||12||1||
     762||6||0||
     763||3||0||
     764||1||1||
     765||0||1||
     766
     767Ostanke deljenja decimalnega števila izračunanega po zgornjem primeru preberemo v nasprotnem vrstnem redu.
     768Za zgornji primer dec: 25 -> bin: 11001.
     769Uporabi operator %. (Primer: 25%2 = 1)!
     770
     771
     772= Dinamična alokacija spomina in delo z datotekami =
     773
     774== vaja80 ==
     775Program naj prebere datoteko '''vaja80.dat''', ki vsebuje seznam celih številk in izpiše njihovo vsoto.
     776V prvi vrstici je število celih števil ki sledijo v naslednjih vrsticah. Primer:
     777{{{
     7784
     77913
     78023
     78121
     78211
     783}}}
     784Za ta primer mora program izpisati 72. Število vrstic v datoteki {{{vaja80.dat}}} je lahko največ 100.
     785
     786
     787== vaja81 ==
     788Podobno kot v vaji 80 preberite datoteko '''vaja81.dat''' s tem da števila niso več omejena
     789z velikostjo polja ampak ga dinamično alocirajte z {{{malloc()}}} po tem, ko bo prebrana prva vrstica.
     790
     791== vaja82 ==
     792Preberi datoteko {{{vaja82.dat}}} v kateri sta zaporedno zapisani dve 4x4 matriki. Na primer:
     793{{{
     7941 2 3 4
     7955 6 7 8
     7969 0 1 1
     7971 2 2 2
     7981 1 1 1
     7991 1 1 1
     8001 2 5 6
     8013 4 5 2
     802}}}
     803
     804Program naj prebere datoteko v dve matriki in nato sešteje obe matriki v novo matriko (matrike seštevamo
     805po elementih). Ko imamo novo matriko naj program vpraša kateri element matrike želimo izpisati in sicer i-to vrstico
     806in j-ti stolpec (npr. i=1 in j=3 -> 9) in element i,j izpiše na zaslon.
     807
     808
     809== vaja83 ==
     810Program naj prebere iz datoteke '''vaja83.dat''' matriko velikosti ixj in izpiše element {2, 3}. Format datoteke je
     811{{{
     8124 5
     8131 2 3 4 5
     8144 5 5 6 6
     8154 4 4 99 4
     8166 7 7 8 1
     817}}}
     818V prvi vrstici piše število vrstic in število kolon matrike. Izpisal pa bi 99.
     819
     820
     821== vaja84 ==
     822Matriko iz tako kot pri vaji 83 preberemo iz datoteke '''vaja84.dat''' in
     823izpišemo v transponirani obliki kot cela števila.
     824Matriko celih števil dinamično alocirajte z malloc.
     825
     826== vaja85 ==
     827Matriko iz tako kot pri vaji 83 preberemo iz datoteke '''vaja85.dat''' in
     828Vse elemente matrike kvadriramo in zapišemo v datoteko  '''vaja85.rez''', v istem
     829formatu celih števil.
     830
     831= Aplikacije =
     832== vaja100 ==
     833Izračunaj faktor Učinkovite Rabe Energije, tako kot ga podaja [http://www.elektro-ljubljana.si/slo/Ceniki Elektro Ljubljana].
     834Dobavitelj v ceniku za vsak '''razred porabe''' določi '''faktor cene energije''', ki je osnova za izračun
     835faktorja URE po naslednji enačbi:
     836
     837  URE = ∑(E,,i,, F,,CE i,,)/E,,povprečna dnevna poraba,,
     838
     839Tabela razredov porabe in pripadajočimi faktorji cene električne energije] ima 5 razredov s progresivno stopnjo F,,CE,,
     840
     841||Razred porabe||Povprečna dnevna poraba energije (E,,i,,)||Faktor cene energije (F,,CE,,)||
     842||1.razred||do 6 kWh dnevne porabe||1.0||
     843||2.razred||nad 6 do vključno 12 kWh dnevne porabe||1.1||
     844||3.razred||nad 12 do vključno 18 kWh dnevne porabe||1.3||
     845||4.razred||nad 18 do vključno 24 kWh dnevne porabe||1.5||
     846||5.razred||nad 24 kWh dnevne porabe||2.0||
     847
     848Na primer URE za 8kWh dnevne porabe izračunamo kot URE=(6*1.0-(8-6)*1.1)/8
     849
     850Tabela[http://www.elektro-ljubljana.si/_services/document.php?name=ure__faktorji_uinkovite_rabe_energije_za_posamezno_povpreno_dnevno_porabo.pdf&langId=Slo&pageId=89 URE Faktorjev učinkovite rabe energije za posamezno povprečno dnevno porabo], se računajo samo za
     851celoštevilčni del povprečne dnevne porabe. Izdelaj program, ki za vnešeno realno povprečno porabo izpiše
     852faktor URE v formatu, kot je v pred izračunani tabeli.
     853
     854Napotek: Za izračun celega dela realnega števila uporabite funkcijo '''floor'''.
     855
     856== vaja101 ==
     857
     858Ceno za uporabo omrežij določa Akt o določitvi metodologije za obračunavanje omrežnine in metodologije za določitev omrežnine in kriterijih za ugotavljanje upravičenih stroškov za elektroenergetska omrežja, (Ur.l. RS 121/2005) in je sestavljena iz:
     859
     860 - stalnega mesečnega prispevka za moč, ki zanaša 0,66179 €/kW/mesec
     861 - cene za prenešeno delovno energijo, ki znaša:
     862    * v primeru dvotarifnega načina merjenja porabe električne energije:
     863{{{
     864VT: 0,03731 €/kWh
     865MT: 0,02924 €/kWh
     866}}}
     867    * v primeru enotarifnega načina merjenja porabe električne energije:
     868{{{
     869ET:  0,03462 €/kWh
     870}}}
     871
     872Izdelaj program, ki uporabnik vpraša po predvidenem mesečnem številu kWh VT in NT in izpiše ceno
     873za prenešeno delovno energijo v primeru dvotarifnega in v primeru enotarfnega načina merjenja porabe
     874električne energije. Uporabniku naj glede na vnešena podatka program svetuje, kateri način
     875je zanj najbolj primeren.
     876
     877
     878== vaja102 ==
     879Če ste izdelali vajo 100 in 101, potem združite programa v vaji 102 tako, da izračunate kako bo z elektriko
     880po novem sistemu z URE faktorjem.
     881
     882Obračun porabljene električne energije na podlagi izračunanega faktorja URE se izvede tako,
     883da se pomnoži količina električne energije v posamezni tarifi, s ceno električne energije v
     884tej tarifi in z izračunanim odjemalčefim faktorjem URE. Upoštevajte, da ima mesec 31 dni.
     885Program pa naj tako kot v vaji 11 vpraša za število kWh v visoki in nizki tarifi, izpiše
     886posamezne cene ter svetuje najprimernejši način tarifiranja.
     887