Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
miosei.joji
Člen
Avatar
miosei.joji:10.3.2014 18:39

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ý
Tvůrce
Avatar
Jan Vargovský:10.3.2014 18:48

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

 
Nahoru Odpovědět
10.3.2014 18:48
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na miosei.joji
David Hartinger:10.3.2014 18:53

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
You are the greatest project you will ever work on.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na miosei.joji
David Hartinger:10.3.2014 19:00

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
You are the greatest project you will ever work on.
Avatar
miosei.joji
Člen
Avatar
miosei.joji:10.3.2014 19:30

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 Hartinger
Vlastník
Avatar
Odpovídá na miosei.joji
David Hartinger:10.3.2014 19:42

Ř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
You are the greatest project you will ever work on.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na miosei.joji
Jan Vargovský:10.3.2014 19:43

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ý
Tvůrce
Avatar
Jan Vargovský:10.3.2014 19:46

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:10.3.2014 20:05

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:10.3.2014 20:06

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

 
Nahoru Odpovědět
10.3.2014 20:06
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na miosei.joji
Jan Vargovský:10.3.2014 20:09

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:10.3.2014 20:09

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ý
Tvůrce
Avatar
Jan Vargovský:10.3.2014 20:11

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
Tvůrce
Avatar
Odpovídá na miosei.joji
gcx11:10.3.2014 20:11

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ý
Tvůrce
Avatar
Odpovídá na gcx11
Jan Vargovský:10.3.2014 20:14

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
Tvůrce
Avatar
Odpovídá na Jan Vargovský
gcx11:10.3.2014 20:15

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:10.3.2014 20:16

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 Hartinger
Vlastník
Avatar
Odpovídá na miosei.joji
David Hartinger:10.3.2014 20:39

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
You are the greatest project you will ever work on.
Avatar
miosei.joji
Člen
Avatar
miosei.joji:10.3.2014 20:48

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