Другие языки программирования и технологии

Создать список из повторяющихся слов текста из файла. Первый элемент-наиб. часто повторяющееся слово/ Паскаль. (+)

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

Помогите, пожалуйста, составить алгоритм программы, код я попытаюсь сама набрать.

У меня получилось составить только общий вид, структуру алгоритма я не могу сделать (.

1. Создать типизированный файл из строки [длина строки].
Открыть на запись
Внести изменения
Закрыть файл

2. Выделить из файла повторяющиеся слова.
Открыть файл на чтение/запись
от начала и до конца строки
начать
найти повторяющиеся слова (а вот тут вопрос. Как это сделать?) и загнать их в список (как?)
вывести список
закончить
закрыть файл

3. Переместить наиболее часто повторяющееся слово в начало.

{перемещение слова }(я так поняла, значению "головы" его присвоить, но как?)
вывести новый вариант списка.

Прошу помочь с алгоритмом, пожалуйста!!!
Вася Маковеев
Вася Маковеев
3 470
1. не типизированный файл, а обычный текстовый (тип text)
2. разделить текст на слова - классическая задача: запоминаем позицию последней буквы после не-буквы, когда натыкаемся на не-букву после буквы - отрезаем строку между ними и куда-то заносим
3. в качестве списка можно завести два массива - один с самими словами, а другой - с количествами каждого слова; когда мы добавляем очередное слово, мы сначала проходимся циклом по первому массиву и глядим, не встречалось ли оно: если встречалось, просто увеличиваем соответствующий элемент 2-го массива на 1, иначе добавляем слово в конец первого массива, а в соответствующем эл-те 2-го массива ставим 1

потом просто сортируем оба массива по значениям второго и выводим то, что получилось
Денис Григорьев
Денис Григорьев
50 628
Лучший ответ
Вася Маковеев Спасибо Вам огромное!

Как же так - просто массивы? Нужен именно список, как структура данных. Про списки и методы работы с ними знаю немного, поэтому просила об алгоритме.

По информации из Интернета узнала, что это вовсе не одно и то же (. А так бы задача была бы проще)
Если это 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 =)