» »

[C#] Domača naloga - osnove

[C#] Domača naloga - osnove

11tomi12 ::

Rabo bi malo pomoči pri C# za fax, ker se mi bliža rok. Ni nič težkega, ker pa sem zadnje čase lenaro, me to zdaj tepe... Če se bi komu dalo pomagat bi bil zelo hvaležen.
1. binarna števila: prvi podprogram mora pretvorit binarno v int. drugi podprogram iz int v binarno. tretji bi naj izračunal vsoto dveh binarnih števil, četrti pa razliko. Pri petem pa morem uporabit dvojiško funkcijo AND za dve binarni števili. Pri tem nesmem uporabljat Convert.toInt32 :S
2. program more prebrat niz besed, ki vsebujejo ločila in številke. ločila se morajo držat besed, besede z ločili pa se izločijo. pol pa se mora izpisat obratno(npr: miza,. stol.,.. hiša12,, dreva -> dreva stol.,.. miza,.)
Pa pri obeh ne smem uporabljat funkcije iz .NET knjižice. Any help, please? :D
  • spremenil: Mavrik ()

darkolord ::

Kaj imaš do sedaj?

11tomi12 ::

en static bool za ločila in enega za številke. zdaj pa ne vem, kak naj to uporabim v 3. podprogramu z foreach(char znak in besedilo)

mladec ::

Sicer nevem in ne bom trdil, da je to prav ampak pomojem bi prva naloga izgeldala nekako tako.

Console.WriteLine("Vnesi binarno število");
            long binary = 0;
            int r = 0, j = 1;
            int število = 0;
            binary = long.Parse(Console.ReadLine());
            while (binary != 0)
            {
                r = (int)binary % 10;
                število = število + r * j;
                j = j * 2;
                binary = binary / 10;
            }
            Console.WriteLine("Število je " + število);

11tomi12 ::

sem sprobal direktno, pa ne dela. bom malo preštudiral pa preverjal možnosti..
Kak bi se pa druge naloge lotil?

darkolord ::

Premikaš se po znakih in iščeš presledke, ko prideš do presledka, skopiraš besedo v en seznam. Vmes še preveriš, če vsebuje številke ali ne.

11tomi12 ::

In kak točno naj to naredim? probaval sem že z foreach in if stavki v njej, pa mi nikak ne uspe...

mladec ::

Druge niti ne razumem kaj konkretno hoče razen tega, da se izpiše v obratnem vrstnem redu

11tomi12 ::

Izdelaj program, ki bo prebraz vrstico besedila, ki vsebuje ločila in števila. Program naj prebrano besedilo preuredi, da bodo besede stale v nizu v obratnem vrstnem redu. Morebitna ločila naj se "držijo" svojih besed. V primeru, da se zraven besede "drži" število, takšno besedo skupaj z njenimi ločili izpustite.
Tak je :)

lebdim ::

pri prvi nalogi moraš poznati, kako se pretvarja iz desetiškega številskega sestava v dvojiškega in obratno. potem boš to znanje uporabil pri programiranju te naloge.

idejo za drugo nalogo ti je podal že darkolord.

mladec ::

2. Naloga
Spet ne trdim, da je prav tako da ne kopirat tega. To je samo pomoč. Kar pa prepišeš, glej, da razumeš stvar, ki si jo prekopiral.
string besedilo = " Mama., kruh. dež12., okno., krneki13";
            List<string> besede = new List<string>();
            List<int> števec = new List<int>();
            int b = 0;
            
            for (int i = 0; i < besedilo.Length; i++)
            {
                string beseda = "";
                char a = besedilo[i];
                
                if (a == ' ')
                {
                    for (int j = b; j < i; j++)
                    {
                        beseda = beseda + besedilo[j];
                    }
                        
                    besede.Add(beseda);
                    beseda = "";                   
                    
                    b = i;
                }
                
                
            }
            
            Console.WriteLine("-------------------------");
            foreach (var x in besede)
            {
                Console.WriteLine(x);
            }
            Console.WriteLine("------------Obratna smer-----------");
            int dolžina = besede.Count;
            
            for (int i = (dolžina-1); i >= 0; i--)
            {
                Console.WriteLine(besede[i]);
            }
                Console.ReadLine();


btw kera šola je to?

darkolord ::

Ha, a je List dovoljen? :)

mladec ::

Zakaj ne bi bil? Lahko pa uporabiš tabelo string[] besede=..
:)

11tomi12 ::

Upam da je, sicer bom še vprašal. Hvala za pomoč!
Če še kaj nebom vedel se bom obrnil na vas :D

11tomi12 ::

Evo, zdaj pa morem naredit program, ki mu vpišem 5 kart za poker in mi izpiše kakšno kombinacijo imam. npr A A 2 4 5 -> 1 par . Spravil sem vse karte v en string array, zdaj pa spet.. kak se lotit tega? verjetno z for loop, ampak kak? :D help please :P

black ice ::

lebdim ::

vidim, da vas je veliko, ki obiskujete programiranje, potem pa sprašujete take osnovne stvari, ki bi jih mogli vedet še preden se lotite programirat nalogo ...

mladec ::

Am.. za iskat enake karte. moraš pač gledat tako. Maš pet kar in sepravi vsaka ima oznako pač eno številko od 0 do 4. Potem primerjaš med sabo te karte tako, da uzameš karto pri indeksu 0 in gre štiri krat skozi pri čemer to karto pri nič primerjaš z ostalimi. Sepravi karta pri 0 primerjaš z karto pri 1, 2, 3, 4. To je prvi korak. Potem uzameš karto pri 1 in primerjaš z ostalimi kartami pri 0, 2, 3, 4 in tako naprej do 4. Pazi, da ne primerjaš karto pri 1 z karo pri 1 in podobno. Potem pa še za tris in ostalo, ne poznam dobro pokra.
Lp

mladec ::

In še to. Ker je namreč razlika v težavnosti naloge ali daš ti noter karte tako: A A 2 4 5 oz. če daš random npr. A 2 4 A 5. Če prvo, potem moja razlaga ne paša h tej nalogi, če ne, pa ja.

Zgodovina sprememb…

  • spremenil: mladec ()

vorantz ::

Uh
kaj pa flush pa vse to?
nekako ni dovolj samo informacija če je as, kralj itd ampak tudi barva
če bodo A K Q J 10 vsi pikovi al pa mešani (eni pik, eni karo, itd) je velika razlika

v tem primeru bi si nrdil 4x13 array
z 1 označiš izbranih 5 kart ostalo nič

vsota po stolpcu -> iskanje enakih (par, tris, ...)
če so vse v točno eni vrstici -> en izmed flushov
itd

11tomi12 ::

moja ideja: najprej dam vseh 52 kart v string array, pol pa z enim podprogramom preberem 5 kart ki jih spravi v array. nato z drugim podprogramom preverim oba arraya da mii zpiše, na katerih mestih so te karte, da dobim 5 int-e, ki jih pol z if stavki in zankami primerjam. bi šlo tak?

mladec ::

To je res, če hočeš ti omejiti uporabnika, da ne sme vnašati noter drugega kot te karte. Zaenkrat sem ti napisal rešitev za iskanje parov. Noter nevem kako bi vnašal vrednosti in barve posamezne karte. Lahko poskusiš kar tako. Q - kot kralica ter barvo zraven (Qpik, Kkara, 10srce, ...).

Za tris, moraš upoštevati pravilo da če je a=b in b=c, potem je tudi a=c. (jaz bi dal še eno for zanko, lahko se pa motim)

Potem pridemo do barve, kjer lahko ločiš karte glede na barve in rečeš, če so vse npr srce in je razlika med njimi vedno 1. Vsaj mislim, da tako deluje lestvica. Ampak potem bi moral mogoče vnašati posamično, vsaj zaenkrat. Sepravi bi rekel, K in nato še barvo.

Za začetek.

Uživaj! :)

Console.WriteLine("Vnesi 5 kart");
            string[] karte = new string[5];  
            
            for (int i = 0; i < karte.Length; i++)
            {
                string c = Console.ReadLine();
                karte[i] = c;                 
            }
            Console.WriteLine("--------------------");
            Console.WriteLine();
            int parov = 0;
            for (int i = 0; i < karte.Length; i++)
            {
                for (int j = 0; j <= 4; j++)
                {
                    if (karte[i] == karte[j] && i != j)
                    {
                        parov++;
                    }
                }
            }
            if (parov == 2)
            {
                Console.WriteLine("Imaš en par");
            }
            else if (parov == 4)
            {
                Console.WriteLine("Imaš 2 para");
            }
            else
            {
                Console.WriteLine("Nimaš nič");
            }          
                Console.ReadLine();

11tomi12 ::

Tale za izpis parov je dobra, nebi nikol prišo na to, hvala za trud :))
Kaj mam tukaj narobe: http://prntscr.com/2kxfra , http://prntscr.com/2kxg14 . tale drugi podprogram bi naj preverjal array z vsemi in array z vnesenimi akrtami, ampak ne vem kak bi to napisal.. dobil bi naj ven 5 intov v array, da bi jih primerjal.

mladec ::

Program lahko napišeš na veliko različnih načinov. Jaz si ponavadi pomagam tako kot sem pač napisal.

Zdaj, če pravilno razumem tvojo kodo bi ti rad teh 5 vnešenih kar primerjal same s sabo? Če boš tako napisal, kot maš v screenu ti bo za vsako karto vrnilo true. Ti moraš pazit, da karte pri 1 ne primerjaš z karto pri 1 ampak različno od 1, sepravi 0, 2, 3, 4. Cel koncept kot bi ti rad napisal gre tako. Ti si mu dal na voljo teh 52 kart. On jih vnaša v eno tabelo. Iz te tabele bi rad dobil en ali več parov. Torej moraš te vrednosti v tabeli primerjat.

Nevem, če mislim enako.

Spura ::

Zakaj nisi preprosto tako napisal loopov?

            int parov = 0;
            for (int i = 0; i < karte.Length; i++)
            {
                for (int j = i+1; j < karte.Length; j++)
                {
                    if (karte[i] == karte[j])
                    {
                        parov++;
                    }
                }
            }
            if (parov == 1)
            {
                Console.WriteLine("Imaš en par");
            }
            else if (parov == 2)
            {
                Console.WriteLine("Imaš 2 para");
            }


Sicer pa ta koda propade kot grcija tkoj k je tris na mizi.

11tomi12 ::

Zakaj bi uporabljal .lenght, če mi pa to vrača število znakov? for zanke pa delujejo ja :)
Za fullhouse bi lahko pol še napisal zanko v if (parov == 1), ker vsebuje par in tris ne?

kak bi pa barvno lestvico in lestvico naštimal? o.O To se mi pa res ne sanja..

mladec ::

To si res lepo poenostavu. Moj algoritem je bil pač tak da imam dve tabeli isti. in za vsako karto grem od 0 do 4 razen tisto ne, ki jo imam za preverjanje. Ti si šel pa samo po tabeli navzdol.
Ja tak je pač moj način.. Tudi spodnja koda je res grdo napisana, priznam ampak tris in full house dela. Po statistiki vidim, da štekaš programiranje tako da ti ne bom solil pamet :)

int parov = 0;
            int tris = 0;
            for (int i = 0; i < karte.Length; i++)
            {
                for (int j = i + 1; j < karte.Length; j++)
                {
                    if (karte[i] == karte[j])
                    {
                        parov++;
                        for (int k = 0; k <= 4; k++)
                        {
                            if (karte[j] == karte[k])
                            {
                                tris++;                                
                            }
                        }
                    }
                }
            }
            if (parov == 1)
            {
                Console.WriteLine("Imaš en par");
            }
            else if (parov == 2)
            {
                Console.WriteLine("Imaš 2 para");
            }
            else if (tris == 9)
            {
                Console.WriteLine("Imaš 1 tris");
            }
            else if (tris == 11 && parov == 4)
            {
                Console.WriteLine("Imaš full house");
            }
                Console.ReadLine();

mladec ::

.lenght ti pač vrne velikost tabele. Sepravi ti rečeš za int i, ki ga nastaviš na 0 do številke, katera je velikost tabele. A to si mislil?

Za barvo imaš spet več poti, ampak bom raje prepustil Supri, ker mislim, da se bolj zastopi. Moj način razmišljanja je bil sicer tak. Kot sem že rekel, bi jaz vensel karto tako, da najprej vnesem vrednost in nato barvo. Potem bi preverjal najprej, če so vse iste karte in nato če je razlika med njimi vedno 1, tako, da npr. vzameš drugi čel v tabeli minus prvi člen v tabeli. Pri vsakem izračunu mora priti 1. Na lestvico se ne spoznam. Problem nastane, če lestvica obstaja tudi tako (Q, K, A, 2, 3). A je dovoljeno samo tako (10, J, Q, K, A oziroma A, 2, 3, 4, 5)?

11tomi12 ::

Aha, sploh ni dosti več o.O sej se drgač hitro učim samo sem lenaril 2 mesca ko smo delali loope in podobno pa mi zdaj to manjka :s če padem, te napake več nebom ponovil :D
Kaj pa tale: http://prntscr.com/2kzm3b
Program za tic tac toe, skoraj deluje, vendar mi randomizer meče svoje izbire v že zasedena polja. Kot se vidi sem nekaj probaval, kar sem videl na internetu, vendar ni nikak logično in tudi ne deluje.. Kak bi to rešo?

mladec ::

hm iz te kode nevem kaj naj ti napravim. Potrebujem kontekst. Tisto kar je podčrtno upam, da veš zakaj je tako. Lahko pač rečeš if to polje contains karkoli naj ga preskoči. Ti maš pač napisano, dokler je izbor enak nečemu naj ti v izbor vnese vrednost in ga vrne. Ma mislim, da ne mislim prav :)

Btw katera šola je to in letnik? Ker počasi mislim, da bi se tudi sam kam naprej vpisal :)

11tomi12 ::

1. letnik ITK FERI/Mb :)

Spura ::

To, da propade, ko je tris na mizi sem napisal, ker tvoja koda registrira tris tudi kot 3 pare. In bos s temi pristopi to tezko odpravil, razen tako da si pac detekcijo parov omejil na 2 para, kar ti sicer v nekem smislu odpravlja problem, ki bi se pa hitro ponovno pojavil takoj, ko bi nekdo razsiril nalogo na vec kart.
Osebno bi resil tako:

Karte bi predstavil z enumom, ki bi temeljil na dveh enumih (barve in vrednosti).

Potem bi sel cez karte in bi v en seznam insertiral vrednost, v drugega pa barvo karte.
Oba seznama bi potem posortiral. Iz posortiranih seznamov je trivialno ugotoviti flush, lestvico (ne pozabit na robni primer 5 4 3 2 As), straight flush (ce sta oba prejsnja true), pare, pokre in trise (gres po seznamu in stejes, ko se vrednost spremeni pogledas stevec, ce je 2 3 ali 4 imas par, tris, poker, in stevec resetiras).

Zgodovina sprememb…

  • spremenil: Spura ()

vorantz ::

Mogoče bi blo lažje z enumi ampak js sm si tko zamislu

            // heart, diamond, spade, clover
            string[] colours = { "H", "D", "S", "C" };
            string[] values = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };

            int[,] deck = new int[4,13];
            int[] columnSum = new int[13];
            int[] rowSum = new int[4];

            var line = Console.ReadLine();
            var cards = line.Split(',');

            if (cards.Length != 5)
            {
                Console.WriteLine("5 kartn bitte");
                Console.ReadLine();
                return;
            }

            foreach (string card in cards)
            {
                if (card.Length < 2)
                {
                    Console.WriteLine("wrong card format");
                    Console.ReadLine();
                    return;
                }

                string colour = card.Substring(0, 1);
                string value = card.Substring(1, card.Length-1);
                int rowIndex = Array.IndexOf(colours, colour);
                int colIndex = Array.IndexOf(values, value);

                if (rowIndex < 0 || colIndex < 0)
                {
                    Console.WriteLine("unknown card");
                    Console.ReadLine();
                    return;
                }

                deck[rowIndex,colIndex] = 1;
            }

            for (int i = 0; i < deck.GetLength(0); i++)
            {
                for (int j = 0; j < deck.GetLength(1); j++)
                {
                    columnSum[j] += deck[i, j];
                    rowSum[i] += deck[i, j];
                }
            }

            int pairs = columnSum.Where(x => x == 2).Count();
            int threeOfAKind = columnSum.Where(x => x == 3).Count();
            int fourOfAKind = columnSum.Where(x => x == 4).Count();
            bool flush = rowSum.Where(x => x == 5).Count() == 1;

            int straightSum = 0;
            bool straight = false;
            bool royal = false;
            for (int i = -1; i < columnSum.GetLength(0); i++)
            {
                int value = i == -1 ? columnSum.Last() : columnSum[i];
                value = value != 0 ? value : -1;
                straightSum = Math.Max(straightSum + value, 0);
                if (straightSum == 5)
                {
                    straight = true;
                    if (i == columnSum.GetLength(0) - 1)
                    {
                        royal = true;
                    }
                }
            }
            
            if (fourOfAKind != 0)
            {
                Console.WriteLine("Four of a kind");
            }
            else if (threeOfAKind != 0 && pairs != 0)
            {
                Console.WriteLine("Full house");
            }
            else if (threeOfAKind != 0)
            {
                Console.WriteLine("Three of a kind");
            }
            else if (pairs == 2)
            {
                Console.WriteLine("Two pairs");
            }
            else if (pairs == 1)
            {
                Console.WriteLine("One pair");
            }
            else if (royal && straight && flush)
            {
                Console.WriteLine("Royal flush");
            }
            else if (straight && flush)
            {
                Console.WriteLine("Straight flush");
            }
            else if (flush)
            {
                Console.WriteLine("Flush");
            }
            else if (straight)
            {
                Console.WriteLine("Straight");
            }
            else
            {
                Console.WriteLine("Nada");
            }

            Console.ReadLine();


Par glavnih primerov:
HA,HK,HQ,HJ,H10
H2,H3,H4,H5,H6
HA,H2,H3,H4,H5
H2,D2,S2,C2,H6
H2,D2,S3,H3,C3
SA,SJ,S7,S5,S2
S9,H8,C7,D6,H5
SA,HK,CQ,DJ,H10
H2,D2,C2,H3,C10
H2,D2,S3,H3,C5
H2,D2,S3,H4,C7

Spura ::

Dvodimenzionalni array deck je odvec IMO. Lahko bi ze v vrstici deck[rowIndex,colIndex] = 1; polnil columnSum in rowSum arraye.

vorantz ::

! Tru dat

11tomi12 ::

Aha ! jaz sem isto probaval in imel v 2D arrayju barve in karte posebaj, samo mi je bilo povedano, da ni potrebno..
Drgač pa hvala za trud, mogoče bom le naredo toti predmet :P
Še ena naloga :D : http://prntscr.com/2lj47c moja ideja: vse besede v array, ki se pol nekak ureja.. samo spet nimam ideje, kak bi to napravil

mladec ::

Am.. nevem točno ampak sem si pomagal s knjižnicami.
To je za desno poravnavo.

string text="Dober dan, moje ime je Ime";            
            Console.CursorLeft = Console.BufferWidth - text.Length;
            Console.Write(text);

11tomi12 ::

Problem je v tem, da ne to ne sme uporabljat :/ če ne bi bilo prelahko...


Vredno ogleda ...

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

C# program za pretvorbo v desetiško število z rekurzijo

Oddelek: Programiranje
81370 (1093) MrStein
»

[C#] Operacija IN in ALI med dvema int številoma

Oddelek: Programiranje
111087 (900) LeQuack
»

[C#] Input string was not in a correct format.

Oddelek: Programiranje
6965 (902) Cvenemir

[C#]polje znakov

Oddelek: Programiranje
112215 (2043) Ziga Dolhar
»

Pomoč pri programčkih

Oddelek: Programiranje
152734 (2384) Mitja Bonča

Več podobnih tem