[C#] syntax error (???)

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Wikan 16. 10. 2021 17:28

Alesh2020 píše:co tím chtěl básník říct?

No přesně to, co tam píše. Můžeš to použít v definici proměnné, ale jakmile deklaruješ parametr metody nebo datovou složku třídy (field nebo property), tak musíš uvést konkrétní typ.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 10. 2021 18:43

Děkuju, ale stále tomu nerozumim.

-- 16. 10. 2021 19:43 --

Dobrý podvečer.
Mám aplikaci na převod mezi číselnými soustavami, a přiznám se, že opsanej vzor. Dá se z toho nějak odvodit, jak to funguje? Opravdu sem dneska tak vyšťavenej, že už nemám sílu.

Kód: Vybrat vše
using System;
using System.Text;
using Knihovna;

namespace konverze
{
    public class Konvertor
    {
        private const string ČÍSLICE = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        private int základ;
        public Konvertor(int _základ)
        {
            if (_základ < 2) throw new Exception("Základ menší než 2");
            if (_základ > 36) throw new Exception("Základ větší než 36");
            základ = _základ;
        }
        public string Konvertuj(int n)
        {
            if (n == 0)
            {
                return "0";
            }
            StringBuilder číslo = new StringBuilder("");
            bool záporné = n < 0;
            if (záporné)
            {
                n = Math.Abs(n);
            }
            while (n != 0)
            {
                číslo.Append(ČÍSLICE[n % základ]);
                n /= základ;
            }
            if (záporné)
            {
                číslo.Append("-");
            }
            int i = 0, j = číslo.Length - 1;
            while (i < j)
            {
                char pom = číslo[i];
                číslo[i++] = číslo[j];
                číslo[j--] = pom;
            }
            return číslo.ToString();
            //char[] znaky = číslo.ToString().ToCharArray();
            //Array.Reverse(znaky);
            //return new string(znaky);
        }
    }

    class Test
    {
        static void Main()
        {
            Console.Write("Zadejte základ cílové soustavy (2 - 36): ");
            int základ = Vstup.ČtiInt();
            Konvertor konvertor = new Konvertor(základ);
            Console.Write("Zadejte číslo, které do ní chcete převést: ");
            int co = Vstup.ČtiInt();
            Console.WriteLine(konvertor.Konvertuj(co));
            //Console.Read();
        }
    }
}
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 10. 2021 19:08

Tak když si půjčím ten Konvertor a vezmu z něj jenom zajímavé části:
Kód: Vybrat vše
public class Konvertor
{
    private int základ; // tady nemůže být var - jde o datovou složku třídy, konkrétně field

    public Konvertor(int _základ) // tady nemůže být var - jde o parametr
    {
        ...
    }

    public string Konvertuj(int n)  // tady nemůže být var - jde opět o parametr
    {
        StringBuilder číslo = new StringBuilder("");  // tady může být var, jde o proměnnou
        bool záporné = n < 0; // opět proměnná, může být var
        ...
    }
}


Mezi soustavami se obecně převádí tak, že převáděné číslo postupně dělíš základem soustavy, do které převádíš, a při každém převodu si poznamenáš zbytek po dělení.
Např. 135 do osmičkové soustavy:
135 / 8 = 16 zbytek 7
16 / 8 = 2 zbytek 0
2 / 8 = 0 zbytek 2 (výsledek = 0 znamená, že končíme)
Výsledné číslo je 207 (= zbytky po dělení psané od konce)
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 10. 2021 19:17

Takle od pohledu tomu rozumím, ale jak udělat to, že

A] program ví, že má dělit znovu a znovu výsledek, a zbytek si uložit.
B] program ví, že pak musí ty zbytky zobrazit, a "zrcadlově převrátit?"
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 10. 2021 19:23

A]
Kód: Vybrat vše
while (n != 0)
{
    číslo.Append(ČÍSLICE[n % základ]);
    n /= základ;
}


B]
Kód: Vybrat vše
while (i < j)
{
    char pom = číslo[i];
    číslo[i++] = číslo[j];
    číslo[j--] = pom;
}
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 10. 2021 19:23

Takže, když vím, že int penize = 500 je "int = typ proměnné, penize = název proměnné a 500 je obsah proměnné" tak u tý deklarace tříd je (a není to náhodou metody):

private int základ; je "private = modifikátor přístupu, int typ třídy a základ jméno třídy" . Je to tak dobře?
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 10. 2021 19:30

private int základ;
private = modifikátor přístupu,
int typ fieldu
a základ jméno fieldu

Nevím, jaký je český ekvivalent pro field.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 10. 2021 19:34

Pravděpodobně pole... jedinej důvod, proč mám VS v CZ je, protože tak je i psaná učebnice. ENG by nebyl problém, ale něco se dá přeložit více způsoby, a mohl bych dojít k bodu, kdy já si já nějak přeložím v hlavě CZ > ENG pokyn z knihy, bude to sice správně, ale v interface VS to bude jinak (a taky správně). V tom je ten problém.
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 10. 2021 19:35

Nikoliv. Pole je array.
Někde jsem našel, že by to mohla být "položka". Ale v praxi jsem to nikdy neslyšel.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alpha8520 16. 10. 2021 19:50

Nejsem si jist, ale mám pocit, že se tomu česky říká dost nešikovně "atributy".

V tomto pozor na microsoftí stránky a uvědomovat si, co čtu!!!
Microsoft stránky používají automatický překlad do češtiny, tudíž "field", stejně jako "array" překládají jako "pole". Pokud umíš anglicky, v začátcích určitě doporučuji číst v angličtině...
Alpha8520
Junior

Odeslat příspěvekod Wikan 16. 10. 2021 20:03

Atributy jsou v C# metadata.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 10. 2021 20:23

Alpha8520 píše:Nejsem si jist, ale mám pocit, že se tomu česky říká dost nešikovně "atributy".

V tomto pozor na microsoftí stránky a uvědomovat si, co čtu!!!
Microsoft stránky používají automatický překlad do češtiny, tudíž "field", stejně jako "array" překládají jako "pole". Pokud umíš anglicky, v začátcích určitě doporučuji číst v angličtině...


Zkusit to mohu, ale jak říkám, ta učebnice (autor: Miroslav Virius) je kvalitní, a je holt "nakalibrovaná" na český VS2019. Proto se - než se skutečně chytnu - snažím co nejmíň žonglovat se slovy.

"Atributy jsou v C# metadata." Vím co jsou metadata ("data o datech", třeba u fotek info o foťáku/mobilu, co fotku udělal), ale nerozumím tvému kontextu.
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 10. 2021 20:24

To neřeš, tak daleko ještě nejsi.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 16. 10. 2021 20:43

Když mi to řekneš, komp mi určitě do obličeje nevybouchne. Snažím se to umět, ne jenom "slepovat slovíčka" kterým pořádně nerozumím.
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 16. 10. 2021 20:51

Ale při tvé úrovni znalostí tě to spíš zmate, než že by tě to nějak posunulo dál.
Atributy jsou určité informace, které je možné přiřadit k určitým "prvkům" programu - třídám, vlastnostem, parametrům atd. a ty informace potom číst při překladu nebo (zejména) za běhu programu.
Wikan
Moderátor
Uživatelský avatar

Předchozí stránkaDalší stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků