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

2017-12-05 18:46

Rejestracja: 3 lata temu

Ostatnio: 10 miesięcy temu

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?

edytowany 1x, ostatnio: furious programming, 2017-12-05 18:58

Pozostało 580 znaków

2017-12-05 18:59
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 54 sekundy temu

Lokalizacja: Tuchów

0

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


edytowany 1x, ostatnio: furious programming, 2017-12-05 18:59

Pozostało 580 znaków

2017-12-05 19:04

Rejestracja: 3 lata temu

Ostatnio: 10 miesięcy temu

0

jakieś wskazówki?

Pozostało 580 znaków

2017-12-05 19:13
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 54 sekundy temu

Lokalizacja: Tuchów

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);

edytowany 3x, ostatnio: furious programming, 2017-12-05 19:34
Pokaż pozostałe 12 komentarzy
Starałem się dostosować kod do poziomu pytacza, dlatego wyszedł taki ”prosty”. ;) - furious programming 2017-12-06 15:44
a da się to zrobić w samym while? bo właściwie takie było polecenie - eucalyptus 2017-12-07 14:00
Da się. Musisz tylko musiałbyś pobrać od użytkownika number przed pętla aby warunek w while był prawdziwy. Później tak samo jak w do-while. - atmal 2017-12-07 14:02
@eucalyptus: no da się, poniżej zrobiłem na while właśnie. - grzesiek51114 2017-12-07 14:15
tak, tylko że po while są jakieś rzeczy, których nie znam, atmal robiłam tak jak radzisz ale wtedy wyświetla błędny wynik - eucalyptus 2017-12-07 15:59

Pozostało 580 znaków

2017-12-05 19:31

Rejestracja: 2 lata temu

Ostatnio: 9 godzin temu

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);

Pozostało 580 znaków

2017-12-06 07:45

Rejestracja: 6 lat temu

Ostatnio: 10 miesięcy temu

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}");
}
edytowany 1x, ostatnio: grzesiek51114, 2017-12-06 07:52

Pozostało 580 znaków

2017-12-06 16:29

Rejestracja: 3 lata temu

Ostatnio: 10 miesięcy temu

0

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

Pozostało 580 znaków

2017-12-06 16:40
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 54 sekundy temu

Lokalizacja: Tuchów

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.


edytowany 3x, ostatnio: furious programming, 2017-12-06 16:42

Pozostało 580 znaków

2017-12-07 16:04

Rejestracja: 2 lata temu

Ostatnio: 9 godzin temu

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.

Pozostało 580 znaków

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