Zadanie z książki rozwiązane inaczej.

0

Mam książkę http://helion.pl/ksiazki/c-zadania-z-programowania-z-przykladowymi-rozwiazaniami-miroslaw-j-kubiak,cshzap.htm i tam jest jedno zadanie na pętlę for.

Treść zadania: "Napisz program, który za pomocą instrukcji for znajduje największą i najmniejszą liczbę ze zbioru n wylosowanych liczb całkowitych od 0 do 99 (w zadaniu n=5) oraz oblicza średnią ze wszystkich liczb."

I w książce to zadanie jest zrobione faktycznie z pętlą for samą, lecz wkradł się chyba jakiś błąd w druku bo w przykładowym rozwiązaniu użyli zmiennej min, która nigdzie nie jest przypisana (przepisałem kod do VS i nie działa). Jako że znam trochę tablice w c# to postanowiłem sobie zrobić to zadanie z ich wykorzystaniem.

To jest kod który mi wyszedł:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zadanie_3._16
{
    class Program
    {
        static void Main(string[] args)
        {
            int iloscLiczb = 5;
            double srednia = 0, min, max;
            double[] liczby = new double[5];
            Random r = new Random();
            Console.WriteLine("Program losuje {0} liczb całkowitych od 0 do 99 a następnie znajduje najmniejszą i największą " +
                "oraz oblicza średnią ze wszystkich wylosowanych liczb", iloscLiczb);
            for (int i = 0; i < iloscLiczb; i++)
            {
                liczby[i] = r.Next(0, 99);
                if (liczby[4] != 0)
                    Console.WriteLine("Wylosowane liczby to: {0}, {1}, {2}, {3}, {4}.", liczby[0], liczby[1], liczby[2], liczby[3], liczby[4]);
            }
            min = liczby.Min();
            max = liczby.Max();
            Console.WriteLine("Liczba maksymalna: {0}", max);
            Console.WriteLine("Liczba minimalna: {0}", min);
            srednia = liczby.Average();
            Console.WriteLine("Średnia: {0}", srednia);
            Console.ReadLine();
        }
    }
}

I tak się zastanawiam czy jest możliwość uproszczenia tej 23 linijki w kodzie.

Z góry dziękuję za pomoc

0
mariano901229 napisał(a):

Powyższy kod się przecież kompiluje. A deklaracja zmiennej min jest tutaj:

 double srednia = 0, min, max;

Powyższy kod to jest moje rozwiązanie, to z książki się w ogóle nie kompiluje bo w książce jest tak(może i deklaracja jest, ale przypisania wartości już nie ma):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zadanie_3._16_przepisane
{
    class Program
    {
        static void Main(string[] args)
        {
            int iloscLiczb = 5;
            double liczba, suma = 0, min, max;
            Console.WriteLine("Program losuje " + iloscLiczb + " liczb całkowitych od 0 do 99" +
                " a następnie znajduje najmniejszą i największą oraz oblicza średnią ze wszystkich wylosowanych liczb.");
            Random r = new Random();
            Console.WriteLine();
            Console.Write("Wylosowane liczby to: {0},", min);
            max = min;
            suma += max;
            for (int i = 2; i < iloscLiczb; i++)
            {
                liczba = Math.Round(100 * (r.NextDouble()));
                if (i < iloscLiczb)
                    Console.Write(liczba + ",");
                else
                {
                    Console.Write(liczba + ", ");
                    Console.WriteLine();
                }
                if (max < liczba) max = liczba;
                if (liczba < min) min = liczba;
                suma += liczba;
            }
            Console.WriteLine();
            Console.WriteLine("Największa liczba to: {0}", max);
            Console.WriteLine("Najmniejsza liczba to: {0}", min);
            Console.WriteLine("Średnia to: {0}", suma / iloscLiczb);
            Console.ReadLine();
        }
    }
}

Brakuje w książce dokładnie tej linijki, powinna ona być między linijką 18 a 17:

min = Math.Round(100 * (r.NextDouble()));

Jeszcze program nie wylosuje 5 liczb tylko 4 z powodu tej całej pętli bo tam startuje od 2 zamiast od 1, ale to może są jakieś błędy w druku.

Kod w pierwszym poście to jest moje rozwiązanie, które sam napisałem tylko z wykorzystaniem tablic.

0

Tak program losuje 4 liczby. Może autor bada spostrzegawczość czytelnika i daje mu pracę.

 
double liczba, suma = 0,  max;
double min =default(double);

lub

 
double liczba, suma = 0,  max;
double min =0;
0
Console.WriteLine("Wylosowane liczby to: {0}, {1}, {2}, {3}, {4}.", liczby[0], liczby[1], liczby[2], liczby[3], liczby[4]);

A tą linijkę da się jakoś inaczej rozwiązać?

1 użytkowników online, w tym zalogowanych: 0, gości: 1