Форум » Обработка символьных строк » Задание 24 №3786 » Ответить

Задание 24 №3786

Арсений Р: Написал программу: [pre2] var f: text; a, abc, max_letter_string: string; k, i, number, kmax, kmax1, max_letter, max_mas, max_mas1: integer; count: array [1..26] of integer; begin assign(f, '1.txt'); reset(f); abc := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; kmax := -1; kmax1 := -1; max_mas := -1; max_mas1 := -1; K:=1; while not eof(f) do begin readln(f, a); for i := 1 to length(a) - 1 do begin number := pos(a[ i], abc); inc(count[number]); if a[ i] = a[i + 1] then inc(k) else if kmax < k then begin kmax := k; k := 1; end; end; number := pos(a[length(a)], abc); inc(count[number]); if kmax < k then begin kmax := k; k := 1; end; if kmax1 < kmax then begin kmax1 := kmax; for i := 1 to 26 do if count[ i] > max_mas1 then max_mas1 := count[ i]; for i := 1 to 26 do if count[ i] = max_mas1 then begin max_mas := i; break; end; max_letter := count[max_mas]; max_letter_string := abc[max_mas]; end; kmax := -1; k := 1; for i := 1 to 26 do count[ i] := -1; max_mas := -1; max_mas1 := -1; end; writeln(max_letter); writeln(max_letter_string); end.[/pre2] Результат работы программы не совпадает с ответом. Программа выводит Т, когда в ответе К. При этот сделал второй вывод, который выводит количество данных букв в строке для проверки, посчитал также вручную в этой строке, букв Т там больше, чем букв К. Заранее буду благодарен, если кто мне ответит, что здесь не так.

Ответов - 10

Поляков: Давайте убедимся, что мы одинаково понимаем условие задачи. 1) программа должна найти строку, где находится самая длинная цепочка идущих подряд одинаковых букв; вы должны найти цепочку из 10 букв М 2) в этой строке нужно определить букву, которая встречается чаще всего (это К, она встречается 49 раз). 3) определяем, сколько всего букв К в файле.

Арсений Р: Да, условие такое. Как я написал выше, второй вывод я сделал для проверки, чтобы убедиться, что программа правильно работает, но уже при первом выводе выходит неправильное значение, выводится другая буква. Поэтому я и не могу найти ошибку здесь

Поляков: Арсений Р пишет: при первом выводе выходит неправильное значение, выводится другая буква. Вы уже локализовали ошибку. Теперь нужно отлаживать. Отладьте небольшую программу, которая определяет, какая буква встречается в символьной строке чаще всего.


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

Поляков: На сайте есть авторское решение, вы можете сравнить со своим. Отлаживайте сначала не на файле., а на одной строке, где есть несколько цепочек одинаковых символов. Или можете найти строку в файле, где 10 букв М, и отлаживать на ней. За вас это никто не сделает.

Арсений Р: А нельзя ли, пожалуйста, указать, где оно находится? Не могу найти

Поляков: Это задача 24.165 из основного сборника. Решение есть здесь.

Арсений Р: Простите, но здесь представлены только 26-ые задачи, вы точно отправили тот сборник?

Поляков: Да, виноват. Я поправил ссылку.

Арсений Р: Спасибо, теперь разобрался с решением. Ещё раз спасибо большое за ответ.



полная версия страницы