<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mera400.pl/index.php?action=history&amp;feed=atom&amp;title=CSL-CROOK_-_Operacje_wej%C5%9Bcia%2Fwyj%C5%9Bcia</id>
	<title>CSL-CROOK - Operacje wejścia/wyjścia - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mera400.pl/index.php?action=history&amp;feed=atom&amp;title=CSL-CROOK_-_Operacje_wej%C5%9Bcia%2Fwyj%C5%9Bcia"/>
	<link rel="alternate" type="text/html" href="https://mera400.pl/index.php?title=CSL-CROOK_-_Operacje_wej%C5%9Bcia/wyj%C5%9Bcia&amp;action=history"/>
	<updated>2026-05-01T11:19:55Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://mera400.pl/index.php?title=CSL-CROOK_-_Operacje_wej%C5%9Bcia/wyj%C5%9Bcia&amp;diff=1087&amp;oldid=prev</id>
		<title>Amo: Utworzono nową stronę &quot;W języku CSL dostępny jest cały system wejścia/wyjścia języka FORTRAN-CROOK. Podstawowe cechy tego systemu są opisane opisane w niniejszym rozdziale głównie na ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mera400.pl/index.php?title=CSL-CROOK_-_Operacje_wej%C5%9Bcia/wyj%C5%9Bcia&amp;diff=1087&amp;oldid=prev"/>
		<updated>2013-08-31T14:32:20Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;W języku CSL dostępny jest cały system wejścia/wyjścia języka FORTRAN-CROOK. Podstawowe cechy tego systemu są opisane opisane w niniejszym rozdziale głównie na ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;W języku CSL dostępny jest cały system wejścia/wyjścia języka FORTRAN-CROOK. Podstawowe cechy tego systemu są opisane opisane w niniejszym rozdziale głównie na użytek czytelników nie znających dokładnie języka FORTRAN. Instrukcje wejścia/wyjścia (wprowadzania i wyprowadzania danych) służą do przesyłania danych pomiędzy pamięcią  wewnętrzną maszyny a urządzeniami i pamięciami zewnętrznymi. Dane poza pamięcią przekazywane są w formie zbiorów. Zbiór podzielony jest na rekordy (tzn na pewną elementarną porcję  danych, jaka może być jednorazowo przesłana pomiędzy zbiorem a pamięcią) W języku FORTRAN wyróżniamy następujące postacie rekordów:&lt;br /&gt;
&lt;br /&gt;
* zredagowane czyli rekordy znakowe alfanumeryczne, formatowe. Stosowane są w przypadku wszystkich rodzajów urządzeń i pamięci zewnętrznych. Zawierają one dane w postaci ciągu znaków mających reprezentację maszynową lub ich kodów. Rekord zredagowany składa się z pól. Każde pole reprezentuje wartość zmiennej, elementu tablicy lub ciągu znaków tekstu. Udostępnienie takiego rekordu do obliczeń  wymaga przekształcenia zapisanych w nim danych z postaci znakowej na dwójkową i odwrotnie. W przypadku przesyłania rekordów zredagowanych jest niezbędne podanie informacji o zewnętrznej postaci tych rekordów . Dokonuje się tego zazwyczaj za pomocą  specyfikacji formatu;&lt;br /&gt;
* niezredagowane czyli binarne, dwójkowe, bezformatowe mogą być przechowywane w pamięciach zewnętrznych. Dane zapisane są w nich w postaci dwójkowej, a więc takiej samej, jak w pamięci wewnętrznej maszyny. Zbiory zawierające tego typu rekordy charakteryzują się dużą zawartością zapisu i wymagają niewielkiej ilości przekształceń dla przesyłania ich do pamięci wewnętrznej. W praktyce tworzone są one dla dużej ilości wyników pośrednich;&lt;br /&gt;
&lt;br /&gt;
Instrukcje we/wy odwołują się do zbiorów lub urządzeń poprzez tzw numer programowy zbioru (urządzenia) zwany strumieniem logicznym, dostępnym na poziomie OSL-a. Strumienie te są określone przez liczbę całkowitą zawartą w przedziale od 0 do 20. Przywiązanie numeru programowego (strumienia) z konkretnym zbiorem lub urządzeniami dokonywane jest zleceniem Języka Operatora.&lt;br /&gt;
&lt;br /&gt;
= Instrukcje READ i WRITE = &lt;br /&gt;
&lt;br /&gt;
Podstawowymi instrukcjami we/wy są instrukcje &amp;#039;&amp;#039;&amp;#039;READ&amp;#039;&amp;#039;&amp;#039; i &amp;#039;&amp;#039;&amp;#039;WRITE&amp;#039;&amp;#039;&amp;#039;. Instrukcja &amp;#039;&amp;#039;&amp;#039;READ&amp;#039;&amp;#039;&amp;#039; służy do wprowadzania (odczytu)  rekordów ze zbioru do pamięci wewnętrznej (operacyjnej), natomiast instrukcja &amp;#039;&amp;#039;&amp;#039;WRITE&amp;#039;&amp;#039;&amp;#039; do wyprowadzania (zapisu) rekordów z pamięci do zbioru. Instrukcje te mają następujące postacie:&lt;br /&gt;
&lt;br /&gt;
* zredagowane:&amp;lt;pre&amp;gt;READ (u, f [ END=e1 [ ERR=e2 ]]) [lista]&amp;amp;#10;WRITE (u, f [ END=e1 [ ERR=e2 ]]) [lista]&amp;lt;/pre&amp;gt;&lt;br /&gt;
* niezredagowane:&amp;lt;pre&amp;gt;READ (r)  lista&amp;amp;#10;WRITE (r) lista&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W tych instrukcjach parametr &amp;lt;tt&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;u&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/tt&amp;gt; oznacza numer programowy (strumień), a &amp;lt;tt&amp;gt;&amp;lt;f&amp;gt;&amp;lt;/tt&amp;gt; jest etykietą odwołującą się do specyfikacji (instrukcji &amp;#039;&amp;#039;&amp;#039;FORMAT&amp;#039;&amp;#039;&amp;#039;) formatu. Parametr ten może być zerem. Oznacza to format swobodny. Dla przesyłania rekordów niezredagowanych parametr &amp;lt;tt&amp;gt;&amp;lt;r&amp;gt;&amp;lt;/tt&amp;gt; określa numer rekordu logicznego  (szczegółowy opis tych instrukcji ww. opisie języka FORTRAN-CROOK). Lista we/wy określa miejsca pamięci wewnętrznej, uczestniczące w operacjach we/wy. Poszczególne elementy listy oddzielone są od siebie przecinkami. Elementem listy może być:&lt;br /&gt;
&lt;br /&gt;
* nazwa zmiennej;&lt;br /&gt;
* nazwa elementu tablicy;&lt;br /&gt;
* nazwa tablicy;&lt;br /&gt;
* DO - implikowane;&lt;br /&gt;
&lt;br /&gt;
Kolejność występowania elementów w liście we/wy decyduje o kolejności przesyłania wartości pomiędzy tymi elementami a rekordem. Istnieją programowe środki umożliwiające określenie własnego postępowania w przypadku wykrycia końca zbioru lub błędów w czytaniu lub zapisie rekordów. Służą do tego parametry &amp;#039;&amp;#039;&amp;#039;END&amp;#039;&amp;#039;&amp;#039; i &amp;#039;&amp;#039;&amp;#039;ERR&amp;#039;&amp;#039;&amp;#039;. Użycie parametru END powoduje przejście do wykonania instrukcji oznaczonej etykietą &amp;lt;tt&amp;gt;e1&amp;lt;/tt&amp;gt;, gdy w trakcie czytania wykryty zostanie koniec zbioru. Podobnie użycie parametru &amp;#039;&amp;#039;&amp;#039;ERR&amp;#039;&amp;#039;&amp;#039; powoduje przeniesienie wykonania do instrukcji oznaczonej etykietą &amp;lt;tt&amp;gt;e2&amp;lt;/tt&amp;gt;, gdy wykryty zostanie błąd. Parametry te mogą wystąpić w dowolnej kolejności i nie koniecznie obydwa jednocześnie. Etykiety &amp;lt;tt&amp;gt;e1&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;e2&amp;lt;/tt&amp;gt; muszą natomiast występować w tym samym segmencie co instrukcje &amp;#039;&amp;#039;&amp;#039;READ&amp;#039;&amp;#039;&amp;#039; i &amp;#039;&amp;#039;&amp;#039;WRITE&amp;#039;&amp;#039;&amp;#039;, w których zostały użyte. Jeżeli w instrukcjach &amp;#039;&amp;#039;&amp;#039;READ&amp;#039;&amp;#039;&amp;#039; i &amp;#039;&amp;#039;&amp;#039;WRITE&amp;#039;&amp;#039;&amp;#039; w miejscu przeznaczonym na numer programowy urządzenia lub zbiorów, wystąpi liczba równa zero (0), to wydruk wyników (instrukcja WRITE) pojawi się na monitorze końcówki, z której został uruchomiony program. Natomiast jeżeli zero pojawi się w instrukcji czytania (&amp;#039;&amp;#039;&amp;#039;READ&amp;#039;&amp;#039;&amp;#039;), to dane należy podawać z klawiatury końcówki. Sygnalizowane jest to znakiem &amp;quot;&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Instrukcja FORMAT =&lt;br /&gt;
&lt;br /&gt;
Instrukcja FORMAT opisuje wzorzec wg. którego są deklarowane konwersje danych w czasie realizacji instrukcji WE/WY. Specyfikacja formatu składa się z szeregu opisów pól. Stanowi ona opis jednego lub kilka wprowadzonych lub wyprowadzanych rekordów. Kompletne specyfikacje zamyka się w nawiasy. Instrukcja ma następującą postać:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;e FORMAT (s)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie:&lt;br /&gt;
* e - etykieta (musi wystąpić)&lt;br /&gt;
* s - specyfikacja formatu&lt;br /&gt;
&lt;br /&gt;
Specyfikacja formatu stanowi opis jednego lub kilku wprowadzonych lub wyprowadzonych rekordów. Może ona składać się z następujących elementów:&lt;br /&gt;
&lt;br /&gt;
* opisy pól&lt;br /&gt;
* przecinki;&lt;br /&gt;
* ukośne kreski;&lt;br /&gt;
* okrągłe nawiasy;&lt;br /&gt;
* liczby powtórzeń;&lt;br /&gt;
* współczynnik skali;&lt;br /&gt;
&lt;br /&gt;
Kolejne opisy pól muszą być  oddzielone przecinkiem, ukośną kreską lub ciągiem ukośnych kresek. Przecinek oznacza koniec pola. Ukośna kreska oznacza koniec pola i koniec rekordu. Ukośne kreski mogą występować między opisami pól, mogą  też poprzedzać lub kończyć ciąg opisów pól.&lt;br /&gt;
&lt;br /&gt;
= Opisy pól =&lt;br /&gt;
&lt;br /&gt;
Opisy pól są używane do określenia postaci pól w rekordzie. Duże litery &amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;L&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;F&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;D&amp;#039;&amp;#039;&amp;#039; itd. są nazywane kodami konwersji, które wskazują w jaki sposób rekord ma być przetworzony z postaci znakowej na wewnętrzną maszynową-przy wprowadzaniu, lub z wewnętrznej postaci maszynowej na postać znakową przy wyprowadzaniu. Ogólna postać formatu kodów konwersji:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;&amp;lt;kod konwersji&amp;gt; &amp;lt;szerokość pola&amp;gt; [.&amp;lt;dokładność&amp;gt;]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;&amp;lt;szerokość pola&amp;gt;&amp;lt;/tt&amp;gt; - jest to liczba całkowita bez znaku określająca pełną szerokość pola rekordu w znakach;&lt;br /&gt;
* &amp;lt;tt&amp;gt;&amp;lt;kod konwersji&amp;gt;&amp;lt;/tt&amp;gt; - oznaczane są przez duże litery. Określają one odpowiedni kod konwersji logicznej, numerycznej lub znakowej;&lt;br /&gt;
* &amp;lt;tt&amp;gt;&amp;lt;dokładność&amp;gt;&amp;lt;/tt&amp;gt; -jest liczbą pozycji cyfr znaczących w polu;&lt;br /&gt;
&lt;br /&gt;
We wszystkich opisach pól wprowadzono następujące oznaczenia:&lt;br /&gt;
* w - szerokość pola w znakach;&lt;br /&gt;
* d - liczba pozycji liczb po przecinku;&lt;br /&gt;
&lt;br /&gt;
== Opis pola I ==&lt;br /&gt;
&lt;br /&gt;
Opisu pola I używa się do przesyłania wartości typu INTEGER. Postać opisu pola:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;[&amp;lt;nowiki&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/nowiki&amp;gt;]I&amp;lt;w&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiadający deskryptorowi I element listy we/wy musi być typu INTEGER. Deskryptor I związany z instrukcją wejścia powoduje pobranie dokładnie &amp;lt;w&amp;gt; kolejnych znaków z wczytanego rekordu, przeprowadzenie ich konwersji na postać wewnętrzną  (binarną) i zapamiętanie tak uzyskanej wartości w stowarzyszonym z deskryptorem elemencie listy we/wy. Pobrany ciąg znaków musi mieć postać stałej całkowitej i może zawierać jedynie (w wymienionej kolejności) spacje wiodące, znak + lub - i cyfry dziesiętne lub spacje. Spacje wiodące i znak + są ignorowane; znak - spowoduje, że wczytana wartość będzie ujemna. Wszystkie spacje występujące po znaku + lub - albo po cyfrach są traktowane jak zero (0). Przekroczenie zakresu liczby typu INTEGER [-32768; +32767] lub wystąpienie w polu wejściowym innego niż wymienione znaki, spowoduje zapalenie wskaźnika błędu.&lt;br /&gt;
&lt;br /&gt;
Przykład:&lt;br /&gt;
&lt;br /&gt;
 ......&lt;br /&gt;
 I=-3762&lt;br /&gt;
 J=+4&lt;br /&gt;
 K=-13&lt;br /&gt;
 WRITE(2,10)I, J, K&lt;br /&gt;
 1 0 FORMAT(I5, I5, I4)&lt;br /&gt;
 ......&lt;br /&gt;
&lt;br /&gt;
Wydruk wyników:&lt;br /&gt;
&lt;br /&gt;
 -3762   +4 -13&lt;br /&gt;
&lt;br /&gt;
== Opis pola F ==&lt;br /&gt;
&lt;br /&gt;
Opis pola &amp;#039;&amp;#039;&amp;#039;F&amp;#039;&amp;#039;&amp;#039; jest przeznaczony do konwersji danych rzeczywistych, części rzeczywistej lub urojonej danych zespolonych. Postać deskryptora &amp;#039;&amp;#039;&amp;#039;F&amp;#039;&amp;#039;&amp;#039; jest następująca:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;[&amp;lt;nowiki&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/nowiki&amp;gt;]F&amp;lt;w&amp;gt;.&amp;lt;d&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiadający deskryptorowi element listy we/wy musi być typu rzeczywistego. Na wejściu, deskryptor F pobiera &amp;lt;w&amp;gt; kolejnych znaków z wczytanego rekordu, dokonuje ich konwersji zgodnie z typem elementu listy na daną binarną typu rzeczywistego i podstawia tak uzyskaną wartość do odpowiedniego elementu listy. Pobrany ciąg znaków musi mieć postać  stałej całkowitej, stałej rzeczywistej; stałe te mogą być  poprzedzone spacjami. Spacje występujące po znaku + lub - (jeżeli występuje) albo po cyfrach interpretowane są jako zero (0). Jeżeli w pobranym polu są same spacje, to sygnalizowany będzie błąd. Przekroczenie zakresu liczby lub błędny zapis liczby w polu wejściowym spowoduje zasygnalizowanie błędu.&lt;br /&gt;
&lt;br /&gt;
== Opis pola E ==&lt;br /&gt;
&lt;br /&gt;
Opis pola &amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039;, podobnie jak opis &amp;#039;&amp;#039;&amp;#039;F&amp;#039;&amp;#039;&amp;#039;, służy do konwersji danych rzeczywistych oraz części rzeczywistej i urojonej danych zespolonych. Postać deskryptora jest następująca:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;[&amp;lt;nowiki&amp;gt;&amp;lt;p&amp;gt;&amp;lt;/nowiki&amp;gt;]E&amp;lt;w&amp;gt;.&amp;lt;d&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Odpowiadający deskryptorowi element listy we/wy musi być typu rzeczywistego. Na wejściu, deskryptor &amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039; działa tak samo jak &amp;#039;&amp;#039;&amp;#039;F&amp;#039;&amp;#039;&amp;#039;. Na wyjściu deskryptor &amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039; zmienia wartość odpowiadającego mu elementowi listy we/wy na ciąg &amp;lt;tt&amp;gt;&amp;lt;w&amp;gt;&amp;lt;/tt&amp;gt; znaków i umieszcza je w odpowiednim polu rekordu wyjściowego.&lt;br /&gt;
&lt;br /&gt;
Przykład:&lt;br /&gt;
&lt;br /&gt;
 ......&lt;br /&gt;
 READ(3,20)A, B, C&lt;br /&gt;
 2 0 FORMAT(E9.3, F5.2, E10.3)&lt;br /&gt;
 ......&lt;br /&gt;
&lt;br /&gt;
dane:&lt;br /&gt;
&lt;br /&gt;
 +6.47E-01,-2.36,+5.321E+02&lt;br /&gt;
 9 znaków  5     10&lt;br /&gt;
&lt;br /&gt;
== Opis pola tekstu ==&lt;br /&gt;
&lt;br /&gt;
Do przesyłania ciągów znakowych podanych w specyfikacji formatu używa się opisów pól wykorzystujących kod konwersji &amp;#039;&amp;#039;&amp;#039;H&amp;#039;&amp;#039;&amp;#039; i opisy pól literali. Opisy pól mają następującą postać:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;&amp;lt;w&amp;gt;H&amp;lt;ciąg znaków&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: &amp;lt;tt&amp;gt;&amp;#039;&amp;lt;ciąg znaków&amp;gt;&amp;#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
: &amp;lt;tt&amp;gt;&amp;quot;&amp;lt;ciąg znaków&amp;gt;&amp;quot;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie:&lt;br /&gt;
* w - szerokość pola w znakach.&lt;br /&gt;
&lt;br /&gt;
W przypadku kodu konwersji &amp;#039;&amp;#039;&amp;#039;H&amp;#039;&amp;#039;&amp;#039; wszystkie znaki, łącznie ze spacjami, muszą być włączone do liczby znaków &amp;lt;tt&amp;gt;&amp;lt;w&amp;gt;&amp;lt;/tt&amp;gt;. Współczynnik skali nie daje żadnych efektów.&lt;br /&gt;
&lt;br /&gt;
Przykład a:&lt;br /&gt;
&lt;br /&gt;
 ......&lt;br /&gt;
 A=1.5&lt;br /&gt;
 WRITE(2,80)A&lt;br /&gt;
 8 0 FORMAT (2X,6H LM =, F5.2,2X)&lt;br /&gt;
&lt;br /&gt;
wydruk:&lt;br /&gt;
&lt;br /&gt;
 ___LM_=_1.50__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Przykład b:&lt;br /&gt;
&lt;br /&gt;
 ......&lt;br /&gt;
 WRITE(0,10)&lt;br /&gt;
 1 0 FORMAT (1X,&amp;#039; END FILE &amp;#039;,2X,/&lt;br /&gt;
 &amp;amp;           &amp;quot; END &amp;#039;OF&amp;#039; FILE &amp;quot;)&lt;br /&gt;
 ......&lt;br /&gt;
&lt;br /&gt;
wydruk:&lt;br /&gt;
&lt;br /&gt;
 __END_FILE___&lt;br /&gt;
 _END_&amp;#039;OF&amp;#039;_FILE_&lt;br /&gt;
&lt;br /&gt;
== Opis pola X ==&lt;br /&gt;
&lt;br /&gt;
Opis pola &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; używa się do pomijania znaków w rekordzie wejściowym a przede wszystkim do wyprowadzania znaków spacji w rekordzie wyjściowym. Opis pola ma następującą postać:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;&amp;lt;w&amp;gt;X&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Liczba całkowita &amp;lt;tt&amp;gt;&amp;lt;w&amp;gt;&amp;lt;/tt&amp;gt; określa liczbę znaków, która ma być pominięta lub liczbę spacji, które mają być wyprowadzone.&lt;br /&gt;
&lt;br /&gt;
Przykład:&lt;br /&gt;
&lt;br /&gt;
 .....&lt;br /&gt;
 A=-342.743&lt;br /&gt;
 B=1.53190&lt;br /&gt;
 J=22&lt;br /&gt;
 WRITE(6,10)A, B, J&lt;br /&gt;
 1 0 FORMAT (1X, F9.4,4X, F7.5,4X, I3)&lt;br /&gt;
 .....&lt;br /&gt;
&lt;br /&gt;
wydruk:&lt;br /&gt;
 &lt;br /&gt;
 _-342.7430____1.53190_____22&lt;br /&gt;
&lt;br /&gt;
= Sterowanie wydrukiem =&lt;br /&gt;
&lt;br /&gt;
Przy wyprowadzaniu tekstu na drukarkę, przejście do nowej strony oraz do następnych wierszy uzyskuje się przez znak sterujący występujący jako pierwszy w instrukcji &amp;#039;&amp;#039;&amp;#039;FORMAT&amp;#039;&amp;#039;&amp;#039;. Znak ten ma tylko znaczenie kontrolne i nie jest wyprowadzany. Rozróżniamy następujące znaki sterujące:&lt;br /&gt;
&lt;br /&gt;
* 1H^ - nowa strona&lt;br /&gt;
* 1H_ - bez przejścia do następnego wiersza&lt;br /&gt;
* / - przejście do nowego wiersza&lt;br /&gt;
&lt;br /&gt;
11.5. Format swobodny&lt;br /&gt;
&lt;br /&gt;
Dopuszcza się swobodną konwersję danych. Polega ona na tym, że dane czytane z, lub wyprowadzane na numery programowe urządzeń lub zbiorów, w postaci znakowej instrukcjami &amp;#039;&amp;#039;&amp;#039;WRITE&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;READ&amp;#039;&amp;#039;&amp;#039; będą realizować swobodną konwersję  danych. Swobodna konwersja danych możliwa będzie tylko wtedy, gdy w instrukcji &amp;#039;&amp;#039;&amp;#039;FORMAT&amp;#039;&amp;#039;&amp;#039; w miejscu odwołania do specyfikacji wzorca wystąpi pseudoetykieta zero (0) lub etykieta odwołująca się  do instrukcji &amp;#039;&amp;#039;&amp;#039;FORMAT&amp;#039;&amp;#039;&amp;#039;, w której opisy pól (szerokość pola i liczba znaków części ułamkowej jest równa zero) są następującej postaci:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;I0, F0.0, E0.0, G0.0, D0.0;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jeżeli pewna ilość kolejnych pól rekordu zewnętrznego ma być przetwarzana przy pomocy takiego samego opisu pola (za wyjątkiem opisu &amp;#039;&amp;#039;&amp;#039;H&amp;#039;&amp;#039;&amp;#039; i &amp;#039;&amp;lt;ciąg znaków&amp;gt;&amp;#039;), można wtedy zastosować licznik powtórzeń.&lt;br /&gt;
&lt;br /&gt;
Przykłady:&lt;br /&gt;
&lt;br /&gt;
Poszczególne dwa fragmenty programu pokazują różne sposoby użycia formatu swobodnego i posiadają takie samo znaczenie:&lt;br /&gt;
&lt;br /&gt;
 ........&lt;br /&gt;
 READ(0,0)X, Y&lt;br /&gt;
 READ(3,0)(K(I), I=1,10)&lt;br /&gt;
 ........&lt;br /&gt;
 WRITE(0,0)X, Y&lt;br /&gt;
 WRITE(4,0)K(1), K(2)&lt;br /&gt;
 ........&lt;br /&gt;
&lt;br /&gt;
 ........&lt;br /&gt;
 READ(0,10)X, Y&lt;br /&gt;
 10 FORMAT(2F0.0)&lt;br /&gt;
 READ(0,20)(K(I), I=1,10)&lt;br /&gt;
 20 FORMAT(10I0)&lt;br /&gt;
 ........&lt;br /&gt;
 WRITE(0,30)X, Y&lt;br /&gt;
 30 FORMAT(F0.0, E0.0)&lt;br /&gt;
 WRITE(4,40)K(1), K(2)&lt;br /&gt;
 40 FORMAT(I0, I0)&lt;br /&gt;
 ........&lt;br /&gt;
&lt;br /&gt;
= Histogramy =&lt;br /&gt;
&lt;br /&gt;
Jedna realizacja programu modelującego składa się zazwyczaj z dużej liczby powtórzeń procedury modelowania, a uzyskiwane zestawy wyników mogą się charakteryzować  przypadkowymi wahaniami. Bardziej celowe jest zatem rejestrowanie w postaci histogramów (wykresów słupkowych) liczby zdarzeń, gdy wyniki zawierają się w określonych przedziałach wartości, niż drukowanie wyników uzyskiwanych przy każdym powtórzeniu procedury.&lt;br /&gt;
&lt;br /&gt;
== HIST (histogram) ==&lt;br /&gt;
&lt;br /&gt;
Instrukcja &amp;#039;&amp;#039;&amp;#039;HIST&amp;#039;&amp;#039;&amp;#039; określa jeden lub więcej histogramów. Ma ona następującą postać ogólną:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;HIST hname (n1, n2, n3), hname2(n4, n5, n6), ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;tt&amp;gt;hname1, hname2, ...&amp;lt;/tt&amp;gt; Są nazwami języka CSL, a &amp;lt;tt&amp;gt;n1, n2, ...&amp;lt;/tt&amp;gt; Są nieoznakowanymi (a zatem nieujemnymi) stałymi typu INTEGER. Pierwszy histogram jest określony &amp;lt;tt&amp;gt;hname1&amp;lt;/tt&amp;gt; i posiada &amp;lt;tt&amp;gt;n1&amp;lt;/tt&amp;gt; przedziałów. W pierwszym przedziale są przechowywane zdarzenia, ze wynik zawiera się w przedziale od -nieskończoności do &amp;lt;tt&amp;gt;n2&amp;lt;/tt&amp;gt;; w następnych (n1-2) przedziałach odnotowywane są zdarzenia dotyczące kolejnych przedziałów wartości o szerokości &amp;lt;tt&amp;gt;n3&amp;lt;/tt&amp;gt; a w przedziale ostatnim - zdarzenia, ze wynik zawiera się w przedziale od górnej granicy wartości przedziału przedostatniego do  +nieskończoności. Wiele histogramów może być określonych przy użyciu tej samej nazwy, przy czym należy stosować odpowiedni indeks w następujący sposób:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;HIST hname1. M1(n1, n2, n3), hname2. M2(n4, n5, n6)...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;tt&amp;gt;m1, m2, ...&amp;lt;/tt&amp;gt; są liczbami całkowitymi.&lt;br /&gt;
&lt;br /&gt;
Instrukcja ta definiuje &amp;lt;tt&amp;gt;m1&amp;lt;/tt&amp;gt; histogramów oznaczonych &amp;lt;tt&amp;gt;hname1.1&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;hname2.2, ..., hname1. M1&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;m2&amp;lt;/tt&amp;gt; histogramów oznaczonych &amp;lt;tt&amp;gt;hname2.1&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;hname2.2, ..., hname2. M2&amp;lt;/tt&amp;gt; itd.&lt;br /&gt;
&lt;br /&gt;
= ADD (dodaj) =&lt;br /&gt;
&lt;br /&gt;
Instrukcja ta ma następującą postać:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;ADD &amp;lt;wyrażenie&amp;gt;,&amp;lt;hname&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gdzie &amp;lt;tt&amp;gt;wyrażenie&amp;lt;/tt&amp;gt; jest dowolnym wyrażeniem dającym wynik typu INTEGER, a &amp;lt;tt&amp;gt;hname&amp;lt;/tt&amp;gt; jest nazwą histogramu. Wykonanie tej instrukcji powoduje zwiększenie o 1 zawartości tej komórki histogramu, w której zakresie zawiera się  bieżąca wartość wyrażenia.&lt;br /&gt;
&lt;br /&gt;
Przykład:&lt;br /&gt;
&lt;br /&gt;
 ADD A, HISTA&lt;br /&gt;
 ADD T. STATEK.1, HISTOGRAM&lt;br /&gt;
 ADD STATEK. N(3)-ZEGAR, QCZAS&lt;br /&gt;
&lt;br /&gt;
= YIELD (wydaj) =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;YIELD&amp;#039;&amp;#039;&amp;#039; jest funkcją typu INTEGER. Instrukcja ma następującą postać ogólną:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;zmienna = YIELD (hname, przedział)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;tt&amp;gt;hname&amp;lt;/tt&amp;gt; jest nazwą histogramu, a &amp;lt;tt&amp;gt;przedział&amp;lt;/tt&amp;gt; jest zmienną lub stałą typu INTEGER. Instrukcja taka przyporządkowuje zmiennej wartość całkowitą, równą liczbie obserwacji zarejestrowanych w komórce histogramu hname obejmującej wartość przedziału.&lt;br /&gt;
&lt;br /&gt;
Przykład:&lt;br /&gt;
&lt;br /&gt;
Przypuśćmy, że w histogramie &amp;lt;tt&amp;gt;HISTB&amp;lt;/tt&amp;gt; zarejestrowano dziesięć obserwacji w przedziale 7 do 11. Wówczas instrukcja:&lt;br /&gt;
&lt;br /&gt;
 X=YIELD (HISTB,7)&lt;br /&gt;
&lt;br /&gt;
spowoduje przypisanie zmiennej X wartości 10.&lt;br /&gt;
&lt;br /&gt;
= OUTPUT (wydruk) =&lt;br /&gt;
&lt;br /&gt;
Instrukcja ta ma następującą postać ogólną:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;OUTPUT &amp;lt;hname1&amp;gt;,&amp;lt;hname2&amp;gt;,...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;tt&amp;gt;hname1, hname2, ...&amp;lt;/tt&amp;gt; są nazwami histogramów. Instrukcja ta powoduje wyprowadzenie na standardowe urządzenie wyjściowe (monitor użytkownika) zawartości wymienionych histogramów. Histogram jest wyprowadzany w następującej postaci. Dla każdego przedziału, a więc jednej komórki histogramu, przeznaczony jest jeden wiersz. Każdy wiersz ma postać:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;n1 m1 / m2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;tt&amp;gt;n1&amp;lt;/tt&amp;gt; jest liczbą operacji zarejestrowanych w przedziale &amp;lt;tt&amp;gt;m1&amp;lt;/tt&amp;gt; do &amp;lt;tt&amp;gt;m2&amp;lt;/tt&amp;gt;. Obie kolumny informacji opatrzone są nagłówkami COUNT i RANGE. Na wyjściu nie jest drukowany żaden identyfikator histogramu; jeśli więc potrzebne są nazwy histogramów, to muszą być one wyprowadzone za pomocą  normalnej instrukcji WRITE, poprzedzającej instrukcję wyprowadzania histogramu.&lt;br /&gt;
&lt;br /&gt;
= CLEAR (usuń) =&lt;br /&gt;
&lt;br /&gt;
Instrukcja ta ma następującą postać ogólną:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;CLEAR hname1, hname2, ...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;tt&amp;gt;hname1, hname2, ...&amp;lt;/tt&amp;gt; są nazwami histogramów.&lt;br /&gt;
&lt;br /&gt;
Powoduje ona wyzerowanie wyspecyfikowanych histogramów. Struktura histogramów nie ulega przy tym zmianie, tak że po wyzerowaniu mogą być one dalej używane bez ponownego definiowania.&lt;br /&gt;
&lt;br /&gt;
Przykład:&lt;br /&gt;
&lt;br /&gt;
 CLEAR HISTA, HISTB, HISTC&lt;br /&gt;
&lt;br /&gt;
W przykładzie tym dokonuje się zerowania wszystkich liczb obserwacji zarejestrowanych w histogramach HISTA, HISTB, HISTC. Należy zwrócić uwagę, że wprawdzie histogram przypomina rozkład częstości, to jednak nie można prowadzić próbkowania z danych zawartych w histogramie.&lt;br /&gt;
&lt;br /&gt;
= Wyjścia diagnostyczne =&lt;br /&gt;
&lt;br /&gt;
== CHECK (sprawdź) ==&lt;br /&gt;
&lt;br /&gt;
Instrukcja ta ma postać:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;CHECK name1, name2,...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
lub&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;CHECK (j) name1, name2,...&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;tt&amp;gt;name1, name2, ...&amp;lt;/tt&amp;gt; są nazwami zmiennych, elementów tablic, atrybutów obiektów lub atrybutów czasowych, zdefiniowanych gdziekolwiek w programie. Zmienna j jest liczbą całkowitą z zakresu od 1-15. Instrukcja ta powoduje wyprowadzanie na standardowe urządzenia wyjściowe bieżącej wartości każdej wyspecyfikowanej pozycji, poprzedzając ją 8 znakami nazwy. Każda pozycja wyprowadzana jest w nowym wierszu. Instrukcja &amp;#039;&amp;#039;&amp;#039;CHECK&amp;#039;&amp;#039;&amp;#039; jest wykonywana tylko wówczas, gdy jest opuszczony klucz (na pulpicie maszyny) o numerze j. Jeśli w instrukcji nie podano numeru klucza, to przyjmuje się, że jest to klucz nr. 1.&lt;br /&gt;
&lt;br /&gt;
Przykład:&lt;br /&gt;
&lt;br /&gt;
 CHECK (5) A, T. STATEK. A, STATEK. A(5)&lt;br /&gt;
&lt;br /&gt;
Pod warunkiem , że klucz 5 jest opuszczony, instrukcja ta wyprowadzi informację w postaci następującej:&lt;br /&gt;
&lt;br /&gt;
 A  = 205&lt;br /&gt;
 T. STATEK = 355&lt;br /&gt;
 STATEK. A = 0&lt;br /&gt;
&lt;br /&gt;
== PRISET ==&lt;br /&gt;
&lt;br /&gt;
Postać ogólna tej instrukcji jest następująca:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;PRISET zname1, zname2,....&amp;lt;/tt&amp;gt;&lt;br /&gt;
lub&lt;br /&gt;
: &amp;lt;tt&amp;gt;PRISET(j) zname1, zname2,....&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gdzie &amp;lt;tt&amp;gt;j&amp;lt;/tt&amp;gt; jest liczbą całkowitą zawartą w przedziale 1-15, a &amp;lt;tt&amp;gt;name1, name2, ....&amp;lt;/tt&amp;gt; są nazwami zbiorów.&lt;br /&gt;
&lt;br /&gt;
Instrukcja ta powoduje wyprowadzenie na standardowe urządzenie wyjściowe zawartości zbiorów - &amp;lt;tt&amp;gt;zname1, zname2, ...&amp;lt;/tt&amp;gt; wg. następującego formatu:&lt;br /&gt;
&lt;br /&gt;
 SET NAME zname&lt;br /&gt;
 SIZE n&lt;br /&gt;
 MEMBERS&lt;br /&gt;
 i1, i2, i3,.... in&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;tt&amp;gt;zname&amp;lt;/tt&amp;gt; - jest nazwą zbioru, &amp;lt;tt&amp;gt;n&amp;lt;/tt&amp;gt; - jest aktualną liczbą  elementów tego zbioru, a &amp;lt;tt&amp;gt;i1, i2, ...., in&amp;lt;/tt&amp;gt; - są indeksami obiektów kolejnych elementów zbioru. Indeksy obiektów drukowane są w takim porządku, w jakim występują one w zbiorze. Są one drukowane po 10 w jednym wierszu. Instrukcja wykonywana jest tylko wówczas gdy opuszczony jest klucz nr. &amp;lt;tt&amp;gt;j&amp;lt;/tt&amp;gt; (jeśli nie podano numeru klucza - to przyjmuje się, że jest to klucz nr. 1).&lt;br /&gt;
&lt;br /&gt;
Instrukcja:&lt;br /&gt;
&lt;br /&gt;
 PRISET(2) WMORZU&lt;br /&gt;
&lt;br /&gt;
może spowodować następujący wydruk:&lt;br /&gt;
&lt;br /&gt;
 SET NAME WMORZU&lt;br /&gt;
 SIZE 8&lt;br /&gt;
 NAMBERS&lt;br /&gt;
 3, 5, 9, 13, 10, 15, 12, 7.&lt;br /&gt;
&lt;br /&gt;
{{source|title=Translator języka CSL-CROOK dla minikomputera MERA-400 w systemie operacyjnym CROOK-4, Instrukcja Programisty (wersja-17/2)|author=Janusz Gocałek, Jacek Klauziński|date=Poznań, 1985}}&lt;/div&gt;</summary>
		<author><name>Amo</name></author>
	</entry>
</feed>