Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите решить задачу с строками!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
KolDun
Дан текстовый файл. Какой буквой чаще всего начинаются слава данного текста.Ответ должен быть записан в другом текстовом файле.

Ну с файлами я справлю тока прошу помочь с:
Какой буквой чаще всего начинаются слава данного текста.

Помогите пожалуйста сильно парюсь. blink.gif
Altair
Мое предложение такое:
создаем массив из 26 эл-тов (кол-во букв).
Писимвольно читаем файл, если встечаем пробел, то следующую букву смотрим и увеличиваем содержимое нужной ячейки массива. (например встретилась буква A, тогда 1 эл-т массива увеличиваем.)
Потом просто смотрим, в какой ячейке массива больше значение.
--------

Это если в условии не сказанно, что буквы могут быть кирилические и заглавные.
KolDun
Можно кодом записать пожалуйста так как в строках я 0 =(
HelpAusHeaven
Цитата(KolDun @ 18.06.04 4:17)
Дан текстовый файл. Какой буквой чаще всего начинаются слава данного текста.Ответ должен быть записан в другом текстовом файле.

Ну с файлами я справлю тока прошу помочь с:
Какой буквой чаще всего начинаются слава данного текста.

Помогите пожалуйста сильно парюсь.  blink.gif

Свои типы данных вводить можно?

Вообще можно и без них, чистой комбинаторикой, но получится двумерная голимотья страшно жрущая ресурсы машины))) хотя человеку это не заметно...
APAL
Цитата(Oleg_Z @ 18.06.04 8:09)
Писимвольно читаем файл, если встечаем пробел, то следующую букву смотрим и ....

Не забудь про первый символ - перед ним нет пробела!
А также проверка переноса на предидущей строке...
BlackShadow
Если без излишеств, то вариант предложенный Олегом выглядит примерно так:
Код

Const
 Separators=[' ',',','.','!','?',':',';'];
Var
 Count:Array['a'..'z'] Of Integer;
 c:Char;
 Max:Integer;
 MaxC:Char;
 f:File Of Char;
Begin
 For c:='a' To 'z' Do
   Count[c]:=0;
 Assign(f,'In.Txt');
 Reset(f);
 While Not Eof(f) Do
 Begin
   While Not Eof(f) Do
    Begin
      Read(f,c);
      If Not (c In Separators) Then
         Break;
    End;
    If Not (c In Separators) Then
      Inc(Count[c]);
    While Not Eof(f) Do
    Begin
      Read(f,c);
      If c In Separators Then
         Break
    End
 End;
 Close(f);
 Max:=Count['a'];
 MaxC:='a';
 For c:='a' To 'z' Do
    If (Count[c] > Max) Then
    Begin
       Max:=Count[c];
       MaxC:=c
    End;
 Assign(f,'Out.Txt');
 ReWrite(f);
 Write(f,MaxC);
 Close(f)
End.

Или что-то похожее...
APAL
А вот мой вариант - вроде даже покороче будет.... rolleyes.gif
Код
Var
 f0,f : Text;
 St,S : String;
 i    : Byte;
 m    : Array[1..30] of Word;
function IntToStr(j: Longint): String;
var
Sa: string[11];
begin
Str(j, Sa);
IntToStr := Sa;
end;
Begin
 If ParamCount<1 then halt else Assign(f0,ParamStr(1));
 Assign(f,'!Result.txt');
 Reset(f0);
 s:=''; For i:=1 to 30 do m[i]:=0;i:=1;
 While Not EOF(f0) do
 Begin
   Readln(f0,St);
   While Length(St)>0 do
     If St[1]=' ' then Delete(St,1,1)
       else
       Begin
         If Pos(UpCase(St[1]),S)=0 then
         Begin
           S:=S+UpCase(St[1]);
           Inc(m[Length(S)]);
         End
           else Inc(m[Pos(UpCase(St[1]),S)]);
         While (St[i]<>' ') and (i<Length(St)) do Inc(i);
         Delete(St,1,i);
         i:=1;
       End;
 End;
 Close(f0);
 ReWrite(f);
 For i:=1 to Length(s) do Writeln(f,s[1]+' = '+IntToStr(m[i]));
 Close(f);
End.
KolDun
Цитата
Const
Separators=[' ',',','.','!','?',':',';'];
Var
Count:Array['a'..'z'] Of Integer;
c:Char;
Max:Integer;
MaxC:Char;
f:File Of Char;
Begin
For c:='a' To 'z' Do
Count[c]:=0;
Assign(f,'In.Txt');
Reset(f);
While Not Eof(f) Do
Begin
While Not Eof(f) Do
    Begin
      Read(f,c);
      If Not (c In Separators) Then
      Break;
    End;
    If Not (c In Separators) Then
      Inc(Count[c]);
    While Not Eof(f) Do Выкидывает ERROR1: Invalid DOS function code.
    Begin
      Read(f,c);
      If c In Separators Then
      Break
    End
End;
Close(f);
Max:=Count['a'];
MaxC:='a';
For c:='a' To 'z' Do
    If (Count[c] > Max) Then
    Begin
    Max:=Count[c];
    MaxC:=c
    End;
Assign(f,'Out.Txt');
ReWrite(f);
Write(f,MaxC);
Close(f)
End.



Код предоставленный Apal вообще нечего не делает =( или мне так кажется =(
APAL
Цитата
Код предоставленный Apal вообще нечего не делает =( или мне так кажется =(


Еще как работает! Я тестировал.

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

Чтобы "делала":
В качестве параметра в программу передается имя входного файла. Если его нет - работа программы завершается. Если есть - она работает и результат помещает в файл !RESULT.TXT - его и смотри.


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

1. Если програмку откомпилировать на диск, т.е. получить запускаемый файл с расширением EXE , то параметр задается в командной строке.
Пример:
MYPROG.EXE InFile.txt
где InFile.txt - это и есть параметр

2. Если вы находитесь на стадии отладки программы и Вам нужно передать параметры в нее, то для этого используйте меню:
Run -> Parameters
в появившемся окошке вбейте нужные параметры. Если взять пример выше, то вбить следует InFile.txt.

Параметры отделяются друг от друга пробелом.
KolDun
Цитата
uses crt;
Var
f0,f : text;
St,S : String;
i    : Byte;
m    : Array[1..30] of Word;
function IntToStr(j: Longint): String;
var
Sa: string[11];
begin
Str(j, Sa);
IntToStr := Sa;
end;
Begin
If ParamCount<1 then halt else Assign(f0,'in.txt');
Assign(f,'in2.txt');
Reset(f0);
s:=''; For i:=1 to 30 do m[i]:=0;i:=1;
While Not EOF(f0) do
Begin
Readln(f,St);
While Length(St)>0 do
  If St[1]=' ' then Delete(St,1,1)
    else
    Begin
      If Pos(UpCase(St[1]),S)=0 then
      Begin
        S:=S+UpCase(St[1]);
        Inc(m[Length(S)]);
      End
        else Inc(m[Pos(UpCase(St[1]),S)]);
      While (St[i]<>' ') and (i<Length(St)) do Inc(i);
      Delete(St,1,i);
      i:=1;
    End;
End;
Close(f0);
ReWrite(f);
For i:=1 to Length(s) do Writeln(f,s[1]+' = '+IntToStr(m[i]));
Close(f);
End.


Програму я записал так.

В файле in.txt записанно:
Hwllow My wordld wholw things

По товим словам программа в файл In2.txt должна записать букву w.

Но этого не происходит sad.gif


Вышесказанными словами я не хочу обижать тебя и твой талант програмирование. и в предпоследнем топе я не имел ввиду что программа плохая так как она не работает у меня. Я сразу дописал что я что-то не так делаю, просто я програмирую не так уж долга и всех функций не знаю, и проект по Паскалю у меня большой это одно задание из 10 и на над ним я бился 2 дня прежде чем написать сюда.

Я не хочу сор и оскарблением, и не говорю что код полхой, просто у меня что-то не получается... sad.gif
KolDun
Цитата(APAL @ 28.06.04 22:55)
По поводу передачи в программу данных как параметры:

1. Если програмку откомпилировать на диск, т.е. получить запускаемый файл с расширением EXE , то параметр задается в командной строке.
Пример:
  MYPROG.EXE InFile.txt
где  InFile.txt  - это и есть параметр

2. Если вы находитесь на стадии отладки программы и Вам нужно передать параметры в нее, то для этого используйте меню:
Run -> Parameters
  в появившемся окошке вбейте нужные параметры. Если взять пример выше, то вбить следует InFile.txt.

Параметры отделяются друг от друга пробелом.

Спосибо заработало. Но хочу чтобы и твоя заработала.
APAL
Assign(f,'in2.txt'); исправь на Assign(f0,'in2.txt'); - это твоя ошибка

Здесь опечатка:
For i:=1 to Length(s) do Writeln(f,s[1]+' = '+IntToStr(m[i]));
замени на
For i:=1 to Length(s) do Writeln(f,s[i]+' = '+IntToStr(m[i])); - это моя ошибка

И т.к. ты задаешь имя входного файла жестко, то
If ParamCount<1 then halt else Assign(f0,'in.txt');
можно сократить до
Assign(f0,'in.txt'); - это оптимизация
APAL
Вот что у меня получилось в файле in2.txt для твоей строки "Hwllow My wordld wholw things":

Цитата
H = 1
M = 1
W = 2
T = 1



P.S.: Извини вспылил. smile.gif Я вобще миролюбивый!
Удачи тебе в изучении TP.

P.P.S.: Вывод в файл происходит сразу всех букв с указанием сколько раз каждая встречается. Ты сможешь сам написать поиск "самой частовстречающейся буквы"? Или надо помочь?
BlackShadow
KolDun, посмотрю дома. Завтра выложу.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.