masofcer Opublikowano 29 Grudnia 2005 Zgłoś Opublikowano 29 Grudnia 2005 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 :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Nargil Opublikowano 29 Grudnia 2005 Zgłoś Opublikowano 29 Grudnia 2005 (edytowane) 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 30 Grudnia 2005 przez Nargil Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
whiller Opublikowano 29 Grudnia 2005 Zgłoś Opublikowano 29 Grudnia 2005 (edytowane) 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 29 Grudnia 2005 przez whiller Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
masofcer Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 dokladnie..prog po skompilowaniu wypluwa same zera :/, niezaleznie od wartosci znajdujacych sie w tablicy Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Jastrząb Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
whiller Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Jastrząb Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 (edytowane) 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 30 Grudnia 2005 przez Jastrząb Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Nargil Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 (edytowane) 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 30 Grudnia 2005 przez Nargil Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Jastrząb Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 (edytowane) 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 30 Grudnia 2005 przez Jastrząb Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Nargil Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 (edytowane) 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 30 Grudnia 2005 przez Nargil Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Jastrząb Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 1. Twoj kod tez nie zadziala jezeli ciag bedzie: 0,0,0,5,4,7 itd 2. w moim wystarczy zmienic typ zmiennej i bedzie ok Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Nargil Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 nie wystarczy. Po prostu na poczatku max1,2,3 sa rowne 0 i mimo ze w tablicy -1 bedzie najwyzsza wartoscia to i tak wypisze 0 co do mojego kodu: juz zmieniam warunki na <= ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Jastrząb Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 (edytowane) 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 30 Grudnia 2005 przez Jastrząb Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Nargil Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 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] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Jastrząb Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 (edytowane) 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 30 Grudnia 2005 przez Jastrząb Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
masofcer Opublikowano 30 Grudnia 2005 Zgłoś Opublikowano 30 Grudnia 2005 Jastrząb dalej to nie biega tak jak powinno...np.wpisujac do tablicy jako pierwszy element najwieksza liczbe w wyniku otzymujemy jakies bzdury Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Jastrząb Opublikowano 31 Grudnia 2005 Zgłoś Opublikowano 31 Grudnia 2005 zastosuj to co dal Nargil i wprowadz moje poprawki z postu 13 i powinno byc ok Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
masofcer Opublikowano 31 Grudnia 2005 Zgłoś Opublikowano 31 Grudnia 2005 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... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Nargil Opublikowano 31 Grudnia 2005 Zgłoś Opublikowano 31 Grudnia 2005 nie: for i:=low(t) to high(t) do begin tylko for i:=low(t)+3 to high(t) do begin Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
masofcer Opublikowano 31 Grudnia 2005 Zgłoś Opublikowano 31 Grudnia 2005 wlasnie zalapalem :wink: ,teraz smiga jak szalone ,dzieki panowie za pomoc i Szczesliwego Nowego...pozdro Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Jastrząb Opublikowano 31 Grudnia 2005 Zgłoś Opublikowano 31 Grudnia 2005 np, thx i nawzajem btw zmienilbym jeszcze max1:=t[1]; max2:=t[2]; max3:=t[3]; na max1:=Low(t); max2:=Low(t) + 1; max3:=Low(t) + 2; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...