Помощь - Поиск - Пользователи - Календарь
Полная версия: Одна программа. две задачи . три модуля. Ошибка.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
student___
Здравствуйте. Есть программа, решающие такие две задачи. 1. Указать относительную частотувстречаемости каждого символа в тексте. вывести соответствующую диаграмму(при помощи модуля graph) (знаки препинания не учитываем)2. Найти все слова перевертыши. Задача решаются следующим образом. с помощью модуля Crt появляется на экране меню, с выбором как вводить данные. 1. с клавиатуры. 2. из файла. далее после ввода данных появляется меню с выбором программы: 1.относительная частота. 2. слова перевертыши. далее выполняется либо первая либо вторая задача. затем появляется меню с пунктами :"сохранить решение в файл" или "вывести на экран". код задач находятся в модуле slova и оформлены в виде процедур. код меню находится в модуле modulmenu. ну и конечно основная программа к которой подключены все модули и и процедуры.

проблема вот такая. задача про слова перевертыши работает отлично, и на вводе текста из файла и склавиатуры, и на выводе данных. но первая задача, про относительную частоту работает очень странно...диаграммы выводит какие-то непонятные данные , а когда появляется меню вывода данных то там вместо пунктов "на экран" и "в файл" показывает полную чушь.

понимаю что разбираться в чужом коде это самая неблагодарная в мире работа, но я очень прошу помощи.это очень важная работа.

прикепляю файлы с задачами до преобразования в процедуры, файлы с которыми работает программы и , конечно же, коды самой программы, с которой ошибка. кстати все работает хорошо. видимо ошибка в процедуре. несколько дней маюсь , не могу никак ее найти. очень надеюсь на вашу помощь.


Федосеев Павел
Мне кажется, что я уже отмечал в предыдущем твоём топике, что нужно инициализировать все переменные.

В модуле slova:

procedure PoiskSimvolov(input_str: massive; count: integer; var out_str: massive; var nomer: integer);
......
begin
  j := 1;
  k := 1; h:=0;

  q :=0;                    <-------------- добавь инициализацию
  for i:=0 to 255 do    <-------------- добавь инициализацию
    a[i]:=0;
......................

          эти строки, наверное в таком порядке и с добавлением вычислений в результирующую строку
      str((a[i] / h): 3: 3, st);
      out_str[nomer] := chr(i) + ' - ' + 'частота-'+st;     <------ добавилась конкатенция с st
..............
кроме того, закрывай графическое окно
  if InitGr then
  begin
....................
    ReadLn;          <--------- закрытие окна, но для закрытия придётся сделать активным консольное
    CloseGraph;
  end
  else
    WriteLn('idi ti');
................


А по поводу вывода текста - оформи весь текст ввода-вывода на английском. Судя по длине имён файлов, ты работаешь в Windows, а там с русификацией консольных кодировок просто бардак, в одних случаях берётся ANSI, а в других CP866. Причём всё зависит от индивидуальных настроек компьютера, использования CRT и чего-то ещё.

Ну если с английским - беда, то запиши транслитом. Это конечно не очень хорошо, но всё же лучше, чем иероглифы.

P.S. Для чтения текстового файла в память не обязательно создавать статические массивы - существуют готовые объекты - TStringList - которые очень удобно использовать для этих целей.маленький пример

P.P.S. Также, для оформления текста исходников, можно пользоваться автоматическими форматтерами. Здесь описание пары таких программ.
Гость
спасибо. попробую . отпишусь
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.