Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2009, 00:23   #1
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
Плохо какая из букв встречается в данной строке чаще

Здравствуйте Господа программисты! Подскажите процедуру, которая определяет какая буква встречается в данной строке чаще всего. А то я совершенно не знаю как этот поиск организовать Если можно то на Pascal

Последний раз редактировалось StudeHt; 11.04.2009 в 00:30.
StudeHt вне форума Ответить с цитированием
Старый 11.04.2009, 04:13   #2
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

Код:
var bukvi:array[0..255] of byte;
    x,i,maxI:byte;
    s:string;
begin
 readln(s);
 MaxI:=0;
 for i:=1 to length(s) do
  begin
   x:=ord(s[i]);
   inc(bukvi[x]);
   if bukvi[x]>bukvi[MaxI] then MaxI:=x;
  end;
 writeln(chr(MaxI));
 readln;
end.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 11.04.2009, 13:12   #3
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

Спасибо Min. Попытался использовать Ваш алгоритм в программе, но она выводит не то что нужно. Вот код:
Код:
type Mas=array[1..20] of string;

procedure InputData(var a:Mas; var n:integer);
var FileIn:text;
    NameFile:string;
begin
  write('Введите имя входного файла ');
  readln(NameFile);
  assign(FileIn,NameFile);
  {$I-}
  reset(FileIn);
  {$I+}
    if IOResult<>0 then
      begin
        writeln('Ошибка!Файл ',NameFile,' не найден!');
        readln;
        halt;
      end;
    n:=0;
    while not Eof(FileIn) do
      begin
        inc(n);
        readln(FileIn,a[n]);
      end;
  Close(FileIn);
end;

procedure FindWordInString(var S:string; var MaxI:byte);
var bukvi:array[0..255] of byte;
    x,i:byte;
begin
  MaxI:=0;
  for i:=1 to length(S) do
    begin
      x:=ord(S[i]);
      inc(bukvi[x]);
      if bukvi[x]>bukvi[MaxI] then
        MaxI:=x;
    end;
end;

procedure FindWordInMas(var a:Mas; n:integer);
var i:integer;
    MaxI:byte;
begin
  for i:=1 to n do
    FindWordInString(a[i],MaxI);
end;

procedure OutputData(a:Mas; n:integer);
var NameFile:string;
    FileOut:text;
    i:integer;
    MaxI:byte;
begin
  write('Введите имя выходного файла ');
  readln(NameFile);
  assign(FileOut,NameFile);
  rewrite(FileOut);
  for i:=1 to n do
    writeln(FileOut,chr(MaxI));
    Close(FileOut);
end;

var a:Mas;
    n:integer;
begin
  clrscr;
  InputData(a,n);
  FindWordInMas(a,n);
  OutputData(a,n);
end.
Помогите найти ошибку в коде
StudeHt вне форума Ответить с цитированием
Старый 11.04.2009, 18:33   #4
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

я так понял вам нужно из входного файла читать строки и записать в выходной файл наиболее часто встречающийся символ для каждой строки.... Обратите внимание на строчку MaxI:=0;. Это значение затирается в цикле и в процедуру ввода он даже не попадает. для неё у вас своя локальная MaxI, которая будет равна 0.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 11.04.2009, 18:57   #5
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

Если я правильно понял задание, то вы просто сами все усложнили.
И 2 замечания:
1. Не бойтесь использовать глобальные перменные, если это упростит код.
2. Локальные перменные у какой-либо функции сохраняют данные. И при повторном вызове их нужно сбрасывать.

Код:
var FileIn,FileOut:text;

procedure CreateInput;
var NameFile:string;
begin
 write('Введите имя входного файла:');
 readln(NameFile);
 assign(FileIn,NameFile);
 {$I-}
 reset(FileIn);
 {$I+}
  if IOResult<>0 then
   begin
    writeln('Ошибка! Файл ',NameFile,' не найден!');
    readln;
    halt;
   end;
end;

procedure CreateOutput;
var NameFile:string;
begin
 write('Введите имя выходного файла:');
 readln(NameFile);
 assign(FileOut,NameFile);
 rewrite(FileOut);
end;

function FindWordInString(S:string):char;
var bukvi:array[0..255] of byte;
    MaxI,x,i:byte;
begin
 for i:=0 to 255 do
  bukvi[i]:=0;
 MaxI:=0;
 for i:=1 to length(S) do
  begin
   x:=ord(S[i]);
   inc(bukvi[x]);
   if bukvi[x]>bukvi[MaxI] then
    MaxI:=x;
  end;
 FindWordInString:=chr(MaxI);
end;

var s:string;
begin
 CreateInput;
 CreateOutput;
 while not eof(FileIn) do
  begin
   readln(FileIn,s);
   writeln(FileOut,FindWordInString(s));
  end;
 Close(FileIn);
 Close(FileOut);
end.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 11.04.2009, 23:33   #6
Иван 883
Пользователь
 
Регистрация: 25.12.2008
Сообщений: 39
По умолчанию

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

Последний раз редактировалось Иван 883; 11.04.2009 в 23:35.
Иван 883 вне форума Ответить с цитированием
Старый 12.04.2009, 00:09   #7
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

Насчет глобальных переменных все верно. А задание было следующее: Определить, какая буква чаще всего встречается в заданном тексте. Указание: считайте данные из файла в массив. После этого выполните над ними преобразования и выведите результат в файл. Поискав по форуму я нашел код Sazary и попытался применить его в моем случае.
StudeHt вне форума Ответить с цитированием
Старый 12.04.2009, 00:14   #8
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

это стереотипы.... При разработке каких-либо серъёзных вещей (как правило в ООП) глобальные переменные использовать не рекомендуется, т.к. сложно затем куски кода и отдельные процедуры использовать в других проектах. Это так. Если вы создаёте класс для дальнейшего использования, то использование глобальных переменных невозможно. Именно поэтому они считаются "дурным тоном" на ряду с метками.
Данную же задачу можно отнести к "спортивному" программированию. И здесь использование глобальных переменных может значительно ускорить работу самой программы. А в спортивном программинге это главный критерий.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Старый 12.04.2009, 00:28   #9
Min
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 239
По умолчанию

если для всего текста, то вот (без глобалей))))):
Код:
type ar=array[0..255] of integer;

procedure CreateInput(var FileIn:text);
var NameFile:string;
begin
 write('Введите имя входного файла:');
 readln(NameFile);
 assign(FileIn,NameFile);
 {$I-}
 reset(FileIn);
 {$I+}
  if IOResult<>0 then
   begin
    writeln('Ошибка! Файл ',NameFile,' не найден!');
    readln;
    halt;
   end;
end;

procedure CreateOutput(var FileOut:text);
var NameFile:string;
begin
 write('Введите имя выходного файла:');
 readln(NameFile);
 assign(FileOut,NameFile);
 rewrite(FileOut);
end;

procedure FindWordInString(S:string; var MaxI:byte; var bukvi:ar);
var x,i:integer;
begin
 for i:=1 to length(S) do
  begin
   x:=ord(S[i]);
   inc(bukvi[x]);
   if bukvi[x]>bukvi[MaxI] then
    MaxI:=x;
  end;
end;

var s:string;
    FileIn,FileOut:text;
    MaxI:byte;
    bukvi:ar;
begin
 CreateInput(FileIn);
 CreateOutput(FileOut);
 MaxI:=0;
 while not eof(FileIn) do
  begin
   readln(FileIn,s);
   FindWordInString(s,MaxI,bukvi);
   writeln(MaxI);
  end;
 writeln(FileOut,chr(MaxI));
 Close(FileIn);
 Close(FileOut);
end.
Надо бы избавиться от привычки ставить многоточие.....
Min вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сколько раз в тексте встречается каждое слово. 08ekhiv1 Помощь студентам 2 11.03.2009 10:56
сколько раз заданное слово встречается в данной строке pascal1994 Помощь студентам 4 04.02.2009 08:41
сколько разних слово встречается в данной строке pascal1994 Помощь студентам 3 04.02.2009 04:16
Сколько раз встречается данное слово n1k1c4 Помощь студентам 4 13.12.2007 20:33
кол-во букв в строке символов (Си) Newman Помощь студентам 1 04.12.2007 02:19