Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 16. 05. 2009 08:07 — Editoval johny239 (16. 05. 2009 08:11)

johny239
Příspěvky: 177
Reputace:   
 

C# pole-porovnání

Zdravím všechny,

Posím Vás pomohl by mi někdo mám problém začal jsem dělat program, který by měl udělat asi toto. Uživatel zadá počet soutěžících v soutěži a příslušný počet bodů kterých dosáhl (to mám zvladnuto), ale pak jěště by ten program měl provnat počet bodů všech soutěžích a vypsal na obrazovku toho soutěžíciho, který dosáhl nejvíce bodu a jeo počet bodů. Prostě je všechny porovnat. A v tom je u mě ten háček nevím jak. Jsem úplný zčátečník prosím poradil by mi někdo?

Ješte nutno říct že jsem to předělával z jiného programu, tekžě na konci to pak vypíše všechny hodnoty.

Děkuji

Zde je můj dosavadní zdrojový kód:


using System;
namespace for_2
{
    class soutez
    {
        static void Main()
        {
            int n, i,nevetsi,pole;
            Console.Write("Zadejte počet soutěžích: ");
            n = int.Parse(Console.ReadLine());
            double[] pole = new double[n];
            for (i = 0; i < n; i++)
            {
                Console.Write("Zadejte počet bodů {0}. soutěžícího ", i + 1);
                pole[i] = double.Parse(Console.ReadLine());
            }
            Console.WriteLine("\nNejlepším soutěžícím je:\n");
            nevetsi = pole [0];
            for (i = 0; i < n; i++)

                if (pole[i] < pole[i + 1])
                    nevetsi = pole[i +1];
            {
                Console.WriteLine("{0}. číslo: {1}", i + 1, pole[i]);
            }
            Console.ReadLine();
        }
    }
}

Offline

 

#2 16. 05. 2009 09:19 — Editoval BrozekP (16. 05. 2009 09:20)

Pavel Brožek
Místo: Praha
Příspěvky: 5694
Škola: Informatika na MFF UK
Pozice: Student
Reputace:   194 
 

Re: C# pole-porovnání

Kód

Code:

            nevetsi = pole [0];
            for (i = 0; i < n; i++)

                if (pole[i] < pole[i + 1])
                    nevetsi = pole[i +1];
            {
                Console.WriteLine("{0}. číslo: {1}", i + 1, pole[i]);
            }

nahraď kódem

Code:

nevetsi = 0;
for (i = 0; i < n; i++)
  if (pole[i] < pole[nejvetsi])
    nevetsi = i;
Console.WriteLine("{0}. číslo: {1}", nejvetsi + 1, pole[nejvetsi]);

a zkus si rozmyslet, proč ti to nefungovalo.

Offline

 

#3 16. 05. 2009 10:12 — Editoval johny239 (16. 05. 2009 10:24)

johny239
Příspěvky: 177
Reputace:   
 

Re: C# pole-porovnání

↑ BrozekP:

Super děkuji moc už vidím nejspíše chybu spatně zvolené přiřazení a porovnání. Jěště sem tento algoritmus trošku poopravil změnil jen znaménko :-D, protože mi to vyposovalo nejmenší číslo. Takže základ mám hotový. Prosím mohu se ještě zeptat jak to mám udělat ,aby když např: dva soutěžící měli stejny pošrt bodů tak jak to udělat aby je to vypsalo oba. Myslím že se jen přídá do tohoto (pole[i]  > pole[nejvetsi]) jeste aby to bylo buť vetši nebo rovno ale nevím jak to zapsat, ještě něco zkusím uvidím.

Děkuji Vám moc.

Offline

 

#4 16. 05. 2009 14:21

Pavel Brožek
Místo: Praha
Příspěvky: 5694
Škola: Informatika na MFF UK
Pozice: Student
Reputace:   194 
 

Re: C# pole-porovnání

↑ johny239:

V tomto případě bych to asi dělal tak, že bych si uložil pozici největšího počtu bodů už při čtení hodnot, tím bych se zbavil cyklu pro hledání největšího počtu bodů. Nakonec bych v cyklu vypsal všechny soutěžící s tím nejvyšším počtem bodů.

Offline

 

#5 18. 05. 2009 19:59

Lukee
Administrátor
Místo: Opava
Příspěvky: 1863
Škola: UPOL, Informatika
Pozice: Roznašeč reklamních bannerů
Web
 

Re: C# pole-porovnání

↑ johny239:
Ještě to můžeme udělat trošku víc objektově. Jsou tam ale části kódu, kterým možná nebudeš rozumět, dělá to něco trochu jiného, než to vlastně má dělat… Ale jinak je to vcelku hezké. Trošku jsem se nudil :-).

Code:

class Program
{
    public static void Main()
    {
        List<Soutěžící> SeznamSoutěžících = new List<Soutěžící>();
        string VstupZKonzole = string.Empty;
        const int PočetVypsanýchSoutěžících = 3;

        Console.WriteLine("Zadejte informace o soutěžících. Přidávání dalších soutěžících ukončíte příkazem 'konec'");
        while(VstupZKonzole.ToLower() != "konec")
        {
            try
            {
                Console.WriteLine("Napište počet bodů {0}. soutěžícího:", SeznamSoutěžících.Count + 1);
                VstupZKonzole = Console.ReadLine();
                SeznamSoutěžících.Add(new Soutěžící(SeznamSoutěžících.Count + 1, Int32.Parse(VstupZKonzole)));
            }
            catch(Exception)
            {
                continue;
            }
        }

        SeznamSoutěžících.Sort((a, b) => b.PočetBodů - a.PočetBodů);

        if(SeznamSoutěžících.Count > 2)
        {
            Console.WriteLine("\n\n");
            Console.WriteLine("Nejlepší tři soutěžící pro tento turnaj:");
            Console.WriteLine("----------------------------------------");
            Console.WriteLine("Pořadí\tČíslo\tPočet bodů");
            for(int i = 0, PočetStejněObodovaných = 0; i < PočetVypsanýchSoutěžících; i++)
            {
                if(i > 0)
                {
                    if(SeznamSoutěžících[i].PočetBodů == SeznamSoutěžících[i - 1].PočetBodů)
                        PočetStejněObodovaných++;
                    else
                        PočetStejněObodovaných = 0;
                }

                Console.WriteLine("{0}.\t{1}\t{2}",
                    i + 1 - PočetStejněObodovaných, SeznamSoutěžících[i].ČísloSoutěžícího, SeznamSoutěžících[i].PočetBodů);
            }
        }
        else if(SeznamSoutěžících.Count > 0)
        {
            Console.WriteLine("\nNejlepším soutěžícím je:\nStartovací číslo: {0}\tPočet bodů: {1}", 
                SeznamSoutěžících[0].ČísloSoutěžícího, SeznamSoutěžících[0].PočetBodů);
        }

        Console.ReadLine();
    }
}

class Soutěžící
{
    public int PočetBodů { get; private set; }
    public int ČísloSoutěžícího { get; private set; }

    public Soutěžící(int ČísloSoutěžícího, int PočetBodů)
    {
        this.ČísloSoutěžícího = ČísloSoutěžícího;
        this.PočetBodů = PočetBodů;
    }
}

2+2=4

Offline

 

#6 24. 05. 2009 19:13

johny239
Příspěvky: 177
Reputace:   
 

Re: C# pole-porovnání

↑ Lukee:

Děkuji moc zkusím jak to funguje a nějak tomu porozumět, ale opravdu tomu fakt zatím takle moc nerozumím jsem v tomto zčátečník, takže umím jen ty základní věci.

Každopádně děkuji moc.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson