Version 12 (modified by 16 years ago) (diff) | ,
---|
Vaje programiranja v jeziku C ¶
Pravilnost vaših nalog lahko preverite z Ocenjevalcem nalog
Prvi dve vaji, ki smo jih naredili v laboratoriju, je potrebno preveriti in morebiti popraviti, da delujeta pravilno.
Vprašanja za utrjevanje ¶
- Zakaj je potrebno napisati vrstico
#include <stdio.h>
- Kako uporabljamo komentarje?
- Zakaj je zamikanje stavkov pomembno? Ali prevajalnik upošteva zamikanje?
- Koliko decimalk hrani tip
int, float
indouble
? - Kakšna je razlika pri prireditvi konstante spremenljivkama c in d
float c = 3/2; float d = 3.0/2;
- Kaj je funkcija podpičja v stavku? Naštej kje vse ga je potrebno uporabiti.
- Koliko je numerična vrednost naslednjega izraza
int i = 5 < 6;
- Pod katerimi pogoji naslednja koda izpiše voda? Kako bi jasneje napisali napisane pogojne stavke z uporabo zavitih oklepajev in primernejšega zamikanja?
if(temp < 0) printf("led\n"); else if (temp < 100) printf("voda\n"); else printf("para\n");
- Kaj izpiše naslednja koda?
int x = 3; if (x) printf("da\n"); else printf("ne\n");
- Kaj bo izpisala naslednja koda?
int i; for(i = 0; i < 3; i++) printf("a\n"); printf("b\n"); printf("c\n");
- Koliko elementov vsebuje polje oz. vektor a? Kateri je prvi element? Kateri je zadnji?
int a[5];
- Kaj je narobe v naslednjem izvlečku kode?
int a[5]; for(i = 1; i <= 5; i = i + 1) a[i] = 0;
- Kateri so štirje pomembni deli funkcije? Katere tri mora klicoči program poznati?
- Kakšna je razlika med prefix in postfix operatorjem ++. Kakšna je razlika med naslednjima izrazoma:
i = i++; i = ++i;
- Kaj je narobe z naslednjim predprocesorskim izrazom?
#define N 10;
- Če smo na primer definirali makro
#define SQR(x) x*x
Zakaj nam potem izraz
y = 1/SQR(x);
ne deluje pravilno? Kako bi morali pravilno napisati makro SQR(x), da bi delal tudi za izraze
y = 1/SQR(1-x);
- Kakšna je razlika v uporabnosti med i in J, ki sta napisana kot
int i = 10; #define J 10
Napotek: Poskusi napisati J = 2 ali int a[i].
- Zakaj je potrebno v
scanf()
argumente za formatnim stavkom pisati z &, priprintf()
pa tega ne smemo? - Koliko spomina klic
malloc(10)
alocira?
Kaj moramo napisati če želimo alocirati spomin za 10 spremenljivk tipa float?
- Kaj mislimo z enakostjo med polji in kazalci v C-ju?
- Če je
p
kazalec, kaj potem pomenip[i]
? - Kako odpiramo datoteko za branje podatkov iz nje? Kaj se spremeni, če bi datoteko želeli odpreti za pisanje?
Naloge ¶
Naloge je potrebno shraniti z uporabo SVN ukazov in preveriti njihovo delovanje.
vaja1 ¶
Napiši program, ki zahteva vnos dveh celih številk in nato izpiše njihovo vsoto.
vaja2 ¶
Gaussovo kvadratura naj vpraša za meji integriranja funkcije f(x) = 2x4- x3 +1 in rezultat izpiše na zaslon.
vaja3 ¶
Izdelaj program ki izpiše naslednje zanke:
for(i = 0; i < 10; i = i + 2) printf("%d\n", i); for(i = 100; i >= 0; i = i - 7) printf("%d\n", i); for(i = 1; i <= 10; i = i + 1) printf("%d\n", i); for(i = 2; i < 100; i = i * 2) printf("%d\n", i);
Razjasni si, kako te zanke delujejo in program popravi tako, da bodo v zanki uporabljeni operatorji +=, -=, *=
vaja4 ¶
Napiši program ki izpiše ta trikotnik:
* ** *** **** ***** ****** ******* ******** ********* **********
Ne uporabi desetih printf() ampak uporabi zanko.
for(i = 0; i < 10; i = i + 1) { /* Več stavkov */ /* gre lahko tukaj */ }
vaja5 ¶
Izpiši v zanki cela števila od 1 do 10 in njihove kvadrate.
1 1 2 4 3 9 ... 10 100
vaja6 ¶
Stavek for je prav zaprav, okrajšava za stavek while.
Predelaj program, ki izpiše naslednjo zanko:
for(i = 0; i < 10; i = i + 1) printf("i je %d\n", i);
z uporabo stavka while, ki ima naslednjo obliko
while(pogoj) { /* vpiši stavek za povečanje števca in izpis */ }
Napotek: V primeru da se nam program obesi v neskončni zanki, ga prekinemo s pritiskom na crtl-C
vaja7 ¶
Pretipkaj in poženi naslednji program:
#include <stdio.h> int main() { int i; printf("stavek 1\n"); printf("stavek 2\n"); for(i = 0; i < 10; i = i + 1) { printf("stavek 3\n"); printf("stavek 4\n"); } printf("stavek 5\n"); return 0; }
Program ne naredi nič posebnega. Z njim želimo le pojasniti vpliv zavitih oklepajev v zanki in dobiti željen potek programa.
vaja8 ¶
Pretipkaj in poženi naslednji program:
#include <stdio.h> int main() { int i, j; printf("začetek programa\n"); for(i = 0; i < 3; ++i) { printf("i je %d\n", i); for(j = 0; j < 5; j++) printf("i je %d, j je %d\n", i, j); printf("konec v zanki i = %d\n", i); } printf("konec programa\n"); return 0; }
Tudi ta program ne naredi kaj dosti koristnega. Želi pokazati, kako zanke delujejo in kako jih gnezdimo. V vaji 4 je potrebno uporabiti prikazani način dvojne zanke.
vaja9 ¶
Napiši program, ki z zanko in pogojnim stavkom ugotovi, koliko števil od 1 do 10 je večjih od 3 in seveda izpiše rezultat 7.
vaja10 ¶
Program naj prebere štiri cele številke in izpiše povprečno vrednost kot realno številko.
vaja11 ¶
Program naj poleg številk od 1 do 20 izpiše še ali je liha ali soda v obliki
1 je liha 2 je soda 3 je liha ...
Napotek: Uporabi operator %
vaja12 ¶
Izdelaj program, ki izpiše v katero smer se je 2D točka največ premaknila, glede na koordinatno izhodišče. Možni odgovori so:
- levo
- desno
- gor
- dol
Za prebrano točko 2 1 bo program odgovoril desno.
vaja13 ¶
Tako kot v vaji 12 naj dodatno še izpiše v kater smer se je premaknila. S tem da
se najprej izpiše večji pomik in nato manjši. Za prebrano točko 2 1 bo program odgovoril desno gor
.
vaja14 ¶
Napiši program, ki izpiše prvih 7 pozitivnih števil in njihovo faktorielo. (Faktoriela 1 je 1, faktoriela 2 je 1*2=2, faktoriela 3 je 1 * 2 * 3 = 6, faktoriela 4 je 1 * 2 * 3 * 4 = 24, itd.)
vaja15 ¶
Program naj izračuna prvih 30 Fibonaccijevih števil. Vsaka Fibonaccijeva številka je vsota prejšnjih dveh števil F(n) = F(n-1) + F(n-2), F(0) = 0, F(1) = 1. Izpis naj bo v obliki:
0 + 1 = 1 1 + 2 = 3 2 + 3 = 5 ...
vaja16 ¶
Napiši program ji za podano število izpiše je praštevilo
ali ni praštevilo
.
Práštevílo je naravno število n > 1, če ima natanko dva pozitivna delitelja (faktorja), število 1 in samega sebe kot edini prafaktor.
vaja17 ¶
Pohitri vaja16
z dejstvom, da razen 2 nobeno sodo število ni praštevilo. Glej vajo 11.
vaja18 ¶
Napiši program, ki tabelira poštevanko od 1 do 10, tako da izpiše vse skupaj v 10 vrsticah v obliki:
1*1=1 1*2=2 1*3=3 ... 10*1=1 10*2=20 ...
vaja19 ¶
Program iz vaje 18 priredi tako, da bo se zmnožek najprej predizračunal v polje
int a[100];
in na to naj program vpraša za dve števili, ter izpiše rezultat, ki ga vzame iz polja a[].
vaja20 ¶
Napiši program ki bo v polje števil nadomesitil z njihovnimi kvadrati. Program naj vpraša kateri indeks iz polja želimo in naj izpiše vrednost v polju. S stavkom if mora tudi kontrolirati meje indeksov.
int a[] = {1, 2, 9, 33, 22, 11, 3, 4, 3, 55, 66, 33, 22, 22, 33, 54, 5, 6, 7, 8, 223, 34};
vaja100 ¶
Izračunaj faktor Učinkovite Rabe Energije, tako kot ga podaja Elektro Ljubljana. Dobavitelj v ceniku za vsak razred porabe določi faktor cene energije, ki je osnova za izračun faktorja URE po naslednji enačbi:
URE = ∑(Ei FCE i)/Epovprečna dnevna poraba
Tabela razredov porabe in pripadajočimi faktorji cene električne energije] ima 5 razredov s progresivno stopnjo FCE
Razred porabe | Povprečna dnevna poraba energije (Ei) | Faktor cene energije (FCE) |
1.razred | do 6 kWh dnevne porabe | 1.0 |
2.razred | nad 6 do vključno 12 kWh dnevne porabe | 1.1 |
3.razred | nad 12 do vključno 18 kWh dnevne porabe | 1.3 |
4.razred | nad 18 do vključno 24 kWh dnevne porabe | 1.5 |
5.razred | nad 24 kWh dnevne porabe | 2.0 |
Na primer URE za 8kWh dnevne porabe izračunamo kot URE=(6*1.0-(8-6)*1.1)/8
TabelaURE Faktorjev učinkovite rabe energije za posamezno povprečno dnevno porabo, se računajo samo za celoštevilčni del povprečne dnevne porabe. Izdelaj program, ki za vnešeno realno povprečno porabo izpiše faktor URE v formatu, kot je v pred izračunani tabeli.
Napotek: Za izračun celega dela realnega števila uporabite funkcijo floor.
vaja101 ¶
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:
- stalnega mesečnega prispevka za moč, ki zanaša 0,66179 €/kW/mesec
- cene za prenešeno delovno energijo, ki znaša:
- v primeru dvotarifnega načina merjenja porabe električne energije:
VT: 0,03731 €/kWh MT: 0,02924 €/kWh
- v primeru enotarifnega načina merjenja porabe električne energije:
ET: 0,03462 €/kWh
- v primeru dvotarifnega načina merjenja porabe električne energije:
Izdelaj program, ki uporabnik vpraša po predvidenem mesečnem številu kWh VT in NT in izpiše ceno za prenešeno delovno energijo v primeru dvotarifnega in v primeru enotarfnega načina merjenja porabe električne energije. Uporabniku naj glede na vnešena podatka program svetuje, kateri način je zanj najbolj primeren.
vaja102 ¶
Če ste izdelali vajo 100 in 101, potem združite programa v vaji 102 tako, da izračunate kako bo z elektriko po novem sistemu z URE faktorjem.
Obračun porabljene električne energije na podlagi izračunanega faktorja URE se izvede tako, da se pomnoži količina električne energije v posamezni tarifi, s ceno električne energije v tej tarifi in z izračunanim odjemalčefim faktorjem URE. Upoštevajte, da ima mesec 31 dni. Program pa naj tako kot v vaji 11 vpraša za število kWh v visoki in nizki tarifi, izpiše posamezne cene ter svetuje najprimernejši način tarifiranja.