Minimalna i maksymalna wartość

0

Witam mam następujący problem, w jaki sposób wyciągnąć minimalną i maksymalną wartość z Memo, nie byłoby problemu gdyby była to określona ilość liczb, ale zadanie polega na tym, że użytkownik deklaruje ile wartości wprowadzi, po czym wyświetla się inputbox. Wartości wprowadzane do inputboxa sa zapisywane w memo. Domyślam się ze powinienem to zrobić na pętli, której ilość powtórzeń była by równa wartości wprowadzanych liczb przez użytkownika. Niestety gdy robię pętle a w niej funkcje if to nie działa mi to poprawnie... z góry dzięki za pomoc.

0

Nie rozumiem dokładnie w czym problem. Pokaż kod i powiedz co nie działa.

0

Wyglada to tak:

a:=StrToInt(Edit1.Text);
for x:=1 to a do
begin
b:=inputbox('','Jakis tam tekst zachety:','');
Memo1.Lines.Add(b);

No i teraz załóżmy, że user wpisze do edita 10, to wyświetli mu się kolejno 10 inputboxów, a wartości z nich zostaną zapisane w memo.
Problem mam z tym, ze chciałbym wskazać najmniejsza i największa wartość przez niego wprowadzoną.

0

Acha, czyli wyznaczanie najmniejszego i największego elementu ze zbioru tak? Podam prostszy przykład: użytkownik wpisuje 20 liczb w konsoli i na koniec wyświetlasz mu największą i najmniejszą, o to chodzi?

http://edu.i-lo.tarnow.pl/inf/alg/001_search/0033.php

Trochę możesz się nie połapać, to ci powiem wprost przepis na wyszukiwanie min i max:

  • pierw wczytujesz wszystkie liczby np. do tablicy. (od razu z inputów)
  • ustawiasz min i max na pierwszy element.
  • iterujesz do końca, jeżeli aktualny jest mniejszy od min to min się zmienia na aktualny
  • to samo z max.
0

tak oto chodzi tylko chodzi tez o to, że ilość wprowadzanych liczb jest ustalana przez użytkownika.

0

Ilość wprowadzonych liczb będziesz miał w Memo1.Lines.Count a także w StrToInt(Edit1.Text)

0

Sprawa jest bardzo prosta; Ja podam Ci rozwiązanie dla aplikacji konsolowej wykorzystującej macierz przechowującą liczby typu Word, Ty zaś przeinacz ją tak, by pasowała do Twojego projektu;

program GetMinMax;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Dialogs;

type
  TNumArr = array of Word;

  function _Min(aNum: TNumArr): Word;
  var
    I: Word;
  begin
    Result := 65535;

    for I := Low(aNum) to High(aNum) do
      if aNum[I] < Result then
        Result := aNum[I];
  end;

  function _Max(aNum: TNumArr): Word;
  var
    I: Word;
  begin
    Result := 0;

    for I := Low(aNum) to High(aNum) do
      if aNum[I] > Result then
        Result := aNum[I];
  end;

var
  aNum: TNumArr;
  wCount, I: Word;
begin
  Write('Podaj ilosc wprowadzanych liczb: ');
  ReadLn(wCount);

  SetLength(aNum, wCount);

  for I := Low(aNum) to High(aNum) do
    aNum[I] := StrToInt(InputBox('Liczby', 'Podaj [' + IntToStr(I) + '] liczbę', '0'));

  WriteLn(#10'Wartosc minimalna: ', _Min(aNum));
  Write('Wartosc maksymalna: ', _Max(aNum));

  ReadLn;
end.

Proste, prawda?

0

A gdybym chciał to zrobić na instrukcji warunkowej i pętli? była by opcja?
jeżeli tak to w jaki sposób mam to zrobić?

1
#Artur napisał(a)

A gdybym chciał to zrobić na instrukcji warunkowej i pętli? była by opcja?

Tu jest pętla, warunki też; Nie wiem za bardzo o co Ci chodzi i gdzie jeszcze i po co chciałbyś dorobić pętle i warunki; Podaj precyzyjniej to, co chcesz wykonać;


@#Artur, uczysz się trochę od tyłu; Najpierw naucz się podstawowych elementów języka, później baw się apliakcjami okienowymi i komponentami; Inaczej będziesz miał problemy żeby pewne rzeczy zrozumieć i oprogramować;


Coś takiego...?:

procedure TForm1.Button1Click(Sender: TObject);
var
  wMax, wMin, wCurr, I: Word;
begin
  { WARTOŚCI DOMYŚLNE }
  wMax := 0;
  wMin := 65535;

  for I := 0 to memNum.Lines.Count - 1 do
    begin
      { KONWERCJA ŁAŃCUCHA NA LICZBĘ }
      wCurr := StrToInt(memNum.Lines.Strings[I]);
      { MIN }
      if wCurr < wMin then wMin := wCurr;
      { MAX }
      if wCurr > wMax then wMax := wCurr;
    end;
end;
Identyfikator Opis
memNum kontrolka z klasy TMemo, w której przechowujesz liczby
wCurr liczba, która została pobrana z aktualnej linii komponentu
wMin wartość minimalna
wMax wartość maksymalna
Wklej ten kod gdzie chcesz, niekoniecznie pod zdarzenie OnClick przycisku Button1;
0

Udało mi się to zrobić takim sposobem jakim chciałem, chodziło o takie coś:

for x:=1 to a do
   if StrToInt(Memo1.Lines[n])>max then
      begin
         max:=StrToInt(Memo1.Lines[n]);
         n:=n+1;
      end
   else
      begin
         max:=max;
         n:=n+1;
      end;
end;
0

Powinno być tak

for x:=0 to a-1 do
   if StrToInt(Memo1.Lines[x])>max then
      max:=StrToInt(Memo1.Lines[x]);

A jeszcze lepiej

for x:=0 to Memo1.Lines.Count-1 do
   if StrToInt(Memo1.Lines[x])>max then
      max:=StrToInt(Memo1.Lines[x]);

Oczywiście przed pętlą należy przyporządkować do max jakąś bardzo małą liczbę (w zależności od tego jakich liczb spodziewasz się w Memo1)

1

Można też tak:

uses
  Math;
var
  i, iMax, iMin: Integer;
begin
  iMax := Low(Integer);
  iMin := High(Integer);

  for i := 0 to Memo1.Lines.Count - 1 do
    begin
      iMax := Max(iMax, StrToInt(Memo1.Lines[i]));
      iMin := Min(iMin, StrToInt(Memo1.Lines[i]));
    end;
end;
Zmienna Opis
iMax wartość maksymalna
iMin wartość minimalna
Memo1.Lines.Count Ilość linii/liczb w Memo1
Funkcja Opis
---------------- ----------------
High(Integer) Tutaj: zwraca najwyższą wartość typu Integer.
Low(Integer) Tutaj: zwraca najniższą wartość typu Integer.
Max(arg1, arg2) Spośród liczb arg1 i arg2 zwraca tą większą.
Min(arg1, arg2) Spośród liczb arg1 i arg2 zwraca tą mniejszą.
Dzięki modułowi <a href"http://4programmers.net/Delphi/Moduły/Math">Math</a> możemy używać funkcję Max() i Min(), oraz wiele innych.
0

albo tak:

procedure TForm1.Button1Click(Sender: TObject);
var
  max, min, i, ii :integer;
begin

  max:=strtoint(Memo1.Lines.Strings[0]);
  min:=max;

  for i:=1 to Memo1.Lines.Count-1 do
  begin

    ii :=strtoint(Memo1.Lines.Strings[i]);

    if ii > max then
      max := ii;

    if ii < min then
      min := ii;

  end;

  Showmessage('Wartość max. '+IntToStr(max)+' Wartość min. '+IntToStr(min));

end;

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