[ mensa @ 10.01.2009. 12:18 ] @
zdravo svima
molim vas treba mi pomoc oko jednog zadatka. ne znam kako da pocnem zadatak pa ako mozete da mi nagovestite kako bi to otpilike izgledalo. hvala unapred.

Nacrtati algoritam i napisati opšti potprogram čiji je zadatak da prepakuje proizvoljan realni niz X u realni niz Y i to pakujuci ga po sledećem algoritmu: članovi niza Y jedan za drugim su članovi X1, Xn+1, X2n+1, ..., X2, Xn+2, X2n+2, ...., pri čemu je dimenzija nizova n2.
Primer : X [1, 4, -6, 7, 3, 2, -2, 5, 9] , Y [1, 7, -2, 4, 3, 5, -6, 2, 9], n=3 , n2=9.
[ Goran Rakić @ 10.01.2009. 13:11 ] @
Šta je tačno problem, gde je zapelo?

Trebaju ti dve petlje, jedna koja će da broji 1, 2, 3... i druga koja će da broji 0, N, 2N,... Kada ih sabereš dobijaš 1+0N, 1+N, 1+2N,... 2+0N, 2+N, 2+2N,... a to je poredak koji ti treba. Da bismo imali i tekući indeks za upisivanje u Y, stavimo obe petlje da broje 1..N, a ovo što nam treba izračunamo. Tekući indeks računaš kao (i-1)*N + j (i puta smo se pomerili za N i još koliko smo stigli u tekućoj iteraciji po j)

Code:

program nizovi
implicit none
integer :: i, j, N
integer,dimension(:),allocatable :: X, Y

read(*,*) N !ucitaj dimenziju
allocate(X(1:N*N))
allocate(Y(1:N*N))

read(*,*) X !ucitaj X

do i = 1, N    !za 1, 2, 3...  i
  do j = 1, N  !za 0, N, 2N... (j-1)*N
    Y((i-1)*N + j) = X((j-1)*N + i)
  end do
end do

write(*,*) Y
[ mensa @ 10.01.2009. 14:48 ] @
opet mi nesto nije jasno
ne znam kako da mi jedna petlja broji 0,n,2n...
a druga 1,2,3..
ja sam nova u ovome, ne znam kako bi izgledao algoritam
[ Goran Rakić @ 10.01.2009. 15:11 ] @
U nastavku moje prve poruke je i kod koji radi. Kao tutorial za Fortran 90, može da posluže primeri iz http://www.matf.bg.ac.yu/~ndjurdjevac/FORTRAN%2090.pdf

Petlja koja ide 1..N u Fortranu se piše:
Code:

do i = 1, N 
  write(*,*) i
end do


... a evo i kako da napravimo da ide N, 2N, 3N,... N*N
Code:

do i = 1, N 
  write(*,*) i*N
end do


... i kako da ide 0, N, 2N,... (N-1)*N
Code:

do i = 1, N 
  write(*,*) (i-1)*N
end do


Za gornji zadatak nam trebaju dve petlje zato što će jedna da broji ono +1, +2, +3,... a druga za svako +nešto da broji 0*N, 1*N, 2*N,...
Code:

do i = 1, N 
  do j = 1, N
     write(*,*) i
     write(*,*) (j-1)*N
     ! zbir je tacno ono sto nam treba
     write(*,*) (j-1)*N + i
  end do
end do


Ostatak koda iz prve poruke učitava N, alocira nizove na veličinu N, učitava ulazni niz brojeva i dodeljuje vrednosti... Uz elementarno znanje Fortrana trebalo bi da to bude jasno kako radi. Nadam se da je ova poruka od pomoći za razumevanje ovog i svih sličnih problema.