Changes between Version 12 and Version 13 of python


Ignore:
Timestamp:
Nov 28, 2011, 10:55:46 PM (13 years ago)
Author:
Leon Kos
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • python

    v12 v13  
    223223
    224224
    225 
    226 
    227 {{{
    228 #!comment
    229 /// TODO
    230 
    231  1. Kakšna je razlika med ''prefix'' in ''postfix'' operatorjem ++. Kakšna je razlika med naslednjima izrazoma:
    232 {{{
    233 #!c
    234   r = i++;
    235   r = ++i;
    236 }}}
    237  1. Kaj je narobe z naslednjim predprocesorskim izrazom?
    238 {{{
    239 #!c
    240 #define N 10;
    241 }}}
    242  1. Če smo na primer definirali makro
    243 {{{
    244 #!rst
    245 .. code-block:: c
    246 
    247  #define SQR(x) x*x
    248  
    249 Zakaj nam potem izraz
    250 
    251 .. code-block:: c
    252 
    253  y = 1/SQR(x);
    254 
    255 ne deluje pravilno? Kako bi morali pravilno napisati makro SQR(x), da bi delal tudi za izraze
    256 
    257 .. code-block:: c
    258 
    259  y = 1/SQR(1-x);
    260 
    261 }}}
    262  1. Kakšna je razlika v uporabnosti med '''i''' in '''J''', ki sta napisana kot
    263 {{{
    264 #!rst
    265 .. code-block:: c
    266 
    267   int i = 10;
    268   #define J 10
    269 
    270 Napotek: Poskusi napisati ``J = 2`` ali ``int a[i]``.
    271 
    272 }}}
    273  1. Zakaj je potrebno v {{{scanf()}}} argumente za formatnim stavkom pisati z &, pri {{{printf()}}} pa tega ne smemo?
    274  1. Koliko spomina klic
    275 {{{
    276 #!rst
    277 .. code-block:: c
    278 
    279   malloc(10)
    280 
    281 alocira?
    282 
    283 Kaj moramo napisati če želimo alocirati spomin za 10 spremenljivk tipa float?
    284 }}}
    285  1. Kaj mislimo z ''enakostjo med polji in kazalci'' v C-ju?
    286  1. Če je {{{p}}} kazalec, kaj potem pomeni {{{p[i]}}}?
    287  1. Kako odpiramo datoteko za branje podatkov iz nje? Kaj se spremeni, če bi datoteko želeli odpreti za pisanje?
    288 
    289 
    290 = Uporaba zank in izpis =
    291 {{{
    292 #!comment
    293 http://www.eskimo.com/~scs/cclass/asgn.beg/PS1.html
    294 }}}
    295 
    296 
    297 }}}
    298 
    299 
    300225= Naloge =
    301226
     
    304229
    305230== vaja2 ==
    306 Gaussovo kvadratura naj vpraša za meji integriranja funkcije f(x) = 2x^4^- x^3^ +1
    307 in rezultat izpiše na zaslon.
     231[http://en.wikipedia.org/wiki/Gaussian_quadrature Gaussovo kvadratura] naj vpraša za meji integriranja funkcije f(x) = 2x^4^- x^3^ +1
     232in rezultat izpiše na zaslon. Uporabite 4 točkovno kvadraturo.
    308233
    309234
     
    311236Izdelaj program ki izpiše naslednje zanke:
    312237{{{
    313 #!c
    314 for(i = 0; i < 10; i = i + 2)
    315         printf("%d\n", i);
    316 
    317 for(i = 100; i >= 0; i = i - 7)
    318         printf("%d\n", i);
    319 
    320 for(i = 1; i <= 10; i = i + 1)
    321         printf("%d\n", i);
    322 
    323 for(i = 2; i < 100; i = i * 2)
    324         printf("%d\n", i);
     238#!python
     239for i in range(0, 10, 2):
     240        print i
     241
     242for i in range(100, 0, -7):
     243        print i
     244
     245for i in range(1, 10)
     246        print i
     247
     248i=2
     249while i<100:
     250    i = i*2
     251    print i
    325252}}}
    326253Razjasni si, kako te zanke delujejo in program popravi tako, da
    327 bodo v zanki uporabljeni operatorji +=, -=, *=
     254bodo v zanki uporabljeni while z operatorji +=, -=, *=
    328255
    329256== vaja4 ==
     
    341268        **********
    342269}}}   
    343 Ne uporabi desetih printf() ampak uporabi zanko.
    344 {{{
    345 #!c
    346 for(i = 0; i < 10; i = i + 1)
    347  {
    348   /* Več stavkov */
    349   /* gre lahko tukaj */
    350  }
     270Ne uporabi desetih print ampak uporabi zanko.
     271{{{
     272#!python
     273for i in range(10):
     274   # Več stavkov
     275   # gre lahko tukaj
    351276}}}
    352277
     
    366291Predelaj program, ki izpiše naslednjo zanko:
    367292{{{
    368 #!c
    369  for(i = 0; i < 10; i = i + 1)
    370    printf("i je %d\n", i);
     293#!python
     294for i in range(10):
     295    print "i je %d" % i
    371296}}}
    372297z uporabo stavka '''while''', ki ima naslednjo obliko
    373298{{{
    374 #!c
    375   while(pogoj)
    376   {
    377     /* vpiši stavek za povečanje števca in izpis */
    378   }
     299#!python
     300while(pogoj):
     301    # vpiši stavek za povečanje števca in izpis
    379302}}}
    380303Napotek: V primeru da se nam program ''obesi'' v neskončni zanki,
     
    385308Pretipkaj in poženi naslednji program:
    386309{{{
    387 #!c
    388 #include <stdio.h>
    389 
    390 int main()
    391 {
    392   int i;
    393 
    394   printf("stavek 1\n");
    395   printf("stavek 2\n");
    396   for(i = 0; i < 10; i = i + 1)
    397    {
    398         printf("stavek 3\n");
    399         printf("stavek 4\n");
    400    }
    401   printf("stavek 5\n");
    402  
    403   return 0;
    404 }
     310#!python
     311
     312print "stavek 1"
     313printf "stavek 2"
     314for i in range(10):
     315    print "stavek 3"
     316    print "stavek 4"
     317print "stavek 5"
    405318}}}
    406319Program ne naredi nič posebnega. Z njim želimo le pojasniti vpliv
     
    411324Pretipkaj in poženi naslednji program:
    412325{{{
    413 #!c
    414 #include <stdio.h>
    415 
    416 int main()
    417 {
    418  int i, j;
    419 
    420  printf("začetek programa\n");
    421 
    422  for(i = 0; i < 3; ++i)
    423   {
    424         printf("i je %d\n", i);
    425         for(j = 0; j < 5; j++)
    426                 printf("i je %d, j je %d\n", i, j);
    427         printf("konec v zanki i = %d\n", i);
    428   }
    429 
    430  printf("konec programa\n");
    431 
    432  return 0;
    433 }
     326#!python
     327print "zacetek programa"
     328
     329for i in range(3):
     330    print "i je %d" % i
     331    for j in range(5):
     332        print "i je %d, j je %d" % (i, j)
     333    print "konec v zanki i = %d" % i
     334
     335print "konec programa"
    434336}}}
    435337Tudi ta program ne naredi kaj dosti koristnega. Želi pokazati, kako zanke
     
    458360{{{
    459361#!rst
    460 .. code-block:: c
     362.. code-block:: python
    461363
    462364 1 je liha
     
    519421na zaslon po vrsticah od najmanjšega do največjega.
    520422{{{
    521   float B[7] = {3.3, -23.2, -4.5, 56.0, 45.5, 69.9, 40.5};
     423#!python
     424  B = [3.3, -23.2, -4.5, 56.0, 45.5, 69.9, 40.5]
    522425}}}
    523426
     
    552455#!rst
    553456
    554 .. code-block:: c
    555 
    556   int a[100];
     457.. code-block:: python
     458
     459  a[]
    557460
    558461in nato naj program vpraša za dve števili, ter izpiše rezultat, ki ga vzame iz polja ``a[]``.
     
    565468{{{
    566469#!c
    567   int a[] = {1, 2, 9, 33, 22, 11, 3, 4, 3, 55,
     470  a = [1, 2, 9, 33, 22, 11, 3, 4, 3, 55,
    568471             66, 33, 22, 22, 33, 54, 5, 6, 7,
    569              8, 223, 34};
     472             8, 223, 34]
    570473}}}
    571474
     
    575478{{{
    576479#!rst
    577 .. code-block:: c
    578 
    579   float a[16] = {1, 2, 3, 4,
     480.. code-block:: python
     481
     482     a    =     [1, 2, 3, 4,
    580483                 0, 1, 2, 3,
    581484                 2, 3, 4, 5,
    582                  3, 2, 2, 1};
    583   float x[4], b[4];
     485                 3, 2, 2, 1]
    584486
    585487napiši program, ki prebere štiri vrednosti in izpiše zmnožek matrike
    586488in vektorja s stavkom
    587489
    588 .. code-block:: c
    589 
    590   printf("%.1f %.1f %.1f %.1f\n", b[0], b[1], b[2], b[3]);
     490.. code-block:: python
     491
     492  print "%.1f %.1f %.1f %.1f\n" % (b[0], b[1], b[2], b[3])
    591493
    592494}}}
     
    611513Datoteko preberite v spremenljivke
    612514{{{
    613 #!c
    614 #define MAXN 100
    615 float p0[MAXN*2], p1[MAXN*2], q[MAXN];
    616 int n, div;
     515#!python
     516
     517 p0[], p1[], q[]
     518 n, div
    617519}}}
    618520in vsako vrstico v zanki izpišite z naslednjim formatnim stavkom:
    619521
    620522{{{
    621 #!c
    622    printf("%4.1f %4.1f %4.1f %4.1f %4.1f\n", ...
     523#!python
     524   print "%4.1f %4.1f %4.1f %4.1f %4.1f "  % ( p0[2*i], p0[2*i+], p1[2*i], p1[2*i+1], q[i]  )
    623525}}}
    624526prve in druge točke elementa ter q.
     
    628530spremenjene diagonalne elemente matrike {{{A}}} s pomočjo for zanke izpiši na zaslon .
    629531{{{
    630 #!c
    631 float A[25] =   {3, 5, 90, 2 ,1,
    632                  1, 71, 59, 5, 5,
    633                  1, 2, 3, 54, 2,
    634                  12, 56, 32, 11, 1,
    635                  34, 56, 78, 45, 12
    636                  };
     532#!python
     533A =  [3, 5, 90, 2 ,1,
     534      1, 71, 59, 5, 5,
     535      1, 2, 3, 54, 2,
     536      12, 56, 32, 11, 1,
     537      34, 56, 78, 45, 12]
    637538}}}
    638539== vaja45 ==
    639 Polje {{{a[]}}} iz vaje 41 prepišite v matriko {{{float b[]}}}
     540Polje {{{a[]}}} iz vaje 41 prepišite v matriko {{{b[]}}}
    640541velikost 8x3. S tem sa so elementi, ki manjkajo postavljeni na 0.
    641542Vrstice izpišite na eno decimalko natančno.
    642543
    643544== vaja46 ==
    644 Za podano kvadratno matriko {{{A[25]}}} zmanjšaj diagonalne elemente za vrednost 1.1, prepiši
     545Za podano kvadratno matriko {{{A}}} zmanjšaj diagonalne elemente za vrednost 1.1, prepiši
    645546enodimenzionalno polje A v dvodimenzionalno polje B, ki ga računamo kot matriko 5x5
    646547izpišemo z dvojno zanko na zaslon.
    647548{{{
    648   float A[25] = {3.3, 5.2, 90.5, 2.3 ,1.1,
    649                    1.9, 71.0, 59.5, 5.3, 5.5,
    650                    1.0, 2.2, 3.5, 54.3, 2.2,
    651                    12.4, 56.1, 32.2, 11.4, 1.6,
    652                    34.8, 56.4, 78.9, 45.3, 12.3
    653                    };
     549  A = [3.3, 5.2, 90.5, 2.3 ,1.1,
     550       1.9, 71.0, 59.5, 5.3, 5.5,
     551       1.0, 2.2, 3.5, 54.3, 2.2,
     552       12.4, 56.1, 32.2, 11.4, 1.6,
     553       34.8, 56.4, 78.9, 45.3, 12.3
     554      ]
    654555}}}
    655556
     
    660561Primer izgleda izpisa ene vrstice:
    661562{{{
    662   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]);
     563#!python
     564  print "%d %d %d %d %d %d %d %d" % (P[0], P[1], P[2], P[3], P[4], P[5], P[6], P[7], P[8])
    663565}}}
    664566
     
    669571pred izpisom uporabili klic podprograma s stavkom
    670572{{{
    671 #!c
    672    mat_vec4(b, a, x);
    673    printf("%.1f %.1f %.1f %.1f\n", b[0], b[1], b[2], b[3]);
     573#!python
     574b = mat_vec4(a, x)
     575print "%.1f %.1f %.1f %.1f" % (b[0], b[1], b[2], b[3])
    674576}}}
    675577
     
    678580v naslednji zanki
    679581{{{
    680 #!c
    681   for(i = 0; i < 10; i++)
    682     print_stars(i);
     582#!python
     583for i in range(10):
     584    print_stars(i)
    683585}}}
    684586
     
    730632Podprogram naj ima naslednji prototip:
    731633{{{
    732 #!c
    733   float linear_interpolation(float x, float p0[2], float p1[2])
    734 }}}
     634#!python
     635def linear_interpolation(x, p0, p1):
     636}}}
     637s tem da sta točki p0 in p1 seznama 2D
    735638
    736639
     
    740643točki (x,,0,,,y,,0,,) in (x,,1,,,y,,1,,) in parameter ''t''. Prototip
    741644{{{
    742 #!c
    743   void linear_interpolation(float t, float p0[2], float p1[2])
     645#!python
     646linear_interpolation(t, p0, p1)
    744647}}}
    745648naj izpiše točko s formatom "%.1f %.1f". Prednost parametrične interpolacije
     
    776679
    777680
    778 = Dinamična alokacija spomina in delo z datotekami =
     681= Delo z datotekami =
    779682
    780683== vaja80 ==
     
    792695
    793696== vaja81 ==
    794 Podobno kot v vaji 80 preberite datoteko '''vaja81.dat''' s tem da števila niso več omejena
    795 z velikostjo polja ampak ga dinamično alocirajte z {{{malloc()}}} po tem, ko bo prebrana prva vrstica.
     697Podobno kot v vaji 80 preberite datoteko '''vaja81.dat''' s tem da seštevek sproti izpisujemo.
    796698
    797699== vaja82 ==
     
    835737formatu celih števil.
    836738
    837 = Aplikacije =
    838 == vaja100 ==
    839 Izračunaj faktor Učinkovite Rabe Energije, tako kot ga podaja [http://www.elektro-ljubljana.si/slo/Ceniki Elektro Ljubljana].
    840 Dobavitelj v ceniku za vsak '''razred porabe''' določi '''faktor cene energije''', ki je osnova za izračun
    841 faktorja URE po naslednji enačbi:
    842 
    843   URE = ∑(E,,i,, F,,CE i,,)/E,,povprečna dnevna poraba,,
    844 
    845 Tabela razredov porabe in pripadajočimi faktorji cene električne energije] ima 5 razredov s progresivno stopnjo F,,CE,,
    846 
    847 ||Razred porabe||Povprečna dnevna poraba energije (E,,i,,)||Faktor cene energije (F,,CE,,)||
    848 ||1.razred||do 6 kWh dnevne porabe||1.0||
    849 ||2.razred||nad 6 do vključno 12 kWh dnevne porabe||1.1||
    850 ||3.razred||nad 12 do vključno 18 kWh dnevne porabe||1.3||
    851 ||4.razred||nad 18 do vključno 24 kWh dnevne porabe||1.5||
    852 ||5.razred||nad 24 kWh dnevne porabe||2.0||
    853 
    854 Na primer URE za 8kWh dnevne porabe izračunamo kot URE=(6*1.0-(8-6)*1.1)/8
    855 
    856 Tabela[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
    857 celoštevilčni del povprečne dnevne porabe. Izdelaj program, ki za vnešeno realno povprečno porabo izpiše
    858 faktor URE v formatu, kot je v pred izračunani tabeli.
    859 
    860 Napotek: Za izračun celega dela realnega števila uporabite funkcijo '''floor'''.
    861 
    862 == vaja101 ==
    863 
    864 Ceno 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:
    865 
    866  - stalnega mesečnega prispevka za moč, ki zanaša 0,66179 €/kW/mesec
    867  - cene za prenešeno delovno energijo, ki znaša:
    868     * v primeru dvotarifnega načina merjenja porabe električne energije:
    869 {{{
    870 VT: 0,03731 €/kWh
    871 MT: 0,02924 €/kWh
    872 }}}
    873     * v primeru enotarifnega načina merjenja porabe električne energije:
    874 {{{
    875 ET:  0,03462 €/kWh
    876 }}}
    877 
    878 Izdelaj program, ki uporabnik vpraša po predvidenem mesečnem številu kWh VT in NT in izpiše ceno
    879 za prenešeno delovno energijo v primeru dvotarifnega in v primeru enotarfnega načina merjenja porabe
    880 električne energije. Uporabniku naj glede na vnešena podatka program svetuje, kateri način
    881 je zanj najbolj primeren.
    882 
    883 
    884 == vaja102 ==
    885 Če ste izdelali vajo 100 in 101, potem združite programa v vaji 102 tako, da izračunate kako bo z elektriko
    886 po novem sistemu z URE faktorjem.
    887 
    888 Obračun porabljene električne energije na podlagi izračunanega faktorja URE se izvede tako,
    889 da se pomnoži količina električne energije v posamezni tarifi, s ceno električne energije v
    890 tej tarifi in z izračunanim odjemalčefim faktorjem URE. Upoštevajte, da ima mesec 31 dni.
    891 Program pa naj tako kot v vaji 11 vpraša za število kWh v visoki in nizki tarifi, izpiše
    892 posamezne cene ter svetuje najprimernejši način tarifiranja.
    893