Diskuze: Nevím si rady prosím poraďte :)

C# .NET .NET (C# a Visual Basic) Nevím si rady prosím poraďte :) American English version English version

Avatar
miosei.joji
Člen
Avatar
miosei.joji:

Zdravím, tvořím projekt a potřeboval bych pomoc.
Program slouží k procvičování násobilky takže uživatel se snaží vypočítat vygenerované příklady. Háček je v tom, že pokud se uživatel splete u některých příkladů a zadá špatný výsledek tak se mají špatně vypočítané příklady přidávat do cvičení tak dlouho, dokud je uživatel 2krát nespočítá. A to mi dělá největší problém... Zjistit jaký byl příklad který špatně spočítal a poté ho zobrazit ještě znovu 2krát DOKUD ho nespočítá správně.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Prace
{
    public partial class Vypocet : Form
    {

        List<Label> labels1 = new List<Label>();
        List<Label> labels2 = new List<Label>();
        List<int> Equal = new List<int>();
        List<TextBox> tx = new List<TextBox>();
        List<Label> l = new List<Label>();
        List<Label> wrong = new List<Label>();
        int NUM;
        int dobrychOd;
        public Vypocet(string MAXTextBox, string NUMValueTextBox, string SetLowValueTextBox, string SetHighValueTextBox)
        {
            int MAX = Convert.ToInt32(MAXTextBox);
            NUM = Convert.ToInt32(NUMValueTextBox);
            int MIN = 1;
            int LOW = Convert.ToInt32(SetLowValueTextBox);
            int HIGH = Convert.ToInt32(SetHighValueTextBox);
            InitializeComponent();
            Random random = new Random();
            FirstPanel.Controls.Clear();
            for (int i = 0; i < NUM; i++)
            {
                string rand1 = random.Next(MIN, MAX).ToString();
                string rand2 = random.Next(LOW, HIGH).ToString();
                int r1 = int.Parse(rand1);
                int r2 = int.Parse(rand2);
                Equal.Add((r1 * r2));

                labels1.Add(new Label());
                labels1[i].Name = "l" + i.ToString();
                labels1[i].Text = rand1;
                labels1[i].AutoSize = true;

                labels2.Add(new Label());
                labels2[i].Name = "t" + i.ToString();
                labels2[i].Text = rand2;
                labels2[i].AutoSize = true;
                tx.Add(new TextBox());
                tx[i].Name = "tx" + i.ToString();

                l.Add(new Label());
                l[i].Name = "l" + i.ToString();
                l[i].Text = rand1 + " * " + rand2 + " =";

                FirstPanel.Controls.Add(l[i]);
                FirstPanel.Controls.Add(tx[i]);
            }
        }

        private void runButton_Click(object sender, EventArgs e)
        {
            FirstPanel.Controls.Clear();
            int celkem = NUM;
            dobrychOd = 0;
            for (int i = 0; i < NUM; i++)
            {
                if (Equal[i] == Convert.ToInt32(tx[i].Text))
                {
                    dobrychOd++;
                }
                else
                {
                    tx.Add(new TextBox());
                    wrong.Add(new Label());
                    wrong[i].Name = "w" + i.ToString();
                    wrong[i].Text = l[i].Name;
                    wrong[i].AutoSize = true;
                    FirstPanel.Controls.Add(wrong[i]);
                }
            }
        }
            }
        }

Pokud mám na v kodu něaké blbosti tak si toho nevšímejte, jsou to jen mé pokusy o správné fungování :)

Editováno 10.3.2014 18:39
 
Odpovědět 10.3.2014 18:39
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Promiň, ale tohle je totální prasokód...

 
Nahoru Odpovědět 10.3.2014 18:48
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na miosei.joji
David Čápka:

Strašně rád bych ti napsal, co máš špatně, ale bohužel je to asi úplně všechno. Tohle nepůjde, musíš si pročíst alespoň nějaké základy, co tu jsou.

Nahoru Odpovědět 10.3.2014 18:53
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na miosei.joji
David Čápka:

Přeci jen to zkusím, rád pokouším své možnosti.

Konvence nula nebo snad v záporných hodnotách. Třída pojmenovaná výpočet nedává smysl, zvláště když dědí z formuláře. Už jsi někdy viděl výpočet - formulář? Já tedy ne. Výpočet je výsledek početní operace, ne okno. Takže to bude asi VypocetForm nebo něco takového. Nauč se používat camelCase a PascalCase. string MAXTextBox, co to je? řetězec MAXTextovéPolíčko? Tak buď TextBox nebo řetězec, tys chtěl asi string max. Neparsoval bych convertem, ale pomocí Parse.

Výpis více hodnot se opravdu nedělá tak, že generuješ labely. Label je textový popisek. K výpisu/zápisu tabulkových hodnot slouží tabulka, třeba DataGridView. Jsou tu na to na všechno příklady.

Nahoru Odpovědět 10.3.2014 19:00
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
miosei.joji
Člen
Avatar
miosei.joji:

Ano rozumím je to můj paskvil to beru.

Ano je to VypocetForm a do neho taham z predesleho win formu hodnoty jako počet příkladů, maximalni hodnotu (první činitel) a rozsah druheho činitele.
Pokud můžete poradit jak mám hodnoty ukládat a přistupovat a hlavně jak vyřešit problém který jsem popsal nahoře byl bych rád. S mým kodem se nezabývejte pokud se vám nelíbí. Jde mi o to jak logicky vyřešit ten problém.
Nepotřebuju ani kod jen způsob jakým bych to měl asi udělat. :)

 
Nahoru Odpovědět 10.3.2014 19:30
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na miosei.joji
David Čápka:

Řeknu ti, aby sis udělal strukturu nebo objekt příklad s příslušnými vlastnostmi a ten si ukládal potom ukládal do kolekcí jako prikladySpravne, prikladySpatne. Jenže pro tebe je problém udělat i objekt a když ti 2 lidé nezávisle na sobě řeknou, že to je úplný nesmysl, tak by ses měl zamyslet nad dalším postupme a ne dělat jako že nic. Ale to je tvoje věc, já jsem tu své již řekl.

Nahoru Odpovědět 10.3.2014 19:42
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na miosei.joji
Jan Vargovský:

Uložit si ke každé otázce taky kolikrát ji zodpověděl dobře/špatně ? Nebo pomocí nějaké kolekce.

 
Nahoru Odpovědět 10.3.2014 19:43
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Můžeš postnout jednu fotku z GUI? Nebo nám alespoň popsat jak to tam probíhá? Vidím, že vytváříš dynamicky kontrolky. Měl bych kdyžtak věc, která ti tuto věc stokrát ulehčí.

 
Nahoru Odpovědět 10.3.2014 19:46
Avatar
miosei.joji
Člen
Avatar
miosei.joji:

Zde je formulář do kterého se zadávají hodnoty s kterýma se dále pracuje.

 
Nahoru Odpovědět 10.3.2014 20:05
Avatar
miosei.joji
Člen
Avatar
miosei.joji:

A zde jsou vidět vygenerované příklady

 
Nahoru Odpovědět 10.3.2014 20:06
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na miosei.joji
Jan Vargovský:

Jak jsem myslel. Udělej si vlastní user control (z toho labelu + textboxu). Mu dej vlastnost Number1, Number2, Operation a Result a bude se ti s tím pracovat daleko lépe.

 
Nahoru Odpovědět 10.3.2014 20:09
Avatar
miosei.joji
Člen
Avatar
miosei.joji:

Vlastně generuju 2 hodnoty. První a druhý činitel. Ty se zapíší do listu l jako celý příklad a pak se vypisuje na do Panelu stejne jako TextBoxy.

 
Nahoru Odpovědět 10.3.2014 20:09
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Jinak poradím ti pak to skládej do FlowLayoutPanelu, když bude příklad dobře, tak ho tam necháš, když blbě tak mu inkrementuješ nějaký vnitřní stav, že byl blbě a smažeš ho v tom případě, že byl dobře a zároveň to počítadlo bylo ekvivalentní k 0.

Editováno 10.3.2014 20:11
 
Nahoru Odpovědět 10.3.2014 20:11
Avatar
gcx11
Redaktor
Avatar
Odpovídá na miosei.joji
gcx11:

Na tomhle procvičovat násobilku - než bych to spočítal, tak by mě ranila mrtvice... Nejsou to trochu moc velká čísla?

Jestli chceš uchovávat ty příklady, tak zkus seznam (můžeš přidávat a odebírat hodnoty):
http://www.itnetwork.cz/…kolekce-list

 
Nahoru Odpovědět 10.3.2014 20:11
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na gcx11
Jan Vargovský:

Těch seznamů tam má asi 6... Myslím, že je to už dost :D

 
Nahoru Odpovědět 10.3.2014 20:14
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Jan Vargovský
gcx11:

Omlouvám se, tak toho jsem si nevšiml :D

Editováno 10.3.2014 20:15
 
Nahoru Odpovědět 10.3.2014 20:15
Avatar
miosei.joji
Člen
Avatar
miosei.joji:

Jo díky moc za pomoc. Půjdu s tím něco udělat tak dík za váš čas :)

 
Nahoru Odpovědět 10.3.2014 20:16
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na miosei.joji
David Čápka:

Začni s tím, že si uděláš "class Priklad" a ne, nebude dědit od formu ;-)

Nahoru Odpovědět 10.3.2014 20:39
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
miosei.joji
Člen
Avatar
miosei.joji:

:D fakt sry že to vypadá tak jak to vypadá ale prostě nejsem schopný to vyřešit tak jsem to už asi pětkrát přepisoval a to už mě pak nezjímalo jak to vypadá nebo funguje, hlavně že mi hodnoty dorazili kde jsem chtěl. Ale já jsem taky narazil a celkem pěkně díky toho :D

 
Nahoru Odpovědět 10.3.2014 20:48
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 19 zpráv z 19.