В файле содержится последовательность слов (вводят с клавиатуры, я так поняла). Нужно создать список из повторяющихся слов. Первый элемент спискаи- наиболее часто повторяющееся слово. Вывести оба варианта списка на экран.
Помогите, пожалуйста, составить алгоритм программы, код я попытаюсь сама набрать.
У меня получилось составить только общий вид, структуру алгоритма я не могу сделать (.
1. Создать типизированный файл из строки [длина строки].
Открыть на запись
Внести изменения
Закрыть файл
2. Выделить из файла повторяющиеся слова.
Открыть файл на чтение/запись
от начала и до конца строки
начать
найти повторяющиеся слова (а вот тут вопрос. Как это сделать?) и загнать их в список (как?)
вывести список
закончить
закрыть файл
3. Переместить наиболее часто повторяющееся слово в начало.
{перемещение слова }(я так поняла, значению "головы" его присвоить, но как?)
вывести новый вариант списка.
Прошу помочь с алгоритмом, пожалуйста!!!
Другие языки программирования и технологии
Создать список из повторяющихся слов текста из файла. Первый элемент-наиб. часто повторяющееся слово/ Паскаль. (+)
1. не типизированный файл, а обычный текстовый (тип text)
2. разделить текст на слова - классическая задача: запоминаем позицию последней буквы после не-буквы, когда натыкаемся на не-букву после буквы - отрезаем строку между ними и куда-то заносим
3. в качестве списка можно завести два массива - один с самими словами, а другой - с количествами каждого слова; когда мы добавляем очередное слово, мы сначала проходимся циклом по первому массиву и глядим, не встречалось ли оно: если встречалось, просто увеличиваем соответствующий элемент 2-го массива на 1, иначе добавляем слово в конец первого массива, а в соответствующем эл-те 2-го массива ставим 1
потом просто сортируем оба массива по значениям второго и выводим то, что получилось
2. разделить текст на слова - классическая задача: запоминаем позицию последней буквы после не-буквы, когда натыкаемся на не-букву после буквы - отрезаем строку между ними и куда-то заносим
3. в качестве списка можно завести два массива - один с самими словами, а другой - с количествами каждого слова; когда мы добавляем очередное слово, мы сначала проходимся циклом по первому массиву и глядим, не встречалось ли оно: если встречалось, просто увеличиваем соответствующий элемент 2-го массива на 1, иначе добавляем слово в конец первого массива, а в соответствующем эл-те 2-го массива ставим 1
потом просто сортируем оба массива по значениям второго и выводим то, что получилось
Если это Pascal ABC.NET - решение по сути в одну строку.
Здесь программа анализирует собственный исходник (файл program8.pas), выдает самые часто встречающие слова и их кол-во.
uses System;
begin
var groups := ReadAllText(IO.Path.Combine(GetDir, 'program8.pas')).ToWords(new char[] (' ','.',',','-',':','?','!',';','[',']','(',')','=','"','''','/','<','>',Chr(9),Chr(13),Chr(10))).GroupBy(x -> x).Select(x -> Rec(x.Key, x.Count())).OrderByDescending(x -> x.Item2);
WriteLn('Max:', groups.First(), ' All:', groups);
end.
Как это работает:
IO.Path.Combine(GetDir, 'program8.pas') - получаем полное имя файла (program8.pas) в текущей папке
ReadAllText с именем этого файла соотв. считает весь текст из файла и вернет строку
ToWords разделит её на слова, используя указаннные разделители и вернет массив строк. захотите - добавьте какие ещё нужны разделители. н-р можно добавить *
LINQ GroupBy над массивом заставит собрать в группы одинаковые слова.
LINQ Select(x -> Rec(x.Key, x.Count())) выберет слово и посчитает число слов в группе, Rec создаст кортеж из двух элементов [слово, кол-во]
LINQ OrderByDescending(x -> x.Item2) отсортирует по последовательности из этих кортежей по кол-ву в убывающем порядке.
Нам остается только вывести первый элемент этой последовательности ну и чтобы видно, что никакого мухлежа нет - выводятся все.
Да - тут чаще всего встречается x =)

Здесь программа анализирует собственный исходник (файл program8.pas), выдает самые часто встречающие слова и их кол-во.
uses System;
begin
var groups := ReadAllText(IO.Path.Combine(GetDir, 'program8.pas')).ToWords(new char[] (' ','.',',','-',':','?','!',';','[',']','(',')','=','"','''','/','<','>',Chr(9),Chr(13),Chr(10))).GroupBy(x -> x).Select(x -> Rec(x.Key, x.Count())).OrderByDescending(x -> x.Item2);
WriteLn('Max:', groups.First(), ' All:', groups);
end.
Как это работает:
IO.Path.Combine(GetDir, 'program8.pas') - получаем полное имя файла (program8.pas) в текущей папке
ReadAllText с именем этого файла соотв. считает весь текст из файла и вернет строку
ToWords разделит её на слова, используя указаннные разделители и вернет массив строк. захотите - добавьте какие ещё нужны разделители. н-р можно добавить *
LINQ GroupBy над массивом заставит собрать в группы одинаковые слова.
LINQ Select(x -> Rec(x.Key, x.Count())) выберет слово и посчитает число слов в группе, Rec создаст кортеж из двух элементов [слово, кол-во]
LINQ OrderByDescending(x -> x.Item2) отсортирует по последовательности из этих кортежей по кол-ву в убывающем порядке.
Нам остается только вывести первый элемент этой последовательности ну и чтобы видно, что никакого мухлежа нет - выводятся все.
Да - тут чаще всего встречается x =)

Похожие вопросы
- Дан файл целых чисел. Создать два новых файла, первый из которых содержит положительные числа из исходного файла...
- Паскаль.Элементарно,но чё то никак( дан массив.все его элементы разделить на первый элемент.и вывести на экран
- №1.Как вычислить произведение элементов массива(1..5)В Паскале=)))№2.Найти наименьший элемент в массиве!Тоже в Паскале)
- Как поменять местами минимальный и первый элемент матрицы в паскале?
- Нужна функция на php которая будет считывать текст из файла и выводить слова которые начинаются и заканчиваются на "а"
- Какой програмой можно создать инсталятор для драйвера (inf и sys файлов)
- Создать список. вывести его на экран.
- Создать список работников предприятия C++
- Как сделать так, чтобы текст писался на первой строке в pascal abc?
- Возможно ли считать текст с файла форматом .jpg? если да то как?
Как же так - просто массивы? Нужен именно список, как структура данных. Про списки и методы работы с ними знаю немного, поэтому просила об алгоритме.
По информации из Интернета узнала, что это вовсе не одно и то же (. А так бы задача была бы проще)