Класс: 11

Цели урока:

  • Образовательные: познакомить с понятием файл, текстовым типом данных, сформировать умения пользоваться средствами обработки файлов, сформировать умение решать задачи с использованием файлового ввода-вывода данных.
  • Развивающие: развивать познавательный интерес, творческую активность учащихся; развивать логическое мышление.
  • Воспитательные: воспитывать интерес к предмету, аккуратность, внимательность, дисциплинированность.

Тип урока: урок совершенствования знаний.

Класс: 11

Оборудование: ПК, программное обеспечение – среда программирования PascalABC, проектор, доска, презентация « Файловый ввод-вывод данных»

Виды работы: беседа, работа с опорным конспектом, работа за ПК.

Этапы урока:

  1. Организационный момент.
  2. Фронтальный опрос.
  3. Проверка домашнего задания
  4. Постановка цели урока.
  5. Изучение нового материала.
  6. Первичное закрепление изученного.
  7. Практическая работа на ПК
  8. Подведение итогов урока.
  9. Постановка домашнего задания.

Фронтальный опрос

  1. Из каких частей состоит программа?
  2. Что включает в себя раздел описания ?
  3. В разделе описания переменных какие типы данных мы описываем?
  4. С каких служебных слов начинается исполняемая часть?
  5. Как осуществляется ввод-вывод данных?
  6. Как работает команда присваивания?
  7. для чего предназначен условный оператор?
  8. Какие операторы используются в условном операторе?
  9. Какими логическими связками могут быть соединены простые условия?

Проверка домашнего задания: На доске записать домашние задачи – 2 чел, на компьютере проверить составленные программы – 2 чел. Остальные карточки.

Постановка темы, целей и задач урока

До сегодняшнего момента мы с вами используя процедуры ввода-вывода вводили данные с клавиатуры. Конечно, программы, которые мы сейчас составляем очень просты, мы пока изучили только несколько операторов, команд, но если возникнет необходимость ввести большое количество исходных данных?, если появится необходимость вывести и сохранить данные для другой программы?, а если будет нужно пройти автоматизировано не три теста, как мы проходим в нашем электронном задачнике , а больше? Как же поступить в этом случае? Вот сегодня мы с вами и познакомимся с новым типом данных и с новыми процедурами работы с файлами. ИТАК:

Изучение нового материала

Тема урока: Файловый ввод-вывод данных. СЛАЙД 1

С понятием файла Вы знакомы еще с младших классов:
Файл- это область внешней памяти, предназначенная для хранения данных. Любой файл в Паскале имеет три характерные особенности: СЛАЙД 2
А) файла есть имя, что дает возможность программе работать сразу с несколькими файлами.
Б) файл содержит компоненты одного типа (файл строк, файл записей)
В) объем файла не оговаривается в программе , значит объем файла зависит только от внешнего устройства хранения этого файла

В Паскале по способу организации различают три типа файлов: СЛАЙД 3

  • Текстовые файлы
  • Типизированные файлы
  • Нетипизированные файлы

Типизированные файлы чаще всего используют для создания больших баз данные , так как в этих файлах используют четкой структуры записи и обработка данных может происходить с любого места записи в этом файле. Такой доступ к элементам файла называется прямым доступом.
Сегодня мы более подробно будем рассматривать текстовые файл, так как в основном автоматизированная проверка работы программы осуществляется вводом и выводом данных именно из текстовых файлов.
Текстовый файл представляет собой последовательность символов разбитую на строки. Каждая строка заканчивается маркером конца строки, или как мы привыкли нажатием кнопки Enter. Текстовые файлы являются файлами последовательного доступа , так как прежде чем начать обработку с нужного элемента надо последовательно пройти все ранее записанные элементы.
Для того чтобы мы могли работать с файлом:считать из него данные, изменить данные, записать результат мы должны проделать вот такой алгоритм: СЛАЙД 4

установить связь программы с файлом;
"открыть" файл для чтения или записи;
считать из файла или записать в файл;
закрыть файл.

В программе на Паскале текстовый файл представлен файловой переменной типа TEXT. СЛАЙД 5
Var : text;
Связь файловой переменной с именем файла на диске осуществляется с помощью оператора Assign(имя файловой переменной, имя файла на диске);
Имя файла на диске должно содержать полный путь для поиска данного файла. Если полный путь не указан, то программа будет искать файл в каталоге, где хранится программа.
Открытие файла для чтения выполняется процедурой Reset (имя файловой переменной), если на диске не будет файла с данным именем, то выполнение программы прервется; СЛАЙД 6
Открытие файла для записи осуществляется процедурой Rewrite (имя файловой переменной), если на диске нет такого файла, то он будет создан.
После открытия файлов, мы можем считывать данные и осуществлять вывод данных уже известными нами процедурами Read и Write. СЛАЙД 7
И после, что мы должны сделать – это закрыть и файл для чтения и файл для записи процедурой Close. СЛАЙД 8

Первичное закрепление изученного

Закрепим изученный материал составлением программа. Из задачника решаем задачу 1 по новой теме.

1. Даны три целых числа.
Определить, имеется ли среди них хотя бы
одна пара равных между собой чисел.
Формат входных данных
Входной файл содержит три целых числа через пробел.
Формат выходных данных
Выведите ‘YES’ если это так, и ‘NO’ в противном случае.

Вход
544 935 911
Выход
NO

1. Program vetvlenie;
Var
a,b,c:integer;
f,g: text;

begin
assign (f,’input.txt’);
reset (f);
readln (f,a,b,c);
close (f);

assign (g,’output.txt’);
rewrite (g);
if (a=b) or (b=c) or (c=a) then
writeln (g,’YES’)
else
writeln (g,’NO’);
close(g);

Практическая работа на ПК

Сохраняем файл в папке 11 класс/Программирование под именем Demofile.pas
Создаем в папке входной файл – input.txt Выходной файл – output.txt
Самостоятельно: Задача №2, изменяем заранее созданную программу под файловый ввод-вывод.

2. Program geron;
var
a,b,c:integer;
s,p:real;
f,g:text;

begin
assign(f,’input.txt’);
reset(f);
readln(f,a,b,c);
close(f);
assign(g,’output.txt’);
rewrite(g);
if(a+b>c)and (a+c>b)and(b+c>a) and (a>0)and(b>0)and(c>0) then begin
p:=(a+b+c)/2;
s:=sqrt(p*(p-a)* (p-b)* (p-c));
writeln (g,s:12:6);
end
else writeln(g,-1);
close(g);
end.

Итоги урока и домашнее задание

– Что нового вы узнали?
– Какие знания вам помогли усвоить материал урока?
– Что на ваш взгляд вам удалось освоить лучше, а что нет?
– Над чем вам необходимо поработать?

Домашнее задание: учить конспект. Задача №3 из задачника.

Используемая литература:

  1. Л.А.Татарникова. Основы алгоритмизации и программирование на языке Pascal, Томск – 2007
  2. Информатика. Базовый курс. 7-9 классы / И.Г.Семакин, Л.А.Залогова, С.В.Русаков, Л.В.Шестакова. – М.: БИНОМ. Лаборатория знаний, 2004
  3. Информатика. Задачник-практикум в 2т / Под ред. И.Г.Семакина, Е.К.Хеннера. – М.: БИНОМ. Лаборатория знаний, 2004.
  4. CD-диск. Вычислительная математика и программирование, 10-11 класс. Учебное пособие / Фальков А.И., Молодцова М.Г., Юсупова И.С. ГУ РЦ ЭМТО, 2004.

Для чего нам нужно уметь работать с файлами в Паскаль?

А для того, чтобы Вы могли начать самостоятельно решать задачи на портале и зарабатывать рейтинг.

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

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

Ввод мы будем осуществлять из файла input.txt

Вывод будем производить в файл output.txt

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

Для того, чтобы организовать ввод данных из файла нам надо:

(буду писать так, чтобы было легко понять и запомнить, не научно)

1. Завести преременную типа текст и переменную в которую будем записывать прочитанное значение.

2. Связать эту текстовую переменную с файлом из которого будет производиться чтение.

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

4. Теперь можно читать данные. Тут нужно понимать и помнить отличия процедуры read, от readln. Про что я? Если в файле данные записаны в одной строке, через пробел, то мы пользуемся все время процедурой read столько раз, сколько чисел нужно прочитать.

Если же строк несколько, то когда доходим до символа стоящего в конце строки, используем readln. В результате чего будет считано последнее число строки и курсор переместится на новую.

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

Самой распространенной ошибкой является то что забывают ставить эту переменную (текстовую).

5. Как только мы прочитали все переменные необходимо закрыть файл.

Внимание! Процедура close освобождает переменную t и мы можем её использовать в других целях, например для вывода данных. Если мы её не закрыли (нужно продолжать чтение), то для вывода необходимо будет завести еще одну текстовую переменную.

Все! На этом ввод окончен.

Опишем процесс вывода результатов в текстовый файл.

1. Опять как и в случае со вводом, необзодимо связать текстовую переменную с выходным файлом. Только файл уже называется (для нашего портала) output.txt.

2. Затем необходимо создать или перезаписать файл output.txt

3. Выводим данные. Не забываем ставить файловую переменную в начале списка вывода.

4. Как и в предидущем случае после вывода всех данных необходимо закрыть файл.

Запишем программу целиком.

Практическое задание к уроку.

Ваша задача сейчас состоит в том, чтобы ввести программу в среде программирования Free Pascal (можно и в ABC Pascal) и запустить ее на исполнение.

Если у Вас появилась ошибка типа:

Ошибка ввода/вывода 2: Не удается найти указанный файл (для ABC Pascal)

exited with exitcode=2 (для Free Pascal),

создайте в папке где сохранена ваша программа файл input.txt и введите в него число.

В этой же папке, после удачного (без ошибок) запуска программы на исполнение должен появиться файл output.txt .

Для любознательных!

лабораторные работы и задачи по программированию и информатике, егэ по информатике

Работа с файлами в паскале

Виды файлов в зависимости от их описания и режимом работы

  1. текстовые (тип text) файлы со строками неопределенной длины;
  2. файлы с типом записей (двоичные или типизированные (file of) );
  3. файлы без типа для передачи данных блоками записей нетипизированные (file).

Описание файловых переменных:

Для связи файла в коде программы и действительного файла на внешнем носителе используется процедура ASSIGN :

где myfile — имя переменной (объявленной ранее в области var ), ассоциированной с файлом
c: ext.txt — путь к реальному файлу
Первый аргумент процедуры assign в паскаль — переменная, второй – путь к файлу на диске.

Текстовые файлы в паскале: процедуры работы

Текстовый файл в Паскале — это совокупность строк произвольной длины, которые разделены между собой метками конца строки, а весь файл заканчивается меткой конца файла.

Возможные расширения файлов:
*.txt, *.log,
*.htm, *.html

Метод работы с текстовым файлом в Паскале предусматривает лишь последовательный доступ к каждой строке файла. Это означает, что начинать всегда возможно только с первой строки, затем проходя по каждой строке, дойти постепенно до необходимой. Т.е. можно сказать, что чтение (или запись) из файла (в файл) ведутся байт за байтом от начала к концу.

Предусмотрены два режима работы: режим для записи в файл информации и для чтения ее из файла. Одновременная запись и чтение запрещены.

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

Допустим, мы в программе описали переменную для работы с текстовым файлом:

Рассмотрим дальнейшую последовательность работы с ним, и рассмотрим процедуры, необходимые для работы с текстовым файлом в Паскале:

процедура открытия существующего файла для чтения при последовательном доступе:

процедура открытия создаваемого файла для записи в него информации; если файл с таким именем уже существует, то информация в нем стирается:

процедура добавления в конец:

  • При открытии курсор устанавливается в начало файла.

Чтение из файла

Read (f, список переменных); ReadLn (f, список переменных);

Отличие ReadLn от Read в том, что при использовании readln после прочтения данных пропускаются все оставшиеся символы в данной строке, включая метку конца строки.

  • чтение осуществляется с той позиции, где в данный момент стоит курсор;
  • после чтения курсор сдвигается к первому непрочитанному символу.

Для возврата в начало файла:

close ( f ); reset ( f );

Запись в текстовый файл

Write (f, список переменных); WriteLn (f, список переменных);

где f — файловая переменная, а второй параметр – выводимые из программы и вводимые в файл данные (в виде значений переменных или просто данные)

Процедуры работы с файлом и закрытие файла

Нахождение конца файла:

Логическая функция, возвращающая True, если достигнут конец файла.

Нахождение конца строки:

Логическая функция, возвращающая True, если достигнут конец строки.

Удалить файл в Паскале

Переименование файла в Паскале

rename(переменная_файла,’новое имя файла’);

Закрытие:

Рассмотрим пример работы с файлами в паскале:

var filetext: text; a,b,c:string; begin assign(filetext,’c: ext.txt’); reset(filetext); readln(filetext,a); readln(filetext,b); readln(filetext,c); close(filetext); writeln(a); writeln(c); end.

* Из задачника М. Э. Абрамян (Text4)

var F: Text; N,K:integer; Name:String; C:Char; begin Assign(F,’c: ext.txt’); Reset(F); N:=0; K:=0; While not eof(F) do begin inc(N); While not eoln(f) do begin inc(K); Read(F,C); end; Readln(F); end; Close(F); Writeln(N,’ ‘,K); end.

var p, x: integer; f: text; begin assign(f, ‘input.txt’); reset(f); p := 1; while not eof(f) do begin readln(f, x); p := p * x; end; close(f); assign(f, ‘output.txt’); rewrite(f); writeln(f, ‘Произведение чисел ‘, p); close(f); end.

var filetext: text; a:string; i:integer; begin assign(filetext,’c: ext.txt’); rewrite(filetext); for i:=1 to 10 do . reset(filetext); for i:=1 to 10 do begin . . end; close(filetext); end.

* Из задачника М. Э. Абрамян (Text1)

* Из задачника М. Э. Абрамян (Text5)

* Из задачника М. Э. Абрамян (Text7)

var F_in,F_out: Text; Name,S: String; begin Write(‘S: ‘); Readln(S); Assign(F_in,’c: ext.txt’); Reset(F_in); Assign(F_out,’c: ext1.txt’); Rewrite(F_out); Writeln(F_out,S); While not eof(F_in) do begin Readln(F_in,S); Writeln(F_out,S); end; Close(F_in); Close(F_out); Erase(F_in); Rename(F_out,’c: ext.txt’); end.

* Из задачника М. Э. Абрамян (Text9)

* Из задачника М. Э. Абрамян (Text15)

var F_in,F_out: Text; Name,line: string; K,i:integer; begin Write(‘K: ‘); Readln(K); Assign(F_in,’c: ext.txt’); Assign(F_out,’c: ext1.txt’); Reset(F_in); Rewrite(F_out); i:=0; While not eof(F_in) do begin Readln(F_in,line); inc(i); if i<>K then Writeln(F_out,line); end; Close(F_in); Close(F_out); Erase(F_in); Rename(F_out,’c: ext.txt’); end.

Работа с данными из файла как с массивом

  • для сортировки необходим массив, для того чтобы одновременно работать со всеми числами;
  • неизвестно общее количество чисел.
  • объявляем массив для 100 элементов;
  • открываем файл на чтение, просчитываем количество чисел, заполняя массив, сохраняем количество в N;
  • сортируем N элементов массива;
  • записываем результат в файл.

* Из задачника М. Э. Абрамян (Text16)

А теперь вернемся к олимпиадному заданию по Паскалю, частично решенному на одном из предыдущих заданиях:

p.in p.out
3
hello earth
khoor hduwk

* желательно создать файлы и записать данные в исходный файл «вручную»
* программа решена для k=3, выполните программу для любых k (не превышающих 20 по модулю)

var a:char; i,n,k:byte; s,s1:string; f_in,f_out:text; begin Assign(F_in,’z:p.in’); Assign(F_out,’z:p.out’); Reset(F_in); Rewrite(F_out); s1:=»; readln(f_in,k); readln(f_in,s); for i:=1 to length(s) do begin n:=ord(s[i]); if n<>32 then <32 — пробел>n:=n+3; if . then . ; if . then . ; if . then . ; a:=chr(. ); s1:=. ; end; writeln(s1); writeln(f_out,s1); close(f_in); close(f_out) end.

32 then <32 — пробел>n:=n+3; if n=123 then n:=97; <â ASCII 123 — x, 97 — a>if n=124 then n:=98; <â ASCII 124 — y, 98 — b>if n=125 then n:=99; <â ASCII 125 — z, 99 — c>a:=chr(n); s1:=s1+a; end; writeln(s1); writeln(f_out,s1); close(f_in); close(f_out) end.

Найти сумму всех чисел от 1 до n, имеющих ровно 5 делителей.
Единица и само число входят в число его делителей.
Входные данные
В единственной строке входного файла z3.in записано одно натуральное число n(1 Поделитесь уроком с коллегами и друзьями:

Зачем нужен c:char и name:string во втором примере?