Téma: Vstup - výstup. Operátoři Čtení (Readln), Zápis (Writeln). Nejjednodušší lineární programy. Postupy Read a ReadLn

V části o otázce Proč Pascal přečetl a přečetl, jestliže read také přeloží řádek, i když teoreticky by neměl? daný autorem Alexander nejlepší odpověď je readln - převezme hodnotu ze vstupní vyrovnávací paměti do parametru a vymaže celou vstupní vyrovnávací paměť klávesnice
a read - vezme hodnotu ze vstupního bufferu do parametru a nevymaže ji do bufferu, ale ponechá hodnotu!! !
Automatický posun řádku při psaní – všude
tj. readln je bezpečný vstup
čtení - nebezpečný vstup
příklad:
var
a,b: celé číslo;
začít
číst(a); (zadáno uživatelem: 4, 5 a = 4)
(ve vstupním bufferu je číslo 5!!}
read(b); (zde zadal číslo: 6, ale b = 5)
(číslo 6 zůstává ve vstupní vyrovnávací paměti!!}
---
readln(a);(zadáno uživatelem: 4, 5; a = 4)
(vstupní vyrovnávací paměť je čistá!!}
readln(a);(uživatel zadal číslo 6 a b = 6)
(vstupní vyrovnávací paměť je čistá!!}
readln(b);
konec.
Naopak nedochází k automatickému určení typu vstupní hodnoty, vše je určeno konvencemi ve specifikátoru formátu.

Odpověď od Yoali-Mali[guru]
Dá se to vysvětlit jednodušeji, bez přílišného zmatku:
Po provedení procedury read se načte hodnota dalších dat ze stejného řádku a při provedení procedury readln se načte hodnota dalších dat z nového řádku.
Proto operátor Readln (b1,b2,...bn); poskytuje zadávání dat do SLOUPCE.
Po zadání každé proměnné b1, b2, ..bn kurzor přeskočí na začátek nového řádku.
Operátor Read(b1,b2,...bn); poskytuje zadávání dat do LINE


Odpověď od VT-107 FIT[guru]
Tady byl Dmitry něčím zmaten, ale není to správné. A o zcela vyčištěném a nečištěném pufru a o bezpečnosti. Sali také odpověděl špatně. Neexistují žádné sloupce a řádky, úplně jiná pravidla.
Za prvé, tyto postupy nefungují pouze se vstupem z konzoly, takže jsou zapotřebí dvě funkce.
procedura Read(F, V1 [, V2,...Vn ]);
načte všechny V1..Vn ze streamu (přesně n parametrů), všechna načtená data budou smazána. Vše, co následuje po těchto datech, zůstane nezměněno.
Při čtení řádku se přečte vše až do nového řádku nebo konce souboru. Následná volání ke čtení vrátí prázdný řetězec. A znak nového řádku nebude ze streamu odstraněn.
Pokud čtete char, pak v závislosti na nastavení může být znak nového řádku přečten jako char(26)
Při čtení čísel se přeskakují všechny mezery, tabulátory a zalomení řádků. A další čtení začne se symbolem, který následuje za přečteným číslem. Opět mohou být přeskočeny nepotřebné znaky.
procedure ReadLn([ var F: Text; ] V1 [, V2, ..Vn ]);
čte z proudu V1, Vn (to znamená, že to funguje jako čtení) a pak přeskakuje všechny znaky až do nového řádku včetně. Všechny znaky po zalomení řádku zůstanou nezměněny.
K přechodu na nový řádek dojde, když v konzole stisknete klávesu Enter.
O bezpečnosti je to přitažené za vlasy. Jedná se o funkce s různými účely. Jakékoli nesprávné použití není bezpečné, jakékoli správné použití je odpovídajícím způsobem bezpečné.

Instrukce čtení je určena pro zadávání proměnných hodnot (počátečních dat) z klávesnice. Obecně pokyny vypadají takto:

read(Proměnná!, Proměnná2, ... ProměnnáW kde proměnné je název proměnné, jejíž hodnota musí být zadána z klávesnice během provádění programu.

Zde jsou příklady psaní instrukce pro čtení:

Číst(a); read(Cena,Kol);

Po provedení příkazu read se stane následující:

1. Program pozastaví svou práci a čeká, dokud nejsou na klávesnici napsána potřebná data a není stisknuta klávesa .

2. Po stisknutí tlačítka zadaná hodnota je přiřazena proměnné, jejíž název je uveden ve výpisu.

Například v důsledku provedení instrukce

Číst(Tempérât);

a zadáním řádku 21 z klávesnice bude hodnota proměnné Tempérât číslo 21.

Jediný příkaz čtení může načíst hodnoty více proměnných. V tomto případě je třeba zadaná čísla napsat na jeden řádek a oddělit je mezerami. Pokud je například typ proměnných a, b a c reálný, pak v důsledku provedení instrukce přečteme (a, b, c); a zadejte řádek z klávesnice:

4.5 23 0.17

proměnné budou mít následující hodnoty: a = 4,5; b = 23, o; c = 0,17.

Pokud je na řádku více čísel, než je proměnných zadaných v příkazu read, bude zbytek řádku zpracován dalším příkazem read. Například v důsledku provedení pokynů:

Přečtěte si (a, B); read(C);

a vstupní řetězec klávesnice

10 25 18

proměnné obdrží následující hodnoty: a = 10, b = 25. Přečtěte si instrukci (C); přiřadí proměnné c hodnotu 18.

Instrukce readln se od instrukce readln liší tím, že po výběru dalšího čísla z řetězce zadaného z klávesnice a jeho přiřazení k poslední proměnné ze seznamu instrukce readln se zbytek řádku ztratí a další čtení, resp. instrukce readln bude vyžadovat nový vstup.

Například v důsledku provedení instrukce:

Readln (a, B); read(C);

a zadáním řádku z klávesnice

10 25 18

proměnné získají následující hodnoty: a = ω, b = 25. Poté program počká na zadání nového čísla, aby je přiřadil proměnné c.

Každé instrukci read nebo readln by měla předcházet instrukce zápisu, která uživateli řekne, jaká data od něj program očekává. Fragment programu pro výpočet ceny nákupu může například vypadat takto:

Writeln("Zadejte počáteční data."); write("Cena produktu:"); readln(Sepa); write("Množství v dávce:"); readln(Kol); napište("Sleva:"); readln(Skidka);

Pokud se typ dat zadávaných z klávesnice neshoduje nebo je nelze přetypovat na typ proměnných, jejichž jména jsou uvedena v příkazu read (readln), program spadne (neprovedou se instrukce po čtení) a zobrazí se hlášení o chybě .

Stejně jako u operátorů výstupu informací jsou operátory read a reeadln operátory pro přístup k vestavěným postupy zadávání informací.

Operátory read (read) a readln, což pochází ze dvou anglických slov read (read) a line (line), se používají v programech pro zadávání informací do paměti počítače a " čtení"hodnoty do proměnné.

Podívejme se na práci těchto operátorů a postupy zadávání informací.

Náš program má proceduru readln(a). Při provádění programu, při zjištění příkazu readln, se počítač zastaví a čeká na zadání informací. Poté, co z klávesnice zadáme hodnotu proměnné a - 16, počítač tuto hodnotu přiřadí proměnné a, tzn. odešle jej do paměťového umístění s názvem a a bude pokračovat ve spouštění programu. Tento proces nazýváme" čtení"hodnoty do proměnné.

Procedury read a readln tedy „čtou“ hodnoty proměnných a přiřazují je k proměnným, které jsou do nich zapsány.

Takových proměnných může být několik, pak se zapisují těmito operátory oddělenými čárkami, například:

read(a, b, c, n, g, j, i), readln(e, f, k, p, d) atd.

Jaký je rozdíl mezi prací procedur read a readln?

Procedura čtení bude vyžadovat vstup nebo výstup informací na jednom řádku za sebou a procedura readln vám umožňuje zadávat a vydávat informace za sebou od začátku nového řádku.

Například:

V programu: write("Zadejte hodnoty a a b"); read(a, b);

write("Zadejte informace na jeden řádek");

Po provedení této části programu se na obrazovce zobrazí vše napsané v prvním příkazu zápisu, poté bude kurzor umístěn na stejném řádku a počítač bude čekat na zadání hodnot a a b. . Zadejte jejich hodnoty - 2 a 3, oddělte je mezerou nebo jinými slovy oddělte mezerou. Poté se na stejném řádku zobrazí informace zapsané v dalším příkazu write.

Na obrazovce:

Zadejte hodnoty a a b 2 3 Zadejte informace na jeden řádek

V programu:

writeln("Zadejte hodnoty a, b a c); readln(a, b, c);

writeln("Vstupní a výstupní informace od začátku řádku");

Na obrazovce:

Zadejte hodnoty a, b a c

Zadávání a výstup informací od začátku řádku

Aritmetické operace s celými čísly. Proměnné celočíselného typu. Skutečný typ

Jazyk Pascal používá celá čísla, která zahrnují všechna přirozená čísla vytvořená v procesu počítání objektů: 1, 2, 3, 4, 5, 6, ...; záporná čísla: ..., -6, -5, -4, -3, -2, -1 a číslo nula: 0. Celá čísla tvoří následující řadu:

6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, ...

Pascal umožňuje rozsah celých čísel od -32768 do 32767.

Proměnné, které přebírají celočíselné hodnoty, jsou zapsány v části popisu s uvedením typu celé číslo (integer).

Například: var a, b, c, a1, b34, nomb: integer;

Hodnoty jiného typu pro tyto proměnné ve stejném programu nelze přiřadit.

Aritmetické operace s celými čísly a celočíselnými proměnnými v Pascalu

Znak "_" znamená mezeru. Mezery mezi názvy proměnných a názvem operace (div) jsou povinné. (Odvozeno z anglického division - division).

Zbytek, když a je děleno b. a_mod_b

Číst A ReadLnčíst informace ze standardního vstupního zařízení. V konzolových aplikacích může být tímto zařízením například klávesnice (přesněji data zadávaná z klávesnice v grafických aplikacích může jít o soubor na disku);

To znamená, že tyto postupy jsou „antipody“ - provádějí akce opačné než oni.

Procedury Read a ReadLn provádějí podobné akce. Hlavní rozdíl mezi nimi je následující: procedura ReadLn po dokončení vstupu provede posun řádku (a v případě souborů čte soubor řádek po řádku). A procedura Read čte data v řadě - bez posunu řádku.

POZNÁMKA:

V Turbo Pascalu si to nepamatuji (možná jsem jen zapomněl), ale vstup z klávesnice lze provádět pouze pomocí procedury ReadLn a z nějakého důvodu procedura Read nefunguje.

Syntaxe výstupu konzole:

postup Přečíst(Args: Argumenty);

Syntaxe pro výstup do souboru:

postupČíst( var F:Text; Args: Argumenty);

Argumenty ( Argumenty) se může lišit. Pokud je použito více proměnných, jsou uvedeny oddělené čárkami. Například:

Var x, y: celé číslo; z:skutecne; str:string; begin WriteLn("Zadejte tři celá čísla oddělená mezerou:"); ReadLn(x, y, z); WriteLn("Zadali jste: ", x, ", ", y, ", ", z:0:2);

ReadLn(str);

WriteLn(str + str);
ReadLn; konec.

Jak již bylo zmíněno, při zadávání z konzole mohou být tyto proměnné různého typu. Ale na rozdíl od procedur Write/WriteLn není povoleno (a to je logické))).

DŮLEŽITÉ! Při zadávání dat si uvědomte, že pokud je uživatelem zadaná hodnota jiného typu než typ proměnné, do které se tato hodnota zadává, dojde k chybě za běhu. Pokud například ve výše uvedeném příkladu uživatel zadá jako první číslo skutečnou hodnotu (například 3.14), program se zhroutí, protože proměnná x je typu celé číslo. Při čtení ze souboru můžete pracovat jak se strojovými, tak textovými soubory. Při zadávání dat si uvědomte, že pokud je uživatelem zadaná hodnota jiného typu než typ proměnné, do které se tato hodnota zadává, dojde k chybě za běhu. Pokud například ve výše uvedeném příkladu uživatel zadá jako první číslo skutečnou hodnotu (například 3.14), program se zhroutí, protože proměnná x je typu celé číslo. Li Při zadávání dat si uvědomte, že pokud je uživatelem zadaná hodnota jiného typu než typ proměnné, do které se tato hodnota zadává, dojde k chybě za běhu. Pokud například ve výše uvedeném příkladu uživatel zadá jako první číslo skutečnou hodnotu (například 3.14), program se zhroutí, protože proměnná x je typu celé číslo. F

(viz syntaxe) je typovaný soubor, pak proměnné předané jako parametry (Args) musí mít stejný typ, jaký je zadán pro soubor Při zadávání dat si uvědomte, že pokud je uživatelem zadaná hodnota jiného typu než typ proměnné, do které se tato hodnota zadává, dojde k chybě za běhu. Pokud například ve výše uvedeném příkladu uživatel zadá jako první číslo skutečnou hodnotu (například 3.14), program se zhroutí, protože proměnná x je typu celé číslo.. Soubory bez typu nejsou povoleny. Pokud je parametr není specifikováno, předpokládá se, že čtení se provádí ze standardního vstupního zařízení. Pokud soubor

má typ

Text

, pak proměnné musí být typu , nebo .

Pokud při čtení souboru nejsou k dispozici žádná data pro čtení, pak se do proměnné F vrátí prázdná hodnota (0 pro , prázdný řetězec pro řetězce).

POZNÁMKA:

Při použití procedury ReadLn, tedy při čtení dat řádek po řádku, je konec řádku označen určitým sledem znaků (které přesně závisí na operačním systému, pro DOS/Windows jsou to dva znaky - #10 a #13).

Tedy jen název procedury bez parametrů. V tomto případě bude program čekat na stisknutí klávesy ENTER. Program se proto neukončí, dokud nestisknete klávesu ENTER, což vám umožní vidět výsledek programu. Samozřejmě v operačním systému

Přečtěte si (postup)

U zadaných souborů načte komponentu souboru do proměnné.
- U textových souborů čte jednu nebo více hodnot
do jedné nebo více proměnných

Oznámení

Typované soubory

Procedura Read(F , V1 [, V2,...,Vn ]);

Textové soubory

Procedura Read([ Var F: Text; ] V1 [, V2,...,Vn ]);

Režim

Windows, skutečné, chráněné

Poznámky

Pro řetězcové proměnné:

Číst přečte všechny znaky až po (ale nezahrnuje) další značku konce řádku nebo do Eof(F) se stane pravdou. Čtení se po přečtení nepřesune na další řádek. Pokud je výsledný řetězec delší než maximální délka proměnné řetězce, bude zkrácen. Po prvním čtení bude každé následující volání Read vidět značku konce řádku a vrátí řetězec nulové délky.

Ke čtení více řetězcových hodnot použijte více volání ReadLn.

Když je možnost povolena Rozšířená syntaxe, procedura Read může číst řetězce zakončené nulou do polí znaků založených na nule.

Pro proměnné typu Celé číslo nebo Nemovitý:

Čtení přeskočí všechny mezery, tabulátory nebo značky konce řádku před číselným řádkem. Pokud číselný řetězec nemá očekávaný formát, dojde k chybě I/O, jinak je proměnné přiřazena výsledná hodnota. Další čtení bude začínat mezerou, tabulátorem nebo značkou konce řádku, která ukončovala číselnou řadu.

Viz také

Příklad

používá Crt, Dos;

var
F:Text;
Ch:Char;

začít
(Získání názvu souboru z příkazového řádku)
Assign(F, ParamStr(1));
Reset(F);
zatímco ne EOF (F) dělat
začít
Read(F, Ch);
Napište(Ch); (Zobrazení obsahu souboru na obrazovce)
konec ;
konec.




Nahoru