Druga liczba co do wielkości w ciągu

0

Witam. Potrafię stworzyć algorytm wyszukujący największą liczbę w ciągu. Ale jak znaleźć drugą liczbę co do wielkości? Nie chcę gotowego rozwiązania, tylko proszę o podpowiedź.

0

Tak samo tylko zapisujesz jeszcze poprzednią największą wartość.

0

Ale jak zapisać tą poprzednią wartość?

0

Można też posortować ciąg w kolejności malejącej.

0

Ustaw pętlę na wyszukiwanie maksymalnej, przy czym tak jak wspomniał @winerfresh - zapisuj jeszcze jedną (taki mini stos);

Zadeklaruj dwie zmienne:

var
  iFirst, iSecond: Word;

zainicjuj je:

iFirst := 0;
iSecond := 0;

i podczas wyszukiwania, w warunku sprawdzającym ustawiaj największą, a tą z największej przesuwaj do drugiej co do wielkości:

iSecond := iFirst;
iFirst := Ciag[I];

gdzie Ciag to jakiś ciąg (w tym przypadku np. macierz, łańcuch tekstowy), a I to licznik pętli;

Pamiętaj, że liczba niekoniecznie musi być większa od iFirst i iSecond; Sprawdzanie skonstruuj tak, by w przypadku, gdy wyraz ciągu jest większy od iSecond, ale mniejszy od iFirst, został wpakowany do iSecond;

Zmieniłem identyfikatory zmiennych, bo mogą mieszać w głowie...

0

A mógłbyś mi napisać pętle sprawdzającą warunek? Myślę nad tym godzinę, ale jestem słaby w programowaniu i nic nie wymyśliłem...

0
Ylv napisał(a)

A mógłbyś mi napisać pętle sprawdzającą warunek?

Czyli mam Ci dać gotowca? Wiesz jaką zjebę dostałem za takie coś wczoraj? Nie dam więcej gotowca; Już dość Ci napisałem w tym temacie;

To co musisz zrobić jest poniżej (w pseudojęzyku):

1. Zainicjuj zmienne przechowujące dwie maksymalne liczby (iFirst, iSecond)
2. Ustaw im wartość, która na pewno będzie mniejsza od minimum w ciągu
3. Ustaw pętlę od I = 0 do ilość_elementów_ciągu - 1
  3.1. Jeśli ciąg[I] jest większy od iSecond to
    3.1.1. Jeśli ciąg[I] jest większy od iFirst to
      3.1.1.1. Skopiuj wartość iFirst do iSecond
      3.1.1.2. Skopiuj wartość ciąg[I] do iFirst
    3.1.2. Jeśli nie
      3.1.2.1. Skopiuj wartość ciąg[I] do iSecond

i to wszystko w tym temacie; Pewnie można go przyspieszyć, ale to zostawiam Tobie; Teraz wystarczy napisać to wykorzystując instrukcje języka Delphi; To należy do Ciebie;

0

Fajne problemy macie :)
robisz to tak:

 
int maxmax = 0//ta wiekszza
int max = 0;
for(int i = 0; i < costam; i++){
if( costam[i] > maxmax){
max = maxmax;
maxmax = costam[i]; 
}
}
0
ZiomZiom napisał(a)

robisz to tak:

Tak się nie robi, bo ten algorytm jest błędny; Poza tym to nie ten język i formatowanie z d**y;

Jak już coś to tak:

int maxmax = 0
int max = 0;

for(int i = 0; i < LiczbaElementowCiagu - 1; i++)
{
  if(Ciag[i] > maxmax)
  {
    max = maxmax;
    maxmax = costam[i]; 
  }
}

ale to i tak jest błedne, bo jeśli wartość ciągu jest większa od Max, ale mniejsza od MaxMax - nie zostanie wpisana do Max; Więc daruj sobie i najpierw naucz się interpretować zagadnienie, zanim wymażesz tutaj bzdurny kod;

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