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/)

pawelblu 10.12.2006 00: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: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: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).

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'


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 01.12.2007 20: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;.

Patrix 01.12.2007 20: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 20:34

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

Patrix 01.12.2007 20: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 20:46

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

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

Patrix 01.12.2007 21: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

sobrus 02.12.2007 13: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.

pawelblu 02.12.2007 13: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).

Berion 02.12.2007 15: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:

sobrus 02.12.2007 17: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


Wszystkie czasy w strefie CET. Aktualna godzina: 16:20.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.