Консультация № 66628
12.12.2006, 10:59
0.00 руб.
0 1 1
Пожалуйста!Срочно нужна помощь!Помогите решить вот такую задачу
Во входном файле text.dat содержится текст на английском языке, заканчивающийся точкой (другие символы “.” в этом файле отсутствуют). Требуется написать программу на языке Паскаль или Бейсик, которая будет определять и выводить на экран английскую букву, встречающуюся в этом тексте чаще всего, и количество там таких букв. Строчные и прописные буквы при этом считаются не различимыми. Если искомых букв несколько, то программа должна выводить на экран первую из них по алфавиту. Например, пусть файл содержит следующую запись: It is not a simple task. Yes! Чаще всего здесь встречаются буквы I, S и T (слово Yes в подсчете не учитывается, так как расположено после точки). Следовательно, в данном случае программа должна вывести два символа, разделенных пробелом: I 3

Обсуждение

Неизвестный
13.12.2006, 04:33
общий
это ответ
Здравствуйте, Cyclekkk!
Предлагаю вариант простого перебора всех символов входящего слова, и подсчета их количества(см Приложение). Как считать из файла я думаю разберетесь.
Если что пишите.
Удачию

Приложение:
‘Для наглядности и увереностиOption ExplicitOption Base 0‘Ascii коды A и ZConst AscA = 65Const AscZ = 90Sub CountAZ(src as String)Dim s As StringDim i, c, f As Integer‘массив для хранения частоты символов‘значение элемента freqs(CHAR) равно количеству символов с кодом CHAR+AscA (AsсA нужно для смещения 0)Dim freqs(AscZ - AscA) As Integer‘чтобы в дальнейшем не проводить проверки на "." и регистр символовs = UCase(Left(src, InStr(1, src, ".") - 1))‘в случае не буквы, возникнет ошибка Out of range, просто переходим к следующему символуOn Error Resume Next‘подсчет всех символовFor i = 1 To Len(s) c = Asc(Mid(s, i, 1)) - AscA freqs(c) = freqs(c) + 1Next iOn Error GoTo 0‘freqs заполнен(см. объявление freqs), ищем максимум, при равной частоте, остается символ стоящий слева по алфавиту For i = LBound(freqs) To UBound(freqs)If freqs(i) > f Then f = freqs(i) c = iEnd IfNext i‘выводим результатIf f > 0 Then MsgBox Chr(c + AscA) & " " & CStr(f) Else MsgBox "символов A-Z не найдено"End SubSub test() CountAZ "It is not a simple task. Yes!"End Sub
Форма ответа