Forum strony www.multipasko.pl [Regulamin]


Dodaj wpis w tym temacie
Spis tematów
Login:

Hasło:
Strona: 1 2 ... 28 29 30 31
Wyślij wiadomość do admina

Przewiń wpisy ↓

Turbo Pascal dla zielonych

2013-06-17 (22:08)

status KEN
Data rejestracji: 2012-09-01
Ilość postów: 2921

13557
wpis nr 650 782
[ CZCIONKA SPECJALNA ]

Uzupełniamy kod procedur o krótkie instrukcje.



2013-06-17 (22:12)

status KEN
Data rejestracji: 2012-09-01
Ilość postów: 2921

13557
wpis nr 650 786
[ CZCIONKA SPECJALNA ]

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)

status KEN
Data rejestracji: 2012-09-01
Ilość postów: 2921

13557
wpis nr 651 231
[ CZCIONKA SPECJALNA ]

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)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20465

3794
wpis nr 651 328
[ CZCIONKA SPECJALNA ]

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)

status tj_gumis
Data rejestracji: 2010-03-31
Ilość postów: 337

12456
wpis nr 651 513
[ CZCIONKA SPECJALNA ]

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)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20465

3794
wpis nr 651 616
[ CZCIONKA SPECJALNA ]

To temat do nauki programowania, ale można i bez tego żyć.

Wolny wybór.



2013-06-20 (18:02)

status KEN
Data rejestracji: 2012-09-01
Ilość postów: 2921

13557
wpis nr 651 835
[ CZCIONKA SPECJALNA ]

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)

status KEN
Data rejestracji: 2012-09-01
Ilość postów: 2921

13557
wpis nr 651 836
[ CZCIONKA SPECJALNA ]

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)

status KEN
Data rejestracji: 2012-09-01
Ilość postów: 2921

13557
wpis nr 651 840
[ CZCIONKA SPECJALNA ]

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)

status KEN
Data rejestracji: 2012-09-01
Ilość postów: 2921

13557
wpis nr 651 841
[ CZCIONKA SPECJALNA ]

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)

status KEN
Data rejestracji: 2012-09-01
Ilość postów: 2921

13557
wpis nr 651 844
[ CZCIONKA SPECJALNA ]

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)

status KEN
Data rejestracji: 2012-09-01
Ilość postów: 2921

13557
wpis nr 651 855
[ CZCIONKA SPECJALNA ]

2013-06-20 (20:50)

status KEN
Data rejestracji: 2012-09-01
Ilość postów: 2921

13557
wpis nr 651 921
[ CZCIONKA SPECJALNA ]

program system2 i pliki z kodem do pobrania:

http://przeklej.net/file_details/106295.html
2013-06-24 (20:54)

status KEN
Data rejestracji: 2012-09-01
Ilość postów: 2921

13557
wpis nr 653 533
[ CZCIONKA SPECJALNA ]

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)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20465

3794
wpis nr 1 166 277
[ CZCIONKA SPECJALNA ]

Witam.



Temat tak zakurzony, że trzeba by było coś napisać.
2018-05-07 (02:09)

status Zeolit
Data rejestracji: 2015-02-23
Ilość postów: 1622

14328
wpis nr 1 166 595
[ CZCIONKA SPECJALNA ]

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)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20465

3794
wpis nr 1 264 118
[ CZCIONKA SPECJALNA ]

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)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20465

3794
wpis nr 1 264 343
[ CZCIONKA SPECJALNA ]

Widzę, że brak obliczeń, więc trzeba będzie napisać program.
Możecie instalować program Lazarus.
2019-12-29 (13:15)

status sindbad
Data rejestracji: 2008-10-13
Ilość postów: 20465

3794
wpis nr 1 264 418
[ CZCIONKA SPECJALNA ]

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)

status Molek
Data rejestracji: 2005-12-12
Ilość postów: 4794

1497
wpis nr 1 264 458
[ CZCIONKA SPECJALNA ]

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 lottoStrona: 1 2 ... 28 29 30 31
Wyślij wiadomość do admina