Cím: Számítástechnika rovat (9.)
Szerző(k):  Ada-Winter Péter 
Füzet: 1977/október, 73 - 75. oldal  PDF  |  MathML 

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

9.
 

5.3 A READ-be épített ciklus
Ezt olyankor használjuk, amikor tömböt olvastatunk be. Formailag megegyezik a WRITE-ba épített ciklussal. A READ első zárójelpárját követő READ-listát ilyenkor összetettnek mondjuk. Használatára néhány példát mutatunk be.
‐ Tegyük fel, hogy egy kártyára 10 adatot lyukasztottunk, egyenként 8 karakter szélességű mezőkbe. Ha ezeket egy 10 elemű, egy dimenziós tömbbe akarjuk betölteni, akkor pl. az alábbi utasításpárt használhatjuk:
 

READ(1,2)(A(I),I=1,10  2FORMAT(10F8.2)
 

‐ Az előzőhöz hasonló módon lyukasztott, 7 db kártyäról most egy 70 elemű vektort töltünk fel. A FORMAT-ban előírjuk, hogy hány adat beolvasása után kell újabb kártya olvasására áttérhi. A kártyavúltás jele a READ-hez tartozó FORMAT-ban a /, azaz a per jel. Az utasítóspár most az alábbi lehet:
 

READ(1,4)(B(I),I=1,70  4FORMAT(6(10F8.2/),10F8.2)
 

Láthatjuk, hogy a per jel elhelyezése miatt csak 6 az ismétlési tényező, mivel végrehajtási hibát, esetleg a program megakadását idézi elő, ha az utolsó szabályosan beolvasott kártya után újabb kártya váltását Írjuk elő, most már olyan kártyára, amely nem tartozik a szóban forgó READ-hez. Emiatt írtuk le ismételten a hetedik kártya adatainak specifikációját.
‐ Mátrix betöltésére szolgál a soron következő példa. 25 db kártya mindegyikén 5 db, egyenként 12 karakter széles mezőn valós típusú számok állnak. A beolvasáašal 25 soros, 5 oszlopos mátrixot töltünk be. Az erre szolgáló utasítások lehetséges alakja:
 

READ(1,6)(C(I,J),J=1,5,I=1,25)  6FORMAT(24(5F12.3/),5F12.3)
 

‐ Egy 8 soros, 12 oszlopos mátrixot töltünk be úgy, hogy egy-egy sor adatait 3 kártyárÓl olvassuk be. Ezek közül az első kettőn 5‐5, a harmadikon 2 adat áll. Valamennyi valós típusú szám, egyenként 16 karakter széles mezőn helyezkedik el. A megoldást az alábbi utasítások jelenthetik:
 

READ(1,10)(D(I,J),J=1,12,I=1,8)  10FORMAT(7(2(5F16.5/),2F16.5)S2(5F16.5/),2F16.5)
 

A beépített ciklus számlálónak csak számértéket írjunk az utasításba, azonosítót ne használjunk helyettük. Példáink csak soronkénti beolvasást mutattak be, hasonló módon oszloponként is lehetséges a beolvasás.
 

Példa:
 

7 élelmiszerbolt mindegyikébe 3 termelőszövetkezet (A, B és C jelűek) szállít árut. A tsz-ek és a boltok között az egy mázsa árura jutó átlagos szállítási költséget az alábbi táblázat mutatja:
 


élelmiszerboltok1234567,,A" tsz2,536,364,491,815,073,703,45,,B" tsz5,464,511,530,776,195,922,25,,C" tsz3,517,042,803,181,882,165,37


ahol az átlagos szállítósi költség Ft/q-ban értendő. Egy adott napon a boltok rendelése az alábbi mennyiségek szállítását írja elő (q-ban):
 


élelmiszerboltok1234567,,A" tsz9,316,272,988,343,697,116,99,,B" tsz15,4310,4010,3211,5019,4013,319,83,,C" tsz17,0716,7119,0310,107,0711,0916,03


Program készítendő, amely a két tömböt a kártyáról beolvassa és kinyomtatja, majd kigzámítja és kinyomtatja
‐ az adott rendeléshez tartozó szállítási költség táblázatot,
‐ az egyes tsz-ekre az áruszállítások összköltségeit,
‐ az egyes boltokra az áruszállítások összköltségeit.
Egy lehetséges program az alábbi:
 

MASTER  KOZERTDIMENSION A(3,7),B(3,7),C(3,7),X(3,7),Y(3,7)READ(1,1)((A(I,J),J=1,7,I=1,3  1FORMAT(2(7F6.2/),7F6.2)READ(1,2)((B(I,J),J=1,7),I=1,3)  2FORMAT(2(7F10.2),7F10.2)DO 3 I=1,3DO 4 J=1,7  4C(I,J)=A(I,J)B(I,J)  3CONTINUEDO 5 I=1,3X(I)=0.DO 6 J=1,7  6X(I)=X(I)+C(I,J)  5CONTINUEDO 7 J=1,7Y(J)=0.DO 8 I=1,3  8Y(J)=Y(J)+C(I,J)  7CONTINUEWRITE(3,9)(((A(I,J),J=1,7),I=1,3),(B(I,J),PJ=1,7),I=1,3),(Y(K),K=1,7))O(X(K),K=1,3),(Y(K),K=1,7))  9FORMAT(1H////3(20X,7(F7.2,7X)/),2(////3(20X,R7(F11.2,3X)/),///10X,15HAZ A,B  EES C TSZ,S39H-EK ARUSZALLITASAINAK OESSZKOELTSEEGEI:,T3(F11.2,10X)///10X,14HAZ 1-7 SZAAMU,U40HBOLTOKBA TOERTEENT AARUSZAALLITAASOK OES,V14HSZKOELTSEEGEI:,//20X,7(F11.2,5X))STOPENDFINISH
 

Feladatok:
1. Az alábbi feladatok legfeljebb 10×10 méretű, egész típusú számokat tartalmazó tömbre vonatkoznak.
a) Szubrutin készítendő, amely n soros, m oszlopos mátrixban (2n10 és 2m10) fölcseréli az i-edik sor elemeit a j-edik sor elemeivel, ahol ij, lin és 1jm. A szubrutin átveszi a mátrixot, és az i és j számokat és az átvett mátrixot módosítva adja vissza.
b) A fentihez hasonló megkötésekkel szubrutin készítendő oszlop cseréjére.
c) Program készítendő, amely felcseréli a legnagyobb sorösszegű sort a legkisebbel, valamint a legnagyobb oszlopösszegű oszlopot a legkisebbel. Nyomtatandó az eredeti mátrix, a cserélt sorú mátrix és (az eredetihez mérten) cserélt oszlopú mátrix.
2. Beküldendő a példában bemutatott programhoz tartozó, helyesen kitöltött adatlap.
Cím: Dr. ADA-WINTER PÉTER, Munkaügyi Minisztérium Számítástechnikai Intézet, 1089 Bp. Reguly Antal u. 57‐59.