Dodaj wpis w tym temacie
Spis tematów | Strona: 1 2 ... 28 29 30 31 Wyślij wiadomość do admina |
Przewiń wpisy ↓ | Turbo Pascal dla zielonych |
2013-06-17 (22:08) KEN Data rejestracji: 2012-09-01 00:00:00 Ilość postów: 2921 | wpis nr 650 782 [ CZCIONKA MONOSPACE ] Uzupełniamy kod procedur o krótkie instrukcje. |
2013-06-17 (22:12) KEN Data rejestracji: 2012-09-01 00:00:00 Ilość postów: 2921 | wpis nr 650 786 [ CZCIONKA MONOSPACE ] Na koniec podłączamy moduł z procedurami do modułu Main i odkomentujemy instrukcję generator którą już jako działającą uruchamia przycisk. |
2013-06-19 (01:24) KEN Data rejestracji: 2012-09-01 00:00:00 Ilość postów: 2921 | wpis nr 651 231 [ CZCIONKA MONOSPACE ] W nawiązaniu do poprzednich postów: Moim celem było pokazanie użycie darmowego Lazarusa zastępującego także drogie Delphi na przykładzie utworzenie uniwersalnego programu do systemów. To może służyć zarówno to omawianego na początku Mini Lotto jak i każdej innej dowolnej gry bez potrzeby przerabiana kodu za każdym razem. Może by nawet spróbować dalszego wspólnego tworzenia programu w rodzaju FreeLotto.org Każdy mógłby dołożyć cegiełkę ze swojej specjalności. Lazarus to rozbudowane środowisko programowania i może niekiedy przytłaczać ilością opcji i rozwiązań. Ale na początku nie musimy tego wszystkiego praktycznie znać, sami dojdziemy gdy będzie potrzebne. Właśnie taki sposób podejścia chciałem pokazać na powyższym przykładzie, którego streszczenie w kilku zdaniach zamieszczam poniżej. Każdy dobry program daje możliwość poczynienia wygodnych dla siebie ustawień. Ustawienia przeze mnie wybrane opisane są na początku. Pokazanie dodania przycisku to przykład dodania komponentu. Jak dużo kodu trzeba napisać dla czegoś podobnego w starym Pascalu ? Tu wystarczy wrzucić na formę i dzięki inspektorowi obiektów bez pisania jakiekolwiek kodu zmienić nazwę czy też inną właściwość. Nie mówiąc już o sposobie umiejscowienia jego w okienku programu. Przesuwamy a program znowu sam pisze kod. Kolejny przykład to użycie znaków komentarza, jak wiadomo program pomija wszystko co jest jest za tymi znakami. Można więc użyć nie tylko do objaśnień. Możliwość użycia w wielu okienkach (modułach) programu funkcji i procedur zgromadzonych w jednym module to podstawa. Kiedy w jakiś module chcemy tych procedur użyć wystarczy użyć klawiszy ALt+F11 aby automatycznie udostępnić. WAŻNE: chociaż Lazarus daje możliwość dodania modułów w sekcji InterFace to jednak wybieraj dodanie uses w sekcji Implementation. Dalej mamy przykład użycia tablic dynamicznych zadeklarowanych jako typ. Kolejne ułatwienie, także oszczędne dopasowane programowanie Chyba że ktoś uprze się deklarować wielkość tablicy na wyrost. Przykład użycia deklaracji, procedur i funkcji, ktoś może się zapytać po co potrzebne ? Można się równie dobrze zapytać murarza po co mu cegły ? Można też się zapytać jak wiele czasu traci przez powtarzanie zbędnego kodu i jego poprawienie gdy wszystko jest w jednym worku ? Można tez zajrzeć w kod źródłowy jakiegoś profesjonalnie napisanego kawałka programu chociażby komponentu aby sprawdzić co tam się właściwie znajduje. Ktoś przyzwyczajony do pisania prościutkich programików Turbo Pascalu może się zastanawiać po co mu to ? Rzeczywiście gdyby nadal korzystano z DOS i gdyby teraz tylko panowało okienko cmd to Lazarus nie byłby potrzebny. |
2013-06-19 (11:57) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 651 328 [ CZCIONKA MONOSPACE ] Witam Dziękujemy KEN za profesjonalne podejście do tematu. Tworzenie wspólnego programu w ramach kursu Pascala to bardzo dobra myśl. Możemy w ten sposób zrealizować swoje pomysły a tych nam nie brakuje. Ja jako samouk w programowaniu mam zamiar również skorzystać z kursu i zachęcam innych, bo to fajna sprawa zrealizować swój pomysł. Pozdrawiam |
2013-06-19 (20:48) tj_gumis Data rejestracji: 2010-03-31 00:00:00 Ilość postów: 337 | wpis nr 651 513 [ CZCIONKA MONOSPACE ] Wspolne pisanie programu to idea zacna , pytanie tylko po co tworzyc kolejne klony tych samych funkcjonalnosci, ktorych cala masa jest to sciagniecia w sieci. Mozna oczywiscie podejsc do sprawy bardziej ambitnie i stworzyc cos naprawde wartosciowego piszac w zespole i dzielac miedzy siebie zadania, ale na to trzeba miec dobry pomysl, ktorego jako zywo nikt tutaj nigdy nie zaprezentowal . |
2013-06-20 (00:51) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 651 616 [ CZCIONKA MONOSPACE ] To temat do nauki programowania, ale można i bez tego żyć. Wolny wybór. |
2013-06-20 (18:02) KEN Data rejestracji: 2012-09-01 00:00:00 Ilość postów: 2921 | wpis nr 651 835 [ CZCIONKA MONOSPACE ] Ta inicjatywa jest próbą wprowadzenia do ciekawego nowoczesnego i darmowego środowiska programistycznego jakim jest Lazarus na przykładzie zbudowania własnego programu do Lotto. Oficjalna pomoc do Lazarusa nie jest najlepsza i mało też jest dostępnych przykładów kodu i rozwiązań które mogły by być do tego celu zastosowane. Podstaw programowania można się stosunkowo łatwo nauczyć i wydaje się że nie potrzeba tu wiele więcej wysiłku niż w operowaniu formułami Excela a można osiągnąć znacznie więcej, prościej i szybciej. Gdyby w realizację danej koncepcji zechciały by się włączać osoby o zdolnościach matematycznych i programistycznych to jest szansa na powstanie czegoś dobrego i ciekawego |
2013-06-20 (18:04) KEN Data rejestracji: 2012-09-01 00:00:00 Ilość postów: 2921 | wpis nr 651 836 [ CZCIONKA MONOSPACE ] Część 2 Warto znowu się zaznajomić z kolejnymi elementami z menu Lazarusa przydających się już przy pisaniu pierwszych programów. Lista modułów i lista formularzy dostępna z menu Projekt przyda się gdy chcemy przejść innego utworzonego już formularza lub modułu lub otworzyć go ponownie. Polecenie udostępnienia jakiegoś modułu dla drugiego modułu przez automatyczne wpisanie w sekcję Uses znajdziemy w menu Źródło .Bez tego moduły są jak odrębne światy. Istotne dla szybkiej pracy okienka takie jak Przełącz moduł/formularz, Inspektor Obiektów i Edytor źródeł znajdziemy w menu Widok. W tym samym menu zapewne przyda się Przeglądarka źródeł do szybkiego przejścia jednym kliknięciem do szukanego elementu kodu i okienko Pokaż paletę komponentów do wygodnego wyszukania potrzebnego komponentu i komponentów w działaniu podobnym. Dla często używanych poleceń menu warto zapamiętać pisane obok skróty klawiszowe. To też może być elementem szybszego tworzenia programu. |
2013-06-20 (18:11) KEN Data rejestracji: 2012-09-01 00:00:00 Ilość postów: 2921 | wpis nr 651 840 [ CZCIONKA MONOSPACE ] Poprzedni sposób pokazywania generowanych liczb systemu był testowy i na dłuższą metę niewygodny. Po uruchomieniu programu nie można też było zmienić parametrów aby określić z ilu liczb mają być wygenerowane zakłady i po ile skreśleń. Teraz poprawimy to: Korzystając z przeglądarki komponentów poszukamy spina czyli czegoś co po kliknięciu zmienia wyświetlaną liczbę. Wpisanie sp wyświetli nam potrzebny TSpinEdit . Kliknięcie na wyświetloną nazwę doda komponent do okienka programu. Bez większego wyszukiwania można wybrać komponenty podstawowe z zakładki Standard takie jak przycisk - button, etykieta - label czy pole memo które może służyć do wyświetlania wyników. Ale można też wpisać but, czy lab lub mem w wyszukiwarce komponentów aby zobaczyć ile jest podobnych może czasami nawet wygodniejszych. Przesuwamy wybrany komponent na właściwe miejsce i dodajemy obok label do opisu. Ponieważ potrzebne nam identyczne ustawienie dla drugiej wprowadzanej liczby to można teraz zaznaczyć dwa komponenty (kliknąć przy wciśniętym klawiszu Shift) skopiować i wkleić. Gdy spojrzy się przy wybranym komponencie na jego właściwość Name (inspektor obiektów) to widać tam SpinEdit1. Zmieniamy to na bardziej użyteczne SpN zatwierdzając Enter i drugim Name na SpK. Zmieniamy też odpowiednio właściwość value gdzie dla SpN wpisujemy zamiast zera 5 a dal spK wpisujemy zamiast zera 2. To mogą być nasze domyślne wartości od których można zmieniać na inne. Można także zmienić N na 49 i k na 6 aby program wypisał prawie 14 milionów zakładów. |
2013-06-20 (18:16) KEN Data rejestracji: 2012-09-01 00:00:00 Ilość postów: 2921 | wpis nr 651 841 [ CZCIONKA MONOSPACE ] Dla labeli zmienianie właściwości Name jest mniej potrzebne, ważniejsze jest wpisanie we właściwość Caption: N= dla dla drugiej labelki K= Na koniec wrzucamy komponent Memo do wyprowadzenia wygenerowanych wyników. Przy tym komponencie przyda się zmiana właściwości Lines gdzie usuwamy napis Memo1 oraz właściwości Scrollbars gdzie ustawiamy na vertical aby wyświetlić więcej wyników przez przewijanie. Teraz już można skompilować F9 i zobaczyć małe, efektowne okienko naszego programu. |
2013-06-20 (18:20) KEN Data rejestracji: 2012-09-01 00:00:00 Ilość postów: 2921 | wpis nr 651 844 [ CZCIONKA MONOSPACE ] Nadszedł czas na zmianę sztywnych dotychczas ustawień w kodzie. Ctr+F12 aby wyświelić listę modułówi wybrać moduł Proc w procedurze generator zmieniamy sztywne ustawienia i zamiast n=5 wpisuje się n:=spN.value , Uwaga: za nazwą komponetu stawiamy kropkę – wtedy powinna się wyświelić lista dopasowanych właściwości tego komponetu – tu wybieramy value gdzie przechowywana jest liczba wybrana przez użytkownika. Podobnie postępujemy z drugim spinem zamiast n:=2 wpisujemy n:=spK.value Zmieniamy również ustawienia w procedurze Kombinacja. Przedtem po słowie else było odwołanie tylko do dwóch generowanych elementów konwertowanych do łańcucha tekstowego przez fukcję IntToStr aby można było wyświelić w komunikacie . Teraz liczba elementów nie jest znana bo zależna od użytkownika programu więc w pętli for przegląda się całą tablicę Elementy i kolejne liczby kombinacji zapisuje się do łańcucha s zadeklarowanego jako string. Ponieważ mamy wrzucony komponent Memo składający się z kolejnych linii tekstowych więc konstrukcją Main.Memo1.lines.add(s) wyświetlamy całą linię kombinacji. Uwaga: Komponet Memo jest z modułu Main. Jeżeli ma być użyty w innym module w tym przypadku Proc to przed jego nazwą podajemy nazwę modułu skąd pochodzi i stawiamy kropkę aby można było wybrać nazwę i właściwosci. Dodatkowo trzeba uczynić moduł Main widocznym dla modułu Proc przez dopisanie do Uses (Alt+F11) Na zakończenie chcemy zapisać wypisanie w Memo linie do pliku co realizujemy w krótkiej instrukcji: Memo1.Lines.SavetoFile(nazwa pliku); Po tej instrukcji warto dodać komunikat o zapisaniu. Wystarczy prosty ShowMessage( ) gdzie miedzy nawiasami wpisuje się tekst w apostrofach . W naszym przykładzie tekst jest rozdzielony znakiem plusa gdyż między kolejnymi słowami dodawane są argumenty: nazwą pliku i wyliczoną liczbą linii Memo(count) która w tym przypadku jest ilością wszystkich kombinacji. Dodajmy jeszcze niewielką ale istotną funkcjonalność gdy operujemy dużą ilością kombinacje. Wyświetlanie w memo może znacznie zwiekszyć czas zapisu przy generowania dużych ilości linii z kombinacjami aby temu zapobiec wyświetla się tylko pierwszych 100 kombinacji , po czym wyświetlanie jest wyłączone. Realizuje to instrukcja: If main.Memo1.Lines.Count-1 > 100 then main.Memo1.visible:=false; umieszczona w procedurze Kombinacja. 2 część naszego programu jest już gotowa i działa. Można pobrać pliki źródłowe dla porównania i uruchomić gotowy program. |
2013-06-20 (18:52) KEN Data rejestracji: 2012-09-01 00:00:00 Ilość postów: 2921 | wpis nr 651 855 [ CZCIONKA MONOSPACE ] |
2013-06-20 (20:50) KEN Data rejestracji: 2012-09-01 00:00:00 Ilość postów: 2921 | wpis nr 651 921 [ CZCIONKA MONOSPACE ] program system2 i pliki z kodem do pobrania: http://przeklej.net/file_details/106295.html |
2013-06-24 (20:54) KEN Data rejestracji: 2012-09-01 00:00:00 Ilość postów: 2921 | wpis nr 653 533 [ CZCIONKA MONOSPACE ] Video dla chcących zobaczyć jak się rodzi program lotto ! W cz.1 rozpoczęcie programu do lotto w Lazarusie, http://przeklej.net/down/54508519378094722097782847444043157bc8333ffe8f5c03dee2810.html w części 2 deklaracje i przycisk, http://przeklej.net/down/98081018304368166947661273384249200e6f9489e278f4393a884da.html w części 3 wpisywanie własnego kodu. http://przeklej.net/down/5875605411683390844195496966878373030d062df0791ab4ad12ae3.html Plik wmf 480*640 do pobrania i odtworzenia na komputerze. |
2018-05-05 (10:30) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 166 277 [ CZCIONKA MONOSPACE ] Witam. Temat tak zakurzony, że trzeba by było coś napisać. |
2018-05-07 (02:09) Zeolit Data rejestracji: 2015-02-23 00:00:00 Ilość postów: 1622 | wpis nr 1 166 595 [ CZCIONKA MONOSPACE ] sindbad Temat zakurzony. Ciekawe czy ktoś jeszcze męczy Pascala. A jak jest w przypadku C++. Twój temat" C++ od niechcenia " No i temat kolegi te0dor: Python - niedzielna szkółka programowania. Każdy język programowania daje pewne możliwości. Python wydaje mi się najbardziej zjadliwym w sposobie zrozumienia. No jednak każdy może mieć odmienne zdanie. Doświadczenia? |
2019-12-27 (18:41) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 264 118 [ CZCIONKA MONOSPACE ] Witam. Trzeba będzie pokryć wszystkie piątki w MM. Ile to może być losowań. Prawdopodobieństwo zdarzenia : 1 do 1 550,6 Lazarus - Aplikacja konsolowa. |
2019-12-29 (00:54) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 264 343 [ CZCIONKA MONOSPACE ] Widzę, że brak obliczeń, więc trzeba będzie napisać program. Możecie instalować program Lazarus. |
2019-12-29 (13:15) sindbad Data rejestracji: 2008-10-13 00:00:00 Ilość postów: 20519 | wpis nr 1 264 418 [ CZCIONKA MONOSPACE ] Witka. Dla tych, co lubią dłubać w kodzie. program Pokrycie5; uses Classes,Variants,DateUtils,SysUtils,Crt; type TTab = array[0..80] of integer; var li,cy: TTab; ta:array[1..24040016] of integer; v,vv,i,j,k,l,m,x,liczb,zak: integer; MT: array[0..623] of longword; mti: integer; e:array of array of array of int64; Per:array[1..5] of integer; p:array[1..20] of integer; function IleTego(Kombinacje, Liczby: integer): int64; var I:Integer; SilniaKombinacji,SilniaLiczb:int64; begin Result:=0;SilniaKombinacji:=1;SilniaLiczb:=1; If Kombinacje>Liczby Then Exit; For I:=1 to Kombinacje do SilniaKombinacji:=SilniaKombinacji*I; For I:=Liczby downto (Liczby-Kombinacje)+1 do SilniaLiczb:=SilniaLiczb*I; Result:=SilniaLiczb div SilniaKombinacji; end; procedure ela(za,il:integer); var i,j,k,l,a,x:integer; begin for i:=1 to il-2 do begin if i-1>0 then for a:=1 to i-1 do begin x:=il-a; e[0][0][i]:=e[0][0][i-1]+(IleTego(za-1,x)); end; for j:=i+1 to il-1 do if j-i>1 then for a:=i+1 to j-1 do begin x:=il-a; l:=za-1; if za>3 then begin for k:=1 to za-3 do begin dec(l); e[k][i][j]:=e[k][i][j]+(IleTego(l,x)); end; end; e[za-2][i][j]:=e[za-2][i][j]+x; end; end; end; function Adres(zak:integer): int64; var i:integer; x:int64; begin x:=0; x:=x+e[0,0,per[1]]; for i:=1 to zak-2 do x:=x+e[i,per[i],per[i+1]]; x:=x+per[zak]-per[zak-1]; result:=x; end; procedure InicjujMT(x0: longword); var i : integer; x : longword; begin MT[0] := x0; for i := 1 to 623 do begin x := MT[i-1]; x := (23023 * x) and $00000000ffffffff; x := ( 3 * x) and $00000000ffffffff; MT[i] := x; end; mti := 0; end; function MersenneTwister: longword; const MA : array[0..1] of longword = (0,$9908b0df); var y : longword; i1,i397 : integer; begin i1 := mti + 1; if i1 > 623 then i1 := 0; i397 := mti + 397; if i397 > 623 then dec(i397,624); y := (MT[mti] and $80000000) or (MT[i1] and $7fffffff); MT[mti] := MT[i397] xor (y shr 1) xor MA[y and 1]; y := MT[mti]; y := y xor ( y shr 11); y := y xor ((y shl 7) and $9d2c5680); y := y xor ((y shl 15) and $efc60000); y := y xor ( y shr 18); mti := i1; MersenneTwister := y; end; procedure UprzypadkowijMT; var t : TDateTime; x0 : longword; begin t := Now; x0 := HourOf(t); x0 := x0 * 60 + MinuteOf(t); x0 := x0 * 60 + SecondOf(t); x0 := x0 * 1000 + MillisecondOf(t); InicjujMT(x0); end; procedure Sortuj(lewy, prawy: integer); var i,j,piwot,x : integer; begin i := (lewy + prawy) div 2; piwot := p[i]; p[i] := p[prawy]; j := lewy; for i := lewy to prawy - 1 do begin if p[i] < piwot then begin x := p[i]; p[i] := p[j]; p[j] := x; inc(j); end; end; p[prawy] := p[j]; p[j] := piwot; if lewy < j - 1 then Sortuj(lewy, j - 1); if j + 1 < prawy then Sortuj(j + 1, prawy); end; begin ClrScr; cursoroff; Liczb:=80; Zak:=5; SetLength(e,Zak+1,Liczb,Liczb+1); ela(Zak,Liczb); for i:=1 to 76 do for j:=i+1 to 77 do for k:=j+1 to 78 do for l:=k+1 to 79 do for m:=l+1 to 80 do begin per[1]:=i; per[2]:=j; per[3]:=k; per[4]:=l; per[5]:=m; ta[adres(5)]:=1; end; GotoXY(1,2); write('Do pokrycia '); GotoXY(21,2); write(' z 24040016 5/80'); randomize; UprzypadkowijMT; vv:=0; v:=24040016; for i:=0 to 80 do cy[i]:=0; repeat li:=cy; inc(vv); for i:=1 to 20 do begin repeat x:= 1 + (MersenneTwister mod (80)); until li[x]=0; li[x]:=1; p[i]:=x; end; sortuj(1,20); for i:=1 to 16 do begin per[1]:=p[i]; for j:=i+1 to 17 do begin per[2]:=p[j]; for k:=j+1 to 18 do begin per[3]:=p[k]; for l:=k+1 to 19 do begin per[4]:=p[l]; for m:=l+1 to 20 do begin per[5]:=p[m]; dec(v,ta[adres(5)]); ta[adres(5)]:=0; end; end;end;end;end; GotoXY(13,2); write(format('%8d',[v])); until v =0; cursoron; GotoXY(1,4); writeln(format('Pokryto wszystjie kombinacje 5/80. Losowano %d razy',[vv])); writeln('Prawdopodobienstwo zdarzenia : 1 do 1 550,6'); writeln(''); writeln('Koniec'); Readln; end. |
2019-12-29 (17:08) Molek Data rejestracji: 2005-12-12 00:00:00 Ilość postów: 4798 | wpis nr 1 264 458 [ CZCIONKA MONOSPACE ] Witam Dzięki Sindbad za Kod. Skopiowałem i w razie potrzeby pokombinuję. Przykład Kodu do nauki jak najbardziej. pozdrawiam |
| Dodaj wpis w tym temacie | Spis tematów | Wyniki lotto | Strona: 1 2 ... 28 29 30 31 Wyślij wiadomość do admina |