Меню
Конспекты
Конспекты  /  Информатика  /  10 класс  /  Информатика 10 класс (ФГОС)  /  Организация ввода и вывода данных с использованием файлов

Организация ввода и вывода данных с использованием файлов

Урок 6. Информатика 10 класс (ФГОС)

В этом уроке учащиеся рассмотрят ввод и вывод данных с использованием текстового файла в языкеPascal. Будет рассмотрена структура текстового файла и операторы, которые применяются для файловых ввода и вывода. Также будут наглядно показаны преимущества ввода и вывода данных с использованием файлов.

Конспект урока "Организация ввода и вывода данных с использованием файлов"

Вопросы:

·     Структура текстового файла.

·     Ввод данных из текстового файла в программу.

·     Вывод данных из программы в текстовый файл.

До сих пор, при написании программ мы использовали ввод данных с клавиатуры и вывод данных на экран. Однако при вводе большого объёма данных с клавиатуры легко допустить ошибку, а данные, отображаемые на экране монитора не всегда легко проанализировать. Ранее мы узнали, что вводом/выводом называется обмен данными между оперативной памятью и любыми внешними устройствами. К этим устройствам относятся и устройства внешней памяти, такие как флэш-накопители, а также оптические, магнитные и гибкие диски. Как мы помним, на устройствах внешней памяти информация хранится в виде файлов. Файлы можно разделить на типизированные, нетипизированные и текстовые. В типизированных и нетипизированных файлах данные хранятся в той же форме, что и в оперативной памяти. То есть при работе с такими файлами данные копируются без изменения объёма.

Наиболее часто используются текстовые файлы. Именно в них содержатся исходные коды программ на различных языках программирования, также в них оформляется большая часть документации. Именно в текстовой форме информация передаётся по электронным каналам связи. Именно эти файлы делают возможным ввод данных с клавиатуры и их отображение на экране. При вводе данных из текстового файла в оперативную память компьютера происходит их преобразование из текстовой формы в ту форму, с которой работает оперативная память, то есть в числа. При выводе данных из оперативной памяти в текстовый файл происходит обратное преобразование данных.

Рассмотрим структуру текстового файла. Данные в текстовом файле представляют собой последовательность символов, представленных в коде ASCII. Каждый символ в этом коде имеет информационный объём равный одному байту. Переход на следующую строку в текстовом файле обозначается двумя управляющими символами: первым следует символ возврата к началу строки, он обозначается CR, и имеет код 13, после него следует символ перевода строки, который обозначается LF и имеет код 10. Вместе два этих символа образуют двухбайтный признак конца строки. Он обозначается EOLN, сокращённо от английского «End of line», что в переводе на русский язык означает «Конец строки». При отображении данных из файла на экране монитора этот признак обеспечивает разделение данных на строки. В конце текстового файла следует признак EOF, сокращённо от английского «End of file», что в переводе на русский язык означает «Конец файла».

Структура текстового файла

Теперь рассмотрим, как организовать ввод данных из текстового файла в программе на языке Паскаль. Сперва следует в разделе описания переменных описать файловую переменную, которая будет иметь тип text.

var

  f: text;

Объявление файловой переменной

Дальнейшие действия выполняются в теле программы. В начале с помощью оператора assign следует назначить описанной файловой переменной, файл. Рассмотрим, как записывается этот оператор. После служебного слова assign, через пробел, в скобках, через запятую указывается имя описанной нами файловой переменной и в кавычках, так как это строковая величина, имя текстового файла, который будет ей соответствовать. Если текстовый файл будет храниться не в одном каталоге с исполняемым файлом программы – нужно указывать также путь к нему.

assign (f, ‘input.txt’);

Назначение файла файловой переменной

После того как мы назначили нашей файловой переменной файл, нужно, используя оператор reset, открыть этот файл для чтения. Для этого с начала записывается служебное слово reset после которого, в скобках, указывается описанная нами файловая переменная.

reset (f);

Открытие файла для чтения

После того как мы открыли файл для чтения нужно считать из него данные с помощью операторов read и readln. При этом в качестве первого параметра этих операторов указывается соответствующая файловая переменная.

В конце с помощью оператора close следует закрыть файл. Для этого сначала записывается служебное слово close, после которого в скобках следует имя соответствующей файловой переменной.

close (f);

Закрытие файла

Задача: Написать программу, которая выводит на экран сумму целых чисел, записанных в одну строку через пробел в текстовом файле input.txt.

Напишем программу для решения задачи. Назовём её summa. Для работы программы нам потребуется одна файловая переменная, назовём её f. Она будет принадлежать типу text. Также нам потребуется переменные для хранения суммы чисел и текущего числа. Назовём их соответственно s и t, так как это будут целые числа они будут принадлежать к целочисленному типу integer.

Напишем логические скобки. Тело программы будет начинаться с того, что мы присвоим переменной s, так как мы ещё не рассчитывали сумму чисел, значение 0. Дальше с помощью оператора assign мы назначим для файловой переменной f текстовый файл с именем input.txt. После этого с помощью оператора reset мы откроем для чтения файл, который назначили для переменной f. Дальше мы запишем цикл с предусловием while. Условием продолжения работы этого цикла будет то, что не достигнут конец файла. Для описания этого условия нужно записать с отрицанием логическую функцию eof (f). Тело цикла будет содержать два оператора, поэтому в логических скобках запишем оператор read, для ввода из файла, назначенного переменной f, значения текущего числа в переменную t. После него мы запишем оператор присваивания переменной s суммы её собственного значения и значения переменной t. По окончании работы описанного цикла в переменной s будет содержаться значение суммы чисел, содержащихся в файле. С помощью оператора close закроем файл, назначенный для переменной f. И запишем оператор write, выводящий на экран сообщение о том, что сумма чисел, содержащихся в файле input.txt равна значению переменной s.

program summa;

var

 f: text;

 s, t: integer;

begin

 s:=0;

 assign (f, 'input.txt');

 reset (f);

 while not (eof (f)) do

 begin

  read (f, t);

  s:=s+t;

 end;

 close (f);

 write ('Сумма чисел, содержащихся в файле input.txt равна ', s);

end.

Исходный код программы

Создадим новый файл. В нём, в одну строку через пробел запишем целые числа: 4, 7, 400 и 93. Теперь сохраним то, что получилось под именем input.txt в директории по умолчанию и закроем. Такой файл мы можем создать в любом текстовом редакторе, например, Блокнот или Майкрософт Ворд. Запустим программу на выполнение.

Сумма чисел, записанных нами в файле, действительно равна 504. Программа работает правильно. Задача решена.

Теперь рассмотрим, как организовать вывод данных из оперативной памяти компьютера в текстовый файл. Первые два шага при этом будут совпадать с соответствующими шагами при вводе данных из файла. То есть в разделе описания переменных мы должны описать файловую переменную, после чего в теле программы назначить ей файл. После этого с помощью оператора rewrite нужно открыть для перезаписи файл, назначенный файловой переменной. Дальше нужно с помощью операторов write и writeln вывести данные в файл. При этом в качестве первого параметра в указанных операторах нужно указать имя файловой переменной. В конце работы оператора writeln в файле выставляется признак конца строки – EOLN. После того как мы вывели данные в файл, нужно, как и в случае с вводом данных с помощью оператора close, закрыть файл.

Задача: В файле input.txt в n строках содержится по m целых чисел. Сформировать из этих чисел двумерный массив. Сформировать одномерный массив из n целых чисел, которые являются суммами чисел в соответствующих строках входного файла и вывести элементы этого массива в файл outpupt.txt, каждый в новой строке. Числа n и m находятся на промежутке от 1 до 100.

Напишем программу для решения этой задачи. Назовём её массив. Для работы программы нам потребуется файловая переменная f. Также нам потребуются переменные n и m, они будут хранить размерность массива, и переменные i и j, которые будут играть роль параметров в циклах ввода и вывода массива, по условию задачи они будут принадлежать к целочисленному типу byte. Также нам понадобится двумерный массив, назовём его a, его размерность по условию задачи будет 100×100 элементов. В качестве типа элементов массива укажем целочисленный тип integer. Ещё нам понадобится одномерный массив s, размерностью 100 элементов, которые будут принадлежать также к целочисленному типу integer.

Запишем логические скобки. Вначале, с помощью оператора assign назначим переменной f файл с именем input.txt. Теперь с помощью оператора reset откроем этот файл для чтения. Присвоим переменной n значение 1, так как количество строк в файле мы ещё не считали, но по условию задачи их не меньше одной, а переменной m, которую мы будем рассчитывать присвоим значение 0. Дальше мы будем считывать из файла первую строку и считать сколько в ней чисел. Для этого запишем цикл while с условием продолжения работы, что не достигнут конец строки файла, то есть с отрицанием значение функции eoln (f). В логических скобках напишем тело цикла. Оно будет содержать команду увеличения переменной m на 1 и команду считывания из файла элемента a[n, m]. Так по окончании работы цикла мы считаем первую строку массива и в переменной m посчитаем количество чисел в одной строке файла. Теперь запишем ещё один цикл while. В нём мы будем считывать оставшиеся строки массива a и считать их количество. Условием продолжения работы цикла будет то, что не достигнут конец файла. Для этого с отрицанием записывается функция eof (f). В логических скобках напишем тело цикла. Оно будет содержать оператор увеличения значения n на 1, а также цикл считывания очередной строки массива a. Это будет цикл for j:=1 to m do. Он будет содержать оператор read, считывающий из файла значение элемента a[i, j]. По окончании работы этого цикла мы уже считаем массив a из файла и нам будут известны значения n и m. Теперь закроем файл f.

Далее запишем цикл формирования массива s. Это будет цикл for i:=1 to n do. В логических скобках запишем тело цикла. Оно будет содержать оператор присваивания s[i] значения 0 и ещё один цикл для расчёта суммы элементов i-той строки массива a. Это будет цикл for j:=1 to m do. Он будет содержать оператор присваивания s[i] суммы s[i]+a[i, j]. По окончании работы этого цикла мы сформировали массив s.

Теперь нам нужно вывести массив s в файл. Для этого назначим переменной f файл output.txt, после чего с помощью оператора rewrite откроем его для перезаписи. Дальше будет следовать цикл для вывода массива s. Это будет цикл for i:=1 to n do. Так как нам нужно вывести каждый элемент в отдельную строку, цикл будет содержать оператор writeln, выводящий в файл значение s[i]. После того, как мы вывели массив s, закроем файл, назначенный переменной Эф.

program massiv;

var

 f: text;

 n, m, i, j: byte;

 a: array [1..100, 1..100] of integer;

 s: array [1..100] of integer;

begin

 assign (f, 'input.txt');

 reset (f);

 n:=1;

 m:=0;

 while not (eoln (f)) do

 begin

  m:=m+1;

  read (f, a[n, m]);

 end;

 while not (eof (f)) do

 begin

  n:=n+1;

  for j:=1 to m do

   read (f, a[n, j]);

 end;

 close (f);

 for i:=1 to n do

 begin

  s[i]:=0;

  for j:=1 to m do

   s[i]:=s[i]+a[i, j];

 end;

 assign (f, 'output.txt');

 rewrite (f);

 for i:=1 to n do

  writeln (f, s[i]);

 close (f);

end.

Исходный код программы

Запишем в файл input.txt 3 строки по 3 числа. В первой строке будут числа: 1, 2 и 3, во второй – 20, 30, 40 и в третьей – –2, 2 и 0. Сохраним и закроем этот файл. Так же создадим пустой файл и сохраним его под именем output.txt, после чего закроем.

Запустим программу на выполнение, после чего откроем файл output.txt. Он содержит 3 числа: 6, 90 и 0. Они равны суммам строк входного файла.

Программа работает правильно. Задача решена.

269

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт