• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# Błąd w programie obliczającym silnie za pomocą funkcji

Aruba Cloud - Virtual Private Server VPS
0 głosów
218 wizyt
pytanie zadane 7 grudnia 2022 w C# przez Hawanken Szynkin Nowicjusz (160 p.)

Witam, mam problem z tym oto kodem:

Po debugowaniu zamiast silni z "a" zwraca mi 0. Wiecie może gdzie zrobiłem błąd?

 

Kod: 

using System;

namespace funkcje3
{
    class Program
    {
        static void Main(string[] args)
        {
            int wynik = 1;

            Console.WriteLine("Podaj a: ");
            int a = Int32.Parse(Console.ReadLine());
            Silnia(ref a,ref wynik );
            Console.WriteLine(a);
            

        }
        static int Silnia(ref int a, ref int wynik)
        {
         
            for (int i = 0; i <= wynik; i++)
            {
                a *= i;
            }            
            return a;

        }

    }

}

2 odpowiedzi

0 głosów
odpowiedź 7 grudnia 2022 przez adrian17 Mentor (352,580 p.)
Zaczynasz pętlę od zera, więc mnożysz przez zero, a cokolwiek razy zero == zero.

(btw, raczej trochę mało sensu że funkcja silnia bierze ref int - niech po prostu zwraca wynik i tyle?)
komentarz 7 grudnia 2022 przez Hawanken Szynkin Nowicjusz (160 p.)
Tak jak sugerowałeś zmieniłem i  na i=1 i teraz zamiast 5! = 120 wyświetla mi 5!=5 musi być jeszcze jakiś błąd
komentarz 7 grudnia 2022 przez adrian17 Mentor (352,580 p.)
Spójrz jaką zmienną używasz jako liczbę wywołań funkcji i jaką ma wartość ;)
komentarz 7 grudnia 2022 przez Hawanken Szynkin Nowicjusz (160 p.)
Męczę się nad tym już tyle i nic nie mogę wykombinować, próbowałem już każdej możliwej wariacji poza tą jedną prawdziwą, mógłbyś mnie bardziej nakierować? Wydaje mi się że to jest problem z return, bo nie zwraca żadnej liczby po zakończeniu funkcji.

 

using System;

namespace funkcje3
{
    class Program
    {
        static void Main(string[] args)
        {
            int wynik = 1;

            Console.WriteLine("Podaj a: ");
            int a = Int32.Parse(Console.ReadLine());
            Silnia(a,wynik );
            

        }
        static int Silnia(int a, int wynik)
        {
          
            for (int i = 1; i <= a; i++)
            {
                a *= i;
            }            
            return a;

        }

    }

}
komentarz 7 grudnia 2022 przez adrian17 Mentor (352,580 p.)

bo nie zwraca żadnej liczby po zakończeniu funkcji.

Zwraca, ale w ogóle z funkcji nie wyciągasz wartości którą zwróciła. Poczytaj może jeszcze raz, jak się woła funkcje które coś zwracają :)

            for (int i = 1; i <= a; i++)
            {
                a *= i;
            }          

A to jest masło maślane. Tą samą zmienną używasz jako zmienną przechowującą wynik silnii i jako liczbę wywołań pętli.

0 głosów
odpowiedź 7 grudnia 2022 przez Hawanken Szynkin Nowicjusz (160 p.)
Dobra udało mi się to rozgryść, zostawiam tu kod jakby ktoś miał taki sam problem jak ja

 

 

using System;

namespace funkcje3
{
    class Program
    {
        static void Main(string[] args)
        {
            int wynik = 1;

            Console.WriteLine("Podaj a: ");
            int a = Int32.Parse(Console.ReadLine());
            Console.WriteLine(Silnia(a, wynik));

        }
        static int Silnia(int a, int wynik)
        {
            
          for (int i = 1; i <= a; i++)
            {

                wynik = wynik * i;
               
            }
            return wynik;   

        }
        

    }
}
komentarz 7 grudnia 2022 przez adrian17 Mentor (352,580 p.)
OK, tylko wciąż przekombinowane :)

Nie potrzebujesz tego argumentu do funkcji `wynik`, ani zmiennej `wynik` w mainie. Wystarczy mieć zmienną wynik w funkcji liczącej silnię.

Podobne pytania

0 głosów
1 odpowiedź 709 wizyt
pytanie zadane 18 grudnia 2017 w C# przez kamil98u Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 572 wizyt
pytanie zadane 24 stycznia 2022 w C# przez mateusz45 Gaduła (3,280 p.)
0 głosów
1 odpowiedź 382 wizyt
pytanie zadane 4 maja 2021 w C# przez mateusz45 Gaduła (3,280 p.)

93,332 zapytań

142,324 odpowiedzi

322,400 komentarzy

62,668 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...