Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Fortran] problem z tablicami

fizynka89 09 Maj 2012 23:10 1054 6
  • #1 09 Maj 2012 23:10
    fizynka89
    Poziom 2  

    hej, witam wszystkich :)

    szperałam trochę w necie żeby coś zaradzić na mój kłopot i trafiłam tutaj, będę wdzięczna za szybką poradę, bo utknęłam i nie mam jak działać dalej.

    studiuję fizykę, elektroniki i programowania ciut liznęłam ale naprawdę absolutne podstawy parę semestrów temu, to nie za bardzo moja działka. próbuję napisać programik który pomoże mi w rozwiązaniu pewnego problemu fizycznego (programowanie nie jest tutaj celem samo w sobie, jak np na jakieś zaliczenie, ale tylko narzędziem pomocniczym, wiec nieważne czy będzie napisane super sprytnie, czy byle jak, ważne żeby działało. a w sumie to im prościej tym lepiej - mam szanse ogarnąć )

    muszę przeanalizować pewne matematyczne warunki w zależności od wartości listy parametrów. już sobie wykombinowałam, że dam radę to zrobić dysponując tablicą zawierającą wszystkie wariacje z powtórzeniami z danego zbioru liczb całkowitych (np zbiór {1 2 3 } i wszystkie jego 2-elementowe wariacje z powtórzeniami to: 1-1,1-2,1-3,1-4,2-1,2-2,2-3,2-4,3-1,3-2,3-3,3-4,4-1,4-2,4-3,4-4) będzie tego baaardzo dużo, więc zaczęłam od napisania tego programu na próbę dla bardzo ograniczonej liczby zmiennych, żeby zobaczyć co i jak wychodzi. wygenerowanie tych wariacji to nie problem, tylko żeby dalej dało się coś z tym zrobić muszę je mieć w tablicy, a nie jako zbiór osobnych liczb. i tu mam jakiś głupi problem, nie chcą mi się zapisać w tablicy tak jak należy

    napisałam sobie w Fortranie tak:

    Kod: fortran
    Zaloguj się, aby zobaczyć kod



    wyświetliłam sobie te wariacje 2x żeby zobaczyć czy jest ok i okazało się, że jako osobne liczby ( write(*,*) k1,k2,k3 ) wypisują się jak trzeba, ale już w tablicy są głupoty ( write(*,*) bezwsp(i,j) )


    co ciekawe wersja w Pascalu działa poprawnie:




    Kod: pascal
    Zaloguj się, aby zobaczyć kod



    Szczerze mówiąc zupełnie nie rozumiem na czym polega różnica w działaniu tych dwóch wersji - jedno i drugie jest składniowo poprawne i wydawało mi się, że jest to dokładnie to samo. Bez tej tablicy dalej ani rusz :cry:


    edit: sorki, już poprawione, mam nadzieje że teraz jest wystarczająco czytelnie

    0 6
  • #2 12 Maj 2012 14:29
    PDT
    Poziom 24  

    Tablica "bezwsp" jest zadeklarowana jako mająca 3 wiersze i 27 kolumn. Używane jest natomiast 27 wierszy w 3 kolumnach. To błąd.
    Jako początkująca programistka staraj się używać opcji diagnostycznych kompilatora, sprawdzenie zakresów indeksów należy do takich podstawowych.

    Powodzenia

    0
  • #3 12 Maj 2012 23:01
    fizynka89
    Poziom 2  

    zmienilam na:

    Kod: fortran
    Zaloguj się, aby zobaczyć kod


    ale dalej jest nie tak. nie zglasza zadnych bledow, ladnie sie kompiluje, nie wiesza sie ani nie wywala, ale zamiast generowac wariacje (wersja Pascalaowa robi to jak nalezy) wpisuje mi w tablice podane liczby ale zupelnie bez sensu, wywala mi cos takiego:

    111 111 111 222 222 222 333 333 333 111 222 333 111 222 333 111 222 333 123 123 123 123 123 123 123 123 123

    wersja w Pascalu generuje ladnie: 111 112 113 121 122 123 131 itd, az do 333

    0
  • #4 13 Maj 2012 13:30
    PDT
    Poziom 24  

    fizynka89 napisał:
    wersja w Pascalu generuje ladnie: 111 112 113 121 122 123 131 itd, az do 333


    Tak, ponieważ w Pascalu wyświetlasz wyniki następująco:
    Code:
    for i:=1 to 27
    
    do writeln(bez_wspolczynnikow_3[i,1],bez_wspolczynnikow_3[i,2],bez_wspolczynnikow_3[i,3]);


    W FORTRANie też tak zrób:
    Code:
           do i = 1, 27
    
           write(*,*) bezwsp(i,1),bezwsp(i,2),bezwsp(i,3)
           end do


    Powodzenia

    0
  • #5 13 Maj 2012 14:24
    fizynka89
    Poziom 2  

    hmmm.... no faktycznie.

    nadal ni w zab nie rozumiem czemu inaczej wydana instrukcje wyswietlenia tablicy daje cos innego (inna kolejnosc tych liczb) mimo ze przypisywanie wartosci elementom wygladalo tak samo. myslalam ze

    Kod: fortran
    Zaloguj się, aby zobaczyć kod


    i

    Kod: fortran
    Zaloguj się, aby zobaczyć kod


    to w efekcie to samo.

    mocno mnie to meczy z tego wzgledu ze program w pelnej wersji musi byc napisany w calosci i poprawny, a nie mam mozliwosci w ogole go sprawdzic, na zwyklum lapku prawdopodobnie nie bede w stanie go nawet odpalic :cry:
    dlatego tak sie dokladnie dopytuje...

    czy w takim razie moge zalozyc ze jak mam w tej drugiej wersji to dla dowolnie duzej tablicy odwolanie sie do dowolnego elementu tablicy da mi wlasciwa wartosc? (taka jaka wynika z wyswietlania tablicy w wersji w Pascalu i poprawionej w FORTRANie)

    Dodano po 33 [minuty]:

    dobra, chyba mnie olsnilo i chwycilam wreszcie :D

    Kod: fortran
    Zaloguj się, aby zobaczyć kod


    tez daje poprawnie wyswietlona tablice. wystarczylo zamienic kolejnosc petli (dla i i dla j) czyli tablica caly czas byla wypelniana pprawnie tylko wyswietlalam ja sobie raz tak a raz na opak i dziwilam sie ze inaczej wyglada :D czyli jak zwyle: nie myslec przy pisaniu o niebieskich migdalach i nie spieszyc sie bo sie indeksy poprzestawiaja albo cos... gapa ze mnie. wielkie dzieki! :D

    0
  • #6 13 Maj 2012 17:26
    PDT
    Poziom 24  

    Jeśli już się upierasz wyświetlać w pętli, zrób to po FORTRANowemu:

    Code:

           do i = 1, 27
           write(*,*) (bezwsp(i,j),j=1,3)
           end do

    0
  • #7 13 Maj 2012 18:01
    fizynka89
    Poziom 2  

    ok, juz chwytam, tak zrobie. jeszcze raz wielkie dzieki :D :kiss:
    zamykam temat

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo