[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();
        }
    }
}
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?"
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?
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.
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.
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.
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