![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 08.05.2017
Сообщений: 4
|
![]()
Здравствуйте, помогите, пожалуйста, выполнить задание. Звучит оно следующим образом :Найдите в исходном файле 3 наиболее часто встречающихся слова и для каждого из них запишите в выходной файл строку, содержащую количество использования слова и это слово.
Я написал код, но считывание строки и вывод результата происходит в самом Паскале. Что нужно исправить, чтобы программа считывала файл и результат выводился тоже в файл? спасибо. Код: program Project1; type (*Статистика по отдельному слову.*) TWord = record (*Само слово.*) StrWord : String; (*Количество вхождений данного слова в анализируемую строку.*) Count : Integer; end; (*Массив, содержащий статистику по словам.*) TArrWord = array[1..50] of TWord; (*Эта процедура составляет список (т. е. массив) различающихся слов, найденных в строке aStr. aAmount - количество слов, добавленных в массив aArr. Каждый элемент массива aArr содержит само слово и сведения о количестве вхождений этого слова в строку aStr.*) procedure GetArrWord(const aStr : String; var aArr : TArrWord; var aAmount : Integer); const (*Множество разделителей слов. Char(9) - это символ горизонтальной табуляции.*) Delims = [' ', '.', ',', ':', ';', '!', '?', '-', Char(9)]; var StrTmp : String; i, j, k : Integer; Pos1, Pos2 : Integer; IsFound : Boolean; begin (*Обнуляем массив слов.*) for j := 1 to High(aArr) do begin aArr[j].StrWord := ''; aArr[j].Count := 0; end; (*Выделяем из строки слова и помещаем их в массив.*) Pos2 := 0; j := 1; (*Т. е. j := Low(aArr);*) for i := 1 to Length(aStr) do begin (*Отслеживаем начало слова.*) if i = 1 then begin if not ( aStr[i] in Delims ) then begin Pos1 := i; end; end else begin if ( aStr[i - 1] in Delims ) and ( not ( aStr[i] in Delims ) ) then begin Pos1 := i; end; end; (*Отслеживаем конец слова.*) if i = Length(aStr) then begin if not ( aStr[i] in Delims ) then begin Pos2 := i; end; end else begin if ( not ( aStr[i] in Delims ) ) and ( aStr[i + 1] in Delims ) then begin Pos2 := i; end; end; (*Если конец слова обнаружен - обрабатываем это слово.*) if Pos2 > 0 then begin (*Найденное слово.*) StrTmp := Copy(aStr, Pos1, Pos2 - Pos1 + 1); (*Проверяем есть ли уже такое слово в массиве. Если есть - тогда увеличиваем счётчик этого слова на единицу.*) IsFound := False; for k := 1 to j - 1 do begin if aArr[k].StrWord = StrTmp then begin Inc(aArr[k].Count); IsFound := True; Break; end; end; (*Если слово не найдено в массиве, то добавляем его и устанавливаем для этого слова счётчик = 1.*) if not IsFound then begin aArr[j].StrWord := StrTmp; aArr[j].Count := 1; (*Либо: Inc(aArr[j].Count); Т. к. все счётчики вначале проинициализированы нулём.*) (*Индекс следующего элемента массива.*) Inc(j); end; (*Устанавливаем флаг - "конец слова не найден".*) Pos2 := 0; end; end; (*Количество слов, добавленных в массив.*) aAmount := j - 1; end; const (*Анализируемая строка.*) StrText = '1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 10, 9, 8'; var (*Массив, содержащий статистику по словам.*) ArrWord : TArrWord; (*Сведения об отдельном слове.*) WordTmp : TWord; (*Строка для промежуточных вычислений.*) StrTmp : String; (*Индекс, применяемый в циклах.*) i : Integer; (*Для промежуточных вычислений.*) IntTmp : Integer; (*Количество слов в массиве ArrWord.*) Amount : Integer; (*Флаг, применяемый в алгоритме сортировки. IsExchange = True - в текущем проходе была хотябы одна перестановка. Иначе - перестановок не было.*) IsExchange : Boolean; begin repeat (*Пользователь может ввести строку для анализа. Если строка не введена - т. е. пользователь нажал ENTER без ввода строки - тогда в качестве анализируемой строки берётся строка StrText.*) Writeln('Gotoviy shablon - Enter. Vvesti noviy shablon - vvod stroki + ENTER.'); Readln(StrTmp); if StrTmp = '' then begin StrTmp := StrText; end; (*Получаем по заданному тексту статистику употребления слов.*) GetArrWord(StrTmp, ArrWord, Amount); (*Сортируем массив ArrWord по убыванию значений в счётчиках слов. Т. е. - по убыванию значений в ArrWord[i].Count. Метод сортировки - пузырьковая сортировка.*) repeat IsExchange := False; for i := 1 to Amount - 1 do begin if ArrWord[i].Count < ArrWord[i + 1].Count then begin WordTmp := ArrWord[i]; ArrWord[i] := ArrWord[i + 1]; ArrWord[i + 1] := WordTmp; IsExchange := True; end; end; until not IsExchange; (*Распечатка 3 наиболее употребительных слов.*) Writeln('3 naibolee upotrebitelnih slov:'); IntTmp := 3; if Amount < 3 then begin IntTmp := Amount; end; for i := 1 to IntTmp do begin Writeln('Slovo: "', ArrWord[i].StrWord, '", Statistika: ', ArrWord[i].Count); end; Writeln('Введите текст:'); Readln(StrTmp); until StrTmp <> ''; end. Последний раз редактировалось Yavorsky; 08.05.2017 в 12:25. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,370
|
![]()
1. Было бы очень хорошо, если бы вы прочитали правила оформления кода.
Это совсем несложно. Ввели код, например, через копирование, выделили этот код и нажали символ # . Он есть в меню окна редактирования. 2. Для работы с текстовым файлом надо - описать файловую переменную Код:
Код:
- чтение: Код:
Код:
- чтение из файла строки: Код:
Код:
Последнее: В разделе "Литература" есть книжка Т.А. Павловская, Программирование на ЯВУ. Паскаль. Очень рекомендую, поскольку там есть ответы на твои вопросы, как в теоретическом плане, так и в примерах.
Как-то так, ...
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Лабораторная работа(очень простая) Структуры, работа с файлами | yurda | Фриланс | 2 | 11.06.2016 08:44 |
Работа с файлами - C | Max00766 | Общие вопросы C/C++ | 9 | 24.11.2015 14:33 |
Работа с файлами: запись, добавление, чтение (найти ошибку в коде) / C для начинающих Надо создать программу для работы с файлами | Konlor | Общие вопросы C/C++ | 2 | 18.05.2014 12:37 |
РАБОТА С ФАЙЛАМИ, Си | Анннютик | Общие вопросы C/C++ | 25 | 10.08.2011 23:47 |
работа с файлами! | vakyla | Помощь студентам | 10 | 10.11.2009 07:38 |