Mam prosbe do bieglych w programowaniu, ja
bowiem glupieje w niektorych pozornie prostych
sytuacjach, i tu zdaje sie jest jedna z takich.
Glowny problem: jest sobie plik tesktowy, zreszta bardzo
duzy, w unixie, sunsolaris, co nie wydaje sie
miec znaczenia, i ten plik od poczatku leci tak:

TIMESTEP
              0    0.000000000
END
POSITIONRED
    1.921346957    2.374989162    2.605950554
    2.026828257    2.285893191    2.590275308
    2.067359985    2.247612267    2.461974223
    1.880706363    2.412879312    2.733184611
    1.773879251    2.502545503    2.743440519
    2.091252027    2.234638907    2.702319739
    2.173859728    2.164834670    2.689845384
    1.945102927    2.361669647    2.845353356
    1.913380506    2.391737230    2.945186589
    2.050623926    2.272608274    2.829761049
#        10
    2.101242623    2.232102684    2.917378550
    1.850726951    2.431435941    2.489737243
    1.774229052    2.546112291    2.506508095
    1.766202281    2.604869902    2.632927259
    1.859261906    2.372982175    2.364017606
    1.936065825    2.257402649    2.347307752
    1.705711505    2.602721325    2.399790018

    i dalej mamy liczby, liczby, liczby, az do
okolo tysiaca wierszy, oddzielanych informacyjnie
wierszami ze znaczkiem # plus kolejny numer trojeczki
liczb ponad znaczkiem #. Przykladowo, wyzej widzimy
linijke z #     10, bo linia 2.0506.... etc
jest dziesiata liczac od pierwszej (pod slowami
POSITIONRED). Potrzebujemy dla pewnych celow tylko
pozycje z konkretnych linijek, powiedzmy z 1, 4,
12 i 15, liczac caly czas linijke pod POSITIONRED
jako nr 1. Razem 12 liczb. Na tych liczbach bedzie
trzeba wykonac pewne operacje- najpierw logiczna,
potem arytmetyczna. Najpierw jednak chodzi o
takie sformulowanie kodu, w fortranie lub C, aby
on wlasnie te liczby z tych konkretnych linijek
przeczytal. Ma on je zatem wczytac, nastepnie
przeprowadzic na nich operacje logiczna, przy
negatywnym wyniku operacji ktores z liczb zmienic
w okreslony sposob, az wynik bedzie pozytywny,
i potem majac 12 liczb uzyskac jedna jako wynik
pewnego dosc skomplikowanego, ale nie wychodzacego
poza standardowe funkcje obliczenia matematycznego,
i wpisac te liczbe do pliku wynikowego. Nasz plik
wejsciowy jest jednakowoz ogromny i za te mniej
wiecej 1000 wierszy (te liczbe moge okreslic
dokladnie, niech sie na razie nazywa n)
pojawia sie segment:

   TIMESTEP    200   0.20000
END
POSITIONRED

   i znow liczby jak wyzej, i teraz znow
interesuje nas trojeczka z wiersza 1,4,12,15
liczac POSITIONRED jako 0, i ta sama procedura,
i tak az do konca pliku, a bedzie tych POSITIONRED
5000 (slownie: piec tysiecy), tylez linijek winien
liczyc plik wynikowy.

   Ze wzgledu na rozmiary pliku wejsciowego, nie
sa przewidziane jego wstepne modyfikacje. Wyglada
on wiec tak:

pare linijek nieistotnych (TIMESTEP etc)
trojki liczb oddzielonych co 10 wierszami z #
znow pare linijek nieistotnych
znow TIMESTEP etc, etc.

   Co trzeba zrobic, by program przeczytal
12 pozadanych liczb, wykonal na nich
wszystkie wymagane operacje, wynik wpisal do
pliku wynikowego, i tak 5000 razy?

    Plik wynikowy zas powinien wygladac
dokladnie tak:

     0.00000000  -162.05985391
     0.10000000  -176.81056635
     0.20000000   166.26940676
     0.30000000   151.30100339

   etc, gdzie pierwsza liczba w kazdej linijce jest
"numerem porzadkowym" (prawa liczba w linijce
ze slowem TIMESTEP), ale moze byc to tez
zwykly numer porzadkowy, od 0 do 4999, druga
zas- nasz wynik obliczenia dla 12 liczb. Potrzebny
mi jest dokladnie taki format, abym potem
mogl obrobic ten plik jeszcze innym programem.
Dla fachowca bedzie to pewnie proste i przyjemne,
a ja przy okazji czegos sie naucze.

  Dzieki za pomoc,


Andrzej

Reply via email to