Wyświetlenie największej i najmniejszej z dotychczas wprowadzonych liczb

0

Napisz program, który na bieżąco wyświetla w pętli while największą i najmniejszą z dotychczas wprowadzonych liczb,
wyjście z pętli, gdy podana liczba = 0

int n1, n2;
            do
            {
                Console.WriteLine("Podaj dwie liczby");
                n1 = Convert.ToInt32(Console.ReadLine());
                n2 = Convert.ToInt32(Console.ReadLine());
                if (n1 > n2)

                {
                    Console.WriteLine("Największa liczba to: " + n1);
                    Console.WriteLine("Najmniejsza liczba to: " + n2);
                }
                else
                {
                    Console.WriteLine("Największa liczba to: " + n2);
                    Console.WriteLine("Najmniejsza liczba to: " + n1);
                }
                if (n1 == n2)
                {
                    Console.WriteLine("Obie liczby są równe");
                }
                Console.ReadLine();
            } while (n1 != 0 && n2 !=0);

jak to zamienić, by ilość wpisywanych liczb była dowolna?

0

A po co chcesz to zmieniać? Napisz kod od nowa, bo masz do zrobienia zupełnie inne zadanie.

0

jakieś wskazówki?

3

Już dałem Ci wskazówki – napisz ten kod od nowa, nie patrząc na to co wkleiłeś w pierwszym poście.

Potrzebne są trzy zmienne – jedna dla podawanej liczby, druga dla wartości minimalnej, a trzecia dla maksymalnej, niech będzie num, min i max. Pętlę trzeba ustawić tak, aby podanie wartości 0 do zmiennej num zakańczało jej działanie. Jeśli podana liczba jest różna od 0 to należy ją wpisać do zmiennej min, o ile jest mniejsza. To samo z max. Po tych wszystkich warunkach należy wyświetlić na ekranie zawartość zmiennych min i max.

Moja propozycja:

int num;
int min = Int32.MaxValue;
int max = Int32.MinValue;

do
{
  Console.WriteLine("New number: ");
  num = Convert.ToInt32(Console.ReadLine());

  if (num != 0)
  {
      if (num < min) min = num;
      if (num > max) max = num;
      
      Console.WriteLine("min: {0}, max: {1}", min, max);
  } 
}
while (num != 0);

Edit: lub jak koledzy wskazali, bez warunków przy wyznaczaniu min i max:

min = Math.Min(min, num);
max = Math.Max(max, num);
4

Zmodyfikował bym trochę propozycję @furious programming, tak aby nie wywalało programu gdy użytkownik poda np. literę:

int num;
int min = int.MaxValue;
int max = int.MinValue;

do
{
    Console.WriteLine("New number: ");
    if(!int.TryParse(Console.ReadLine(), out num))
    {
        Console.WriteLine("Not an integer. Try again.");
        num = 1; // Warunek w pętli musi być true;
        continue;
    }

    if (num != 0)
    {
        min = Math.Min(num, min);
        max = Math.Max(num, max);

        Console.WriteLine("min: {0}, max: {1}", min, max);
    }
}
while (num != 0);
0

@atmal: powiem więcej. W tym przypadku nie musi być nawet tego if'a. Po prostu jeżeli nie zostanie wprowadzona liczba to int.TryParse wstawi do obiektu zero i pętla się skończy. :-)

Albo tak:

int min = int.MaxValue;
int max = int.MinValue;

while (int.TryParse(Console.ReadLine(), out int num))
{
    min = Math.Min(num, min);
    max = Math.Max(num, max);
    Console.WriteLine($"min: {min}, max: {max}");
}
0

a jak zrobić średnią z dotychczas wprowadzonych liczb, wyjście z pętli również, gdy podana liczba = 0

0

Wystarczą dwie zmienne, które ustawiasz na 0 – np. sum i count.

W pętli pobierasz liczbę z klawiatury i jeśli jest różna od 0, inkrementujesz o 1 zmienną count, a do sum dodajesz wartość podanej liczby. Na koniec pętli wyświetlasz sum / count w postaci liczby rzeczywistej.

0

@eucalyptus:

int num;
int min = int.MaxValue;
int max = int.MinValue;

Console.WriteLine("Number: ");
num = int.Parse(Console.ReadLine()); // Brak zabezpieczenia przed nie-liczbami.

while (num != 0)
{
    min = Math.Min(num, min);
    max = Math.Max(num, max);

    Console.WriteLine("min: {0}, max: {1}", min, max);

    Console.WriteLine("New number: ");
    if (!int.TryParse(Console.ReadLine(), out num))
    {
        Console.WriteLine("Not an integer. Try again.");
        num = 1; // Warunek w pętli musi być true;
        continue;
    }
}

Kolejność trzeba było pozmieniać ale działa jak należy.

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