» »

C# pomoč pri razmišljanju

C# pomoč pri razmišljanju

urozz ::

Pozdrav!

Upam da bo prav tukaj, drugače prosim prestavite.
Iščem pomoč pri zastavljanju 2 nalog, ki ju imam za seminarsko nalogo.
Programiral bom sam vendar imam težave pri tem kako naj se sploh lotim naloge. Torej iščem nekoga ki bi mi pomagal pri izdelovanju načrta.

Poskusil sem že sam, nekaj časa mi vse skupaj gre potem se pa ustavi.

Za obe nalogi nudim 30€, so pa osnovne stvari.
Delo s tabelami, datotekami, metodami.
Lahko preko g-chata, lahko tudi v živo (sem z gorenjske).

Hvala in lp

_Dormage_ ::

Lahko tudi tukaj napišeš navodila..
Za idejo kako se lotit zadeve bomo pomagali :)

urozz ::

Ok, bom tako poskusil, plačam še vedno IDGAF samo nardit hočem(lahko paypal, ampak še nisem nakazoval tako da bo malo pomoči potrebne)


1. Lestvica
Na datotekah prva.txt in druga.txt so zapisane podatki o priljubljenosti skladb na lokalni radijski postaji Vreščalo. V vsaki vrstici so podatki: ime izvajalca in naslov skladbe ter število glasov. Podatek o številu glasov je s podpičjem ločen od ostalih podatkov. Podatki NISO urejeni, se pa vsaka skladba pojavi samo enkrat. Ob koncu drugega leta je želel DJ Ropotalo poiskati tisto skladbo, kateri je priljubljenost najbolj narastla ali padla v enem letu. (Priljubljenost je uvrstitev na lestvici glede na število prejetih glasov. Pazi: Nekatere skladbe se lahko pojavijo le na eni lestvici.)

IDEJA:
Uredim prvo tabelo po najbolj popularnih. Imel bi 2 tabeli. 1 za ime komada(string) v drugi glasove(int). Razdelim drugi txt file na isti način (samo da mogoče niti ni treba po popularnosti) potem pa iščem v 1 tabeli (tam kjer so komadi) če se kater komad ujema z drugo tabelo komadov. Če najdemo kak komad ki je isti preverimo še glasove (razlika med pred in po) in to vržemo v neko spremenljivko. Ampak v tej spremenljivki je samo MAX (ali MIN saj moram za oboje) glasov. Potem spet preverjamo če najdemo še kak komad in spet primerjamo glasove in primerjamo s to spremenljivko če je več glasov. Če je več prepišemo, drugače ignore. Imel bi tudi spremenljivko(string) kamor bi vpisal ime komada. Nato pa samo izpišem kater komad je dobil največ glasov. Tukaj metod mislim da ne rabim.


------------------------------------------------

2. Peter organizira veliko konferenco, na kateri bodo predavanja potekala v 7 dvoranah hkrati, v vsaki dvorani pa se bo zvrstilo po 12 predavanj. Časi predavanj so v vseh dvoranah enaki. Vsak izmed predavateljev je povedal, v kateri dvorani in ob katerih urah potrebuje projektor. Tajnica Mici je podatke zbrala in jih zapisala v tekstovno datoteko.
V vsaki vrstici je zapis oblike m:n, ki pomeni, da je v dvorani m ob n -ti uri potreben projektor . Napiši program, ki bo te podatke prebral in izpisal navodila Petru, koliko projektorjev potrebuje in kako naj jih razporedi.

IDEJA: O tej nalogi veliko še nisem razmišljal ker se mi je že pri prvi ustavilo.

Zgodovina sprememb…

  • spremenilo: urozz ()

_Dormage_ ::

Malo nejasna je prva naloga. O drugi datoteki nič ne piše razen tega, da obstaja.
Če prav razumem imaš 2 datoteki.
1. je seznam skladb lanskega leta. 2. je seznam skladb letošnjega leta ali obratno (ni pomembno za idejo)
Nekje piše, da se skladbe ne ponavljajo torej nimaš duplikatov.
Kar te zanima je, da poiščeš enake skladbe v obeh datotekah in izračunaš razliko v priljubljenosti.
Izpišeš pa največjo pozitivno razliko?

urozz ::

Ja, ni nujno da se ponavljajo. Jaz bom naredil tako da bom predvideval da se bo vsaj en komad ponavljal.
Izpišem pa največjo pozitivno in negativno razliko ter katera dva komada sta to.

_Dormage_ ::

Torej zadevo lahko rešiš z dvema zankama in dve spremenljivki za max, min razliko
Za vsak komad iz seznama 1 pregledaš celote seznam 2 in najdeš njemu enakega.
Ko najdeš dva enaka izračunaš razliko med njima. Če je razlika manjša od trenutne najmanjše jo prepišeš ker si najdu novo najmanjšo.
Enako velja, če je večja od trenutne največje in nadaljuješ naprej.
Ko končaš celoten seznam boš imel največjo in najmanjšo razliko.

Če moraš pljunit ven komad in njegove lastnosti potem je dobro, da nardiš objekt komad, ki je sestavljen iz česarkoli je sestavljen komad.
V min in max pa shraniš kar instanco komada, ki je najmanjši oz. največji.

alexa-lol ::

druga
kot razumem so ure vseh predavanj fiksne in ti samo iščeš koliko je največje število projektorjev hkrati v uporabi.
Naredi tabelo z n elementi (n je število ur, npr. če poteka od 7h do 19h je n 12), potem pa za vsako uro naredi boolean polje s 7 elementi (7 predavalnic) in če rabi projektor daj true, če ne false.

Potem greš pa z dvema for zankama čez in iščeš kje je največkrat True (ob kateri uri)... to je tvoje število projektorjev.

roba87 ::

1. nalogo bi jaz tako naredo, da bi parsal št. glasov, in si potem pogledal na katerem indexu je največ glasov. Tisti index ti da tudi ime in skladbo.

mallard ::

1. Vsako datoteko prebereš v svoj seznam.
2. Seznama sortiraš po izvajalcu/naslovu.
3. Poiščeš presek seznamov in elementom preseka določiš razliko priljubljenosti.
4. Sortiraš presek po razliki.

urozz ::

FULL FULL hvala za predloge zaenkrat.

Sedaj sem sicer obtičal na začetku in potrebujem spet pomoč. Zapravil skoraj 4 ure včeraj naredil pa spet nič.
Delam prvo nalogo.
Preberem datoteko in jo zapišem v eno tabelo prvaLestvica = File.ReadAllLines();
Sedaj pa iz tega ne znam dat na 2 tabeli. Cel kup varjant splita sem poskušal pa mi ni ratalo.
Poskusil sem tudi prebrat vsako vrstico posebaj s streamreaderjem ampak kot že rečeno ne znam potem to splitat. Ločilo za split je ';'.

Kakšna ideja?
Sem jih sicer nekaj našel na netu ampak so vse preveč napredne.

TheHijacker ::

Sam bi si bazo raje dal v kakšen SQL. Recimo SQLite je idealen za standalone aplikacije.

Drugače pa splitaš s:

string[] splitano = vrstica.Split(';');
http://www.google.si

urozz ::

Genav tako sem poskušal.

Ker sem v zanki, mi seveda povem napiše da ni "use of local " - nekaj podobnega nisem več doma pa ne vem točno za delo naprej. Mogoče je celo delovalo ampak nisem potem znal te tabele naprej uporabit...
Sem poskusil da sem jo deklariral pred zanko brez tega da sem povedal kako velika naj bo, potem sem povedal kako velika naj bo pa spet nič. Potem sem jo v zanki deklariral ampak to vem da ne morem potem zunaj uporabit...
Sem jo potem poskusil izpisat v zanki da vidim če deluje ampak nisem mogel.
Za drug način ko sem poskušal pa ne vem točno kako je že bilo, bom zvečer napisal.

vorantz ::

Pa tudi bi se ti splačalo uporabit "sort" na zbirki (vem, da list ma to za druge nism zihr) v kateri shraniš vsebino fajlov
ti bo lepo razvrstilo po abecedi in olajšalo iskanje

darkkk ::

Ma ne se matrat s SQL za nekih par vektorjev.

Tole je običajen .csv file (evropski format, podpičja). Take stvari je najbolj fajn brat po vrsticah, vrstico splittat na separator (podpičje v tem primeru), ter primeren stolpec dodajat v primeren list.

če maš npr:

10;M;NY;
20;F;LA;
50;F;LA;
itd.
potem

List<int> age = new List<int>();
List<string>sex = new List<string>();
List<string>loc = new List<string>()

using (System.IO.StreamReader = new System.IO.StreamReader("C:\\... ")){
  string line;
  string[] splitLine;
  string[] sep = {";"}
  while((line = reader.ReadLine())!= null){
    splitLine = line.Split(sep, StringSplitOptions.None);
    if(split.Length != 3) throw new Exception("slaba vrstica v vhodni datoteki");
    age.Add(split[0]);
    sex.Add(split[1]);
    loc.Add(split[2]);
  }

}




To je neki simpl .csv reader, vse skup malo popraviš in maš. (Je pa čisto možno, da že obstaja csv reader v c#), ampak pomoje hočejo od tebe, da si mal razbijaš glavo s tem.


Konceptualno:
Želiš skladbe z največjim porastom in padcem popularnosti - sortiraš po prvem podatku(ime izvajalca+skladbe) (tole je "unique"), pogledaš, da je v obeh seznamih ter pomečeš ven tiste, ki se pojavijo samo 1x. Nato samo odšteješ od novih glasov stare glasove, ter poiščeš največje in najmanjše število.

(Pa zdaj bi zgornjo kodo malce popravil, ampak ok)

Zgodovina sprememb…

  • spremenil: darkkk ()

_Dormage_ ::

Kaj pa kej takega?

class Komad{
  string name; //unique
  int stGlasov;
}

List<Komad> datoteka1 = new List<Komad>();
List<Komad> datoteka2 = new List<Komad>()
Komad max = new Komad();
max.stGlasov=0;
Komad min = new Komad(); 
min.stGlasov=999;

using (System.IO.StreamReader = new System.IO.StreamReader("C:\\... ")){
  string line;
  string[] splitLine;
  string[] sep = {";"}
  while((line = reader.ReadLine())!= null){
    splitLine = line.Split(sep, StringSplitOptions.None);
    Komad k = new Komad();
    k.name = split[0];//ime
    k.stGlasov = int.parse(split[1]);//stevilo glasov
  }
  //enako prebereš datoteko 2

  int razlika;
  foreach(Komad k1 in datoteka1){
    foreach(Komad k2 in datoteka2){
      //najdi enaka komada
      if(k1.name == k2.name){
        razlika = k1.stGlasov - k2.stGlasov;
        if(razlika>max.stGlasov){đ
          max = k2;
        }
        if(razlika<min.stGlasov){
          min = k2;
        }
      }
    }
  }
  //print max in min
}


Na koncu bi mogu v max in min imet instanci Komada iz datoteke2, ki imata najmanjšo oz največjo razliko v primerjavi z komadi iz datoteke1.
Pa ta koda se 100% ne prevede :D

Zgodovina sprememb…

darkkk ::

Ja, pozabil sem, da je treba par stvari sparsat itd, ampak "proof of concept" je pa to to. (Pa pazit moraš, ker nekatere stvari ne obstajajo v obeh datotekah)

Zgodovina sprememb…

  • spremenil: darkkk ()

_Dormage_ ::

Aha,
Če ičemo največjo razliko v glasovih nekega komada potem mora biti za vsak komad v datoteki1 tudi komad v datoteki2 s katerim ga bomo primerjali.
Če tega nim ni problem ker potem ne moremo izračunati razlike v glasovih.
Tista dva loopa nardita ravno to, če ne iz komad iz datoteke1 nima soimenjaka v datoteki2 ga igrnoriramo.

A sem jst sploh razumel nalogo? :))

darkkk ::

Ja neki takega je :P Sicer nisem čisto dobro gledal tvoje kode :)

roba87 ::

Jaz tudi mislim, da je tako, kot si napisal. Ker tiste skladbe, ki bi bile samo na druga.txt recimo bi potemtakem imele vedno minus predznak (več glasov bi dobile, večji minus bi imele, kar je nelogično).

vorantz ::

smo zihr da iščemo samo spremembe?
kaj pa recimo novi komadi

_Dormage_ ::

Sklepam iz tega
Ob koncu drugega leta je želel DJ Ropotalo poiskati tisto skladbo, kateri je priljubljenost najbolj narastla ali padla v enem letu

Če hočemo najti skladbo, ki ji je priljubljenost najbolj narastla potem moramo imeti stanje prej in stanje zdej.
Torej skladba mora biti v obeh datotekah..?

Spura ::

_Dormage_ je izjavil:

Torej zadevo lahko rešiš z dvema zankama in dve spremenljivki za max, min razliko
Za vsak komad iz seznama 1 pregledaš celote seznam 2 in najdeš njemu enakega.
Ko najdeš dva enaka izračunaš razliko med njima. Če je razlika manjša od trenutne najmanjše jo prepišeš ker si najdu novo najmanjšo.
Enako velja, če je večja od trenutne največje in nadaljuješ naprej.
Ko končaš celoten seznam boš imel največjo in najmanjšo razliko.

Če moraš pljunit ven komad in njegove lastnosti potem je dobro, da nardiš objekt komad, ki je sestavljen iz česarkoli je sestavljen komad.
V min in max pa shraniš kar instanco komada, ki je najmanjši oz. največji.

Kaj pa ce komad nastopa v samo eni datoteki. Mislim da se potem praviloma steje, kot da je iz enega mesta za zadnjim skocil na dano mesto oziroma obratno, da je padel iz nekega mesta na mesto za zadnjim. Ne steje razlika v glasovih ampak razlika v mestih, ce sem prav razumel. Je pa brezveze pisat O(n^2) algoritem ce lahko dobis takoj hitrejsega z bijekcijo ali pa se lazje s hashmapi.

_Dormage_ ::

Nikoli nebi rekel, da je manjkajoč podatek enkvredno komadu z 0 glasovi.
To, da komada ni pomeni, da ima 0 glasov? Zakaj?

Ni brez veze pisat O(n^2) algoritem. Zelo koristno je za razumevanje.
A ti si svoje učenje začel pri Hashmapu in bisekciji? A vi niste risali zvezdic z for loopi? :))

urozz ::

Ma res ste zakon ampak zraven tudi preveč napredni.
Classov ter listov nismo jemali tako da sem še vedno obtičal pri razvrščanju komadov v tabele.
Sem sicer poskusil z vašimi kodami vendar bom imel težave pri zagovoru.
Bom še 2 ideji poskusil drugače pa nadaljujem jutri ko vsaj ne delam cel dan in bom imel čas.

_Dormage_ ::

So much for hasmap :D
Lahko narediš isti princip z tabelamii.
Če boš mel težave postaj kodo bomo najdli problem in rešli :)

urozz ::

O sreča se mi je nasmehnla in sem prišel nekam kjer bom znal naprej.

prvaLestvica = beri.ReadToEnd().Split(locila);


Sicer dobim tabelo velikosti 20 (namesto 10 kot bo kasneje) vendar s tako tabelo mislim da znam delat. Se pa nebi čudil če sem kako sintakso pozabil, bom sedaj raje malo več kodo limal sem če mi kaj nebo jasno.

Še pol urce pa spat, upam da mi še kaj rata.

urozz ::

Dolzina tabele je 10 ne 20. Sem rabil pol ure da sem sedaj to ugotovil.
Čeprav ko zalaufam vse skupaj pa mi vrže ime komada v svojo vrsto, glasove v svojo vrsto in zgleda kot da je dolzina 20.
Kakšna ideja?

_Dormage_ ::

Prilepi kodo kjer izpisuješ.
Verjetno imaš novo vrstico pri izpisovanju ?

urozz ::

Sem pastal kodo pa sem pobrisal ker sem ugotovil da sem pri locilih pozabil dodat '\n'.

Pridem s težavami kasneje :)

Zgodovina sprememb…

  • spremenilo: urozz ()

urozz ::

Evo ena naloga bo kmalu rešena, še detajli.
Trenutno skačem od veselja tako da vprašanje če bom danes čisto končal.

god damn, res hvala, ste bli zaenkrat več kot v pomoč.

Bo pa jutri na vrsti še naslednja naloga,tam bo pa najbrž spet potrebna kaka pomoč.

vorantz ::

na hitro ideja za 2.

če prow štekam je to mišljeno kot konferenca se odvija en dan, 12 ur v kosu (8-20 recimo) po 7 predavalnicah?

pol bi lahko nrdil 2d array velikosti 7x12 (7 vrstic za predavalnice in 12 stolpcev za ure)
in na [m][n] mestu bi nastavil na 1 (oz povečal za 1, če iz nekega razloga rabijo več projektorjev :P)

pol bi samo seštel po stolpcih (se pravi po urah) in v stolpcu z največjo cifro bi dobil kolko projektorjev bo rabu

za izpis pa recimo izpišeš za vsako uro, v kere predavalnice je treba postavit zadeve

glede na to, da rabi enostavno rešitev s tabelami bi to blo v redu po moje
kake bolše ideje? :P

Spura ::

_Dormage_ je izjavil:

Nikoli nebi rekel, da je manjkajoč podatek enkvredno komadu z 0 glasovi.
To, da komada ni pomeni, da ima 0 glasov? Zakaj?

Kdo je glasove omenjal? Gre se za mesta. Glasovi so irelevantni razen za ugotavljanje mesta na lestvici. In ce je manjkajoc podatek se mi zdi cisto pametno da vzames zadnje mesto + 1.
Vsekakor boljs kot to, da ga v statistiko ne vkljucis.

urozz ::

Prva je že narejena tako da se ni treba več poglabljat v to.
Je pa tako da komadi NISO urejeni po mestih ampak naključno pometani
Red Hot Chili Peppers - 'The Adventures of Rain Dance Maggie':94
Led Zeppelin - 'Ramble on':130
SubLime - 'What I got':50


Mesto katero je komad zasedel nima veze, samo glasovi majo. In išče se razlike tisti komad ki je največ pridobil oziroma izgubil napram prejšnjem letu.

Če komada NI potem je padel iz lestvice. Vsaj tako sem jaz naredil.

Sedaj pa naslednja...
Najljubši mi je predlog Alexe-lol (igraš lol btw? :P)
No malo več razlage bi prosil ker sedaj si razbijam glavo kako to narest.
Najraje bi vzel kar metodo, sprejme ta metoda M in N (torej dvorane in ure, ločil bi to spet na dve tabeli, v eni dvorane v eni ure)
Sedaj pa gruntam kaj bo ta metoda nardila glede ur ter kaj bo returnala. V metodi bo noter bool[] dvorane = new bool[7]; pa najbolje da kar to returnam?
Najbolje da jo pokličem s tem katero uro želim preverit? 12 klicov metode...
Metodo bi klical na varjanto bool[] ura7 = imeMetode(tabelaDvoran, tabelaUr, KateroUroIščem); ?? Nekako tako?
Mislim da sem malo zmeden kaj klicat, kaj vračat

2d arrayev mislim da nismo delali, vaje sem opravljal slabe 3 mesece nazaj in tega nimam v spominu. (razen pač string[] ki je neke vrste 2d tabela).

Zgodovina sprememb…

  • spremenilo: urozz ()

vorantz ::

Niste delali 2d arrayev? o_O
kašn predmet je to lol? :D

zihr niste delali neki kar zgleda tko "neki[i][j]"?

urozz ::

Nope. Smo delali to nekje 4 leta nazaj ko sem prvič šel na ta predmet pa smo jih jemali, zraven pa tudi razrede. Seveda so mi tiste vaje propadle ker mi ni zneslo vsega zraven šihta pa sem to pustil za na koncu.
Letos na vajah ni bilo ne razredov, ne 2d tabel, smo pa grafično malo delali.
Sem pa takrat naredil vaje ampak če ne obnavljaš znanja gre hitro stran.
Sem pa višješolski program informatika izredno (6 stopnja).
Nič kaj preveč napredno programiranje.

urozz ::

No vsem hvala za pomoč
Nalogi sta narejeni, samo pri teh projektorjih moram še po vrsticah seštet, to pa bo že.

Sem pa moral uporabit 2d bool array tko da sem šel malo raziskovat.
Ni težka, samo jaz sem si predstavljal da je težko...

Še enkrat, hvala za pomoč super ste!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

c# tiho tiskanje slik.

Oddelek: Programiranje
101828 (1499) OmegaM
»

C# Program

Oddelek: Programiranje
392979 (1902) Spura
»

VC# čitanje iz datoteke in shranjevanje v polje

Oddelek: Programiranje
91103 (916) iceurb
»

[VB 2005] branje teksta

Oddelek: Programiranje
241569 (1237) mNeRo
»

[VB] Open

Oddelek: Programiranje
71441 (1280) Monster

Več podobnih tem