[C#] syntax error (???)

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

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

Odeslat příspěvekod Alesh2020 13. 10. 2021 14:59

https://files.fm/u/fdsfyepgg

Jo, tak to asi myslíš tohle. A k čemu mi to je dobrý? Co tím zdebaguju?
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 13. 10. 2021 15:24

Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 13. 10. 2021 15:58

A] díky za radu.
B] ok, a k čemu je to dobrý?
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 13. 10. 2021 16:00

Dobrý je to k tomu, že si můžeš prokrokovat, co se v té metodě děje a z toho odvodit, kde je chyba.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 13. 10. 2021 16:51

To si fakt nedovedu představit... jak bys postupoval ty?
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 13. 10. 2021 16:54

Tak jak jsem napsal. Prokrokovat si to. Prostě se tam podíváš, jak se při výpočtu mění jednotlivé proměnné a porovnáš to s tím, jak by se měnit měly.
Wikan
Moderátor
Uživatelský avatar

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

https://files.fm/u/wpfbpnvyp

Asi myslíš tohle že... chápu, že o zobrazování hodnot proměnných se evidentně stará sekce vlevo dole... ale jak z ní mám vydedukovat nápravu bordelu v proměnných a jak ji opravit, to fakt jde mimo mě.
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 13. 10. 2021 18:34

Pro jistotu se zeptám. Víš, jak se počítá faktorial?
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 13. 10. 2021 18:41

Faktorial čisla 7:

7 * 6 * 5 * 4 * 3 * 2 * 1
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 13. 10. 2021 18:57

Ok, tak stejným způsobem to dělá i ta metoda. Teda měla by. Když si to projdeš, tak zjistíš, že tam něco chybí.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 13. 10. 2021 19:04

Zkusím to project.
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Alesh2020 14. 10. 2021 08:29

Jo, už mi to docvaklo, kde je problém.

Dokud tam bylo „while (n > 3)“ program načetl zadané číslo – např. 7 – a použil ho jednak jako číslo, které má být „faktorizováno“ tak i jako počet kroků (řečeno metaforicky). 7 * 6 * 5 * 4 * 3 * 2 * 1 a crashlo to na třetím kroku.

Proto tam musí být „while (n > 1)“, pak se to chová korektně.

-- 14. 10. 2021 09:05 --

Kód: Vybrat vše
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace faktorial         // 86
{
    class Program
    {
        static int Faktorial(int n)
        {
            if (n == 0)
            {
                return 1;
            }
            int vysledek = n;
            while (n > 1)
            {
                vysledek *= --n;
            }
            return vysledek;
        }

        static void Main(string[] args)
        {
            Console.Write("Zadejte celé číslo: ");
            int n = Knihovna.Vstup.ČtiInt();
            if (n <= 0)
            {
                Console.WriteLine("Faktoriál záporného čísla neexistuje");
            }
            else Console.WriteLine($"Jeho faktoriál je {Faktorial(n)}");
        }
    }
}


Ještě jeden problém: v knize psáno, že aby se předešlo situaci
Zadejte celé číslo: 0
Faktoriál záporného čísla neexistuje
, má se před první příkaz metody Faktorial() přidat tohle
Kód: Vybrat vše
   if (n == 0)
            {
                return 1;
            }
(má to logiku, program detekuje, zda uživatel zadal nulu, a pokud se tak stane, reaguje, jak se má). Proč to pořád reaguje tak, jak reagovat nemá, tedy:
Zadejte celé číslo: 0
Faktoriál záporného čísla neexistuje


Chápu pointu chyby, chápu, jak ji předejít, proto se tak divím, že to nejde. :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 14. 10. 2021 09:15

Úplně tam stačí while (n > 2). Násobit to na konci jedničkou už nemá smysl.
if (n == 0) určitě nevyřeší problém se zápornými čísly. To jenom ošetřuje faktorial nuly, což je zcela validní případ.
Problém je v podmínce v metodě Main.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 14. 10. 2021 09:21

Úplně tam stačí while (n > 2). Násobit to na konci jedničkou už nemá smysl.
- jo, to chápu, já chtěl bejt jen korektní
if (n == 0) určitě nevyřeší problém se zápornými čísly.
- záporný čísla mám vyřešený už dávno, přes to "else" teď řešim právě a jedině tu situaci s nulou, kde mi to fakt vrací - když na žádost "Zadejte celé číslo" odpovím "0" tak program reaguje odpovědí "Faktoriál záporného čísla neexistuje"
Kód: Vybrat vše
  if (n == 0) Toto mi poradila kniha (a tu logiku tam vidím) ale bez efektu.
            {
                return 1;.
            }
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Alesh2020 14. 10. 2021 10:26

Co s tou nulou teda?
Alesh2020
Junior
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ů