rafal92909 Napisano Październik 25, 2010 Zgłoś Share Napisano Październik 25, 2010 Witam wszystkich mam problem z napisaniem programu w Pascalu który wczyta wszystkie liczby z pliku txt do tablicy dwuwymiarowej. Niby coś napisałem ale nie do końca działa jak powinno, ponieważ wypisuje tylko pierwszy wiersz z tablicy a cala reszta jest pusta. Chce aby liczby w tablicy wyglądały tak samo jak pliku tekstowym (czyli 228 wierszy i 13 kolumn) program p1; uses crt; type T2W=array [1..228,1..13] of string; var t:text; w:string; i,j:integer; T1:T2W; begin assign(t, 'C:\temp.txt'); reset(t); for i:=1 to 228 do for j:=1 to 13 do begin read(t,w); T1[i,j]:=w; end; close(t); writeln('liczby w tablicy'); writeln(); for i:=1 to 228 do begin for j:=1 to 13 do begin write(T1[i,j]); end; writeln(); end; readln; end. plik txt który wczytuje znajduje się: TUTAJ czy zmienna w i tablicy nie powinny być zdeklarowane jako liczby rzeczywiste jeśli później chciałbym np sumować liczy z kolumn? Gdy zmienię deklaracje na real to kompilator nie widzi żadnego błędu ale od razu się zamyka. Proszę o pomoc. Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Październik 25, 2010 Zgłoś Share Napisano Październik 25, 2010 Nie wczytujesz do tablicy pojedynczych liczb, tylko całe wiersze, więc nie działa prawidłowo, a program się zamyka dlatego, że natknął się na błąd podczas wykonania. Jeżeli zmieniasz typ zmiennej w i T1 na rzeczywisty i jest błąd, to prawdopodobnie w pliku powinny być kropki a nie przecinki. Spróbuj jeszcze nadać typ Single tym zmiennym, a przy wczytywaniu zmień kod na: for i:=1 to 228 do begin for j:=1 to 13 do begin read(t,w); T1[i,j]:=w; end; readln; end; Może to pomoże. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
rafal92909 Napisano Październik 25, 2010 Autor Zgłoś Share Napisano Październik 25, 2010 niestety nadal to samo wkleilem twoj kawalek kodu (bez readln; bo musialem enter klikac) i jest to samo. a po zmianie typu zmiennej w i tablicy na single dzieje sie to samo co przy typie real czyli kompilator nie widzi bledow wlacza sie program i od razu wysypuje. Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Październik 25, 2010 Zgłoś Share Napisano Październik 25, 2010 Z tym readln to chodziło o to, żeby przy wczytywaniu pliku przechodziło do następnej linijki, ale moja wina, zrób tak: for i:=1 to 228 do begin for j:=1 to 12 do begin read(t,w); T1[i,j]:=w; end; readln(t,w); T1[i,13]:=w; end; Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
rafal92909 Napisano Październik 25, 2010 Autor Zgłoś Share Napisano Październik 25, 2010 pozornie dziala bo wyswietla na ekranie tak jak powinno, ale chodzilo mi o to by w kazdym miejscu w tablicy byla jedna ze liczb. a miejsca wkolumnach od 2-13 sa puste a wypelniona jest cala kolumna pierwsza calym wierszem z pliku tekstowego. a nie o to chodzilo. czy wiesz jak to poprawic? Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Październik 25, 2010 Zgłoś Share Napisano Październik 25, 2010 A zmienne w i T1 są typu rzeczywistego? Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
rafal92909 Napisano Październik 25, 2010 Autor Zgłoś Share Napisano Październik 25, 2010 nie robie na stringach bo jak tylko zmienie zmienne na real to odrazu po otwarciu program sie zamyka program program p1; uses crt; type T2W=array [1..228,1..13] of string; var t:text; w:string; i,j:integer; T1:T2W; begin assign(t, 'C:\temp.txt'); reset(t); for i:=1 to 228 do begin for j:=1 to 12 do begin read(t,w); T1[i,j]:=w; end; readln(t,w); T1[i,13]:=w; end; close(t); writeln('liczby w tablicy'); writeln(); for i:=1 to 228 do begin for j:=1 to 13 do begin write(T1[i,j]); end; writeln(); end; readln; end. Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Październik 25, 2010 Zgłoś Share Napisano Październik 25, 2010 Zamień wszystkie przecinki w pliku tekstowym na kropki, powinno działać. Jeżeli chcesz liczby w osobnych komórkach tablicy to nie można tego zrobić na stringach. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
rafal92909 Napisano Październik 25, 2010 Autor Zgłoś Share Napisano Październik 25, 2010 Zamień wszystkie przecinki w pliku tekstowym na kropki, powinno działać. Jeżeli chcesz liczby w osobnych komórkach tablicy to nie można tego zrobić na stringach. zmienilem na kropki i jak zmieniam na stringi na reale to kompilator nie wykrywa bledu ale po wlaczeniu programu od razu sie wylacza (tak jakby nie mial readln; na koncu) i nie wiem co mu sie jeszcze nie zgadza Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Październik 25, 2010 Zgłoś Share Napisano Październik 25, 2010 No to użyj debuggera i zobacz w którym momencie program się wywala. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
rafal92909 Napisano Październik 25, 2010 Autor Zgłoś Share Napisano Październik 25, 2010 No to użyj debuggera i zobacz w którym momencie program się wywala. chodzi Ci o uzycie funkcjiu debug w kompilatorze? to po uzyciu jej wyskakuje dosowskie okienko w ktorym pisze "wiersz wprowadzenia jest za dlugi" i szybko znika Link do komentarza Udostępnij na innych stronach More sharing options...
jozekkg Napisano Październik 26, 2010 Zgłoś Share Napisano Październik 26, 2010 begin assign(t, 'C:\temp.txt'); reset(t); for i:=1 to 228 do begin readln(t,w); {wczytuje cały wiersz z pliku tekstowego} for j:=1 to 12 do begin while w[1]=' ' do delete(w,1,1); {usuwa spacje na początku wiersza} T1[i,j]:=copy(w,pos(' ',w)-1); {wstawia do tablicy fragment wiersza do pierwszej napotkanej spacji} delete(w,1,pos(' ',w)); {usuwa z wiersza to co wstawił do tabeli, razem ze spacją} end; end; close(t); end; Coś w tym stylu. Sprawdź tylko, czy w funkcjach copy i delete powinny być -1 za funkcjami copy. Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Październik 26, 2010 Zgłoś Share Napisano Październik 26, 2010 @rafal92909: Ustaw breakpoint i zobacz w której linijce jest błąd. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.