Forum CDRinfo.pl

Forum CDRinfo.pl (https://forum.cdrinfo.pl/)
-   Komputery - oprogramowanie i sprzęt (https://forum.cdrinfo.pl/f113/)
-   -   Pascal...pytanie (https://forum.cdrinfo.pl/f113/pascal-pytanie-43359/)

Patrix 29.03.2008 23:30

Oszukalem szybciej php:

Kod:

for ($i = 1; $i <= $ile; $i++) {

        echo"tab[$i]:=".rand(1,200000).";\n";
}

I wkleilem wynik do kompilatora. (To jest wersja losowa)


PS Jak ju***380; pisa***263; w pascalu to z randomize i liczby we wszystkich tablicach maja byc te same tylko inaczej poukladane :)

poza tym zadanie juz dawno zrobione ale fajnie, ze na tym forum zawsze kto***347; jaki***347; przyk***322;ad walnie od siebie :)

ksviper 29.03.2008 23:17

tak na szybko:

malej***261;co:
n - liczba element***243;w tablicy
k - skok
k=200000/n
for od i=1 do n
tab[i]=200000-k*(i-1)

rosn***261;co:
k=200000/n
for od i=1 do n
tab[i]=1+k*(i-1)

Patrix 29.03.2008 20:53

Cytat:

Napisany przez andy (Post 914561)
Ale Delphi to nie język programowania a środowisko programistyczne tak jak FreePascal...
Obowiązuje tam język Pascal/ObjectPascal

wiem ;p a czy ja gdzies pisalem inaczej ?

mialem to robic w freepascalu mialem tu na mysli program :)

pops 29.03.2008 20:24

Cytat:

Napisany przez Patrix (Post 914549)
...
mam to zapelnic 20k/40k/80k/160k elementowa tablice liczbami z przedzialu od 1 do 200 000 w 3 wersjach: malejaco, rosnaco i losowo :)
...
napisalem w php funkcje i wywala mi gotowy kod do pascala hehe...

ee tam, prawdziwi hardkorowcy takie tabliczki wypełniają ręcznie :P

andy 29.03.2008 19:58

Cytat:

acha i to ma byc robione w free pascalu a nie delphi, w delphi to bym sobie szybko poradzil z tym tam taki przyjemny timer jest...
Ale Delphi to nie j***281;zyk programowania a ***347;rodowisko programistyczne tak jak FreePascal...
Obowi***261;zuje tam j***281;zyk Pascal/ObjectPascal

Patrix 29.03.2008 19:17

dzieki za rady ale ja niestety juz nie ten poziom jestem ch***322;opaki :D

mam to zapelnic 20k/40k/80k/160k elementowa tablice liczbami z przedzialu od 1 do 200 000 w 3 wersjach: malejaco, rosnaco i losowo :)

20k, 40k, 160k losowo juz zapelnilem teraz ustawic w kodzie funkcje gettime i podliczyc
moj celeron m wlasnie przekabaca rozne wersje - troche to trwa :D

jak skoncze przygotowywac materialy to potem przetestowac na tym kazdy algorytm sortujacy to juz tylko chwilka bedzie :)

acha i to ma byc robione w free pascalu a nie delphi, w delphi to bym sobie szybko poradzil z tym tam taki przyjemny timer jest...


oczywiscie nie powiem mu ze oszukuje z tym generowaniem napisalem w php funkcje i wywala mi gotowy kod do pascala hehe...

andy 29.03.2008 17:19

Kod:

FOR i:= Tablica[1] TO Tablica[40] DO
  Begin
      Tablica[i]:= i + 1;
  End;

Dzi***281;ki temu zape***322;nisz tablice ;)

Tablice deklarujesz tak
Kod:

VAR
  Tablica: Array [1..40] of byte;

Polecam lektur***281; tego - http://4programmers.net/Delphi/Kompendium

ksviper 29.03.2008 17:04

a nie ma p***281;tli for ? :)

Patrix 29.03.2008 17:01

no to kozacko bo mi zadali zapelnic tablice kolejno 20k, 40k, 80k i 160k elementow aby przetestowac w sekundach algorytm sortowania babelkowego :szczerb:

musze wygenerowac jakos inaczej te zapelnianie, zastrzele sie !

PS
na lycosie mnie juz chyba zbanowali za uzywanie funkcji rand do generowania tego badzewia :D

sobrus 29.03.2008 16:58

o ile pamietam nie da sie zrobic w pascalu czegos takiego (wypisywanie elementow podczas deklaracji)

Patrix 29.03.2008 16:12

mam pytanie, do tej pory w ten sposob nic nie deklarowalem wiec bylo z glowy ale mam taka deklaracje:

Kod:

const
 n = 5;

type
 zakres = 1..n;

var
 tab:array[zakres] of longint=(1, 2, 3, 4, 5);

i pokazuje mi byk syntax...

wiec pytanie jak z automatu zapelnic tablice w pascalu ?

Berion 07.12.2007 01:18

Aaaaaa no racja, przecie***380; przypisa***322;em j***261; do cnf-a. Tak to jest jak si***281; ma p*k w kodzie :czar: My***347;la***322;em, ***380;e sobie u***380;yje jej "przy okazji" i po powrocie do pocz***261;tku nie b***281;dzie "u***380;ywana". Ehhh...

THX po raz kolejny!.

ksviper 07.12.2007 00:48

sprawd***378; co si***281; dzieje ze zmienn***261; margines :) - to jest rozwi***261;zanie, linia 104 :)

Berion 07.12.2007 00:18

Ilość załączników: 1
Ale***380; prosz***281; uprzejmie.

Wersja zubo***380;ona, ale b***322;***261;d ten wyst***281;puje nadal.

ksviper 06.12.2007 23:47

no chyba najszybciej wyczy***347;ci***263; clrscr
daj pe***322;ny kod, wszystko co napisa***322;e***347; to lukn***281; jak pracuje i co robi

Berion 06.12.2007 23:43

Racja, o tym nie pomy***347;la***322;em ehhh.

Co do drugiego pytania: da si***281; co***347; z tym zrobi***263;? Mo***380;e jest jaki***347; "clear memory" lub co***347; w tym stylu? Pomy***347;la***322;em, ***380;e clear screenem to usun***281; :szczerb:. Wydaje mi si***281;, ***380;e to problem zwi***261;zany z niezamkni***281;ciem pliku, ale przecie***380; jest close(cnf);

ksviper 06.12.2007 23:29

bo pierwszy parametr w readln to jest uchwyt do pliku, drugi zmienna to ta do kt***243;rej wczytujemy dane z pliku
wi***281;c jak zmienisz kolejno***347;***263; to kompilator krzyczy ***380;e ***378;le, nie ten typ zmiennej

proponuj***281; przez writeln (...) wstawi***263; odpowiednie gotoxy lub napisa***263; tak writeln(' ',margines);

Berion 06.12.2007 23:26

Kod jest taki sam jak poprzednio. Powy***380;szy wynalazek (czyli od assign) napisa***322;em na ko***324;cu "procedure psx_cnf".

ksviper 06.12.2007 23:16

poka***380; pe***322;ny kod, tylko sformatowany wg odg***243;rnie przyj***281;tych regu***322; :)

poza tym, to co ja tu widz***281; to:
czytanie z pliku po linijce, ka***380;da linijka zapisywana jest do 'margines' a potem wy***347;wietlana i tak do usranej ***347;mierci czyli ko***324;ca pliku

Berion 06.12.2007 23:12

Ilość załączników: 1
Cytat:

Napisany przez ksviper (Post 866906)
[...] nie wyślę, bo tutaj masz wszystko co potrzeba [...]

THX. Działa z tym, że mam dwa pytania z tym związane:

Kod:

var
cnf:text;

margines:='  ';

assign(cnf,'.\SYSTEM.CNF');
        reset(cnf);
        while not eof(cnf) do
                begin
                readln(cnf,margines);
                writeln(margines);
                end;
close(cnf);

Chciałbym, aby wyświetlany tekst był w odległości dwóch spacji od lewej krawędzi okna. Niestety po wpisaniu "margines" przed "cnf" w readln, kompilator się na to nie zgadza (can't read or write variables of this type), a gotoxy nie pomaga.

Drugi problem to taka Hiroshima po powrocie do menu głównego:

sobrus 06.12.2007 12:51

ka***380;dy si***281; wysypuje na g***322;upich rzeczach tak to ju***380; jest. to sie nazywa do***347;wiadczenie.
ja kiedy***347; si***281; 2 dni gania***322;em z b***322;***281;dem kt***243;rego nie by***322;o. Debugowa***322;em, bada***322;em itd i w ko***324;cu zg***322;upia***322;em bo wysz***322;o ***380;e program po prostu gubi wska***378;niki (gubi***322; dane przechowywane w zmiennych).
Przejrza***322;em program na wylot i nie znalaz***322;em nic co by mog***322;o je nadpisywa***263;. ***379;adnych wyciek***243;w pami***281;ci ***380;adnych b***322;***281;d***243;w. Program by***322; idealny a sie wysypywa***322;.

W ko***324;cu skompilowa***322;em go na uczelni na innej wersji GCC i poszed***322;. Dzia***322;a***322; idealnie. Co za baran da***322; jakiego***347; zabugowanego GCC w najnowszym wtedy stabilnym Mandrake to nie wiem.
A pytania w stylu "czemu to *(@#&*( mi sie nie kompiluje/dzia***322;a" to chyba ka***380;dy programista wykrzycza***322; setki razy...

ksviper 06.12.2007 12:49

te***380; nie mog***322;em tego zrozumie***263;, ale jak co***347; nie wiem to pr***243;buj***281; inn***261; drog***261;
np. nie wiem jak napisa***263; ku(***243;)ra - pisz***281; kokoszka :D

Berion 06.12.2007 12:46

Dzi***281;kuj***281; - dzia***322;a :)

Nie rozumiem tylko jaki ma (mia***322;o) zwi***261;zek read(powrot1); z pomijaniem pierwszej linijki z wprowadzaniem zmiennej w procedurze psx_cnf. W ***380;yciu sam bym tego nie wymy***347;li***322;.

Chyba si***281; do tego nie nadaj***281;, skoro wysypuj***281; si***281; na tak prostych rzeczach. :|

ksviper 05.12.2007 23:03

Ilość załączników: 1
czy to kolega miał na myśli: :D
Załącznik 43966

Berion 05.12.2007 22:33

Ilość załączników: 1
Uprościłem nieco.

Wydawało mi się, że jest ok.

ksviper 05.12.2007 22:17

jak napiszesz ten kod tak jak si***281; zaleca, to wtedy lukn***281;, teraz to ja w nim nic nie widz***281;
to nie jest trudne
naucz si***281; naciska***263; enter - po jakiego takie d***322;ugie linie ?

popraw to lukn***281;

Berion 05.12.2007 22:07

Ilość załączników: 1
Wróciłem :}

Dobrzy ludzie, oświeci mnie ktoś, czemu program nie wykonuje:
Kod:

gotoxy(32,4); readln(psx_nazwa);
76 linijka. Cały wieczór rwę włosy z głowy :D

ksviper 04.12.2007 15:53

w domu mam chyba przyk***322;ad, jak znajd***281; to wy***347;l***281;

edit:
nie wy***347;l***281;, bo tutaj masz wszystko co potrzeba

Berion 04.12.2007 13:31

Cytat:

//co to jest, ani s***322;owa komentarza ?
Fakt. S***261; to specjalne znaki - te od tabelki (jej kraw***281;dzie itd. itd.) To tak zamiast chr(), ***380;eby by***322;o czytelniej (czytelniej pod FPC/TP, tam s***261; ***322;adnie wy***347;wietlane). Drugi pow***243;d to taki, aby mo***380;na by***322;o sobie wybra***263; znak, b***261;d***378; ci***261;g znak***243;w "z kolejki". Np write(znak[1]) czyli b***281;dzie to znak: "***201;".

Ja tego kodu nie pisa***322;em. Nie wiem czy tak jest dobrze, niedobrze, dlaczego i czy mo***380;na zrobi***263; lepiej. Dopiero zaczynam zabaw***281; z pascalem (z programowaniem w og***243;le).

Cytat:

No nie. S***261; pewne konwencje i dobre zwyczaje.
ok :)

Cytat:

***379;eby to wygl***261;da***322;o ***322;adnie, to raczej widzia***322;bym to tak:
I tak chyba jest? Tyle, ***380;e z if-em.

Cytat:

poprawi***322;em i teraz wy***347;wietla wszystkie znaki z tablicy ASCII
Dzi***281;kuj***281; i przepraszam za k***322;opot. Nie wspomnia***322;em: potrzebuje tej tabelki na zaliczenie semestru. Mam to wys***322;a***263; do soboty. Osobi***347;cie pisz***281; inny, sw***243;j program - to tak gwoli ***347;cis***322;o***347;ci czemu zajmuje si***281; rysowaniem tabelek w dobie GUI***243;w wszelakich.

Mam nadziej***281;, ***380;e mi zalicz***261;.

Mam kolejne proste pytanie:

Kod:

//zapis do pliku

        assign(cnf,'.\SYSTEM.CNF');
        rewrite(cnf);
        writeln(cnf,'BOOT = cdrom0:\',psx_nazwa,'.EXE');
        writeln(cnf,'TCB = ',psx_tcb);
        writeln(cnf,'EVENT = ',psx_event);
                if psx_stack='1' then writeln(cnf,'STACK = 801FFFF0')
                                else writeln(cnf,'STACK = 801FFF00');
        close(cnf);

Pytanie brzmi jak to przerobi***263;, aby program potem odczytywa***322; ca***322;***261; zawarto***347;***263; tego pliku, a nast***281;pnie j***261; wy***347;wietla***322;? Od pierwszego, a***380; po ostatni znak (zwyk***322;e ASCII).

Oczywi***347;cie to fragment kodu i wszystkie zmienne psx_co***347;tam wprowadza u***380;ytkownik.

a tak to przyk***322;adowo wygl***261;da po zapisaniu:

Kod:

BOOT = cdrom:\NAZWA.EXE;1
TCB = 4
EVENT = 10
STACK = 801FFFF0

Odczyt dotychczas robi***322;em poprzez odczyt ze zmiennych, ale to "chyba" nie najlepsze rozwi***261;zanie :szczerb:

pawelblu 04.12.2007 09:37

Cytat:

Napisany przez Berion (Post 866281)
To nie mój kod tylko nauczyciela :szczerb:

Ojojoj, to niedobrze.

Cytat:

Napisany przez Berion (Post 866281)
Co wg. Ciebie jest w nim takiego, cytuję: "straszne"? Co to znaczy, że kod jest ładny/uporządkowany?

np:

Kod:


//co to jest, ani słowa komentarza ?
znak                :='ÉË***187;ĚÎąČĘĽşÍ';

 write(znak[1]);

//dlaczego akurat ma być o jedną kolumnę mniej ?
 for i:=1 to il_kolumn-1 do
        begin
        for j:=1 to szer_kolumny do
        //wcięcia naprawdę rozjaśniają kod
        write(znak[11]);
        write(znak[2]);
        end;

Cytat:

Napisany przez Berion (Post 866281)
Czy nie jest tak, że każdy programista ma "swój własny porządek"?

No nie. Są pewne konwencje i dobre zwyczaje.

Żeby to wyglądało ładnie, to raczej widziałbym to tak:

w programie głównym iterujesz po znakach (jakimś forem lub whilem z licznikiem) i wywołujesz funkcje drukuj(licznik, znak), która to wylicza sobie z licznika (najlepiej inną funkcją) odpowiednie miejsce, ustawia się tam i drukuje ramkę ze znakiem.

ksviper 03.12.2007 19:01

Ilość załączników: 2
nie wiem czy o to Ci biegało, ale działa
Twój problem polegał na tym, iż zwykłe okno dosowskie ma tylko 25 wierszy i wszystkie indeksy gotoxy powyżej max wierszy były obcinane do tego maksimum
Załącznik 43903

edit:
nie usuwałem z kodu readkeyów aby było łatwiej testować :)

edit:
poprawiłem i teraz wyświetla wszystkie znaki z tablicy ASCII :)
Załącznik 43904

ksviper 03.12.2007 08:53

w domu lukn***281; na to, bo w pracy nie b***281;d***281; mia***322; zbyt wiele czasu

Berion 03.12.2007 01:53

A przepraszam, nie zrozumia***322;em Ciebie.

O jeden wiersz nie zupe***322;nie. Podczas gdy tabela jest rysowana do 13 wierszy jest ok. Kiedy zaczynaj***261; by***263; rysowane kolejne, nadpisuj***261; stare na pocz***261;tku. Nie wiem jak to wyja***347;ni***263;. Zmniejsz liczb***281; wierszy w kodzie (na pocz***261;tku ***378;r***243;d***322;a) to chyba zczaisz o co mi chodzi ;].

Te ***347;miecie to kolejne koordynaty i kolejne znaki jak i ich warto***347;ci w ASCII, kt***243;re si***281; napa***263;ka***322;y w jednym wierszu, z racji faktu, ***380;e s***261; "wk***322;adane" od (0,0), a tabela "posz***322;a" dalej.

ksviper 02.12.2007 23:49

ten screen widzia***322;em, chcia***322;em zobaczy***263; poprawy uk***322;ad
wg. mnie najlepiej jakby wy***347;wietla***322;o ka***380;dy znak o jedno pole wy***380;ej, tylko nie wiem co to s***261; za ***347;miecie w ostatnim wierszu

Berion 02.12.2007 23:46

Post nr. 21 ;)

http://forum.cdrinfo.pl/attachment.p...2&d=1196536483

Co***347; takiego tylko, tak aby nie ogranicza***322;a si***281; w wy***347;wietlaniu do bodaj***380;e 13 wierszy. W og***243;le nie rozumiem tego czemu tak robi. Powinien normalnie wy***347;wietli***263; ca***322;o***347;***263;, w***243;wczas wszystkie warto***347;ci i znaki "trafi***322;yby" w ramk***281;.

ksviper 02.12.2007 22:45

@Berion: mo***380;esz narysowa***263; jak dok***322;adnie ma wygl***261;da***263; ta tabela po wygenerowaniu
albo za***322;***261;cz plik tekstowy

Berion 02.12.2007 22:02

Cytat:

Napisany przez pawelblu (Post 866201)
Ten kod jest straszny. Dopisz w komentarzach co mają robić poszczególne fragmenty. [...]

To nie mój kod tylko nauczyciela :szczerb:

Co wg. Ciebie jest w nim takiego, cytuję: "straszne"? Co to znaczy, że kod jest ładny/uporządkowany? Czy nie jest tak, że każdy programista ma "swój własny porządek"?

pawelblu 02.12.2007 20:18

Cytat:

Napisany przez Berion (Post 866144)
Za odpowiedzi wszystkim dziękuję. Goto wykreślam ze słownika ;]

//nikt nie wie co jest zrąbane w rysowaniu tych tabelek? Zlitujcie się nad moją biedną duszą... :szczerb:

Ten kod jest straszny. Dopisz w komentarzach co mają robić poszczególne fragmenty.

Cytat:

Napisany przez sobrus (Post 866169)
@pawełblu
nie mówie jak to wygląda w sprzętowej realizacji na procesorze tylko z punktu widzenia algorytmiki.

Algorytmika nie ma z tym nic wspólnego. Dziedzinami które wykluczają używanie goto są głównie: Inżynieria oprogramowania (czyli styl pisania kodu) oraz semantyka i weryfikacja (czyli sprawdzanie czy to co jest napisane działa tak jak trzeba).

sobrus 02.12.2007 18:46

@pawe***322;blu
nie m***243;wie jak to wygl***261;da w sprz***281;towej realizacji na procesorze tylko z punktu widzenia algorytmiki. Oczywi***347;cie ***380;e while jest t***322;umaczony na instrukcje testu i skoku (a tak***380;e na ca***322;***261; mas***281; innych typu wrzucenie zmiennej do rejestru) bo taka jest budowa obecnych procesor***243;w. Dlatego w asseblerze oczywi***347;cie etykiety s***261;.

Kiedy***347; na wyk***322;adzie by***322;a maszyna kt***243;ra mia***322;a kilka strasznie prymitywnych instrukcji typu skok, zwi***281;kszenie warto***347;ci o 1 itp.
I by***322;a ca***322;kowicie r***243;wnowa***380;na wszystkim obecnym komputerom. Tylko ***380;e zrobienie na niej czegokolwiek na poziomie 3+5 to by***322;a masakra. Ale kompilator pewnie zrobi***263; by si***281; da***322;o :P

Berion 02.12.2007 16:23

Za odpowiedzi wszystkim dzi***281;kuj***281;. Goto wykre***347;lam ze s***322;ownika ;]

//nikt nie wie co jest zr***261;bane w rysowaniu tych tabelek? Zlitujcie si***281; nad moj***261; biedn***261; dusz***261;... :szczerb:

pawelblu 02.12.2007 14:39

Cytat:

Napisany przez Berion (Post 865973)
Wszyscy mi tak m***243;wi***261;, tylko ni cholery nie wiem dlaczego? Jest jaka***347; lepsza alternatywa? :hmm:

Programy w kt***243;rych u***380;yto instrukcji goto s***261; nieweryfikowalne formalnie. Gdy masz zwyk***322;e p***281;tle mo***380;na np. policzy***263; niezmiennik p***281;tli.

Nieformalnie te***380; jest gorzej - du***380;o gorsza czytelno***347;***263;. Pami***281;taj ***380;e z za***322;o***380;enia oprogramowania nie pisze jedna osoba. Natomiast je***380;eli chodzi o optymalno***347;***263; to dobre zrobienie goto jest bardziej efektywne od zwyk***322;ych p***281;tli, ale trudno jest zrobi***263; dobre i przemy***347;lane labele i instrukcje goto, cho***263; mo***380;na. Tak jest np. w niekt***243;rych fragmentach kodu w j***261;drze linuxa (albo by***322;o, przynajmniej w 2.4).

Cytat:

Napisany przez sobrus (Post 866107)
Z teoretycznego punktu widzenia dawno jest udowodnione ***380;e wszystko da si***281; napisa***263; trzema typami instrukcji - sekwencji ( ; ), iteracji (while) i selekcji (if). Reszta to tylko dodatki.

Hehehe. No nie do ko***324;ca, a raczej nie w t***261; stron***281;. Prawda wygl***261;da tak ***380;e np. taki while jest t***322;umaczony przez kompilator na goto :D goto jest instukcj***261; procesora, while to "lukier syntaktyczny", ale taki do***347;***263; estetycznie i funkcjonalnie niezb***281;dny.

p***281;tle i ify s***261; t***322;umaczone na test rekord***243;w (inst. procesora) i odpowiedni skok do odpowiedniej etykiety (inst. procesora).

sobrus 02.12.2007 14:17

etykiety i goto to paskudny pomys***322;. ka***380;dy rozs***261;dny programista opieprzy za ich stosowanie i z***322;apie si***281; za g***322;owe jak przyjdzie mu czyta***263; taki kod...
u mnie na studiach stosowanie tego by***322;o ca***322;kowicie zabronione i te***380; na pocz***261;tku si***281; dziwi***322;em czemu bo jako dziecko stosowa***322;em goto nagminnie w basicu (C64 ;) ).

Nie spotka***322;em ani jednej rzeczy kt***243;r***261; wygodniej by***322;oby zrobi***263; przez goto. Z teoretycznego punktu widzenia dawno jest udowodnione ***380;e wszystko da si***281; napisa***263; trzema typami instrukcji - sekwencji ( ; ), iteracji (while) i selekcji (if). Reszta to tylko dodatki.

Patrix 01.12.2007 22:09

Cytat:

Napisany przez Berion (Post 865977)
Ale powiedz please, czemu etykiety to niedobry pomys***322;?

bo jest be ;)
za pomoc***261; goto nie mo***380;na skoczy***263; do innej procedury, p***281;tli...

poza tym estetyka...
tworzenie menu za pomoca goto jest kozackie... i tak wyglada...
zamiast je robic za pomoca goto/etykiet i if'ow to lepiej podzielic program na procedury i wywolywac je za pomoca case... wygl***261;da ***322;adniej i logiczniej...


napisalem Ci na kolanie menu... teraz zr***243;b to samo na goto :D teraz rozumiesz? :>
Kod:

program bleble;
uses crt;
var
zonk,zonk1:integer;

procedure aa;
        begin
                writeln('jeden');
        end;
procedure bb;
        begin
                writeln('dwa');
        end;
procedure menu;
        begin
                writeln('[1] procedura aa');
                writeln('[2] procedura bb');
                writeln('[3] wyjdz');
                read(zonk);
        end;
begin
        clrscr;
        zonk1 := 1;
        repeat
        menu;
          case zonk of
                1: aa;
                2: bb;
                3: exit;
          end;
        until zonk1 <> 1;
        readln;
end.

po pewnym czasie doszedlbys do wniosku:

jesli bedziesz miec kilkanascie etykiet to stracisz kontrole nad programem...

np.

masz w programie kolejno (gdzies tam miedzy kodem)

label zonk1;
(...)
label zonk2;
(...)
label zonk3
(...)
label zonkN

i teraz tak jak wywolasz etykiete zonk1; to wykona sie wszystko w innych etykietach nizej czy tego chcesz czy nie...
jesli wywolasz zonk2; to tez za kazdym razem wykona sie wszystko co pod nia...

wywolujac procedure case'm _wyjmujesz_ do wykonania potrzebny Ci FRAGMENT programu, tego nie uzyskasz za pomoca goto

Berion 01.12.2007 21:46

Nie pomy***347;la***322;em o tym :D

Ale powiedz please, czemu etykiety to niedobry pomys***322;?

Patrix 01.12.2007 21:39

Cytat:

Napisany przez Berion (Post 865973)
Wszyscy mi tak m***243;wi***261;, tylko ni cholery nie wiem dlaczego? Jest jaka***347; lepsza alternatywa? :hmm:


jak juz chcesz miec petle nieskonczona wracajaca do poczatku po nacisnieciu dowolnego klawisza...

Kod:

program bleble;

uses crt;

var
zonk:integer;

begin
zonk:=1;
 repeat
  clrscr;
  writeln('tutaj program...');
  readln;
 until zonk <> 1;
end.

do zonk'a wpisujesz 1,
petla repeat (powtarzaj) until (dop***243;ki) zonk <> 1 - logicznie, ze zawsze bedzie =1 wiec nie bedzie miec konca :)

Berion 01.12.2007 21:34

Wszyscy mi tak mówią, tylko ni cholery nie wiem dlaczego? Jest jakaś lepsza alternatywa? :hmm:

Patrix 01.12.2007 21:25

w rysowanie tabelek nigdy sie nie bawilem (na szczescie belfrzy dali se siana z tym)

pisze tego posta aby opieprzyc Cie za stosowanie komendy goto :D

naprawde radze oducz sie _etykietowania_ to z***322;y nawyk i ka***380;dy programista Ci to powie, to nie asembler :)

Berion 01.12.2007 21:12

Ilość załączników: 2
THX za pomoc, ale jeszcze sobie delphi odpuszcz***281; - jednak.

Tymczasem mam problem z czym innym. Jak tu zrobi***263;, aby w poni***380;szym wynalazku program sam powpisywa***322; wszystkie warto***347;ci z ASCII do tabeli.

Przesuni***281;cia s***261; ok, problem w tym, ***380;e tabela nie rysuje si***281; ca***322;a od pocz***261;tku do ko***324;ca. Nie wiem jak kto wyja***347;ni***263;.

sobrus 19.10.2007 09:44

Dawno juz w delphi nic nie robi***322;em .... ale nie pownienie***347; da***263; procedury przed beginem? ( po {R...} )?
edit:
albo po prostu wyrzuci***263; ten begin przed procedur***261; ca***322;kowicie
(end. na ko***324;cu zostaje)

Berion 09.10.2007 20:36

Ilość załączników: 1
Pozwolę sobie odkopać topik ;]

Czy znalazłby się jakiś "fachman od Delphi" i mógłby mnie oświecić czemu nie mogę skompilować tego wynalazku. Dodam, że jestem newbie co pewnie od razu widać. :D

Kod:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    ps2boot: TCheckBox;
    cdrom: TComboBoxEx;
    ps2save: TButton;
    procedure ps2saveClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  cnf: textfile;

implementation

{$R *.dfm}

begin

procedure TForm1.ps2saveClick(Sender: TObject);
begin
  if ps2boot.checked then
      begin
          assignfile(cnf, '.\SYSTEM.TXT');
          try
          rewrite(cnf);
          write('BOOT2 = '); writeln('wstawic cdroma');
          finally
          closefile(cnf);
      end;
    Application.MessageBox('Plik został pomyślnie zapisany','SYSTEM.CNF',0);
end;

end.

Głupio mi, że wysypuję się na takich banałach, ale nie mogę zrozumieć co zrobiłem źle.

errory:

Kod:

  [Error] Unit1.pas(31): Statement expected but 'PROCEDURE' found
  [Error] Unit1.pas(44): ';' expected but '.' found
  [Error] Unit1.pas(46): Declaration expected but end of file found
  [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'


pawelblu 10.12.2006 02:32

Cytat:

Napisany przez Patrix (Post 714521)
ok wypisywanie i szukanie sobie zrobiłem/poprawiłem - a jak wyglądałoby usuwanie elementu listy, bo to chyba bedzie wyglądać różnie w zależności czy to będzie początek listy (temp^.poprzednia = nil), środek listy (temp^.dana) czy koniec listy (temp^.nastepna = nil)

PS
Tak ale jak to zrozumiem na typie dwukierunkowym to jednokierunkowy wystarczy 'odchudzić' :)

Nie bedzie roznicy - schodzisz, wywalasz i przepinasz. a czy przepniesz null w jakies miejsce czy cos innego to bez znaczenia.

Nie rozumiem PS, ale wydaje mi sie ze dobrze myslisz.

Zrob moze lepiej ten stos

nil <- elem6 <- elem3 <- elem8 <- elem2 <- stos

dodanie elem5 (elem5 pokazuje na elem2, stos pokazuje na elem5)

nil <- elem6 <- elem3 <- elem8 <- elem2 <- elem 5 <- stos

wypsanie - tak jak masz.
szukanie - tak jak masz.

usuwanie.
sprawdzasz czy stos nie jest nil.
sprawdzasz czy stos^.wart = co trzeba jak tak to temp1=stos^.poprz stos^.poprz = nil, stos = temp1
jak nie znalazles to teraz temp2 = stos.
i potem lecimy i sprawdzamy temp2^.poprz^.wartosc (dana to dziwna nazwa BTW). Jak znajdziemy to przepinamy jak wyzej temp1=temp2^.poprz^.poprz; temp2^.poprz^.poprz = nil; temp2^.poprz = temp1.
i tak lecisz dopoki temp2^.poprz nie bedzie nilem

Proponuje poprzerabiac na funkcje i zastanowic sie jakie wartosci powinny byc zwracane. Np. jezeli usun moze zwracac liczbe usunietych wezlow (w szczegolnosci mozesz napisac tak zeby wszystkie wystapienia usuwal, ale tak czy inaczej powinienes zzewnatrz wiedziec czy cokolwiek udalo sie wyrzucic).

Patrix 10.12.2006 01:29

ok wypisywanie i szukanie sobie zrobi***322;em/poprawi***322;em - a jak wygl***261;da***322;oby usuwanie elementu listy, bo to chyba bedzie wygl***261;da***263; r***243;***380;nie w zale***380;no***347;ci czy to b***281;dzie pocz***261;tek listy (temp^.poprzednia = nil), ***347;rodek listy (temp^.dana) czy koniec listy (temp^.nastepna = nil)

PS
Tak ale jak to zrozumiem na typie dwukierunkowym to jednokierunkowy wystarczy 'odchudzi***263;' :)

pawelblu 10.12.2006 01:12

BTW. Narazie do tej funcjonalnosci nie potrzeba Ci listy dwukierunkowej. Korzystasz jedynie z jednego kierunku reprezentujacego stos - masz najnowszy wierzcholek i schodzisz poprzednikami. Narazie zbedna wiec wydaje sie byc pozycja 'nastepny' - chyba ze gdzies indziej jej bedziesz uzywal.

Patrix 10.12.2006 00:02

Cytat:

Napisany przez pawelblu (Post 714473)
Nigdy nie sprawdzasz najstarszego elementu.
czyli tego co mam poprz=nil

dzięki teraz wszystko narazie ok, będę musiał to sobie chyba logicznie rozrysować jak to działa aby mi sie nie plątało.

pawelblu 09.12.2006 22:22

Cytat:

Napisany przez Patrix (Post 714451)
no tak, może teraz liczba wchodzi do listy ale jakoś nie umiem jej wyświetlić, pisałem nawet procedure aby ja znaleźć ale chyba jej tam nie ma :|

Kod:

{-----------------------------------------------------}
procedure szukaj;
var liczba: integer;
  begin
    temp := lista;

    writeln('Podaj szukana liczbe');  readln(liczba);

    while temp <> nil do
      begin
        if liczba = temp^.dana then writeln('Znaleziono');
        temp := temp^.poprzednia;
      end;

  end;
{-----------------------------------------------------}

może mam zły pomysł na procedury ?


Nigdy nie sprawdzasz najstarszego elementu.
czyli tego co mam poprz=nil

Patrix 09.12.2006 21:22

Cytat:

Napisany przez pawelblu (Post 714421)
Chociaz ja bym ja zacyklil. Listy dwukierunkowe sa fajniejsze jak sie je zacykla. Przynajmniej takie mam osobiste zdanie :)


no tak, mo***380;e teraz liczba wchodzi do listy ale jako***347; nie umiem jej wy***347;wietli***263;, pisa***322;em nawet procedure aby ja znale***378;***263; ale chyba jej tam nie ma :|

Kod:

{-----------------------------------------------------}
procedure szukaj;
var liczba: integer;
  begin
    temp := lista;

    writeln('Podaj szukana liczbe');  readln(liczba);

    while temp^.poprzednia <> nil do
      begin
        if liczba = temp^.dana then writeln('Znaleziono');
        temp := temp^.poprzednia;
      end;
  end;
{-----------------------------------------------------}

mo***380;e mam z***322;y pomys***322; na procedury ?

pawelblu 09.12.2006 20:35

Cytat:

Napisany przez Patrix (Post 714357)
Odkopuj***281; temat, poziom po kilku latach troszk***281; si***281; zmieni***322; wi***281;c...

mam napisa***263; program, kt***243;ry b***281;dzie dodawa***263; (wpisane przez u***380;ytkownika) do listy dwukierunkowej liczby a potem je wy***347;wieta***263; kolejno...

zrobi***322;em co***347; takiego:

Kod:

program test1;

uses crt;

type
  t_lista_dwukierunkowa = ^lista_dwukierunkowa;
{-----------------------------------------------------}
lista_dwukierunkowa = record
  nastepna  : t_lista_dwukierunkowa;
  poprzednia : t_lista_dwukierunkowa;
  dana      : integer;
end;
{-----------------------------------------------------}
var
  lista    : t_lista_dwukierunkowa;
  temp      : t_lista_dwukierunkowa;
  liczba    : integer;
{-----------------------------------------------------}
procedure do_listy;
  begin
    write('> Podaj liczbe: ');  readln(liczba);

    if lista = nil then
      begin
        new(lista);
        lista^.nastepna    := nil;
        lista^.poprzednia  := nil;
        lista^.dana        := liczba;
      end
        else
          begin
            new(temp);
            temp^.nastepna    := nil;
            //skoro lista^.nastepna  := temp, to musi:
            temp^.poprzednia  := lista;

            lista^.nastepna  := temp;
            temp^.dana        := liczba;
            lista            := temp;

          end;
  end;
{-----------------------------------------------------}
procedure wyswietl;
  begin
    temp := lista;

    while temp^.poprzednia <> nil do
      begin
        write(temp^.dana);
        temp := temp^.poprzednia;
      end;
  end;
{-----------------------------------------------------}

BEGIN
clrscr;

do_listy;
wyswietl;

readln;

END.


Wiem, ***380;e jestem blisko ale co***347; mi nie wychodzi...

Chociaz ja bym ja zacyklil. Listy dwukierunkowe sa fajniejsze jak sie je zacykla. Przynajmniej takie mam osobiste zdanie :)

Patrix 09.12.2006 17:40

Odkopuj***281; temat, poziom po kilku latach troszk***281; si***281; zmieni***322; wi***281;c...

mam napisa***263; program, kt***243;ry b***281;dzie dodawa***263; (wpisane przez u***380;ytkownika) do listy dwukierunkowej liczby a potem je wy***347;wieta***263; kolejno...

zrobi***322;em co***347; takiego:

Kod:

program test1;

uses crt;

type
  t_lista_dwukierunkowa = ^lista_dwukierunkowa;
{-----------------------------------------------------}
lista_dwukierunkowa = record
  nastepna  : t_lista_dwukierunkowa;
  poprzednia : t_lista_dwukierunkowa;
  dana      : integer;
end;
{-----------------------------------------------------}
var
  lista    : t_lista_dwukierunkowa;
  temp      : t_lista_dwukierunkowa;
  liczba    : integer;
{-----------------------------------------------------}
procedure do_listy;
  begin
    write('> Podaj liczbe: ');  readln(liczba);

    if lista = nil then
      begin
        new(lista);
        lista^.nastepna    := nil;
        lista^.poprzednia  := nil;
        lista^.dana        := liczba;
      end
        else
          begin
            new(temp);
            temp^.nastepna    := nil;
            temp^.poprzednia  := nil;
            lista^.nastepna  := temp;
            temp^.dana        := liczba;
            lista            := temp;
          end;
  end;
{-----------------------------------------------------}
procedure wyswietl;
  begin
    temp := lista;

    while temp^.poprzednia <> nil do
      begin
        write(temp^.dana);
        temp := temp^.poprzednia;
      end;
  end;
{-----------------------------------------------------}

BEGIN
clrscr;

do_listy;
wyswietl;

readln;

END.


Wiem, ***380;e jestem blisko ale co***347; mi nie wychodzi...

MacGyver 01.12.2004 20:38

Cytat:

Napisany przez Ziele
Pewnie masz dużo obiektów i zmieściłeś je na 4 panelach żeby okno nie było duże... a nie lepiej było do tego użyć PageControl? :D

Masz namyśli, że w PageControl daje powiedzmy 4 nowe zakładki i w każdej biorę TabVisible na False (dopiero teraz to zobaczyłem;p )???
Teraz powiedz mi jak odwołać się do jakiejś konkretnej zakładki???
thx
...::Update::...
OK, już mam ... poprostu "Show" ;)
Dzięki Ziele :piwo: Działa tak jak chciałem...

BTW: Czym się rózni PageControl od TabControl???

Ziele 01.12.2004 19:29

Pewnie masz dużo obiektów i zmieściłeś je na 4 panelach żeby okno nie było duże... a nie lepiej było do tego użyć PageControl? :D

Posłany 01.12.2004 14:15

Cytat:

Napisany przez MacGyver
Ja mam pytanie dotyczące Delphi:
Mam formatkę na której umieszczam 4 obiekty typu "Panel" (panele są tych samych rozmiarów i w tych samych miejscach, w ten sposób że się pokrywają).
Pytanie: czy istnieje jakaś instrukcja, żeby dany panel odrazu "wywalić" na samą górę??? (bez komend ukrywających pozostałe panele)
Dotychczas robiłem to w ten sposób, że w kodzie jakiegoś przycisku wpisywałem np.
Kod:

Form1.Panel2.Visible:=False; //ukrywa drugi panel
Form1.Panel1.Visible:=True;  //...i odkrywa pierwszy

???

Raczej trzeba w ten sposób. Bo Ty ustawiając je na formie przyporządkowujesz im "warstwe". No chyba że istnieje dla TPanel'u funkcja Focus...

MacGyver 01.12.2004 13:16

Ja mam pytanie dotyczące Delphi:
Mam formatkę na której umieszczam 4 obiekty typu "Panel" (panele są tych samych rozmiarów i w tych samych miejscach, w ten sposób że się pokrywają).
Pytanie: czy istnieje jakaś instrukcja, żeby dany panel odrazu "wywalić" na samą górę??? (bez komend ukrywających pozostałe panele)
Dotychczas robiłem to w ten sposób, że w kodzie jakiegoś przycisku wpisywałem np.
Kod:

Form1.Panel2.Visible:=False; //ukrywa drugi panel
Form1.Panel1.Visible:=True;  //...i odkrywa pierwszy

???

Patrix 24.11.2004 22:52

MacGyver i cyki

- dzięki, działa :)

PS
reputy poszły.... ;)

MacGyver 24.11.2004 22:47

Cytat:

Napisany przez cyki
Jak dla mnie to będzie:
IF a+b >= 0 AND -1*(a+b) >= 0 THEN Begin [...] End;

A dokładniej (bo wywali błąd):
IF ((a+b>=0) AND (-1*(a+b)>=0)) THEN Begin [...] End

Cytat:

chodzi mi o to jaki ma być znaczek między dwoma nierównościami po IF (chce to zrobić w jednym warunku)
AND

Patrix 24.11.2004 22:46

Cytat:

Napisany przez MacGyver
W Pascalu wstawiasz je między BEGIN a END (zaraz po THEN)
...bynajmniej tak jest w Delphi - a to też Pascal

...::Update::...
QRde, zle zrozumiałem :ysz:
...dajesz w nawiasach pierwszy warunek potem wpisujesz AND i drugi warunek

Wiem gdzie sie to wstawia :)
chodzi mi o to jaki ma być znaczek między dwoma nierównościami po IF (chce to zrobić w jednym warunku)...

cyki 24.11.2004 22:45

Jak dla mnie to będzie:
IF a+b >= 0 AND -1*(a+b) >= 0 THEN Begin [...] End;

MacGyver 24.11.2004 22:42

W Pascalu wstawiasz je między BEGIN a END (zaraz po THEN)
...bynajmniej tak jest w Delphi - a to też Pascal

...::Update::...
QRde, zle zrozumiałem :ysz:
...dajesz w nawiasach pierwszy warunek potem wpisujesz AND i drugi warunek

Patrix 24.11.2004 22:38

Pascal...pytanie
 
Chodzi mi o warunek w Pascalu:
Kod:

IF a+b<0 THEN WriteLn('blabla (blabla): ', -1*(a+b), ' blabla !!!')
problem w tym, że mam potrzebę wstawienia dwóch nierówności po IF
np: 'a+b>=0' i np '-1*(a+b)>=0'

Jeśli ktoś nie kuma o co mi chodzi to podam przykałd na C++:
Kod:

if((a>=5)&&(a<=21))
{
}

W C++ w tym wypadku stosuje sie znaczek '&&' -(i) bub '||' -(lub)

Jak to jest w Pascalu ??


Wszystkie czasy w strefie CET. Aktualna godzina: 00:17.

Powered by vBulletin® Version 3.9.0 LTS
Copyright ©2000 - 2026, vBulletin Solutions Inc.