[fortran] Wczytywanie macierzy

Awatar użytkownika
Nethia
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 8 mar 2009, o 14:32
Płeć: Kobieta
Lokalizacja: Bydgoszcz

[fortran] Wczytywanie macierzy

Post autor: Nethia »

Jestem początkujaca w programowaniu w jezyku pascal i mam problem z wczytywaniem macierzy z pliku. Plik ma wygladac nastepujaco
x
n1 m1
n2 m2
...
x11 x12 x13 ...
x21 x22 x23...
.....
y11 y12 y13...
y21 y22 y23...
...
x ilosc macierzy
n1 m1 ilosc kolumn i wierszy macierzy
x11... kolejne wyrazy 1 macierzy
y11... kolejne wyrazy 2 macierzy

z odczytywaniem ilosci macierzy oraz ilosci kolumn i wierszy dla kazdej z nich nie sprawilo mi problemu. Gorzej z wczytywaniem wyrazów macierzy. Podam teraz kod programu

Kod: Zaznacz cały

 program kalkulator_macierzowy
  2    implicit none
  3    real:: macierz(100,100,100) ! 1-numer macierzy, 2- numer wiersza 3- kolum    ny
  4    integer:: x,n(100),m(100),i,j,k
  5 
  6    open(11,file="dane.txt", status="old")
  7    read(11,*)x
  8 
  9    do i=1, x, 1
 10       read(11,*)n(i:i),m(i:i)
 11    end do
 12 
 13    do  i=1, x, 1
 14       do j=1, m(i), 1
 15          do k=1, n(i) ,1
 16             if(k==n(i))then
 17                read(11,"(A)", advance="yes")macierz(i:i,j:j,k:k)
 18             else
 19                read(11,"(A)", advance="no")macierz(i:i,j:j,k:k)
 20             end if
 21          end do
 22       end do
 23    end do
 24  end
 

probowalam zrobic by po odczytaniu pierwszego wiersza schodzil na dół i odczytywal nastepny ale widocznie cos mi nie wyszlo:

Kod: Zaznacz cały

At line 19 of file kalkulator_macierzowy.f (unit = 11, file = 'dane.txt')
Fortran runtime error: End of record
Z gory dziekuje za pomoc
makan
Użytkownik
Użytkownik
Posty: 429
Rejestracja: 13 gru 2009, o 11:45
Płeć: Mężczyzna
Lokalizacja: Takla Makan
Pomógł: 92 razy

[fortran] Wczytywanie macierzy

Post autor: makan »

Te macierze możesz wczytać np. tak (zamiast wierszy 13-23):

Kod: Zaznacz cały

...
do i=1, x
   do k =1, n(i)
         read(11,*)macierz(i,k,1:m(i))
    enddo
end do
...
A ten błąd który się pojawił, związany jest z różnicą między formatowaniem które podajesz w instrukcji read, a formatem pliku który czytasz.
Awatar użytkownika
Nethia
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 8 mar 2009, o 14:32
Płeć: Kobieta
Lokalizacja: Bydgoszcz

[fortran] Wczytywanie macierzy

Post autor: Nethia »

dzieki Ci badzo ^^ własnie pisze kalkulator macierzowy wiec jak cos to bede sie jeszcze pytac -- 2 kwi 2010, o 12:04 --stwierdziłam ze mniej roboty bedzie przy zrobieniu programu na procedurach wstawilam wiec dla proby wczytywanie w procedure

Kod: Zaznacz cały

    subroutine wczytywanie(macierz,m,n,x)
  2    open(11,file="dane.txt", status="old")
  3    read(11,*)x
  4 
  5    do i=1, x, 1
  6       read(11,*)n(i:i),m(i:i)
  7    end do
  8 
  9    do i=1, x
 10       do k =1, n(i)
 11          read(11,*)macierz(i,k,1:m(i))
 12       end do
 13    end do
 14 
 15    close(11)
 16    end
 17 
 18    program kalkulator_macierzowy
 19    implicit none
 20    real:: macierz(100,100,100) ! 1-numer macierzy, 2- numer wiersza 3- kolumny
 21    integer:: x,n(100),m(100),i,j,k
 22    call wczytywanie(macierz,m,n,x)
 23    end
 
No i jak mozna bylo sie spodziewac wywala mi błedy

Kod: Zaznacz cały

cos.f:6.18:

       read(11,*)n(i:i),m(i:i)                                          
                  1
Error: Syntax error in READ statement at (1)
cos.f:11.25:

        read(11,*)macierz(i,k,1:m(i))                                   
                         1
Error: Syntax error in READ statement at (1)
cos.f:5.13:

      do i=1, x, 1                                                      
             1
Warning: Deleted feature: End expression in DO loop at (1) must be integer
cos.f:9.13:

      do i=1, x                                                         
             1
Warning: Deleted feature: End expression in DO loop at (1) must be integer
co jest zle?
makan
Użytkownik
Użytkownik
Posty: 429
Rejestracja: 13 gru 2009, o 11:45
Płeć: Mężczyzna
Lokalizacja: Takla Makan
Pomógł: 92 razy

[fortran] Wczytywanie macierzy

Post autor: makan »

W procedurze masz zmienne lokalne, więc musisz je na nowo zadeklarować lub korzystać z domyślnych ustawień, tj. zmienna jest typu real jeśli nazwa rozpoczyna się od A-H, O-Z oraz a integer dla I-N. Przez brak deklaracji, w procedurze x jest widziany jako typ real a "macierz" jako integer a nie tablica . Aa, a i przy podawaniu indeksu tablicy wystarczy jedno i, tj. n(i), m(i)
Awatar użytkownika
Nethia
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 8 mar 2009, o 14:32
Płeć: Kobieta
Lokalizacja: Bydgoszcz

[fortran] Wczytywanie macierzy

Post autor: Nethia »

ok thx ^^ myslałam ze w procedurze nie trzeba znow tego pisac xD juz ładnie działa ^^
Teraz mysle nad algorytmem przekształcenia macierzy do postaci diagonalnej
ODPOWIEDZ