dynamiczna tabelka

0
  1. Potrzebuje zrobić dynamiczną tabelkę do której wpisze 5 rekordów z pliku tupu numer, imie,nazwisko,plec,zarobki.
type tdane = record
                 numer:byte;
                 imie:string[20];
                 nazwisko:string[30];
                 plec:char;
                 zarobki: real;

Problem pojawia się gdy robię tą tabelkę..

procedure tabela;
var i:byte;
    x,y: byte;
begin
 write('Id: ',#179);  writeln;
      for i:=1 to 80 do write(#196);
      for i:=1 to FileSize(plik) do writeln(#179);
            GoToxy(length('Nazwisko: '),1);
            write('Nazwisko: ');
for i:=1 to FileSize(plik) do writeln(#179);
end;

Bo robi mi tylko jedną pionową kreskę po słowie Id czy imie itd.. A pozostałe z lewej strony konsoli. (Screen - http://i.imgur.com/Mllf1.png). Jak zrobić, żeby ta pionowa kreska leciała cały czas na dół do końca pliku.. Wiem, że można oddzielić to spacjami, ale wtedy już ta tabela nie będzie dynamiczna.. Bo wiadomo, raz z pliku wczyta mi nazwisko 6 literowe a raz 10..
bo jak pisze

for i:=1 to FileSize(plik) do write(#179);

to robi się tak jak napisałem, wyżej :)

  1. Jak można policzyć liczby typy byte, real.. Chodzi o to, że np mam numer 1000 i żeby policzyło że to 4 cyfry. lub zarobki 2000,99 i żeby policzyło, że ma przesunąć kursor o 7 pozycji..

Mógłby mi ktoś pomóc, naprowadzić jak to zrobić? Mam nadzieje, że teraz wszyscy rozumieją jaki mam problem :D
Z góry dzięki.

0

Mam dziwne wrażenie, że będziesz musiał najpierw przeszukać plik w poszukiwaniu najdłuższego ciągu znaków który ma być wpisany do danej kolumny i na podstawie tej liczby wyliczać ilość spacji którą trzeba dodać po wczytanej informacji i dopiero na sam koniec to wypisać.

Coś w stylu: Jedna spacja po początku kolumny i jedna spacja przed końcem + najdłuższy wyraz (załóżmy że będzie miał x znaków). Więc kolumna ma szerokość x+2 spacji. Dodatkowe spacje dodajemy na koniec wczytanego wyrazu jeśli jest mniejszy od x. Teraz wczytujemy informacje która ma y znaków (y<=x). Wyliczamy ilość spacji które musimy dodać na koniec wczytanej informacji (x-y) i dostawiamy je po wyświetleniu informacji następnie dodajemy jedną spację (wynika to z założeń jak ma wyglądać kolumna) i stawiamy znak kończący kolumnę "|".

Takie coś wymyśliłem. Oprogramuj to sam bo gotowce nie są mile widziane no chyba że płacisz za to. A i nie zapomnij napisać algorytmu wyszukującego najdłuższy ciąg znaków co nie powinno być problemem.

Chyba niezbyt jasno to opisałem ale się starałem.

3

(..) I co to cholera ma do danych które są wczytywane.

Uspokuj się frustracie.

0
babubabu napisał(a):

Mam dziwne wrażenie, że będziesz musiał najpierw przeszukać plik w poszukiwaniu najdłuższego ciągu znaków który ma być wpisany do danej kolumny i na podstawie tej liczby wyliczać ilość spacji którą trzeba dodać po wczytanej informacji i dopiero na sam koniec to wypisać.
Przecież już dostałeś powyższą odpowiedź, powiedz którego słowa nie rozumiesz?

0

Hmmm...

Przede wszystkim jeśli chcesz narysować tabelkę (w dowolnym trybie, czy tekstowym czy graficznym) to musisz znać szerokość najdłuższego słowa, które będzie się znajdować w danej komórce (i kolumnie); Musisz to wiedzieć żeby bezbłędnie ocenisz szerokość kolumny (i oczywiście pierwszych komórek - tytułowych); Jeśli nie jesteś pewien lub nie masz możliwości sprawdzić długości najdłuższego słowa znajdującego się w pliku będziesz musiał przyjąć statyczny rozmiar szerokości kolumn; Najpierw rysujesz komórki tytułowe po czym uzupełniasz kolejne danymi wczytanymi z pliku; Podczas wypełniania musisz sprawdzić, czy aktualne słowo dla danej komórki nie jest dłuższe niż szerokość kolumny i jeśli tak - w wybrany przez Ciebie sposób skracasz je (np. wyświetlasz tylko jego część i dodajesz ...);

Na rozmiar poszczególnych słów musisz zwracać uwagę, bo jeśli nawet obliczysz długość najdłuższego wiersza to wiersz ten może się nie zmieścić na ekranie konsoli i zostanie zawinięty do kolejnej linii, czyli spierdzieli Ci całą robotę;

Druga sprawa to dane zawarte w pliku; Patrząc na ten rekord:

type TDane = record
  Numer: Byte;
  Imie: String[20];
  Nazwisko: String[30];
  Plec: Char;
  Zarobki: Real;
end;

i obliczając maksymalną długość wiersza widać jak na dłoni, że spokojnie zmieścisz się w ekranie konsoli (możesz użyć najwięcej 78 znaków w poziomie, a konsola ma 80); Wiedząc to możesz ustalić statycznie szerokość kolumn, a co za tym idzie narysowanie takiej tabelki jest rzeczą trywialną; Jeśli piszesz ten program w TP7 lub FPC to polecam procedurę GoToXY;


Jak znajdę chwilkę czasu to napisze taki algorytm by sprawdzić poprawność moich słów;

1
marogo napisał(a):

Uspokuj się frustracie.

Uspokój, tak to się pisze poprawnie (wiedza z gimbazy).
I gdybym się przejmował tak jak to się może wydawać po moich postach to już dawno bym sobie coś zrobił. Serio, mnie to nie rusza.

jak w pierwszym wierszu nazwisko jest tak długie, że przechodzi za linie to żeby ta linia przesunęła się w prawo o tyle ile liter ma nazwisko +2.. Jak już teraz nie zrozumieją co poniektórzy to ja już nie wiem jak inaczej to napisać..

No to trzeba zrobić tak jak @babubabu napisał i wyliczyć najdłuższy string zanim zaczniemy malować.
Jaki masz problem? Z algorytmem, z realizacją czy z czym? Bo póki co to kompilator robi to co chcesz, inni też ci dają wręcz gotowe algorytmy do liczenia i rysowania a ty wciąż masz jakiś problem.

0

dlaczego?

Moja magiczna kula mówi że błąd jest w linii numer 123.

0

while not EOF(plik) do begin tabela;

Najlepiej to daj to jeszcze z 5 razy w pętli, najlepiej zagnieżdżonej.

poza tym bardzo mądrze otwierasz plik najpierw w mainie potem w funkcji odczyt

x := 2;
for i := 1 to FileSize(plik) do
begin
GoToxy(64, x);
Write(#180);
x := x + 2;
end;
end;
y := 4;
for i := 1 to FileSize(plik) do
begin
Gotoxy(8, y);
Write(#197);
y := y + 2;

end;
y := 4;
for i := 1 to FileSize(plik) do
begin
  Gotoxy(25, y);
  Write(#197);
  y := y + 2;

end;
y := 4;
for i := 1 to FileSize(plik) do
begin
  Gotoxy(41, y);
  Write(#197);
  y := y + 2;
end;
y := 4;
for i := 1 to FileSize(plik) do
begin
  Gotoxy(52, y);
  Write(#197);
  y := y + 2;

end;

"A na co mi procedury"

Gotoxy(length('Numer: '), y);
writeln(#179);
GoToxy(length('Numer: '), x);
writeln(#197);

  GotoXY(length('Imie:') + 20, y);
  writeln(#179);
  GoToXY(length('Imie: ') + 19, x);
  writeln(#197);

  GoToXY(length(' Nazwisko: ') + 30, y);
  writeln(#179);
  GoToXY(length(' Nazwisko: ') + 30, x);
  writeln(#197);

  GoToXY(length(' Plec: ') + 45, y);
  writeln(#179);
  GoToXY(length(' Plec: ') + 45, x);
  writeln(#197);

  GotoXY(length(' Placa: ') + 56, y);
  writeln(#179);

A na co mi stałe

case z of
#49: otwarcie(plik);
#50: odczyt(plik);

Nie ma to jak dobrze nazwane procedury.

Jeżeli po poprawieniu powyższego nadal nie będzie działać to użyj debuggera.

1
Guepardo napisał(a)

No a jak to zrobić, że np kolumne mam na szerokość 15 znaków a słowo ma 20, to żeby wyświetliło 13 i 2 kropki (sssssss..)?

Ale Ciebie to nie powinno obchodzić, bo łączna suma długości danych w rekordzie oraz odstępy i linie graniczne tabeli wynosi 78, a w konsoli masz poziomo 80 znaków; Nie wiesz jak to policzyć? Popatrz:

Identyfikator Typ pola Długość w bajtach (na ekranie)
Numer Byte 3 (dla numeru ponad 99)
Imie String 20
Nazwisko String 30
Plec Char 1
Zarobki Real 8
Suma: 62
Identyfikator Znak Ilość
---------------- ---------------- ----------------
Pionowa linia graniczna komórki ` `
Separator słowa od linii Spacja 10
Suma: 16

| Razem: | 78
Z typem Real możesz mieć kłopot jeśli ktoś będzie zarabiał ponad 99.999,99zł - wtedy rozszerz ostatnią kolumnę o dwa znaki, bo tyle zostało Ci w zapasie;
No i po co tu obcinanie skoro i tak wszystko zmieści się na ekranie; Zostanie Ci jeszcze dwa znaki w zapasie, stąd możesz śmiało ustawić szerokość kolumn na stałe i nie kombinować z dynamicznym ustawianiem ich rozmiaru;


Mnie tak na szybko udało sie napisać takie coś:

Table.png

W załączniku zamieszczam program do przetestowania; Program ma niewiele linii (dokładnie 127) i przedstawia dość prosty sposób na narysowanie i wypełnienie takiej tabelki; Oczywiście można go zoptymalizować, ale to tylko materiał poglądowy; Pobaw się nim i zobacz jak ja to zrobiłem - może na jakiś mądry pomysł wpadniesz;

0

U mnie się nie da tego skompilować wywala błąd przy module SysUtils..

Jeżeli sądzisz że zmienimy swoje kompilatory tylko dlatego że ty używasz dziwnego i niepopularnego to jesteś w błędzie. Musisz się w takim wypadku wykazać posiadaniem i używaniem TBrain z którym już po temacie widać masz problemy.

0

Ja do nikogo nie mam pretensji.

No to czas mieć do samego siebie.

A ty mi tu cały czas wyjeżdżasz z głupimi tekstami.

Albo tobie się wydają głupie bo nie rozumiesz co mają tobie zasygnalizować.

Już tobie mówiłem żebyś zmienił kompilator na co nie zgodziłeś się no to teraz masz tego skutki. Teraz sobie sam radź z jego problemami bo u nas działa (a co ciekawsze nie działa twój kod bo twój kompilator ma rozszerzenia których FPC nie trawi - zgadnij dlaczego). @furious programming dał ci kod czego jestem przeciwnikiem a ty narzekasz że zbyt trudno napisany i że nie działa.
Ty chyba czekasz na gotowca który KONIECZNIE musi być napisany w twoim stylu i KONIECZNIE musi się kompilować na tym czymś czego używasz.

0

Co ty możesz wiedzieć..

Nic, na pewno.

Nie czekam, na żadne gotowce..

TO NA CO?

poza tym dałem kod gdzie zrobiłem ta tabelkę po swojemu..

Tak już widziałem ten 'kod'. I w odpowiedzi pokazałem tobie co w tym kodzie jest źle. Zakład że niczego nie poprawiłeś?

A on ją zrobił, po to bym mógł sobie je porównać i przeanalizować..

No to teraz mi wytłumacz po co te komentarze:

U mnie się nie da tego skompilować wywala błąd przy module SysUtils..

Ale jak dla mnie początkującego, ten kod nie bardzo jest zrozumiały.. :(

Nie dość że brzmią one jakbyś oczekiwał że zaraz poprawimy ten kod, tak żebyś miał gotowca, to jeszcze nie mówią one CZEGO nie rozumiesz i widać że nie poświęciłeś czasu na jego analizę.
Furious bardzo się postarał nad odpowiedzią, długo analizował twój kod i pisał swój a ty mu odpowiadasz "nie działa i nie rozumiem" aż się prosi o dopowiedzenie "popraw i zobaczę czy mi się podoba".
PRZEANALIZUJ kod Furiousa a jak chcesz go skompilować to POBIERZ FPC. Takie trudne?
Na banalne problemy funkcji których nie rozumiesz masz GOOGLE.
Jaki jest twój problem? Czego od nas oczekujesz? Bo albo tego że napiszemy tobie ten kod albo sam nie wiesz czego.

2

odwalisz się?

Nie.

Na nic nie oczekuje, rozumiemy się!

Skoro niczego nie oczekujesz to czemu nie oznaczyłeś posta furiousa jako rozwiązanie. Kurcze, sam nie wiesz czego chcesz, narzekasz że kod jest zły, etc etc.
Ogarnij się kolego i zamiast odpisywać bezsensownie na moje posty po prostu przestudiuj ten kod, ulepsz swój, pokaż co masz i powiedz co jeszcze jest nie tak. Dodatkowo udowodnij że się nie leniłeś i użyłeś czegoś takiego jak debugger (ciekawe czy ten twój kompilator wspiera jakiś debugger).

0
Guepardo napisał(a)

Ale jak dla mnie początkującego, ten kod nie bardzo jest zrozumiały.. :(

-123oho napisał(a)

@Furious Programming dał ci kod czego jestem przeciwnikiem a ty narzekasz że zbyt trudno napisany i że nie działa.

Ja to mogę napisać w bardzo prosty sposób, ale z 127 linii zrobi się 1270... Gdyby jeszcze bardziej pokombinować można by napisać krótszy i szybszy kod od mojego; Nie użyłem w kodzie żadnych ficzerów, wszystko co zawarte jest w nim każdy początkujący programista powinien wiedzieć zanim podejmie się napisania jakiegokolwiek programu; Czego nie rozumiesz / nie umiesz obsługiwać? Rekordów? Macierzy? Pętli? Procedur? Czy plików typowanych? Jeśli któregokolwiek elementu nie rozumiesz i nie umiesz się nimi posługiwać to powinieneś o nich poczytać i się ich nauczyć zanim zaczniesz pytać na forum; Rozumiem, że nawet znając te pojęcia zdażają się sytuacje, gdzie ciężko samodzielnie znaleźć błąd w kodzie, ale po Tobie nie widać żebyś choćby wiedział jak to wykonać;

Ja wiem, że dałem gotowy kod i nie jestem z tego zbytnio zadowolony, ale napisany jest w taki sposób, żeby go nie skopiować i wkleić do swojego programu (przynajmniej w prosty sposób); Dzięki temu kod trzeba zrozumieć co daje choć jeden plus - na nim autor powinien się nauczyć obsługi pewnych rzeczy oraz interpretowania cudzych kodów;

@Guepardo - nie mam zielonego pojęcia w jakim kompilatorze piszesz ten program, ale jedno Ci napiszę - jeśli chcesz poeksperymentować z moim programem (i ogólnie przyzwyczaić się do nowego i w miarę aktualnego środowiska) to polecam pobranie kompilatora Free Pascal Compiler (FPC) np. z tej witryny (w Google znajdziesz więcej źródeł);

0

Pewnie dlatego, że cały czas rysujesz linie w tym samym miejscu (gotoxy)...

0

Możesz znacznie skrócić kod stosując macierze (w podobny lub taki sam sposób jak zastosowałem w kodzie podanym we wcześniejszym poście); Jeśli to zrobisz i wykażesz się wiedzą i samozaparciem to uda Ci się rozwiązać problem;

Zastanów się także nad tym dlaczego nikt od 13 nie pomógł Ci rozwiązać tego problemu;

0

Mógłby ktoś podpowiedzieć, dlaczego ramka zaznaczająca bieżący rekord, po naciśnięciu strzałki (dół/góra) nie przechodzi mi cała tylko połowa ramki? A ostatni rekord zaznacza się dobrze?

Sam sobie podpowiedz.

Tak, mogę skrócić, ale ja dopiero zaczynam się uczyć programowania..

Jesteś taki nowy! Powinniśmy ciebie zamknąć w szklanej kuli żebyś sobie krzywdy nie zrobił!

Więc nie wyjadę tutaj z nie wiem jakim kodem..

Właśnie to robisz. Wklejasz jakiegoś potworka i pytasz 'co jest nie tak'.

A dla taki zaawansowany lub mniej zaawansowany programista, to popatrzy i widzi błąd :)

Czyli ty NIE chcesz zostać zaawansowanym programistą, tak? Ja proponuję zostać 'mniej zaawansowanym programistą' i wiedzieć jaki jest błąd!

Jeśli to zrobisz i wykażesz się wiedzą i samozaparciem to uda Ci się rozwiązać problem;

Google + TBrain + time = success.

0

Czyli jednym zdaniem nie orientujesz się we własnym kodzie;

Jeśli nie potrafisz zlokalizować błędu to powinieneś sprawdzić każdą linię i zastanowić się czy tak ma być, czy może inaczej; Sprawdzaj kod i przeliczaj czy dobrze indeksujesz; Do tego użyj debugger'a by sprawdzić stan zmiennych; Jeśli jego użyjesz szansa na znalezienie błedu będzie o wiele większa;

Przede wszystkim dalej nie zastosowałeś się do wskazówek jakich Ci udzieliłem - skróć kod poprzez zastosowanie tablic i użyj do ich obsługi pętli; Kod stanie się krótszy, bardziej zwięzły i łatwiejszy do zinterpretowania; To także przełoży się na większe szanse odnalezienia błędu;

Nie piszę tak dlatego, że nie chce mi się szukać błedu i wolę Cię opieprzyć - chcę żebyś sam przeanalizował swój kod i zrozumiał go w całości, bo to w końcu Twój program;

Jeśli nie będziesz mógł w dalszym ciągu odnaleźć błędu - polecam napisanie programu od nowa stosując różne zabiegi, dzięki którym będziesz w stanie zrozumieć co dany kod wykonuje i dlaczego tak, a nie inaczej;

1

Dlaczego zamalowuje się mi wyświetlony tekst, skoro zmieniłem jego kolor przed i po wyświetleniu :)

Za góra pare dni sam sobie odpowiesz, poczekajmy bo ty nie umiesz się powstrzymać przed pytaniem. Najpierw post, potem myślenie. Waląc tymi pytaniami jak z karabinu maszynowego zniechęcasz nawet największych hardkorów którzy potrafią odpowiadać niezłym debilom.

0

Może pobaw się w interpreter? I analizuj swój kod linijka po linijce? Wtedy dojdziesz gdzie masz błąd.

0
Guepardo napisał(a)

Dlaczego zamalowuje się mi wyświetlony tekst, skoro zmieniłem jego kolor przed i po wyświetleniu

Bo gdzieś pewnie nie zmieniłeś wartości aktywnego koloru , który inicjujesz w tej linii:

TextColor(White);
Kolor_aktywny := Yellow;  // <---
Kolor_nie_aktywny := black;

Zbyt późno przestawiasz jego wartość stąd taki bug - poszukaj wszystkich odwołań (modyfikacji) do tej zmiennej i zobacz czy są w odpowiednim miejscu oraz czy pakujesz do nich odpowiednie wartości;

Guepardo napisał(a)

Dlaczego wywala błąd oczekiwano na begin??

Bo ściągnąłeś g**no nie kompilator - wielokrotnie dostałeś wskazówkę, żeby zainstalować Free Pascal Compiler (FPC) a mimo wszystko za skur*****a nie chcesz go pobrać i przetestować - wolisz jakieś badziewne programy, które nie wiadomo czemu nie kompilują poprawnego (z tym może i przegiąłem) kodu;

Guepardo (komentarz) napisał(a)

wiem.. W fpc tylko wyskakuje mi ten exitcode =5 w tmt pascalu działa ok.

Bo FPC wstrzymuje działanie programu po napotkaniu błedu runtime, a TMT Pascal najprawdopodobnie go ignoruje i zezwala aplikacji na dalsze działanie;

Jeśli nie wiesz co oznacza ExitCode 5 to UTSL (http://www.freepascal.org/docs-html/user/userap4.html):

**5 File access denied **

Permission to access the file is denied. This error might be caused by one of several reasons:

  • Trying to open for writing a file which is read-only, or which is actually a directory.
  • File is currently locked or used by another process.
  • Trying to create a new file, or directory while a file or directory of the same name already exists.
  • Trying to read from a file which was opened in write-only mode.
  • Trying to write from a file which was opened in read-only mode.
  • Trying to remove a directory or file while it is not possible.
  • No permission to access the file or directory.

Wystarczy poszukać;

Poza tym w dalszym ciągu nie wykorzystałeś macierzy do uproszczenia i skrócenia kodu więc dalej jest nieczytelny i trudno w nim znaleźć błąd;

0
babubabu napisał(a):

Może pobaw się w interpreter? I analizuj swój kod linijka po linijce? Wtedy dojdziesz gdzie masz błąd.

Interpreter to złe słowo. Skończyło się tym że pytacz wpisał to w googla i znalazł coś takiego jak "Pascal Interpreter". Masakra.

Koledze @babubabu chodziło to że przeanalizuj to co program robi instrukcja po instrukcji i to może pomóc rozwiązać problem. Komponent TBrain wymagany, czyli dla ciebie się raczej nie kwalifikuje.

Bo ściągnąłeś gno nie kompilator - wielokrotnie dostałeś wskazówkę, żeby zainstalować Free Pascal Compiler (FPC) a mimo wszystko za skur***a nie chcesz go pobrać i przetestować - wolisz jakieś badziewne programy, które nie wiadomo czemu nie kompilują poprawnego (z tym może i przegiąłem) kodu;

On ma FPC tylko nie umie go używać. Zbyt skomplikowane.

Bo FPC wstrzymuje działanie programu po napotkaniu błedu runtime

Czepiam się, ale FPC nie wstrzymuje działania programu. FPC przekaże błąd jak zwykłe exception, wliczając w to debugge itd. . Mówienie że FPC 'wstrzyma' program brzmi głupio.

Nigdzie nie mam na pewno koloru tekstu na zółto bo nigdzie nie mam textcolor(yellow) lub textcolor(kolor_aktywny).. Mi sie wydaje, ze problem tkwi w tym że tekst jest wyświetlany a kolor aktywny i nie aktywny go zamazują bo są "wyżej"

To postaw sobie breakpointy w odpowiednich miejscach w programie i obserwuj co się dzieje w kolejnych fazach. Debugger wymagany więc niestety wracamy do tego co ci mówiłem już pare razy. Ale masz mnie gdzieś tak samo jak Furiousa (o wyglądzie kodu też wspomniałem zresztą).

0
for i := 1 to FileSize(plik) do

Co to ma robić?
*rozkłada bezradnie ręce*

Poza tym otwierasz plik i nigdzie go nie zamykasz...

Seek(Plik, 0);

Po otwarciu pliku jego wskaźnik domyślnie się znajduje na początku pliku...

1

Ty jednak dalej nic nie rozumiesz... Piszesz raz do mnie na PM, raz na forum, dostajesz liczne wskazówki a mimo to dalej kod wygląda tak, jak miesiąc temu... Nic tylko Cię zbanować, zamknąć w pokoju bez klamek i dać książkę do nauki...

Zacznijmy od samej góry (enty raz już to piszę):

procedure Odczyt(var D: TPlik; Numer_aktywnej_pozycji: byte);

Po jaką cholerę deklarujesz var D: TPlik, skoro go nie używasz? Nie będę już czepiał się identyfikatorów argumentów i ogólnie zmiennych, bo to najmniejszego sensu nie ma...

  var
    i, X, Y: byte;
    Kolor_aktywny, kolor_nie_aktywny: integer;

Po co Ci te X i Y...? Pokazałem Ci już wiele razy jak wpakować i obsłużyć odpowiednie wartości offset'ów do macierzy statycznej, ale Ty jak zwykle swoje... Kolor_aktywny i Kolor_nie_aktywny są ZBĘDNE, także pokazałem Ci jak wpakować wykorzystywane kolory do statycznej macierzy indeksowanej typem Boolean - jak zwykle nie słuchasz...

    X := 1;
    Y := 2;

WTF...?! Ehhh, szkoda pisać...

    for i:=1 to FileSize (plik) do

Nawet pętli nie indeksujesz tak, jak Ci pokazaliśmy...

      Read(plik, dane);
      seek(plik, i);

Rany Boskie Święte... Czy Ty wszędzie ten Seek musisz pakować...? Na cholere Ci to, skoro wskaźnik sam jest przestawiany podczas odczytu na początek kolejnego rekordu, a nie wybierasz losowych struktur tylko odczytujesz po kolei...? Tragedia...

          gotoxy(x, y + 2 * i);
          textcolor(kolor_aktywny);
 
          gotoxy(x, y);
          Write(Dane.Numer, '. ');
          GoToXY(9, Y);
          Write(Dane.Imie, ' ');
          GoToXY(32, Y);
          Write(Dane.Nazwisko);
          GoToXY(64, Y);
          Write(Dane.Plec);
          GoToXY(69, Y);
          WriteLn(Dane.Placa: 0: 2, ' zl');
          Inc(Y, 2);

Także pokazałem Ci jak wykorzystać macierz statyczną do przechowania wartości wykorzystywanych w GoToXY... Tu akurat można offset'y wpisać statycznie (w GoToXY), ale pozbądź się Inc(Y, 2), bo głupkowato to wygląda, a poza tym tak jak napisałem Ci na PM prawdopodobnie wiersze będą wyświetlane w co drugiej linii, skoro tą zmienną inkrementujesz o dwa, a później wykorzystujesz w GoToXY...

        else
 
        gotoxy(x, y + 2 * i);
        textcolor(kolor_nie_aktywny);
 
      end;

A to to w ogóle do czego ma służyć...? Ty myślisz, że wywołując TextColor nagle jakoś kosmicznie magicznie kolor napisów w danej linii zmieni się...? Zacznij czytać opisy tych procedur bo widać, że zielonego pojęcia nie masz o nich...

         close(plik);

Jest!!! Chociaż wycieków pamięci nie będzie...

Guepardo napisał(a)

Dlaczego ta procedura wyświetla mi tylko pierwszy rekord z pliku?

Dlatego, że tak to napisałeś a nie inaczej; Nie znasz procedur, nie masz pojęcia jak krok po kroku wykonać ten program stąd nic nie działa tak, jak powinno; Do tego jest mnóstwo zastrzeżeń, których Ty oczywiście nie chcesz słyszeć... Proponuję zacząć się uczyć programowania, a nie pisania postów;


Patryk27 napisał(a)
for i := 1 to FileSize(plik) do

Co to ma robić?

Ty tego nie wiesz...? Ja stosuję for I := 0 to FileSize(fInput) - 1 do i działa bezbłędnie; Nie rozumiem tego dlaczego Cię taka konstrukcja dziwi... Może też jesteś zwolennikiem Seek...?

1

Dlatego, że tak to napisałeś a nie inaczej; Nie znasz procedur, nie masz pojęcia jak krok po kroku wykonać ten program stąd nic nie działa tak, jak powinno; Do tego jest mnóstwo zastrzeżeń, których Ty oczywiście nie chcesz słyszeć... Proponuję zacząć się uczyć programowania, a nie pisania postów;

Gdybyś tylko zrozumiał że TY mu to utrudniasz podsuwając gotowe pomysły. Może napisz za niego cały program. Albo zrób to o czym ja mówię od tych 3 pieprzonych stron i powiedz mu naprawdę żeby zaczął myśleć a nie pisać posty. Swoim dwojakim zachowaniem jeszcze mu głowie przewracasz. Teraz mu się wydaje że programowanie polega na tym że jak się nie wie co i jak to się leci do kogoś i pyta co się robi.

Furious, zastanów się czy chcesz być milutki czy pomocny bo to dwie zupełnie inne bajeczki. Jak chcesz być milutki to daj mu gotowca, jak chcesz być pomocny to daj mu link do googla ew. kursu podstaw.

4

Propozycja. 100 zł i masz gotowca bo się usmarkasz i usrasz zanim to napiszesz a mi 15 min zejdzie. Jak jesteś zainteresowany to napisz na PW.

1 użytkowników online, w tym zalogowanych: 0, gości: 1