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

otrzymujesz zera poniewaz przy tworzeniu zmiennych ich wartosc wynosi 0, a warunki w petli sa tak napisane ze nigdy sie nie spelnia(max1 nie bedzie mniejsze od max2 gdyz obie zmienne sa zerami, itd). Jak wstane to napisze jak to widze bo teraz juz nie mam sil

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