К. Поляков, 2010 -2012 Программирование на алгоритмическом языке. Часть II Тема 6. Файлы.

Презентация:



Advertisements
Похожие презентации
1 Программирование на языке Паскаль Файлы с последовательным доступом. Кулебякин В.В.
Advertisements

1 Программирование на языке Паскаль Тема: Файлы. Integer, Real, Boolean, Character, String, Text.
Программирование на языке Паскаль Текстовые файлы.
К. Поляков, Программирование на алгоритмическом языке. Часть III 1.Обработка массивовОбработка массивов 2.Сортировка.
К. Поляков, Программирование на алгоритмическом языке. Часть II Тема 4. Символьные строки.
К. Поляков, Программирование на алгоритмическом языке. Часть II 1.МассивыМассивы 2.Максимальный элемент массиваМаксимальный.
К. Поляков, Программирование на алгоритмическом языке Тема 4. Циклы.
К. Поляков, Программирование на алгоритмическом языке. Часть II Тема 4. Символьные строки.
К. Поляков, Программирование на алгоритмическом языке Тема 7. Алгоритмы-функции.
К. Поляков, Программирование на алгоритмическом языке. Часть III 1.Обработка массивовОбработка массивов 2.Сортировка.
К. Поляков, Программирование на алгоритмическом языке. Часть II Тема 5. Матрицы.
К. Поляков, Программирование на алгоритмическом языке Тема 1. Введение.
Программирование на языке Паскаль Типизированные файлы.
К. Поляков, Исполнитель Водолей Урок 0. Знакомство с исполнителем Водолей.
1 Программирование на языке Паскаль Тема 1. Введение Кулебякин В.В.
К. Поляков, Программирование на алгоритмическом языке. Часть II 1. Массивы Массивы 2. Максимальный элемент массива Максимальный элемент массива.
1 Программирование на языке Паскаль Тема 1. Введение.
К. Поляков, Исполнитель Калькулятор.
1 Программирование на языке Паскаль Циклы. 2 Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов.
1 Программирование на языке Паскаль Тема 1. Введение.
Транксрипт:

К. Поляков, Программирование на алгоритмическом языке. Часть II Тема 6. Файлы

Программирование на алгоритмическом языке. Часть II К. Поляков, Файлы 2 Файл – это данные на диске, имеющие имя. Файлы только текст без оформления, не содержат управляющих символов (с кодами < 32) ACSII (1 байт на символ) UNICODE (>1 байта на символ) *.txt, *.log, *.htm, *.html могут содержать любые символы кодовой таблицы *.doc, *.exe, *.bmp, *.jpg, *.wav, *.mp3, *.avi, *.mpg ТекстовыеДвоичные Каталоги (папки)

Программирование на алгоритмическом языке. Часть II К. Поляков, Работа с файлами: принцип сэндвича 3 I этап. открыть файл: сделать его активным, приготовить к работе связать переменную F с файлом F:= открыть на чтение("in.txt") II этап: работа с файлом цел F III этап: закрыть файл закрыть(F) Фввод F, a, b | ввести a и b F:= открыть на запись("out.txt") Фвывод F, a, b, нс | вывести a и b

Программирование на алгоритмическом языке. Часть II К. Поляков, Работа с файлами 4 Особенности: имя файла упоминается только при открытии файла, работа с файлом – через файловую переменную файл, который открывается на чтение, должен существовать если файл, который открывается на запись, существует, старое содержимое уничтожается данные записываются в файл в текстовом виде при завершении программы все файлы закрываются автоматически после закрытия файла переменную F можно использовать еще раз для работы с другим файлом

Программирование на алгоритмическом языке. Часть II К. Поляков, Последовательный доступ 5 при открытии файла курсор устанавливается в начало чтение выполняется с той позиции, где стоит курсор после чтения курсор сдвигается на первый непрочитанный символ F:= открыть на чтение("qq.txt") Фввод F, x конец файла

Программирование на алгоритмическом языке. Часть II К. Поляков, Последовательный доступ 6 как вернуться назад и начать с начала? не открывая файл заново начать чтение ( F ) закрыть ( F ) F:= открыть на чтение ( "qq.txt" ) закрыть ( F ) F:= открыть на чтение ( "qq.txt" )

Программирование на алгоритмическом языке. Часть II К. Поляков, Пример 7 Задача: в файле input.txt записаны числа (в столбик), сколько их – неизвестно. Записать в файл output.txt их сумму. Алгоритм: 1.Открыть файл input.txt для чтения. 2.S := 0 3.Если чисел не осталось, перейти к шагу 7. 4.Прочитать очередное число в переменную x. 5.S := S + x 6.Перейти к шагу 3. 7.Закрыть файл input.txt. 8.Открыть файл output.txt для записи. 9.Записать в файл значение S. 10.Закрыть файл output.txt. Можно ли обойтись без массива? ? цикл «пока есть данные»

Программирование на алгоритмическом языке. Часть II К. Поляков, Программа: чтение данных из файла 8 использовать Файлы П алг Сумма чисел нач цел F, S, x F:= открыть на чтение("input.txt") S:= 0 нц пока не конец файла( F ) Фввод F, x S:= S + x кц закрыть( F ) | здесь нужно записать результат в файл кон использовать Файлы П алг Сумма чисел нач цел F, S, x F:= открыть на чтение("input.txt") S:= 0 нц пока не конец файла( F ) Фввод F, x S:= S + x кц закрыть( F ) | здесь нужно записать результат в файл кон логическая функция, возвращает да, если достигнут конец файла

Программирование на алгоритмическом языке. Часть II К. Поляков, Программа: запись результата в файл 9 F:= открыть на запись("output.txt") Фвывод F, S закрыть( F ) F:= открыть на запись("output.txt") Фвывод F, S закрыть( F ) Особенности: файл, который открывается на запись, не обязательно должен существовать старое содержимое файла уничтожается

Программирование на алгоритмическом языке. Часть II К. Поляков, Задания 10 В файле input.txt записаны числа, сколько их – неизвестно. «3»: Найти сумму всех чётных чисел и записать её в файл output.txt. «4»: Найти минимальное и максимальное из всех чисел и записать их в файл output.txt. «5»: Найти длину самой длинной цепочки одинаковых чисел, идущих подряд, и записать её в файл output.txt.

Программирование на алгоритмическом языке. Часть II К. Поляков, Обработка массивов 11 Задача: в файле input.txt записаны числа (в столбик), сколько их – неизвестно, но не более 100. Переставить их в порядке возрастания и записать в файл output.txt. Проблемы: 1.для сортировки надо удерживать в памяти все числа сразу (нужен массив!); 2.сколько чисел – неизвестно. Решение: 1.выделяем в памяти массив из 100 элементов; 2.записываем прочитанные числа в массив и считаем их с помощью переменной N ; 3.сортируем первые N элементов массива; 4.записываем их в файл. Можно ли обойтись без массива? ?

Программирование на алгоритмическом языке. Часть II К. Поляков, Программа: чтение данных в массив 12 использовать Файлы П алг Сортировка нач цел F, MAX = 100, N = 0, i, j, c целтаб A[1:MAX] F:= открыть на чтение("input.txt") нц пока не конец файла(F) и N < MAX N:= N + 1 Фввод F, A[N] кц закрыть(F) | отсортировать первые N элементов | вывести полученный массив кон использовать Файлы П алг Сортировка нач цел F, MAX = 100, N = 0, i, j, c целтаб A[1:MAX] F:= открыть на чтение("input.txt") нц пока не конец файла(F) и N < MAX N:= N + 1 Фввод F, A[N] кц закрыть(F) | отсортировать первые N элементов | вывести полученный массив кон цикл заканчивается, если достигнут конец файла или прочитали 100 чисел

Программирование на алгоритмическом языке. Часть II К. Поляков, Программа: вывод массива в файл 13 F:= открыть на запись("output.txt") нц для i от 1 до N Фвывод F, A[i], нс кц закрыть(F) F:= открыть на запись("output.txt") нц для i от 1 до N Фвывод F, A[i], нс кц закрыть(F) зачем?

Программирование на алгоритмическом языке. Часть II К. Поляков, Задания 14 В файле input.txt записаны числа (в столбик), известно, что их не более 100. «3»: Отсортировать массив по убыванию и записать его в файл output.txt. «4»: Отсортировать массив по убыванию последней цифры и записать его в файл output.txt. «5»: Отсортировать массив по возрастанию суммы цифр и записать его в файл output.txt.

Программирование на алгоритмическом языке. Часть II К. Поляков, Обработка текстовых данных 15 Задача: в файле input.txt записаны строки, в которых есть слово-паразит «короче». Очистить текст от мусора и записать в файл output.txt. Файл input.txt : Мама, короче, мыла, короче, раму. Декан, короче, пропил, короче, бутан. А роза, короче, упала на лапу, короче, Азора. Каждый, короче, охотник желает, короче, знать, где... Результат - файл output.txt : Мама мыла раму. Декан пропил бутан. А роза упала на лапу Азора. Каждый охотник желает знать, где сидит фазан.

Программирование на алгоритмическом языке. Часть II К. Поляков, Обработка текстовых данных 16 Алгоритм: 1. Прочитать строку из файла. 2. Удалить все сочетания ", короче,". 3. Записать строку в другой файл. 4. Перейти к шагу 1. Особенность: надо одновременно держать открытыми два файла: один в режиме чтения, второй – в режиме записи. пока не кончились данные

Программирование на алгоритмическом языке. Часть II К. Поляков, Работа с двумя файлами одновременно 17 использовать Строки использовать Файлы П алг Обработка строк нач цел fIn, fOut fIn:= открыть на чтение("input.txt") fOut:= открыть на запись("output.txt") | обработка файла закрыть(fIn) закрыть(fOut) кон использовать Строки использовать Файлы П алг Обработка строк нач цел fIn, fOut fIn:= открыть на чтение("input.txt") fOut:= открыть на запись("output.txt") | обработка файла закрыть(fIn) закрыть(fOut) кон

Программирование на алгоритмическом языке. Часть II К. Поляков, Цикл обработки файла 18 нц пока не конец файла(fIn) Фввод fIn, s | обработка строки s Фвывод fOut, s, нс кц нц пока не конец файла(fIn) Фввод fIn, s | обработка строки s Фвывод fOut, s, нс кц Оба файла открыты одновременно! !

Программирование на алгоритмическом языке. Часть II К. Поляков, Обработка одной строки 19 нц пока да p:= найти(", короче,", s) если p < 1 то выход все s:= s[1:p-1] + s[p+9:длин(s)] кц нц пока да p:= найти(", короче,", s) если p < 1 то выход все s:= s[1:p-1] + s[p+9:длин(s)] кц бесконечный цикл выход из цикла удалить 9 символов, короче, s pp+91 длин(s)

Программирование на алгоритмическом языке. Часть II К. Поляков, Задания 20 В файле input.txt записаны строки, сколько их – неизвестно. «3»: Заменить все слова «короче» на «в общем» и записать результат в файл output.txt. «4»: Вывести в файл output.txt только те строки, в которых есть слово «пароход». В этих строках заменить все слова «короче» на «в общем». «5»: Вывести в файл output.txt только те строки, в которых больше 5 слов (слова могут быть разделены несколькими пробелами).

Программирование на алгоритмическом языке. Часть II К. Поляков, Сортировка списков 21 Задача: в файле list.txt записаны фамилии и имена пользователей сайта (не более 100). Вывести их в алфавитном порядке в файл sort.txt. Файл list.txt : Федоров Иван Иванов Федор Анисимов Никита Никитин Николай Результат – файл sort.txt : Анисимов Никита Иванов Федор Никитин Николай Федоров Иван Нужен ли массив! ? Для сортировки нужен массив! !

Программирование на алгоритмическом языке. Часть II К. Поляков, Сортировка списков 22 Алгоритм: 1)прочитать строки из файла в массив строк, подсчитать их в переменной N 2)отсортировать первые N строк массива по алфавиту 3)вывести первые N строк массива в файл Объявление массива (с запасом): цел MAX = 100 литтаб s[1:MAX] цел MAX = 100 литтаб s[1:MAX]

Программирование на алгоритмическом языке. Часть II К. Поляков, Сортировка списков 23 Ввод массива строк из файла: f:= открыть на чтение("list.txt") N:= 0 нц пока не конец файла(f) N:= N + 1 Фввод f, s[N] кц закрыть(f) f:= открыть на чтение("list.txt") N:= 0 нц пока не конец файла(f) N:= N + 1 Фввод f, s[N] кц закрыть(f) цел f, N Вывод первых N строк массива в файл: f:= открыть на запись("sort.txt") нц для i от 1 до N Фвывод f, s[i], нс кц закрыть(f) f:= открыть на запись("sort.txt") нц для i от 1 до N Фвывод f, s[i], нс кц закрыть(f)

Программирование на алгоритмическом языке. Часть II К. Поляков, Сортировка списков 24 Сортировка первых N элементов массива: нц для i от 1 до N-1 nMin:= i нц для j от i+1 до N если s[j] < s[nMin] то nMin:= j все кц если i nMin то c:= s[i] s[i]:= s[nMin] s[nMin]:= c все кц нц для i от 1 до N-1 nMin:= i нц для j от i+1 до N если s[j] < s[nMin] то nMin:= j все кц если i nMin то c:= s[i] s[i]:= s[nMin] s[nMin]:= c все кц цел i, j, nMin лит c цел i, j, nMin лит c Какой метод? ?

Программирование на алгоритмическом языке. Часть II К. Поляков, Сортировка списков 25 Как сравниваются строки: Парохо д¤ Паровоз ¤ || ? s1 s2s2 Кодовая таблица: АБВ…Яабв…х…я … …245… … …1093…1103 Win UNICODE код("х") > код("в") "х" > "в" "Пароход" > "Паровоз" Что больше? ?

Программирование на алгоритмическом языке. Часть II К. Поляков, Сортировка списков 26 Как сравниваются строки: Парохо д¤ Пар ¤ || ? s1 s2s2 "х" > ¤"х" > ¤ "Пароход" > "Пар" Любой символ больше пустого! !

Программирование на алгоритмическом языке. Часть II К. Поляков, Сортировка списков 27 Работа с отдельной строкой массива: литтаб s[1:MAX] лит c | вспомогательная строка нц для i от 1 до N с:= s[i] | работаем со строкой c, меняем ее s[i]:= c кц литтаб s[1:MAX] лит c | вспомогательная строка нц для i от 1 до N с:= s[i] | работаем со строкой c, меняем ее s[i]:= c кц

Программирование на алгоритмическом языке. Часть II К. Поляков, Задания 28 «3»: Добавить к списку нумерацию: 1) Анисимов Никита 2) Иванов Федор «4»: Выполнить задачу на «3» и сократить имя до первой буквы: 1) Анисимов Н. 2) Иванов Ф. «5»: Выполнить задачу на «4», но при выводе начинать с имени: 1) Н. Анисимов 2) Ф. Иванов

Программирование на алгоритмическом языке. Часть II К. Поляков, Списки с числовыми данными 29 Задача: в файле marks.txt записаны фамилии и имена школьников и баллы, полученные ими на экзамене (0-100). В файле не более 100 строк. Вывести в файл best.txt список тех, кто получил более 75 баллов. Файл marks.txt : Федоров Иван 78 Иванов Федор 63 Анисимов Никита 90 Никитин Николай 55 Результат – файл best.txt : Федоров Иван 78 Анисимов Никита 90 Нужен ли массив! ? Используем два файла одновременно! !

Программирование на алгоритмическом языке. Часть II К. Поляков, Работа с двумя файлами одновременно 30 использовать Файлы П использовать Строки алг Отметки на экзамене нач цел fIn, fOut fIn:= открыть на чтение("marks.txt") fOut:= открыть на запись("best.txt") | обработка строк из файла закрыть(fIn) закрыть(fOut) кон использовать Файлы П использовать Строки алг Отметки на экзамене нач цел fIn, fOut fIn:= открыть на чтение("marks.txt") fOut:= открыть на запись("best.txt") | обработка строк из файла закрыть(fIn) закрыть(fOut) кон

Программирование на алгоритмическом языке. Часть II К. Поляков, Цикл обработки файла 31 цел ball нц пока не конец файла(fIn) Фввод fIn, s | обработка строки s | ball:= результат на экзамене если ball > 75 то Фвывод fOut, s, нс все кц цел ball нц пока не конец файла(fIn) Фввод fIn, s | обработка строки s | ball:= результат на экзамене если ball > 75 то Фвывод fOut, s, нс все кц Оба файла открыты одновременно! !

Программирование на алгоритмическом языке. Часть II К. Поляков, Преобразования «строка»-«число» 32 Из строки в число: s:= "123" N:= лит_в_цел(s, OK) | N = 123 если не OK то вывод "Ошибка!" все s:= " "; X:= лит_в_вещ(s, OK) | X = если не OK то вывод "Ошибка!" все s:= "123" N:= лит_в_цел(s, OK) | N = 123 если не OK то вывод "Ошибка!" все s:= " "; X:= лит_в_вещ(s, OK) | X = если не OK то вывод "Ошибка!" все Из числа в строку: N:= 123 s:= цел_в_лит(N) | "123" X:= s:= вещ_в_лит(X) | " " N:= 123 s:= цел_в_лит(N) | "123" X:= s:= вещ_в_лит(X) | " " цел N, вещ X, лит s, лог OK да или нет

Программирование на алгоритмическом языке. Часть II К. Поляков, Обработка строки 33 n:= найти(" ", s) | n:= 7 фамилия:= s[1:n-1] | фамилия:= "Пупкин" s:= удалить(s, 1, n) | s:= "Вася 82" n:= найти(" ", s) | n:= 5 имя:= s[1:n-1] | имя:= "Вася" s:= удалить(s, 1, n) | s:= "82" ball:= лит_в_цел(s, OK) | ball:= 82 n:= найти(" ", s) | n:= 7 фамилия:= s[1:n-1] | фамилия:= "Пупкин" s:= удалить(s, 1, n) | s:= "Вася 82" n:= найти(" ", s) | n:= 5 имя:= s[1:n-1] | имя:= "Вася" s:= удалить(s, 1, n) | s:= "82" ball:= лит_в_цел(s, OK) | ball:= 82 цел n лит s, фамилия, имя лог ОK цел n лит s, фамилия, имя лог ОK ПупкинВася82 s: n 1 n 1

Программирование на алгоритмическом языке. Часть II К. Поляков, Обработка строки 34 n:= найти(" ", s) | n:= 7 фамилия:= s[1:n-1] | фамилия:= "Пупкин" s:= удалить(s, 1, n) | s:= "Вася 82" n:= найти(" ", s) | n:= 5 имя:= s[1:n-1] | имя:= "Вася" s:= удалить(s, 1, n) | s:= "82" ball:= лит_в_цел(s, OK) | ball:= 82 если ball > 75 то Фвывод fOut, s, нс все n:= найти(" ", s) | n:= 7 фамилия:= s[1:n-1] | фамилия:= "Пупкин" s:= удалить(s, 1, n) | s:= "Вася 82" n:= найти(" ", s) | n:= 5 имя:= s[1:n-1] | имя:= "Вася" s:= удалить(s, 1, n) | s:= "82" ball:= лит_в_цел(s, OK) | ball:= 82 если ball > 75 то Фвывод fOut, s, нс все Что плохо? ?

Программирование на алгоритмическом языке. Часть II К. Поляков, Задания 35 «3»: Добавить к списку нумерацию: 1) Федоров Иван 78 2) Анисимов Никита 90 «4»: Выполнить задачу на «3» и сократить имя до первой буквы: 1) Федоров И. 78 2) Анисимов Н. 90 «5»: Выполнить задачу на «4», но отсортировать список по алфавиту. 1) Анисимов Н. 90 2) Федоров И. 78 «6»: Выполнить задачу на «4», но отсортировать список по убыванию отметки (балла).