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
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

Kód
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
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
↑ 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

↑ 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

↑ 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 :-).
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ů;
}
}Offline