Алгоритм для программы с текстовым файлом

Задание для всех вариантов звучит так (или, возможно, немного изменено, так как могут быть разные издания учебного пособия):

Сформировать исходный текстовый файл из строк, распечатать его содержимое, создать второй текстовый файл в соответствии с заданием, распечатать содержимое второго файла.

Слова в строках файла отделяются друг от друга пробелом. Формирование файла, распечатки файла, решение задачи оформить в виде функций с аргументами.

Задачу решить созданием файла проекта.

Варианты заданий

Вариант Задание
1. Скопировать в файл $F2$ только те строки из $F1$, в которых встречается хотя бы одно слово из первой строки $F1$.
2. Скопировать в файл $F2$ только те строки из $F1$, в которых имеется заданное слово.
3. Скопировать в файл $F2$ только те строки из $F1$, которые начинаются и заканчиваются на одну и ту же букву, и подсчитать количество символов в $F2$.
4. Скопировать из файла $F1$ в файл $F2$ те строки, в которых встречается хотя бы одно слово из последней строки $F1$.
5. Скопировать из файла $F1$ в файл $F2$ те строки, в которых имеются слова-палиндромы.
6. Скопировать из файла $F1$ в файл $F2$ строки, оставив в каждой строке только слова максимальной длины.
7. Скопировать из файла $F1$ в файл $F2$ все строки, в которых встречаются слова-идентификаторы из заданного списка.
8. Скопировать из файла $F1$ в файл $F2$ все слова строки, содержащие цифры, и подсчитать количество строк, которые начинаются на заданную букву в файле $F2$.
9. Скопировать из файла $F1$ в файл $F2$ все строки, которые содержат только одно слово, и найти самое длинное слово в файле $F2$.
10. Скопировать из файла $F1$ в файл $F2$ все строки, которые не содержат заданного слова, и найти самое короткое слово в файле $F2$.
11. Скопировать из файла $F1$ в файл $F2$ все строки, кроме той строки, которая содержит самое короткое слово, и напечатать номер этой строки.
12. Скопировать из файла $F1$ в файл $F2$ все строки, кроме той строки, в которой содержится слово-палиндром максимальной длины.
13. Скопировать из файла $F1$ в файл $F2$ все строки, упорядочив слова в каждой строке по алфавиту.
14. Скопировать из файла $F1$ в файл $F2$ все строки, содержащие симметричные слова, упорядочив слова в этих строках по алфавиту.
15. Скопировать из файла $F1$ в файл $F2$ строки, в которых не встречаются слова-идентификаторы Си из заданного списка.
16. Скопировать из файла $F1$ в файл $F2$ строки, в которых встречается по два одинаковых слова.
17. Скопировать из файла $F1$ в файл $F2$ строки, в которых нет одинаковых слов.
18. Скопировать из файла $F1$ в файл $F2$ строки максимальной длины, упорядочив в них слова по алфавиту.
19. Скопировать из файла $F1$ в файл $F2$ все строки, содержащие не менее двух одинаковых слов, и определить номер слова, в котором больше всего цифр.
20. Скопировать из файла $F1$ в файл $F2$ все строки, в которых содержатся только слова, состоящие из чисел. Дописать в конце строк сумму чисел в строке.
21. Скопировать из файла $F1$ в файл $F2$ все строки, в которых не содержатся слова, состоящие из чисел. Дописать в конце строки ее длину.
22. Скопировать из файла $F1$ в файл $F2$ все строки, в которых содержится больше заданного числа слов. Дописать в конце строки сумму цифр в строке.
23. Скопировать из файла $F1$ в файл $F2$ все строки, в которых есть слова, совпадающие с первым словом строки. Дописать в конце строки количество слов в строке.
24. Скопировать из файла $F1$ в файл $F2$ все строки, в которых нет повторяющихся слов. Дописать в конце строки номер строки в файле.
25. Скопировать из файла $F1$ в файл $F2$ все строки, в которых есть слова, повторяющиеся заданное число раз. Дописать в конце строки количество символов в слове максимальной длины.
Читайте также:
В какой программе делают компьютерную графику для фильмов

Лабораторная работа $№10$ предполагает написание программы на языке Си. При заказе работы своего варианта вы получите качественно написанную и хорошо прокомментированную программу.

C# на практике | Работа с текстовым файлом и json, пишем консольную программу

Работа с файлами в Python. Чтение и запись данных

Дополнительно заказав алгоритм решения вашей задачи (мы крайне рекомендуем это сделать), получите аккуратно оформленный отчет-алгоритм, поясняющий все тонкости решения поставленной задачи.

Образец выполнения (вариант №5)

Условие задания

Скопировать из файла $F1$ в файл $F2$ те строки, в которых имеются слова-палиндромы.

Алгоритм решения задачи

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

Пусть нам дан текстовый файл F1.txt, содержащий следующую информацию:

Лабораторная работа №10. Вариант №5 Степанов. Си. Программирование. МГТУ им.Баумана. Содержимое входного текстового файла F1.txt

В постановке задачи есть такая фраза:

То есть необходимо отлично понимать, что такое слова-палиндромы, иначе будет физически невозможно выполнить задание. Понятие палиндрома было тщательнейшим образом рассмотрено в лабораторной работе №8.

Пошаговое описание алгоритма:

  1. Открываем входной текстовый файл F1.txt в режиме чтения
  2. Создаем выходной текстовый файл F2.txt в режиме записи
  3. Пока в файле F1.txt остались непрочитанные строки
    • Считываем текущую строку из входного файла
    • Разбиваем эту строку на отдельные слова (в теории программирования часто говорят «токены«)
    • Каждое слово проверяем на палиндромность
    • Если текущее слово является палиндромом, то
      • текущую строку записываем в выходной текстовый файл F2.txt
      • Закрываем входной и выходной текстовый файлы

      Если понимать данный алгоритм, то кодирование остается лишь чисто технической задачей. Именно поэтому мы всегда рекомендуем студентам потратить достаточное количество времени на предварительный анализ решаемой задачи.

      Необходимые программные функции для кодирования

      Ниже представлен список необходимых функций, требующихся для успешного решения поставленной задачи (самое главное — помнить о том, что функция должна строго решать какую-то конкретную одну задачу).

      Название функции Назначение функции
      1 main Главная функция программы (точка входа). В рамках этой функции будет реализован ввод имен всех текстовых файлов, вывод на экран содержимого текстовых файлов, а также вызов остальных функций программы.
      2 IsWordPalindrom Эта функция принимает на вход текущее слово и проверяет, является ли оно палиндромом.
      3 PrintTextFile Эта функция принимает на вход имя текстового файла и выводит его содержимое на экран.
      4 IsExistsFile Эта функция принимает на вход имя текстового файла и проверяет его существование на жестком диске компьютера.
      5 CopyStringWithPalindrom Эта функция принимает на вход имена входного и выходного текстовых файлов и производит копирование тех строк из входного файла, которые содержат слова-палиндромы.

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

      ➡ При желании количество функций можно увеличить вдвое.

      Источник: www.proglabs.ru

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

      Текстовый файл – файл последовательного доступа, информация в котором представлена в виде текста (символов или строк). Для того, чтобы записать или считать n-ый элемент, необходимо производить операцию записи или чтения (n-1) предыдущих элементов.

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

      1. Только для текстовых файлов используется открытие файлаAPPEND (имя файловой переменной) – процедура для дозаписи файла, он отрывается для записи, маркер файла устанавливается за последним элементом в текстовом файле.
      2. Т.к. информация в текстовом файле представлена в виде строк (маркеры конца строки #10#13), то только для текстовых файлов можно использовать процедуры readln и writeln и использовать функцию EOLN (); становится автоматически истиной, если считывается маркер конца строки.
      3. Т.к. при чтении (записи) могут возникать различные сочетания типа буфера чтения (переменной), в которую считывается информация из файла из операторов чтения read и readln, соответственно возникают 4 случая:

      а) если из файла считывается информация посимвольно с использованием read, то корректно считается только первая строка; если будет организован цикл до конца файла, то он будет зацикливаться, т.к. оператор read не переводит указатель файла при чтении (записи) на новую строку, поэтому для корректного считывания информации необходимо обеспечить при чтении маркера конца строки перевод маркера файла на новую строку – используем условный оператор. var t:text; c:char;st:string; . repeat read(t,c); if eoln(t) then readln(t); until eof(t); б) если при посимвольном считывании информации с текстового файла используется readln, то зацикливания не будет, но из файла считаются только первые символы из каждой строки. в) если из файла считываются строки при помощи read, то возникает проблема, как в пункте 1. Ее решение аналогично, только вместо условного оператора используется readln. var t:text; c:char;st:string; . repeat read(t,st); readln(t); until eof(t); г) если для построкового считывания используется readln, то дополнительных приемов применять не нужно. Пример. Текстовый файл можно сформировать непрограммно. Для этого используется блокнот. Рассмотрим формирование текстового файла по строкам, используя принцип «yes/no».

      var t:text;st:string; c:char; begin writeln(‘Введите имя файла’); readln(st); assign(t,st);rewrite(t); repeat writeln(‘Введите строку’); readln(st); writeln(t,st); writeln(‘Будете вводить строку?’ y/n); readln(c); until (c=’y’) or (c=’n’); close(t);end. Пример. Задан текстовый файл. Вывести на экран слова из этого файла в столбик (без формирования слова). var t:text;c:char; zp:set of char; begin assign(t,’text.txt’); reset(t); zp:=[‘.’,’,’,’ ‘,#10#13]; repeat read(t,c); if (c in zp) or (eof(t)) then writeln else write(c); if eoln(t) then readln(t); until eof(t);end. Пример. С выделением слова из файла. var t:text;c:char;st:string; zp:set of char; begin assign(t,’text.txt’); reset(t); zp:=[‘.’,’,’,’ ‘,#10#13]; repeat st:=’’;read(t,c); while (not(c in zp) and (not eof(t)) do begin st:=st+c;read(t,c);end; if eoln(t) then readln(t); if st<>’’ then writeln (st); until eof(t);end. Алгоритм внесения изменений в файл любого типа. Только для текстового файла, используя открытие файла APPEND, можно дописать информацию. Если необходимо изменить информацию (удалить, добавить, изменить), необходимо использовать вспомогательный файл. Сам же алгоритм выглядит следующим образом:

      1. считываем информацию из исходного файла;
      2. обработка информации;
      3. измененную информацию записываем во вспомогательный файл;
      4. закрываем оба файла (исходный и полученный);
      5. удаляем исходный файл (ERASE(t));
      6. вспомогательный файл переименовываем в имя исходного файла (RENAME (v,st)).
      Читайте также:
      Как убрать программу кинопоиск

      Примечание:

      1. Для реализации алгоритма имя исходного файла необходимо хранить в некоторой строковой переменной до конца отработки этого алгоритма.
      2. Алгоритм у пользователя создает иллюзию, что система работает с одним только файлом.

      Пример. Из файла, в котором расположены фамилии, получить изменения, отсортировав фамилии в нем по алфавиту по первой букве. var v,t:text; name,st:string; ch:’a’..’z’; begin writeln (‘Введите имя файла’); readln(name); assign(v,’text.txt’); assign(t,name); rewrite(v); for ch:=’a’ to ‘z’ do begin reset(t); repeat readln(t,st); if st[1]=ch then writeln(v,st); until eof(t); close(t); end; close(f); erase(t);rename(v,name); end. Алгоритм добавления, удаления, замещения информации в файле любого типа. 1) Переносим информацию из исходного файла в вспомогательный до точки добавления, удаления, замещения. 2) Если добавление информации, то записываем информацию в вспомогательный файл. Если удаление, то считываем эту информацию из исходного файла, а в вспомогательный не записываем. Если замешаем информацию, то считываем из исходного файла, а затем записываем в вспомогательный на которую необходимо сделать замену. 3) Переписываем оставшуюся информацию из исходного файла в вспомогательный. Закрываем оба файла. Исходный удаляем. Вспомогательный переименовываем именем исходного. Пример. Задан текст. Заменить слова в нем «ЭВМ» на «машина». var v,t:text; name,st:string; mn:set of char; c:char; begin writeln(‘Введите имя файла’); readln(name); assign(v,’text.txt’); assign(t,name);rewrite(v); mn:=[‘.’,’,’,’ ‘]; repeat st:=’’; read(t,c); while (not (c in mn)) and (not eof(t)) and (not eoln(t)) do begin st:=st+c; read(t,c);end; if st=’ЭВМ’ then write(v,’машина’); else write(v,st); if c in mn then write (v,c); if eoln(t) then begin readln(t); writeln(v); end; until eof(t); close(t); close(v); erase(t); rename(v,name); end.

      Источник: studfile.net

      аи. Лекции 6-7. Работа с текстовыми файлами. Тип запись. Алгоритмы сортировки

      Единственный в мире Музей Смайликов

      Самая яркая достопримечательность Крыма

      Скачать 94 Kb.

      Работа с текстовыми файлами. Тип запись. Алгоритмы сортировки

      Файловые типы

      F:Text;
      Файловые переменные являются структурированными и содержат различную информацию, необходимую для работы с файлом на диске, с которым они связаны. Это имя файла, его размер, текущая позиция в файле и т.д. Если вы пишите процедуры или функции для работы с файлами, передавать в них файловые переменные можно только с модификатором VAR.

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

       Текст программы

      A:ARRAY [1..100,1..3] OF Real;

      Assign(F,’Test.txt’);

      WHILE NOT Eof(F) DO

      Close(F);
      Assign(F,’Out.txt’);

      FOR i:=1 to n DO

      Стандартные текстовые файлы

      Input– это файл для ввода, чтение из которого равносильно вводу данных с клавиатуры. Например, если в программе используется оператор ввода Readln(a,b), то он выполняется аналогично оператору Readln(Input,a,b).

      Читайте также:
      Программа галактика для бухгалтерии описание

      Файл Output– стандартный текстовый файл для вывода, запись в который приводит к выводу данных на экран. Аналогично предыдущему оператор вывода Writeln(a,b) будет выполняться как Writeln(Output,a,b).

      Файлы Inputи Outputможно использовать только в консольных приложениях.

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

      Фамилия Имя Отчество Факультет Группа
      Иванов Петр Николаевич ММ 112
      Петров Иван Алексеевич ЭТ 2135

      Каждый атрибут имеет свой тип. Как же можно описать такой список студентов в программе? Это можно сделать, например, с помощью нескольких массивов:

       Пример _D.Day:=23;_D.Month:=Oct;_D.Year:=2002;_S[5].Fam:=Иванов;_S[5].Fakultet:=MM;’>Пример _TYPE__Date=RECORD__Day:1..31;__Month:(Jan,Feb,Mar,…,Nov,Dec);__Year:Integer;__END;’>Пример _VAR__FIO:ARRAY_[1..100,1..3]_OF_STRING;__Fakultet:ARRAY_[1..100]_OF_(MM,RT,MT,_…_);__Group:ARRAY_[1..100]_OF_Integer;’>Пример

      FIO:ARRAY [1..100,1..3] OF STRING;

      Fakultet:ARRAY [1..100] OF (MM,RT,MT, … );

      Group:ARRAY [1..100] OF Integer;
      Такой способ во многих случаях является достаточно неудобным по целому ряду причин. Однако язык Паскаль позволяет описывать такие структуры по-другому.

      Тип запись

      END
      При описании переменной типа «запись» в памяти создается последовательность переменных различного типа (сравните с типом массив, который описывает последовательность переменных одного типа).

      Month:(Jan,Feb,Mar,…,Nov,Dec);

      Year:Integer;

      Fam,Name,Pat:STRING;

      Fakultet:(MM,RT,MT,FT, … );

      Group:Integer;

      S:ARRAY [1..100] OF Student;

      Обращение к элементам записи

      S[5].Fakultet:=MM;
      Переменные одного и того же типа «запись» можно присваивать друг другу:

      S[4]:=S[5];
      Таким образом, тип «запись» позволяет группировать данные различного типа в одной переменной (или, например, в одном элементе
      массива).

      Раз уж речь зашла о списках, необходимо сказать об их сортировке (например, необходимо отсортировать вышеописанный список студентов по алфавиту). Рассмотрим кратко, какие вообще существуют алгоритмы сортировки, их характеристики.

      Лекция №7

      Алгоритмы сортировки

      Алгоритмы сортировки

      А. Для всех элементов списка, кроме последнего, повторять:

      1. Если текущий элемент больше следующего, то поменять их местами.

      2. Конец цикла при условии, что ни одной замены не произошло.
      Проиллюстрируем работу алгоритма на примере последовательности из 5-ти чисел: 5, 3, 1, 4, 2. Работа алгоритма пузырьковой сортировки проиллюстрирована на следующем рисунке.

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

       Алгоритм «Пузырьковая сортировка»

      1. Присвоить переменной kколичество элементов списка.

      А. Уменьшить kна 1.

      Б. Для первых kэлементов списка повторять:

      1. Если текущий элемент больше следующего, то поменять их местами.

      3. Конец цикла, при условии, что ни одной замены не произошло.
      Сколько времени будет выполняться такая сортировка? За элементарную операцию примем операцию сравнения двух элементов и подсчитаем, сколько таких операций необходимо произвести, если дан список из nэлементов. На каждом шаге будет просматриваться на один элемент меньше.

      В худшем случае (когда исходный массив отсортирован по убыванию) каждый раз будет производиться хотя бы один обмен элементов, пока не останется только один элемент, и сортировку не закончится. На первом шаге будет сделано n-1 сравнение, на втором n-2 сравнения, и т.д. до одного сравнения. Итого, имеем арифметическую прогрессию от 1 до n-1 с n-1 элементом. Сумма этой прогрессии:

      При больших значениях nэта функция ведет себя как n 2 . В таком случае говорят, что вычислительная сложность алгоритма равна O(n 2 ). Эта оценка вычислительной сложности алгоритма называется асимптотической. Такая оценка обычно является достаточно плохой. Возникают вопросы: можно ли написать алгоритм, который будет работать быстрее и какой самый быстрый алгоритм вообще можно написать? Ответ – можно, и это . Невозможно написать более быстрый алгоритм сортировки сравнениями. Для лексикографической сортировки наиболее быстрый алгоритм имеет вычислительную сложность .

      При сортировке для обмена элементов списка можно использовать дополнительную переменную.

       Пример (см. пример из параграфа 6.4)

      Temp:Student;

      Stop:Boolean;

      < Сортировка массива S со списком студентов по
      фамилии. Пусть длина списка задана переменной n >

      W[i+1].Name_THEN__BEGIN__Temp:=S[i];__S[i]:=S[i+1];’> Stop:=True;

      FOR i:=1 TO k DO

      IF S[i].Name>W[i+1].Name THEN

      Источник: topuch.com

      Рейтинг
      ( Пока оценок нет )
      Загрузка ...
      EFT-Soft.ru