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

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


Wszystkie czasy w strefie CET. Aktualna godzina: 15:19.

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