Programiranje

C# - Problemi i rješenja

Badjo_5 sri 11.3.2020 22:26

Opet ja i linq

Imam dvije liste, lista_a se sastoji se nekakvog id-a i imena

1, Petar
2, Marko
4, Stjepan
5, Ivan
6, Hrvoje

lista_b je slična, isto postoji id i ime, naziv ili kako god

1, Coca-Cola

1, Voda
2, Heineken
6, Corona
7, Staročeško


Rezultat bi trebao ovako izgledati

1, Petar        1, Coca-Cola

1, Petar        1, Voda
2, Marko       2, Heineken
4, Stjepan      
5, Ivan      
6, Hrvoje      6, Corona
                  7, Staročeško

 

Edit:

Liste su sortirane po id-jevima, dalo bi se ručno riješiti:

uzmi prvi id, provjeri da li ima takav u drugoj listi, ako ima upiši id, podatak iz a, opet id, podatak iz b

provjeri da li slijedeći red iz liste b ima isti id ili je drugačiji.........

Pero Dinamit pet 13.3.2020 13:00

Ovako nešto možda

 

public class GrupiranjeClass {     class Osoba    {         public string Ime { getset; }     }     class Pivo    {         public string NazivPiva { getset; }         public Osoba Osoba { getset; }     }     public void Grupiraj()     {         Osoba ivo = new Osoba { Ime = "Ivo" };         Osoba pero = new Osoba { Ime = "pero" };         Osoba marko = new Osoba { Ime = "marko" };         Pivo zuja = new Pivo { NazivPiva = "žuja", Osoba = ivo };         Pivo karlovacko = new Pivo { NazivPiva = "karlovacko", Osoba = ivo };         Pivo karlovacko1 = new Pivo { NazivPiva = "karlovacko", Osoba = pero };         Pivo lasko = new Pivo { NazivPiva = "laško", Osoba = marko };         List<Osobaosoba = new List<Osoba> { ivoperomarko };         List<Pivopivo = new List<Pivo> { zujakarlovackokarlovacko1lasko };         var query = from o in osoba                    join p in pivo on o equals p.Osoba into gj                     select new { Ime = o.Ime, Pivo = gj };         foreach (var q in query)         {             Console.WriteLine($"{q.Ime}:");             foreach (Pivo p in q.Pivo)             {                 Console.WriteLine($" {p.NazivPiva}");             }         }     } }

 

Guglaj malo više grouped joins.

Sry što ne radi ovo formatiranje kôda, kopiraj ga negdje u editor pa će biti bolje. Zašto je to tako, ne bi znao.

etnes sub 25.4.2020 11:07

Imam problema sa Task-ovima. Napisao sam mali programcic u kojem neznam tocno sto se dogodilo. 

 

public class Program

{

    public static void Main(string[] args)

    {

        Console.WriteLine("Start");

 

        Action printAction = async () => await PrintLine().ConfigureAwait(false);

        printAction.Invoke();

 

        Console.WriteLine("End");

    }

 

    public static async Task PrintLine()

    {

        Console.WriteLine("BeforeDelay");

        await Task.Delay(2000);

        Console.WriteLine("AfterDelay");

        return;

    }

}

Ovo ce rezultirati ispisom:

Start

BeforeDelay

End

Nije mi jasno zasto poziv printAction.Invoke() ne priceka izvodjenje PrintLine metode s obzirom da sam akciju definirao kao "... => await PrintLine()... " i na koji nacin ovo fixat?
etnes sub 25.4.2020 16:07

Ok, mislim da sam skuzio.

Action je metoda koja (prima argument ili void) i nema povratni tip (ja sam to zamislio kao cisti void) sto bi znacilo da se prilikom poiziva printAction.Invoke() krene izvrsavat PrinLine kao void metoda koja nece vratiti Task koji ce se sacekati sa await-om.

Nek me neko ispravit ako sam krivo protumacio

Badjo_5 čet 19.11.2020 21:10

Trebao bih složiti proceduru za prebrojavanje članova:

 

1
1 2
3 1 2
4 1
5 1 3

 

 

broj 1 se nalazi u 1, 2, 3, 4 i 5-om redu

broj 2 se nalazi u 2 i 3-ćem redu

broj 3 se nalazi u 3 i 5-om redu

broj 4 se nalazi u 4-om redu

broj 5 se nalazi u 5-om redu

 

Nisam na čisto odakle uopće krenuti, imam masu ifova, vrtim listu (array, svejedno) uduplo i sve se kotura koliko-toliko, ali uskoro će uletiti dvoznamenkasti članovi, pa će ulazni podatak izgledati ovako:

 

11
12 25
37 13 25
44 11
57 13 38

 

a to se neće nikako vrtiti...

 

Što trebam guglat?

 

Ili i ovdje uskače LINQ/RegEx?

LeBronWade pet 20.11.2020 00:00

Ovako na prvu čitajući, da se smanji broj prolaza, koristio bi se Dictionary<int, List<int>> u kojem bi Key bio element koji se pojavljuje, a Value lista brojeva redova u kojem se pojavljuje (jedan prolaz kroz sve redove)

Zatim bi se u iteraciji redovima prolazilo elementima u tom redu (foreach pa foreach) te za svaki element pitalo:

  • - postoji li kao Key u Dictionaryu - ako da, dohvati njegovu listu i dodaj broj retka u nju, ako ne, dodaj zapis u rječnik za Key = element, Value = new List

Kada se prođu svi redovi, dohvati se lista ključeva u rječniku, može se i sortirati, i zatim za svaki ključ dohvati se i lista redova i prikladno ispiše.

Badjo_5 pet 20.11.2020 16:54

Hvalim, za sad sam napravio prvu stvar prolaz po svim poljima (podaci nemaju razmaka, napisao sam ovako da se vidi kako su podaci složeni), znači prođem po svim poljima, sve pretvorim u dvoslovne/dvobrojne (trebao bih možda i slova, ne znam još), stavim u dictionary da dobijem popis svih iskorištenih brojeva(slova). Nakon toga foreach za svaki zapis u dictionary i prelazim po listi koju sam kreirao nn-nn-nn-nn i sa contains provjerimda li ima podatak npr. '11-' iz dictionary, pa slijedeći...

Na testnim podacima cca 200 redova i 20-ak brojeva za sekundu-dvije dobijem ispis parova prema dictionary.

Hm, ono u value lista redova i nije uopće loše, moram malo zgruntat kako iskoristit.

Arsenalboy pon 23.11.2020 15:12

Pozdrav ekipa

 

Trenutno radim na aplikaciji koju bi trebalo koristiti par klijenata, ta app se veže na već postojeće baze koje ja nisam pravio, te svako klijentsko računalo ima instaliran sql management.

 

Dakle moj problem je što svako klijentsko računalo ima drukčiji nazivi sql servera tj. instance connection stringa, te se uvijek može desiti da klijent zamjeni računalo (te zbog toga bi mu se u budućnosti promjenio naziv sql servera), zbog toga trebam napraviti da korisnik pri paljenju aplikacije odabere sql server, te nakon toga da mu se izlistaju baze koje on ima, te odabere bazu.

 

problem 1. kada dohvatim:  var instances = SqlDataSourceEnumerator.Instance.GetDataSources(); , app tek dohvati instance nakon 3 minute , dakle presporo

 

Da li je najbolje riješenje:

 

string nazivPc = Environment.MachineName

sConn = @"Data Source=nazivPc\SQLEXPRESS";

 

Te kada se spoji na sql server , da preko storane procedure izlistam sve baze u combobox  select * sys.databases  

 

Ili je najbolje riješenje napraviti tablicu sa nazivom klijenta, nazivom sql servera (gdje bi provjeravao nazive sql servera na klijentskim računalima te ubacio u bazu), te nazivom baze

 

Unaprijed hvala

 

 

Arsenalboy čet 26.11.2020 09:43

Kod sebe na računalu imam dvije instance: localDb\MSSQLLocalDB i mojPc\express

SQLBrowser service pokrenut

Kada dohvaćam preko:DataTable dtSqlServers= SmoApplication.EnumAvailableSqlServers(true); ili SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;

Doslovno treba minut da dohvati, te samo dohvati express instancu. 

 

Dok preko registrya dohvati odmah instancu, al također samo express, dakle nikad mi ne prikaze localDb .

 

Na jednom računalu sam koristio 4.7.2 .net , dok sam na drugom koristio 4.5 . net, te je identična situacija bila

Arsenalboy sri 16.12.2020 15:49

Hvala na savjetima

Imam sada jedan zanimljiv matematički problemčić, koji se može uraditi (vjerujem) na dosta načina, ali je bitna efikasnost

Dakle potrebno je inicijalizirati niz brojeva duljine npr 5 i korisnik treba unijeti neku vrijednost npr 50 . I sada me zanima na koji način mogu dodati programibilno random brojeve u niz, a da je zbroj tih brojeva u nizu jednako unesenoj vrijednosti tj ravno 50

Ne bih želio da su svi brojevi u nizu[10,10,10,10,10] , već razne varijante






bresha čet 20.5.2021 17:33

Pozdrav!

 

Imam jednu nejasnoću koju bi htio razjasniti.

Koristim signalR na asp.net core 3.1 i pravim aplikaciju u kojoj će se igrati nekakvi turniri. 

Igrači se mogu registrirati na turnir i isto tako deregistrirati. Za to koristim listu objekata u turnirskom objektu.

Mene zanima da li trebam implementirati nekakav oblik locka na listi prilikom dodavanja illi brisanja objekata igrača. 

Dali je to onda syncroot iz ICollection? https://docs.microsoft.com/en-us/dotnet/api/system.collections.icollection.syncroot?view=netcore-3.1

Friday pet 21.5.2021 15:49
Pero Dinamit kaže...
Friday kaže...

 

Zasto po bazi? Baza bi trebala imati svoj locking out of the box

 Mislio sam na spremanje podataka u bazu, krivo sam se izrazio.

 

Ma OK ali svejedno ne razumijem - zasto bi ikakav locking trebao postojati sa klijentske strane radi toga?

Bobobo-bo Bo-bobo sub 22.5.2021 13:09
bresha kaže...

Pozdrav!

 

Imam jednu nejasnoću koju bi htio razjasniti.

Koristim signalR na asp.net core 3.1 i pravim aplikaciju u kojoj će se igrati nekakvi turniri. 

Igrači se mogu registrirati na turnir i isto tako deregistrirati. Za to koristim listu objekata u turnirskom objektu.

Mene zanima da li trebam implementirati nekakav oblik locka na listi prilikom dodavanja illi brisanja objekata igrača. 

Dali je to onda syncroot iz ICollection? https://docs.microsoft.com/en-us/dotnet/api/system.collections.icollection.syncroot?view=netcore-3.1

 

Trebaš, jer thredovi paralelno pristupaju podacima te liste.

 

Ovdje je tutorial sa sličnom arhitekturom (klijenti pristupaju podacima iz singletonea), podaci su u thread-safe ConcurrentDictionaryju.

alanford174 uto 13.7.2021 13:26

Pozdrav, pocetnik sam u programiranju i zapeo sam na ovom zadatku pa ako bi me mogao netko uputiti kako rjesiti zadatak i sto napraviti bio bi mu zahvalan. Mozda ako imate neki slican zadatak sa rjesenjem isto bi mi pomoglo. Gledao sam po internetu imali sto slicno ali nisam nasao nista sto bi mi pomoglo rjesiti problem. Skuzio sam da bi vrijednosti mogao ucitati preko streamreadera ali ne znam kako da ucitam samo brojke to jest kako da napravim da mi ucita samo x i y vrijednosti.

 

Razmatramo zemljopisnu mapu na kojoj je prikazano n gradova. Tekstovna
datoteka gradovi.txt u prvom retku sadrži informaciju o broju gradova te
potom za svaki grad u zasebnom retku sadrži informaciju o njegovom
položaju na mapi, u obliku (x,y) gdje su x i y koordinate točke. Sadržaj
čitave datoteke prikazan je u nastavku.
Pretpostavite da se korisnik prilikom putovanja između dva grada kreće
najkraćim mogućim putem (po pravcu koji spaja te razmatrane gradove).

a) Napišite program koji će učitati podatke iz datoteke gradovi.txt te
odrediti i na zaslon ispisati ukupnu duljinu puta koju će korisnik proći
ako gradove posjećuje točno redoslijedom kojim su zadani u datoteci (i
staje kad posjeti zadnji grad).
b) Pretpostavite sada da korisnik razmatrajući gradove istim redoslijedom
kao u prethodnoj točki može odlučiti da točno jedan grad neće posjetiti.
Doradite program tako da nakon što ispiše podatke tražene pod (a) utvrdi
koji je grad potrebno preskočiti kako bi se maksimalno smanjila duljina
pređenog puta. Program treba ispisati redni broj grada i potom duljinu tog
puta.

Datoteka gradovi.txt
10
(100,30)
(50,210)
(25,330)
(77,250)
(250,500)
(300,700)
(300,900)
(250,800)
(80,400)
(10,20)

R4zOR229 pon 9.8.2021 22:38

Jel mi more neko pojasnit literale, znaci prolazim sad kroz jednu knjigu i ovo mi uopce nije jasno. Znaci kad ovako napisem, onda je to double zapravo?

 

float pi = 3.1415926536

 

a ako ocu float onda moram ovako napisat

 

float pi = 3.1415926536f

 

ako sam ja to dobro shvatil i tomu je tako, koja onda poanta pisanja float, decimal, long itd. kod deklariranja varijable? Pa onda mogu napisati i var i stavit literal i netreba mi nista drugo, nije uopce jasna neka "logika" iza toga

andrijam uto 10.8.2021 07:24

Stavlja se f zato jer ne možeš 8bajtnu vrijednost ugurati u 4 bajtnu. Tip podatka na ljevoj i vrijednost na desnoj moraju biti istog tipa.

Zato ne možeš napisati float pi="3.14".

 

Da možeš staviti var i sve je super, onda je varijabla tipa double, ako staviš var pi=3.14f onda je float.

 

Ono što ne znaš je da var postoji od verzije C# 3.0 i .NET frameworka 3.5. I mora se održati kompatibilnost s starijim verzijama.

Dali češ koristit implicitno ili explicitno var ili double ovisi o tebi. Nema nikakve razlike, samo kompajleru mora biti jasno što želiš.

R4zOR229 uto 10.8.2021 14:08

Ok, hvala. A kak znam kolko mi byteova ima vrijednost? Kolka je velicina jednog znaka? Znam da je kod chara 1byte al to tesko da moze bit jel je onda onaj gore prevelik i za double. I drugo sta se onda dogada sa vrijednosti kad naguram taj prevelik broj u float sa literalom?