UVP _ fmf

O matematiki, številih, množicah in računih...
Odgovori
tati
Prispevkov: 30
Pridružen: 23.7.2013 11:51

UVP _ fmf

Odgovor Napisal/-a tati »

potrebujem pomoč pri nalogah iz programiranja na FMFju. kdorkoli, ki zna karkoli s python-om naj mi prosim pomaga in reši kakšno nalogo iz tu http://tomo.fmf.uni-lj.si/problem_set/119/ in tu http://tomo.fmf.uni-lj.si/problem_set/120/

hvala

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: UVP _ fmf

Odgovor Napisal/-a Aniviller »

No ta forum ni za to, da resujemo namesto tebe. Ce pri resevanju naletis na tezavo, pa lahko kdo pomaga.

tati
Prispevkov: 30
Pridružen: 23.7.2013 11:51

Re: UVP _ fmf

Odgovor Napisal/-a tati »

saj to je problem, da se sploh ne znam nobene naloge lotiti :( na žalost

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: UVP _ fmf

Odgovor Napisal/-a Aniviller »

Vsakega programerski problem se loti tako, da najprej poglej kako bi to ti rocno naredil. Recimo pri tistih ribah prva naloga: obrnit moras kljuce in vrednosti v slovarju (s tem da so vrednosti seznami). Recimo eden izmed bolj enostavnih nacinov bi bil, da najprej razpises slovar v seznam parov. Zacnes s tem
{'mušica': {'krap', 'som'}, 'gosenica': {'postrv', 'ščuka'}, 'komar': {'podust', 'som'}}
In potem naredis to:
{('mušica','krap'), ('mušica','som'),('gosenica','postrv'),('gosenica','ščuka'),('komar','podust'),('komar','som')}
To je zdaj simetricen zapis, ki nasteje vse povezave med ribami in vabami. Zdaj samo vrstni red obrnes in zlozis nazaj v slovar.
Ta postopek zdaj prepisi v python.

Pri drugi podnalogi recimo najprej ugotovis, da ne rabis imen ribicev, tako da samo naredis mnozico vab, in potem gledas, ce imajo kaksen skupen element. Tukaj ti izredno prav pridejo vgrajene funkcije za presek mnozic (presek seznamov, in pogledas ce je prazen). Lahko gres tudi z zankami, in pogledas za vsak element posebej ce je notri, in najdes ribe, ki nimajo nobenega skupnega elementa.
Za tiste mnozice poglej dokumentacijo v
http://docs.python.org/2/library/stdtyp ... #frozenset

Torej, splosen namig: sledi postopku, ki bi ga uporabil na papirju, potem je samo stvar prevajanja v kodo, in v teh nalogah je en korak postopka pogosto kar 1-5 vrstic kode.

Uporabniški avatar
pilot
Prispevkov: 234
Pridružen: 2.7.2009 20:27

Re: UVP _ fmf

Odgovor Napisal/-a pilot »

Razredi so malce kompleksni če jih veliko ne uporabljaš zato ti bom naredil malo predavanje o razredih.

==Glej kodo spodaj==
1.oseba=BitniCekin(123):
Z BitniCekin(123) aktiviraš v class-u __init__ funkcijo katera pripiše (123) vrednost lokalni spremenljivki (stanje), ta bo obstajala samo v __init__ funkciji. Z self. rečeš pythonu da bo to moja globalna spremenljivka (Stanje_racuna) v classu, katera se shrani v spremenljivki oseba. Shranjevanje povzročiš tako da rečeš oseba=BitniCekin(123). Vse globalne spremenljivke ki jih kličeš z self.spremenljivka se shranijo v oseba. Globalno spremenljivko vezano na osebo kličeš tako (oseba.Stanje_racuna)

2. oseba.dvig(100):
Ta ukaz povzroči skok v dvig. oseba.dvig povzroči da importaš vse globalne spremenljivke ki so shranjene v spremenljivki oseba, in ravno zaradi tega jih bomo lahko potem spreminjali. Z dvig(100) pa pripišeš vrednost lokalni spremenljivki koliko_dviga.

3. self.Stanje_racuna-=abs(koliko_dviga):
self.Stanje_racuna si lahko zdaj predstavljamo zaradi oseba.dvig kot oseba.Stanje_racuna, nato ji pripišemo novo vrednost katera se bo sharnila v spremenljivki oseba. Podobnost velja za polog funkcijo.

Koda: Izberi vse

# -*- coding: utf-8 -*-
class BitniCekin:
	def __init__(self,stanje):
		self.Stanje_racuna=stanje

	def dvig(self, koliko_dviga):
		if self.Stanje_racuna>=0:
			self.Stanje_racuna-=abs(koliko_dviga)
			return True
		else:
			return False
	def polog(self, koliko_pologa):
		self.Stanje_racuna+=abs(koliko_pologa)
		return self.Stanje_racuna

oseba=BitniCekin(123)
print oseba.Stanje_racuna
print '***************************'
print oseba.dvig(100)
print oseba.Stanje_racuna 
print '***************************'
print oseba.polog(50)
Napisal sem ti še malo kode za boljše razumevanje. :D

Koda: Izberi vse

# -*- coding: utf-8 -*-
class Opis_osebe:
	def __init__(self,*args):
		self.starost=args[0]
		self.glava=args[1]
		self.trup=args[2]
		self.noge=args[3]
		self.ocene=[]
		self.denar=0
	def Ocene(self,*args):
		for i in range(0,len(args)):
			self.ocene.append(args[i])
			self.Denarno_stanje(args[i])#Skočimo v funkcijo Denarno_stanje z vključenimi globalnimi spremenljivkami
	def Denarno_stanje(self, *args):
		for i in range(0,len(args)):
			self.denar+=args[i]*10

tati=Opis_osebe(19,'Zmešana','Verjetno suh','Kratke')
Aniviller=Opis_osebe(25,'Urejena','Verjetno suh','Hitre verjetno')

print tati.starost
print Aniviller.starost
print '*******************'

tati.Ocene(3,1,2,1,4)
Aniviller.Ocene(10,9,10,10,10)

print tati.ocene
print Aniviller.ocene
print '*******************'

print tati.denar, 'evrov'
print Aniviller.denar, 'evrov'
Kot je Aniviller napisal, kodo moraš v procesu pisanja govoriti.
Naprimer:
http://projecteuler.net/problem=2
Fibonacci sequence whose values do not exceed four million, find the sum of valued terms.

Ustvari tabelo x katera bo imela na prvem mestu 0, na drugem 1: x=[0,1]
Nato ponavljaj proces (for i in range(0,infiniti): )dodajaja števil(x.append) v tabeli vsoto zadnjih dveh števil (x+x[i+1]) pri pogoju da največja cifra v tabeli ne sme preseči 10^6(if x+x[i+1]<10**6:), če zadnja cifra preseže 10^6 ustavi rekurzijo (else: break) in seštej vse elemente v ustvarjeni tabeli (print sum(x))

x=[0,1]
for i in range(0,infiniti):
if x+x[i+1]<10**6:
x.append(x+x[i+1])
else:
break
print sum(x)

Če sem kaj nejasnega napisal, kar zajamri. :wink:

Uporabniški avatar
pilot
Prispevkov: 234
Pridružen: 2.7.2009 20:27

Re: UVP _ fmf

Odgovor Napisal/-a pilot »

Aha pa še tole. Če se slednjih nalog ne znaš lotiti, katere so dokaj specijalne ('slovar','razred'), imaš probleme pri samem razumevanju procesa učenja(ne znaš najti python dokumentacije,tutorijal videje itd...). Probaj najprej reševati najbolj osnovne naloge(http://projecteuler.net/problems), in šele potem rešuj specijalne naloge. Programski jezik ti da samo osnovna orodja s katerimi gradiš program. Brez pomena je da z orodji ki jih ne znaš uporabljati gradiš specijalne programe. Ravno zaradi tega ti predlagam (http://projecteuler.net/problems).

Nauči se branja python dokumentacije! http://docs.python.org/2/tutorial/

Uporabniški avatar
bargo
Prispevkov: 8300
Pridružen: 3.11.2004 22:41

Re: UVP _ fmf

Odgovor Napisal/-a bargo »

Motore napisal/-a:Bargo znova nekaj smeti v tej temi. Prosim moderatorja za izbris bargovega in mojega posta.
Hvala Motore. Veš, to je bil samo povzetek pilot-ovih dejanj in Aniviller-jevega truda ter seveda Ribica, ki še pride. :D

Odgovori