Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C# - Seřadit a vypsat

Dobrý den mám takovou prosbu, potřebuji kód, který mi seřadí data které uživatel vypíše do 2 textboxů ( jméno a plat ) To se mi uloží do pole. A když jich třeba napíše 20 , aby po kliknutí buttonu2 vypsalo toho, kdo má největší plat. Kód pro zapsaní jmen a platů do pole je hotový, potřebuji jen kód pro vypsání děkuji moc všem.

Kód:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        string[] jmeno = new string[50];
        int polozka = 0;
        int[] plat = new int[50];



        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            jmeno[polozka] = Convert.ToString(textBox1);
            jmeno[polozka] = Convert.ToString(textBox2);
            polozka++;

        }

        private void button2_Click(object sender, EventArgs e)
        {
            



        }
    }
}

Takhle to bude vypadat graficky.
[www.imagehosting.cz]

V příloze je prográmek.

Předmět Autor Datum
A v čem vidíš problém?
Wikan 27.11.2012 19:09
Wikan
Minimalne v tom, ze si cpe platy i jmena do stejneho String pole...
MaSo 27.11.2012 19:11
MaSo
Já ten jeho kód ani nečetl. Ale máš pravdu :-D
Wikan 27.11.2012 19:13
Wikan
No že mi nejdou seřadit hodnoty podle platu v poli a vypsat ten největší =/
medvidekcz3 27.11.2012 19:13
medvidekcz3
Co znamená "nejdou seřadit"?
Wikan 27.11.2012 19:13
Wikan
Spíše nevím jak , když člověk zadá hodnoty a seřadit a vypsat, nevím nevím pořád to mám v hlavě ale…
medvidekcz3 27.11.2012 19:15
medvidekcz3
K nalezení největšího prvku nepotřebuješ řadit celé pole. Stačí to jednou projít cyklem.
Wikan 27.11.2012 19:16
Wikan
Aha sice netuším jak , jsem na začátku, ale zkusím to najít .... Díky za radu
medvidekcz3 27.11.2012 19:19
medvidekcz3
Jak by jsi našel největší číslo, kdyby jsi je měl napsané na papíře?
Wikan 27.11.2012 19:20
Wikan
ked chces porovnavat nieco co je na konci stringu tak si ten string musis najprv zanalyzovat, t.j. b…
MM.. 27.11.2012 19:17
MM..
Jsem začátečník , potřebuji jen seřadit já si to zkusím najít na google .. Díky za radu.
medvidekcz3 27.11.2012 19:20
medvidekcz3
Tak znovu. Nepotřebuješ je seřadit.
Wikan 27.11.2012 19:20
Wikan
Ne jen najít nejvyšší hodnotu =(
medvidekcz3 27.11.2012 19:23
medvidekcz3
nepotrebujes nic seradit, potrebujes zacat uvazovat nad tym co robis.
MM.. 27.11.2012 19:21
MM..
tak si tam daj cyklus a maximum inicializuj na prvu polozku a porovnavaj s ostatnymi, ak najdes vyss…
MM.. 27.11.2012 19:14
MM..
A len tak mimochodom to jmeno[polozka] = Convert.ToString(textBox1); jmeno[polozka] = Convert.ToSt…
MM.. 27.11.2012 19:23
MM..
Aha tak to zapíši takhle ne? jmeno[polozka] = textBox1.Text; plat[polozka] = Convert.ToString(text…
medvidekcz3 27.11.2012 19:26
medvidekcz3
jmeno[polozka] = textBox1.Text; plat[polozka] = Int32.Parse(textBox2.Text); polozka++; Když budeme…
Wikan 27.11.2012 19:28
Wikan
v tom druhom textboxe je plat ci ako? V tom pripade ano. A potom nepotrebujes nic analyzovat ale rov…
MM.. 27.11.2012 19:28
MM..
Dobře děkuji.
medvidekcz3 27.11.2012 19:30
medvidekcz3
To mám udělat pomocí cyklu while že? A bude tam i ta ikrementace kde bude i++ na každý index v poli…
medvidekcz3 27.11.2012 19:40
medvidekcz3
Buď while nebo for, to je jedno. Hledáš největší prvek, tak co asi bude v podmínce?
Wikan 27.11.2012 19:41
Wikan
Niekde musis mat predsa ulozene ze kolko bolo tych poloziek celkovo ulozenych do pola. Tak jak to ma…
MM.. 27.11.2012 19:42
MM..
V prvom rade by som sa vyhol anti-patternu spriahnutých polí, do ktorých ukladáš meno a plat osoby.… poslední
los 28.11.2012 23:50
los

ked chces porovnavat nieco co je na konci stringu tak si ten string musis najprv zanalyzovat, t.j. bud najst v nom nejaky dohodnuty oddelovac, alebo najst prvu medzeru zprava, a nasledne si urobit substring od danej pozicie az po koniec. Na vsetko su funkcie.
Normalny programator (nedebil) tu analyzu urobi trochu komplikovanejsie aby zistil napr. ci aj nalavo od medzery nie su cifry a vtedy zahlasil error alebo prescanuje cely string po znakoch na dohodnutu syntax apod.

tak si tam daj cyklus a maximum inicializuj na prvu polozku a porovnavaj s ostatnymi, ak najdes vyssiu tak zmen premennu maximum. Na konci cyklu budes mat v premennej maximum tu najvyssiu hodnotu.
Programovanie neni lepenie "potrebuju kod", ten kod si mas napisat ty.

v tom druhom textboxe je plat ci ako?
V tom pripade ano. A potom nepotrebujes nic analyzovat ale rovno si v cykle konvertovat to plat[polozka] na integer a porovnavat s maximom, v cykle jak som pisal.

P.S. ak si to maximum budes drzat ako index do pola, tak a konci cyklu mas v jmeno[maximum] cloveka s maximalnym platom.

V prvom rade by som sa vyhol anti-patternu spriahnutých polí, do ktorých ukladáš meno a plat osoby. Meno aj plat sa týkajú jednej osoby, takže má zmysel vytvoriť si triedu, ktorá bude tieto dve vlastnosti obsahovať. Tiež je logickejšie si to ukladať do zoznamu než do poľa.

Program by mohol vyzerať napríklad takto:

using System;
using System.Linq;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
	public partial class Form1 : Form
	{
		List<PersonInfo> persons = new List<PersonInfo>();

		public Form1()
		{
			InitializeComponent();
		}

		private void button1_Click(object sender, EventArgs e)
		{
			persons.Add(new PersonInfo
			{
				Name = textBox1.Text,
				Salary = int.Parse(textBox2.Text)
			});
		}

		private void button2_Click(object sender, EventArgs e)
		{
			var max = persons.First();
			foreach (var person in persons.Skip(1))
				if (person.Salary > max.Salary)
					max = person;
			MessageBox.Show(max.Name);
		}

		public class PersonInfo
		{
			public string Name { get; set; }
			public int Salary { get; set; }
		}
	}
}

Zpět do poradny Odpovědět na původní otázku Nahoru