Skocz do zawartości
masofcer

Pascal - 3 Elementy Max W Tablicy

Rekomendowane odpowiedzi

Witam

 

Mam nastepujace zadanie musze napisac program ktory zapelni tablice jednowymoarowa zmiennymi losowymi i wyszuka w tej tablicy trzy najwieksze elementy,z pierwsza czescia nie mam problemu ale wyszukanie MAX mam przeprowadzic bez sortowania tablicy,moze mi ktos pomoc i nakierowac jak sie do tego zabrac??? procedure wyszukiwania MAX napisalem ale przy pomocy sortowania :/,jednak nie tego ode mnie oczekuja :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

omg...

 

const ilosc = 50;var max1,max2,max3:real; i:integer;max1:=tab[1];max2:=tab[2];max3:=tab[3];for i:=4 to ilosc dobegin if(max1 <= max2) AND (max1<=max3) AND(tab[i]>max1) then max1:=tab[i] else if(max2 <= max1) AND (max2<=max3) AND(tab[i]>max2) then max2:=tab[i] else if(max3 <= max2) AND (max3<=max1) AND(tab[i]>max3) then max3:=tab[i]end;

kod poprawiony - teraz powinien dzialac i nie generowac zer

Edytowane przez Nargil

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

nie przeczytalem ze to maja byc 3 najwieksze :D omg =]

edit - az skasowalem posta :) Nargilku, troche to tak chyba nie dziala do konca :| napisz, jakimi wartosciami zainicjowac zmienne.

 

pozd. :)

Edytowane przez whiller

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

procedure max(tab[n]:TTab; var max1,max2,max3:integer);var i:integer;begin  max1 := tab[1];  max2 := tab[1];  max3 := tab[1];    for i:=1 to n do  if ( max1 < tab[i] ) then max1 := tab[i];    for i:=1 to n do  if ( max2 < tab[i] ) and ( tab[i] < max1 ) then max2 := tab[i];  for i:=1 to n do  if ( max3 < tab[i] ) and ( tab[i] < max2 ) then max3 := tab[i];end;

heh, taki prosty pomysl :) niestety nie bedzie do konca dzialalo jezeli w tablicy sa 2 takie same maksymalne elementy ... pisalem to w notatniku wiec pewnie sa jakies bledy

 

pozd.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

tak na szybko jeszcze napisalem w notatniku, wiec moga byc bledy

 

vartablica : array[0..99] of integer;max1, max2, max3 : integer;procedure losowanie;vari: integer;beginrandomize;for i := 0 to High(tablica) do  //tutaj nie jestem pewny czy high zwroci 100 czy 99 ale to sobie sprawdz samtablica[i] := random(200);end;procedure liczby;vari : integer;beginfor i := 0 to High(tablica) do  //jwbeginif tablica[i] > max1 thenmax1 := tablica[i]elseif tablica[i] > max2 thenmax2 := tablica[i]elseif tablica[i] > max3 thenmax3 := tablica[i];end;end;end.
Edytowane przez Jastrząb

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

fakt - macie racje - juz zmieniam moj kod :)

 

Co do przykladu jastrzebia: to nie dziala poprawnie ;) wez np ciag 1,2,3,4,5,6,7

Efekt taki ze caly czas tylko max1 bedzie zwiekszane. Mozliwe ze wywolanie tej petli 3 razy byloby dobrym rozwiazaniem (nie chce mi sie myslec)

 

Co do przykladu whillera: wez ciag 1,2,3,4,5,5,5

Wartosci jakie przybiora max1,max2,max3 to odpowiednio: 5,4,3

Edytowane przez Nargil

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

racja nie zaowazylem tego, ale na swoje usprwiedliwienie mam to ze juz mi sie oczy zamykaly :)

teraz chyba dobre :)

 

procedure liczby;vari:integer;beginfor i:= Low(tablica) to High(tablica) dobeginif (tablica[i] > max1) and (max1 <= max2) and (max1 <= max3) thenmax1:= tablica[i]elseif (tablica[i] > max2) and (max2 <= max1) and (max2 <= max3) thenmax2:= tablica[i]elseif (tablica[i] > max3) and (max3 <= max1) and (max1 <= max2) thenmax3:= tablica[i]end;end;

do postu ponizej

Sry, pomylilem posty i myslalem ze to byl Twoj kod :)

Edytowane przez Jastrząb

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ja nie robie 3 razy petli... Spojrz jeszcze raz ;) moj kod wyglada praktycznie tak samo jak twoj (a nawet jest lepszy, bo twoj bedzie mial problemy z liczbami ujemnymi. Wez np ciag -10,-9,-5,-3,-1).

Edytowane przez Nargil

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Racja, nie wziolem pod uwage przypadku gdy sa same ujemne

Ale zostal jeszcze jedne blad do poprawienia i powinno byc juz dobre

Nie mozesz zakladac ze pierwszy element tablicy ma indeks 1, skorzystaj z funkcji Low i High

Edytowane przez Jastrząb

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

hmmmm, a czemu nie moge ? Ja tam pascala tylko tyle co na studiach lize, ale skoro deklarujesz tablice jako

 

var tab: array[1..N] of real

 

to nie rozumiem czemu nie, a jak ktos deklaruje inaczej, to moze tez sobie zmienic kod ;) Swoja droga programujac w pascalu trzymalbym sie 1..N, a nie 0..N-1 chocby dlatego zeby bylo jak ze stringami gdzie znaki zaczynaja sie od str[1]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

chodzilo mi o to zeby kod byl bardziej uniwersalny, aby mozna go bylo zastosowac jako procedure, a do 0 jestem przyzwyczajony :)

Pozatym pierwsze elementy komponentow maja indeks 0 oraz tablice socketow tez sie od 0 zaczynaja

Edytowane przez Jastrząb

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

procedure max(t:tab;var max1,max2,max3:byte);var i:byte;	beginmax1:=t[1];max2:=t[2];max3:=t[3];for i:=low(t) to high(t) do begin	if (max1 <= max2) and (max1 <= max3) and (t[i] > max1) then max1:=t[i]	else	if (max2 <= max1) and (max2 <= max3) and (t[i] > max2) then max2:=t[i]	else	if (max3 <= max2) and (max3 <= max1) and (t[i] > max3) then max3:=t[i]	end;end;

dalej nie dziala poprawnie...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...