Vaje - Osnove C#
Kaj naredim narobe?
Popravi!
public void Main(string[] arg){
a = Console.ReadLine();
b = Console.ReadLine();
c = Console.ReadLine();
Console.WriteLine("Za števila a, b in c seveda velja a+(b+c)=(a+b)+c, saj je "+a+(b+c)=(a+b)+c+".");
}
Obrati
Preberi dve pozitivni tromestni celi števili in izpiši razliko obrnjenih števil (z računom vred). Če preberemo 231 in 702, izpišemo
132 - 207 = -75
Naključno generiraj tromestno celo število in ga izpiši.Naključna števila
Piton na obisku
Petra je našla listek z zapisano kodo v Pythonu:
def nekaj(n, k):
return sum([i**k for i in range(1,n+1)])
Napiši program v C#, ki naredi isto. Uporabnik naj podatka n in k vnese.
Čaramo s celimi števili
Najprej si oglej naslednjii del kode. Ugotovi, kaj počne! Očitno jo je pisal nek programer začetnik, kar lahko zlahka ugotovimo po odsotnosti komentarjev in izbiri imen spremenljivk
a = int(input('Vnos: '))
b = int(input('Vnos: '))
d = a % b
k = 0
r = '.'
while k <= 10:
d = d * 10
nd = d // b
r = r + str(nd)
k = k + 1
d = d % b
print(r)
Namig: izvedi jo s podatki 7, 3; 2, 4; 15, 7; 1, 3; 2, 3; 3, 3 in poskusi postaviti hipotezo, kaj se dogaja ...
Oborožen z vedenjem o zgornji kodi napiši program v C#, ki bo izračunal celi del in prvih n decimalk kvocienta a/b. Delaj samo s pozitivnimi celimi števili in na koncu NE zaokrožuj
stevec: 10imenovalec: 3
imenovalec:761
decimalk: 40 10/761 = 0.0131406044678055190538764783180026281208
stevec: 100decimalk: 14100/3 = 33.33333333333333
Namig: kako delimo "peš"
Pi in Monte Carlo
Sestavi program, ki izračuna približek za konstanto pi s pomočjo metode Monte Carlo. Program naj prebere n in potem generira n naključnih točk v kvadratu [0,1]×[0,1] (metoda NextDouble() nam da neko decimalno število med 0 in 1), ter prešteje, koliko jih leži v krogu s središčem v (0,0) in polmerom 1. Če je n dovolj velik, mora biti razmerje med številom točk v krogu in številom vseh točk približno pi/4.
Goljufivi pek
Ljubljanski pekovski ceh je imel predpisano težo hlebcev kruha. Predpis so strogo nadzorovali: vsako leto se je cehovski mojster nenapovedano pojavil v pekarni in stehtal vse hlebce, ki so jih imeli na policah. Če je vsaj 15% hlebcev za več kot 20% odstopalo od predpisane teže, so peka namočili v Ljubljanico.
Sestavi program, ki bo prebral predpisano težo, število hlebcev in težo vsakega hlebca v pekarni ter ugotovil, ali se bo pek namakal ali ne.
Predpisana teza: 0,8
Stevilo hlebcev: 6
Teza 1. hlebca: 0,94
Teza 2. hlebca: 0,75
Teza 3. hlebca: 1,05
Teza 4. hlebca: 0,81
Teza 5. hlebca: 0,77
Teza 6. hlebca: 0,9
Pek se bo namakal.
Sicer ti je kolega dal naslednjo kodo, a kaže, da je z njo nekaj narobe. Popravi jo!
Console.WriteLine("Vnesi predpisano težo hlebca: ");
double tezaPredpis = int.Parse(Console.ReadLine());
Console.WriteLine("Vnesi število hlebcev v pekarni: ");
int steviloHlebcev = double.Parse(Console.ReadLine());
int stevecNapacnih = 0;
double minTeza = tezaPredpis * 0.8;
double maxTeza = tezaPredpis * 1.2;
for (int i = 1; i < steviloHlebcev; i++)
{
Console.WriteLine("Vnesi težo: " + i + ". hlebca");
double dejanskaTeza = double.Parse(Console.ReadLine());
//Če je teža hlebca 20% manjša od predpisa, ga štej med napačne hlebce
if ((dejanskaTeza < minTeza) && (dejanskaTeza > maxTeza))
stevecNapacnih++;
}
//računamo ali bo pek pil vodo
if (stevecNapacnih > steviloHlebcev * 0.15)
Console.WriteLine("Peka v vodo takoj!!!!");
else
Console.WriteLine("Pek ima dobro mero");
Console.ReadKey();
Karo
Minca želi iz trimestnega števila abc oblikovati izpis v petih vrstah.
a
a b
a b c
a b
a
Števke naj bodo ustrezno razmaknjene in podpisane. Na začetku naj program izpiše:
Vnešeno je število 123.
a) Program naj trimestno število prebere.
b) Program spremeni tako, da lahko uporabnik vnese poljubno naravno število.
c) Program spremeni tako, da generiraš naključno število, kjer uporabnik vnese želeno število mest tega števila.
Požri ničle
Putke so znane po tem, da nikakor ne prenesejo ničel. Zato vedno, ko dobijo kakšno število, iz njega izkljuvajo vse ničle.
Število 200703 bi putke nemudoma spremenile v 273. Napiši program, ki bo prebral začetno število n in izpisal število, ki ga putke dobijo po tem, ko požrejo vse ničle.
Primer:
Vnesi število: 5047006
Po besnem kljuvanju putk od 5047006 ostane 5476.
Bum!
Bruci matematike so utrjevali poštevanko in se igrali igrico "Bum!". Igra poteka tako, da v krogu štejejo od n dalje tako, da vsak pove naslednje večje število. Izjema so mnogokratniki števila 3 in pa tista števila, ki vsebujejo števko 3. Tedaj študent, ki je na vrsti, namesto števila zavpije: "Bum!". Napravi program, ki bo brucom pomagal pravilno šteti pri tej igrici.
Primer:
Od kod naj štejem? 2
Do kod naj štejem? 13
2 Bum! 4 5 Bum! 7 8 Bum! 10 11 Bum! Bum!
Obrni število
Sestavi program, ki prebere število in vrne obrat števila. Razen pri branju podatkov ves čas delaj s celimi števili! Obrat števila naj bo enakega predznaka kot prvotno število.
Vnesi stevilo: 123456789
123456789 obrnjeno je 987654321
Vnesi stevilo: -123456789
-123456789 obrnjeno je -987654321
V Butalah menjajo valuto
V Butalah je prava panika. 1. januarja bodo butalske cekine zamenjali za novo valuto, še vedno pa ni znano, kakšen bo menjalni tečaj. No, panika je odveč, saj so iz Banke Butale sporočili, da so vladni modreci odločili, da bo menjalni tečaj odvisen od obnašanja Šprince Marogaste, glavne butalske uši, opoldne na Slivestrovo. Tako bodo imeli celo popoldne in celo noč, da bodo lahko pripravili nove cenike.
No, na srečo pa so v Butalah v veljavi samo cene 50, 100, 150, 200, 250, ..., 1000 cekinov. Zato bo glavni butalski informatik pripravil program, ki bo takoj, ko bo znan menjalni tečaj, za vse te cene izpisal njihovo vrednost v novi valuti.
Ampak razbojnik Cefizelj je ravno tiste dni ukradel edino miško v Butalah. Zato pomagaj Butalcem in ti sestavi ustrezni program. Stare cene so že znane (50,100,...), le menjalni tečaj bo potrebno prebrati. Pri tem upoštevaj, da bo menjalni tečaj dan na decimalke, a nova valuta pozna le cele vrednosti. A pozor, Butalci imajo malo drugačno zaokrožanje: če so desetinke sode, se zaokroži navzdol, če pa lihe, pa navzgor.
Da bo lažje, je tukaj že začetni del kode:
int cenaMin = 50;
double cenaNova = 0;
int cenaStara, prvaNova;
Console.Write("Vnesi menjalni tečaj... ");
double tecaj = double.Parse(Console.ReadLine());
cenaStara = cenaMin;
while (cenaStara <= 1000)
{
cenaNova = cenaStara / tecaj;
prvaNova = (int)cenaNova;
// popraviti se zaokrozevanje
...
}
Perfektna števila
Sestavi program, ki bo izpisal vsa perfektna števila na danem intervalu (meji intervala vnese uporabnik). Naravno število je perfektno, če je enako vsoti vseh svojih deliteljev (razen števila samega), npr. 28 = 1 + 2 + 4 + 7 + 14
Vnesi spodnjo mejo: 1
Vnesi zgornjo mejo: 10000
Perfektna stevila: 6 28 496 8128
Bakteriolog Boris
Bakteriolog Boris preučuje bakterije. Naredil je sledeči poizkus: bakterije je zaprl v škatlico pravokotne oblike s pregrado na sredini, ki razdeli škatlico na dva kvadratna dela - poimenujmo ju regija A in regija B. Zunanje stene te škatlice so polprepustne, kar pomeni, da bacili lahko uidejo ven, vendar se ne morejo vrniti v škatlico, pregrada pa je prepustna, tj. bacili lahko prehajajo v obe smeri. Bine predvideva, da v neki časovni enoti 12 % vseh bacilov ostane v svoji regiji, po 22 % pa jih zapusti svojo regijo v vsaki od štirih smeri. Binetu sestavi program, ki mu bo glede na podani začetni masi bacilov (bacili so premajhni, da bi jih šteli posamično, zato jih "štejemo" kar v gramih) v vsaki od regij izpisala potek dogajanja, dokler skupna masa bacilov v obeh regijah ne pade pod 0.001 grama. Tako bo lahko Bine (Borisov asistent) primerjal teoretični izračun z izmerjenimi podatki in preveril svojo hipotezo.
Če je na začetku v prvi regiji 22.4g bacilov, v drugi pa 13.5g, program izpiše:
0, 22,4, 13,5
1, 5,658, 6,548
2, 2,11952, 2,03052
3, 0,7010568, 0,7099568
4, 0,240317312, 0,239427312
5, 0,08151208608, 0,08160108608
6, 0,0277336892672, 0,0277247892672
7, 0,009427496350848, 0,009428386350848
8, 0,00320554455928832, 0,00320545555928832
9, 0,00108986557015803, 0,00108987447015803
Boris je v gradivu, ki mu ga je zapustil predhodnik, našel sledečo kodo:
# Določimo število tednov, ko se ustrezno zmanjša začetna porazdelitev bakterij
masaA = float(input('Masa v regiji A: '))
masaB = float(input('Masa v regiji B: '))
korak = 0
while masaA + masaB <= 0.001:
masaA = masaA * 0.12 # toliko jih ostane
masaA = masaA + masaB * 0.22
masaB = masaB * 0.12
masaB = masaB + masaA * 0.22
korak += 1
print(korak, masaA, masaB)
# NEKAJ JE NAROBE. NIČ SE NE IZPIŠE
# PA TUDI, KO SE IGRAM Z MASAMI "peš", SE IZRAČUNAJO NAROBE
Pomagaj Borisu in na osnovi te kode sestavi ustrezen program c C#
Robot in limone
Robota bi radi robota naučili, da bo na glas štel limone (seveda slovnično pravilno). Povedali mu bomo, od kod do kam naj šteje, na primer od 98 do 103: 98 limon, 99 limon, 100 limon, 101 limona, 102 limoni, 103 limone.
Če sta začetno in končno število limon narazen za več kot 20, je štetje predolgo. Zato naj robot takrat šteje s korakom 10, le zadnjih 10 - 20 limon naj prešteje s korakom 1. Na primer od 46 do 108: 46 limon, 56 limon, 66 limon, 76 limon, 86 limon, 96 limon, 97 limon, 98 limon, 99 limon, 100 limon, 101 limona, 102 limoni, 103 limone, 104 limone, 105 limon, 106 limon, 107 limon, 108 limon.
Deljiva števila
Izpiši tista števila med a in b (podatka, ki ju prebereš), ki so deljiva z vsoto svojih števk. Npr. 12 je že deljivo z vsoto števk (3). Prav tako 1101. Če sta torej podatka 8 in 14, naj program izpiše:
Med 8 in 14 so z vsoto svojih števk deljiva naslednja števila: 8, 9, 10, 12.
Palindromska števila
Izpiši vsa palindromska števila med a in b (prebrana podatka). Število je palindromsko, če je enako svojemu obratu. Npr. 123 in 59 nista palindromski števili, 838 in 1551 pa sta palindromski. Program naj rezultat izpiše v eni od naslednjih oblik (pazi na ločila):
- Med 90 in 130 imamo naslednja palindromska števila: 99, 101, 111, 121.
- Med 12 in 21 ni palindromskih števil.