» »

[C#] Domača naloga za faks

[C#] Domača naloga za faks

Ales8 ::

Pozdrav! Za fax imam eno nalogo, ki je ne znam v celoti rešit. In sicer treba je poiskati 3. največje število v polju. To znam narediti a problem nastane, ko je treba v primeru da to število ni najdeno izpisati napako. TO pa zato ker moraš narediti to v primeru:
Vhod: 5 3 5 3 0
Izhod: "Opozorilo o napaki"

ALI

Vhod: 1 2 0
Izhod: "Opozorilo o napaki"

Algoritem:

public static int tretjeNajvecje(int[] polje)
        {


            int tretjeNajvecje = 2;

            int drugoNajvecje = 1;

            int N = polje.Length;

            int najvecje = 0;

            Console.WriteLine("Vnesi do 10 števil!");

            for (int i = 1; i < N; i++)
            {

                if (polje[i] > polje[najvecje])
                {
                    tretjeNajvecje = drugoNajvecje;
                    drugoNajvecje = najvecje;
                    najvecje = tretjeNajvecje;
                    najvecje = i;
                }
                else
                {
                    if()
                }
            
                
            return polje[tretjeNajvecje];
        }

        public static void Main(string[] args)
        {

            int[] polje = new int[10];
            Console.WriteLine(tretjeNajvecje(polje));
            Console.ReadLine();

        }

vorantz ::

Vnest moras cifre vecje od nic? Predvidevam da je tista nicla v primerih misljena kot konec vnasanja cifr?

Drugace bi se to dalo resit zelo hitro z lynqom samo ne vem ce ga lahko uporabis :P

Qushaak ::

Nisi napisal kaj "smeš". Osebno bi najprej sortiral števila in potem poskusil prebrati tretjega (če sploh so vsaj 3 števila). Pa jasno že ko bi bral iz vhoda bi vsako število probal parsat, če se ga da.
C# pa jasno že ima .sort metodo.

Ales8 ::

evo navodilo celo:

Izdelajte program, ki bo prebral od 3 do 10 števil in izpisal tretje največje med njimi. Vnos podatkov lahko predhodno zaključimo z vnosom vrednosti 0 (vrednost 0 pomeni prekinitev nadaljnjega vnašanja podatkov in se ne upošteva pri določanju tretjega največjega števila).
V primeru, da tretjega največjega števila ni mogoče določiti, naj se izpiše opozorilo o napaki.

Ales8 ::

vorantz je izjavil:

Vnest moras cifre vecje od nic? Predvidevam da je tista nicla v primerih misljena kot konec vnasanja cifr?

Drugace bi se to dalo resit zelo hitro z lynqom samo ne vem ce ga lahko uporabis :P



Tega nesmeš uporabit :S

vorantz ::

če bi se lahko z lynqom poigral:

var nums = args.Select(x => Int32.Parse(x)).ToList();
nums.Distinct().OrderByDescending(x => x);
if (nums.Count() < 3)
{
	Console.WriteLine("ermagerd no third");
}
else
{
	Console.WriteLine(nums[2]);
}
Console.ReadLine();


manjkajo še varnostna preverjanja

edit: eh škoda :D

Zgodovina sprememb…

  • spremenil: vorantz ()

Ales8 ::

Qushaak je izjavil:

Nisi napisal kaj "smeš". Osebno bi najprej sortiral števila in potem poskusil prebrati tretjega (če sploh so vsaj 3 števila). Pa jasno že ko bi bral iz vhoda bi vsako število probal parsat, če se ga da.
C# pa jasno že ima .sort metodo.



Tudi tega se ne sme. Pač dovoljena so polja, zanke..

Mavrik ::

Ales8: Prosim naslednjič uporabi "st.koda" značko za lepši prikaz tvoje kode :)
The truth is rarely pure and never simple.

vorantz ::

sicer pa ja
najboljše naredit podobno kot sem jaz z lynqom
naredi en enostaven distinct sort (v nek array dodajaš eno številko po eno na ustrezno mesto oz ne če že obstaja) in vzemi tretjega če obstaja

Spura ::

Verjetno ni fora da sortiras ampak da najdes tretjega z enim scanom. Ce bi dali omejitev, da mora imet algoritem linearno casovno zahtevnost al pa konstantno prostorsko zahtevnost, bi lepo sli teli vasi sorti papa. Sam na tej stopnji ne mores tega dat v navodila ker folk itak ne bi razumel.

boogie_xlr ::

Vbistvu se lahko števila sproti preverja, ko se vnašajo. (Če se že gre za šolski primer.)

Yacked2 ::

Jaz bi tako naredil:

for zanka, ki breaka če je vpisana številka 0, drugače pa rabiš tri spremenljivke v katere shranjuješ prve tri največje številke. Na koncu izpišeš tretjo :) Ti še sestavim.
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

Yacked2 ::

        static void Main(string[] args)
        {
            int[] save = new int[3];

            Console.WriteLine("Vpisujte številke:");
            for (int i = 0; i < 11; i++)
            {
                int dump = Int32.Parse(Console.ReadLine());

                if (dump == 0) //če je 0 končamo
                {
                    break;
                }
                else
                {
                    //preverimo na katero mesto gre
                    if (i == 0)
                    {
                        save[0] = dump;
                    }
                    else if(dump > save[0]) //največji
                    {
                        save[2] = save[1];
                        save[1] = save[0];
                        save[0] = dump;
                    }
                    else if (dump > save[1]) //drugi največji
                    {
                        save[2] = save[1];
                        save[1] = dump;
                    }
                    else if (dump > save[2]) //tretji največji
                    {
                        save[2] = dump;
                    }
                }
            }
            Console.WriteLine("Tretje največje število je: " + save[2].ToString());
            Console.ReadLine();
        }
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

vorantz ::

Hja kaj pa dela to drugega kot sort :)
Samo, da je hardcodirano na 3. največje število
Kaj pa če ti reče ok zdej pa spremeni, da bo izpisovalo 5. največjo?

Zgodovina sprememb…

  • spremenil: vorantz ()

Yacked2 ::

vorantz je izjavil:

Hja kaj pa dela to drugega kot sort :)
Samo, da je hardcodirano na 3. največje število
Kaj pa če ti reče ok zdej pa spremeni, da bo izpisovalo 5. največjo?


Glede na to, da število številk med 3 in 10, bi za izpisovanje do vlkjučno 6 shranjeval največje, če bi pa želel shranjevati 7. največjo pa bi shranjeval najmanjše.
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

camx ::

LINQ je LINQ in ne LYNQ!

vorantz ::

ja...prevečkrat zmešam ker uporabljamo lync :P
preveč podobna imena

Spura ::

vorantz je izjavil:

Hja kaj pa dela to drugega kot sort :)
Samo, da je hardcodirano na 3. največje število
Kaj pa če ti reče ok zdej pa spremeni, da bo izpisovalo 5. največjo?

To ni noben problem, samo za razliko od yackeda moras dejansko dvojno zanko uporabit, ki je iz neznanega razloga ni.

findNthBiggest(int[] data, int n) {
   if (n < 1) throw new IllegalArgumentException();
    int[] topN = new int[n];
    for (int i = 0;i < data.length;i++) {
        if (topN[0] < data[i]) {
            topN[0] = data[i];
            for (int j = 1;j < n && topN[j] < data[i];j++) {
                topN[j - 1] = topN[j];
                topN[j] = data[i];
            }
        }
    }
    return topN[0];
}
Tut ne stekam zakaj je primerjava z najvecjim na vrhu, ne pa s 3. najvecjim, ker statisticno bo to trikrat vec ifov naredil.

Zgodovina sprememb…

  • spremenil: Spura ()


Vredno ogleda ...

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

križci krožci c # (strani: 1 2 )

Oddelek: Programiranje
5011956 (10615) Yacked2
»

[C#] Domača naloga - osnove

Oddelek: Programiranje
372507 (1724) 11tomi12
»

Sode ter Lihe(C Sharp)

Oddelek: Programiranje
161673 (1471) detroit
»

[C#] Reševanje domačih nalog

Oddelek: Programiranje
173282 (2786) krastača
»

Pomoč pri programčkih

Oddelek: Programiranje
152940 (2590) Mitja Bonča

Več podobnih tem