Avatar
Honzs Sedlomn:

Zdravím všechny programátory. Jsem začátečník a snažím se vytvořit takový malý prográmek, který vám bude měnit míry podle toho jak si budete přát. Třeba z metru na kilometry či palce a tak dále. Jenže mám takový problém. Samozřejmě nevím jestli mám nějaké zlozvyky nebo ne, protože mě nemá kdo opravit. Tak jsem vlastně skoro celý kod sestavil pouze z podmínek. Jiné řešení mě nenapadá. Nemáte nějaký nápad jak by se to dalo zkrátit? Případně mi napiště, že můj postup je dobrý :)
Díky moc, zde vám zasílám můj zdroják.

http://pastebin.com/EruTq8et

 
Odpovědět 10.8.2015 15:36
Avatar
Pjanus
Člen
Avatar
Pjanus:

No přímo špatně na tom nic není ale ve všech těch podmínkách testuješ jestli je vybranej metr a něco. To je dost zbytečné a taky nepřehledné lepší způsob by byl použít jednu podmínku jestli je to metr nazačátku a potom pomocí switche testovat ostatní podmínky.

 if (delka_comboBox1.SelectedItem.ToString() == "metr")
{
 switch(delka_comboBox2.SelectedItem.ToString())
{
                case "kilometr":
                delka_vysledek_label.Text = Convert.ToString(delka / 1000);
                break;
}
}

a tímhle stylem pro zbytek. Dálé není vhodné používat diakritiku, maximálně v komentářích.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 10.8.2015 17:43
Avatar
Pjanus
Člen
Avatar
Pjanus:

A možná ještě drobnost která není chybou ale většinou se v C# používá pro názvy syntaxe že první písmeno je malé a každé další na začátku slova velké například pokud by si měl proměnnou ahoj jak se mas tak bys jí zapsal jako ahojJakSeMas, s tím že to neplatí pro názvy metod tam jsou všechna začáteční písmena velká. Ale jak říkám není to chyba jenom taková zvyklost.

 
Nahoru Odpovědět 10.8.2015 18:00
Avatar
Ondřej Krsička
Redaktor
Avatar
Ondřej Krsička:
private void delka_comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            int delka = Convert.ToInt32(delka_numericUpDown1.Value);

            if (delka_comboBox1.SelectedItem.ToString() == "metr")
            {
                switch (delka_comboBox2.SelectedItem.ToString())
                {
                    case "kilometr":
                        delka_vysledek_label.Text = Convert.ToString(delka / 1000);
                        break;
                    case "milimetr":
                        delka_vysledek_label.Text = Convert.ToString(delka * 1000);
                        break;
                    case "centimetr":
                        delka_vysledek_label.Text = Convert.ToString(delka * 100);
                        break;
                    case "decimetr":
                        delka_vysledek_label.Text = Convert.ToString(delka * 10);
                        break;
                    case "metr":
                        delka_vysledek_label.Text = Convert.ToString(delka);
                        break;
                }
            }
        }
 
Nahoru Odpovědět 10.8.2015 18:18
Avatar
ostrozan
Redaktor
Avatar
ostrozan:

Jen jeden postřeh - proměnná "delka" by měla být** float**, jinak ti při hodnotě <1000 (převod m na km) vždy vyjde "0" ;-)

 
Nahoru Odpovědět  +1 10.8.2015 18:27
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na ostrozan
Ondřej Krsička:

Možná chce tazatel zaokrouhlovat.. :-) :D

 
Nahoru Odpovědět 10.8.2015 18:42
Avatar
Odpovídá na Honzs Sedlomn
sadlomaslox25:

hosi hosi stydte se :-D

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        var data = new Ratio[]
        {
            new Ratio("metr", 1),
            new Ratio("milimetr", 0.001m),
            new Ratio("kilometr", 1000),
            new Ratio("centimetr", 0.01m),
            new Ratio("decimetr", 0.1m)
        };
        delka_comboBox1.Items.AddRange(data);
        delka_comboBox2.Items.AddRange(data);

    }

    private void delka_button_Click(object sender, EventArgs e)
    {
        Ratio from = delka_comboBox1.SelectedItem as Ratio;
        Ratio to = delka_comboBox2.SelectedItem as Ratio;
        delka_vysledek_label.Text = (delka_numericUpDown1.Value * from.Ration / to.Ration).ToString();
    }
}

public class Ratio
{
    public string Name { get; private set; }
    public decimal Ration { get; private set; }

    public Ratio(string name, decimal ratio)
    {
        Name = name;
        Ration = ratio;
    }
    public override string ToString()
    {
        return Name;
    }
}
 
Nahoru Odpovědět  +4 10.8.2015 19:03
Avatar
Honzs Sedlomn:

Díky moc pjanusi, tohle mi moc pomohlo :) a sadlomaslox taky díky, ale tohle je na mě ještě moc složitý :D :)

 
Nahoru Odpovědět 10.8.2015 19:26
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na Honzs Sedlomn
Ondřej Krsička:

Označ mu to jako řešení vlákna ;)

 
Nahoru Odpovědět 10.8.2015 21:27
Avatar
Ondřej Krsička
Redaktor
Avatar
Ondřej Krsička:

Doporučil bych ti dělat to v konzoli. Nemusíš se soustředit na "hlouposti" okolo a můžeš se soustředit rovnou na logiku.

 
Nahoru Odpovědět  +1 10.8.2015 21:29
Avatar
Honzs Sedlomn:

Taky jsem označil :)

 
Nahoru Odpovědět 10.8.2015 21:47
Avatar
Honzs Sedlomn:

@ostrozan Díky moc za postřeh, měl jsem už vygumovanou hlavu a nevěděl, kde to přepsat, díky! :)

 
Nahoru Odpovědět 10.8.2015 22:25
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na sadlomaslox25
ostrozan:

Já osobně se teda nestydím - tvoje řešení je jedno z několika které se nabízí , ale vytasit ho na začátečníka je jako jít s kanónem na vrabce :-) tobě, mně a spoustě dalších příjde jako triviální, ale věř mu, že mu z toho jde hlava kolem a univerzálním typem var bych mu taky ještě hlavu nemotal.
Myslím, že i když by ho použil, tak ještě dlouhou dobu nebude vědět "vo co gou".
A proto řešení Ondřeje považuju v tomto případě jako nejlepší.
Musím ale dodat, že tazatel by se samozřejmě měl časem dobrat i takovýchto postupů a tys mu ukázal, jak že by to mnělo vypadat.

 
Nahoru Odpovědět  +1 11.8.2015 18:00
Avatar
ostrozan
Redaktor
Avatar
ostrozan:

Když už jsem se do diskuse pustil, nedá mi to abyc ti (i dalším začátečníkům) nedoporučil ještě jednu věc i když je mimo téma:

Jestli se chceš tvorbou aplikací zabývat vážněji, pouštět se so složitějších projektů - co nejdřív přejdi z Windows Forms na WPF.

A proč?

  • není to nic složitého - všechno, co ses do teď naučil využiješ - největší odlišností u WPF je, že vstupuje do hry značkovací jazyk (XAML) pro tvorbu formuláře,ale funguje tu stejně drag and drop z tooloxu jako u WF
  • výhody jsou dobře popsané ve zdejších tutorialech tak jen ve zkratce: binding, relativní pozicování... ale i další, které v tutoriálu nejsou jako směrované události, nebo flow document mně osobně ulehčily hodně práce nemluvě o tom, že si ve WPF můžeš - třeba za pomoci flow documentu dovolit věci ve WF nemyslitelné.
  • a nakonec WPF se už na tolik podobá jazyku JAVA , že naučit se ho je pak hračka -
    :-)
 
Nahoru Odpovědět 12.8.2015 14:38
Avatar
Ondřej Krsička
Redaktor
Avatar
Odpovídá na ostrozan
Ondřej Krsička:

Máš pravdu, ale tím by se měl zabývat do hloubky, až se bude orientovat v OOP a bude dobře ovládat základní konstrukce.

 
Nahoru Odpovědět  +1 12.8.2015 16:03
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Ondřej Krsička
ostrozan:

Ale to se přece nevylučuje - C# je společný pro oboje a stejně ve zdejším tutoriálu C# jsou příklady pro konzoli - a počítám tedy, že základy oop má už za sebou, když už se pustil do oken -já jen píšu, že pro okenní aplkace je WPF vhodnější nástroj pro kohokoliv, tedy i pro začátečníky.
To že je na vyšší úrovni, neznamená že je náročnější na učení než WF.

 
Nahoru Odpovědět  +2 12.8.2015 16:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.