Druga liczba co do wielkości w ciągu

Druga liczba co do wielkości w ciągu
YL
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tarnów
  • Postów: 20
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ź.

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
0

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

YL
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tarnów
  • Postów: 20
0

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

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
0

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

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12316
0

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

Zadeklaruj dwie zmienne:

Kopiuj
var
  iFirst, iSecond: Word;

zainicjuj je:

Kopiuj
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:

Kopiuj
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...

YL
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tarnów
  • Postów: 20
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...

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12316
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):

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

  • Rejestracja: dni
  • Ostatnio: dni
0

Fajne problemy macie :)
robisz to tak:

Kopiuj
 
int maxmax = 0//ta wiekszza
int max = 0;
for(int i = 0; i < costam; i++){
if( costam[i] > maxmax){
max = maxmax;
maxmax = costam[i]; 
}
}
flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12316
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:

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.