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

SPOJ PP0604A - Średnia arytmetyczna

Object Storage Arubacloud
0 głosów
833 wizyt
pytanie zadane 10 sierpnia 2020 w SPOJ przez AgentTecza Obywatel (1,810 p.)
zmienione kategorie 11 sierpnia 2020 przez ScriptyChris

Potrzebuje pomocy mam tu takie zadanie ze spoja - https://pl.spoj.com/problems/PP0604A/

I nie rozumiem dlaczego jako drugie wychodzi 3 i jak to zaokrąglić do góry toś jest w stanie mi pomóc mój kod wygląda jak na razie tak: 

  static void Main(string[] args)
        {
            int t = int.Parse(Console.ReadLine());
            for (int i = 0; i < t; i++)
            {
                
                
                string liczby = Console.ReadLine();
                string[] teskt = liczby.Split(' ');
                int a = int.Parse(teskt[0]);
                int b = int.Parse(teskt[1]);
                int c = int.Parse(teskt[2]);
                int d = int.Parse(teskt[3]);
                int e = int.Parse(teskt[4]);
               
                int wynik = 0;
                wynik = a + b + c + d + e;
                double wynik1 = wynik / 5;
                Console.WriteLine(wynik1);
                
                
                
            }
        }

Z góry dziękuje

1 odpowiedź

0 głosów
odpowiedź 10 sierpnia 2020 przez sunzi Bywalec (2,000 p.)
wynik / 5

Wynik tego dzielenia to zawsze liczba całkowita zaokrąglona w dół (część dziesiętna jest ucinana) tzn. 99/100 = 0. Aby wynikiem była liczba zmiennoprzecinkowa to jedna z tych liczb musi być typu zmiennoprzecinkowego np. 100.0 jest typu double a więc 99/100.0 = 0.99. Możesz też używać rzutowania np 99/(double)100 = 0.99.

Jeśli chcesz zaokrąglić w górę to możesz użyć modułu Math i metody Ceiling: https://docs.microsoft.com/en-us/dotnet/api/system.math.ceiling?view=netcore-3.1

Klasa Math zawiera dużo więcej matematycznych operacji - warto się zapoznać co ona potrafi(a potrafi całkiem sporo) ;)

komentarz 11 sierpnia 2020 przez AgentTecza Obywatel (1,810 p.)
 static void Main(string[] args)
        {
            int t = int.Parse(Console.ReadLine());
            for (int i = 0; i < t; i++)
            {
                
                
                string liczby = Console.ReadLine();
                string[] teskt = liczby.Split(' ');
                int a = int.Parse(teskt[0]);
                int b = int.Parse(teskt[1]);
                int c = int.Parse(teskt[2]);
                int d = int.Parse(teskt[3]);
                int e = int.Parse(teskt[4]);
               
                int wynik = 0;
                wynik = a + b + c + d + e;
                double wynik1 = wynik /(double) 5;
                Math.Ceiling(wynik1);
                Console.WriteLine(wynik1);
                
                
                
            }
        }

Dopisałem do klasę ale nie rozumiem dlaczego nadal mi tego nie zaokrągla możesz mi jakoś pomóc?

 

komentarz 11 sierpnia 2020 przez sunzi Bywalec (2,000 p.)
edycja 11 sierpnia 2020 przez sunzi
double wynik1 = wynik /(double) 5;
Math.Ceiling(wynik1);

Ten kod nie zadziała jakbyś chciał bo nie przypisujesz nigdzie wyniku zaokrąglenia. Proponuję:

double wynik1 = wynik /(double) 5;
wynik1 = Math.Ceiling(wynik1);

lub

double wynik1 = Math.Ceiling(wynik /(double) 5);

 

Musisz pamiętać, że wszystkie liczby w c# są kopiowane podczas przekazywania do innych metod a więc żadna metoda np: Foo(mojaLiczba) nie może zmodyfikować zmodyfikować zmiennej mojaLiczba. Aby zmienić wartość mojaLiczba musisz wyraźnie przypisać do niej wartość. np mojaLiczba = ZrobObliczenia(mojaLiczba); nie ma innego sposobu (no dobra można przekazać przez referencję ale pomijam tutaj ten wątek - możesz doczytać sobie sam w wolnej chwili: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ref ) aby zmienić wartość liczbową niż przez przypisanie nowej wartości.

Podobne pytania

+1 głos
1 odpowiedź 495 wizyt
pytanie zadane 29 czerwca 2018 w C i C++ przez ernest52 Początkujący (450 p.)
0 głosów
1 odpowiedź 350 wizyt
pytanie zadane 2 listopada 2016 w C i C++ przez amator1 Początkujący (470 p.)
0 głosów
1 odpowiedź 1,029 wizyt
pytanie zadane 7 sierpnia 2018 w SPOJ przez Piotr Błaszczak Bywalec (2,890 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...