Помогите решить задачу с строками! |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Помогите решить задачу с строками! |
KolDun |
18.06.2004 4:17
Сообщение
#1
|
Группа: Пользователи Сообщений: 5 Репутация: 0 |
Дан текстовый файл. Какой буквой чаще всего начинаются слава данного текста.Ответ должен быть записан в другом текстовом файле.
Ну с файлами я справлю тока прошу помочь с: Какой буквой чаще всего начинаются слава данного текста. Помогите пожалуйста сильно парюсь. |
Altair |
18.06.2004 7:09
Сообщение
#2
|
Ищущий истину Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Мое предложение такое:
создаем массив из 26 эл-тов (кол-во букв). Писимвольно читаем файл, если встечаем пробел, то следующую букву смотрим и увеличиваем содержимое нужной ячейки массива. (например встретилась буква A, тогда 1 эл-т массива увеличиваем.) Потом просто смотрим, в какой ячейке массива больше значение. -------- Это если в условии не сказанно, что буквы могут быть кирилические и заглавные. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
KolDun |
19.06.2004 15:46
Сообщение
#3
|
Группа: Пользователи Сообщений: 5 Репутация: 0 |
Можно кодом записать пожалуйста так как в строках я 0 =(
|
HelpAusHeaven |
21.06.2004 0:01
Сообщение
#4
|
Пионер Группа: Пользователи Сообщений: 57 Пол: Мужской Репутация: 0 |
Цитата(KolDun @ 18.06.04 4:17) Дан текстовый файл. Какой буквой чаще всего начинаются слава данного текста.Ответ должен быть записан в другом текстовом файле. Ну с файлами я справлю тока прошу помочь с: Какой буквой чаще всего начинаются слава данного текста. Помогите пожалуйста сильно парюсь. Свои типы данных вводить можно? Вообще можно и без них, чистой комбинаторикой, но получится двумерная голимотья страшно жрущая ресурсы машины))) хотя человеку это не заметно... -------------------- Рассылка: "Решение Вами Предложенных Задач На Языке PASCAL. Алгоритмы на PASCAL."
Подписка по e-mail: comp.soft.prog.pascal123-sub@subscribe.ru |
APAL |
21.06.2004 9:40
Сообщение
#5
|
Смотрю... Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
Цитата(Oleg_Z @ 18.06.04 8:09) Писимвольно читаем файл, если встечаем пробел, то следующую букву смотрим и .... Не забудь про первый символ - перед ним нет пробела! А также проверка переноса на предидущей строке... -------------------- |
BlackShadow |
21.06.2004 10:45
Сообщение
#6
|
Гость |
Если без излишеств, то вариант предложенный Олегом выглядит примерно так:
Код 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 |
21.06.2004 18:32
Сообщение
#7
|
Смотрю... Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
А вот мой вариант - вроде даже покороче будет....
Код 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 |
28.06.2004 18:49
Сообщение
#8
|
Группа: Пользователи Сообщений: 5 Репутация: 0 |
Цитата 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 |
28.06.2004 22:41
Сообщение
#9
|
Смотрю... Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
Цитата Код предоставленный Apal вообще нечего не делает =( или мне так кажется =( Еще как работает! Я тестировал. Я уверен, что такой вывод сделан из-за того, что "кто-то" не удосужился хотя бы разобраться как работает эта програмка. (а я думал мою "оригинальность" оценят - обидно) Чтобы "делала": В качестве параметра в программу передается имя входного файла. Если его нет - работа программы завершается. Если есть - она работает и результат помещает в файл !RESULT.TXT - его и смотри. P.S.: Действительно немного обидно. Что-то делаешь - думаешь вот, человеку помог, он чего то новое узнал, научился.... А оказывается человеку это и не особо нужно, ему бы побыстрее зачет получить... Сообщение отредактировано: APAL - 28.06.2004 22:43 -------------------- |
APAL |
28.06.2004 22:55
Сообщение
#10
|
Смотрю... Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
По поводу передачи в программу данных как параметры:
1. Если програмку откомпилировать на диск, т.е. получить запускаемый файл с расширением EXE , то параметр задается в командной строке. Пример: MYPROG.EXE InFile.txt где InFile.txt - это и есть параметр 2. Если вы находитесь на стадии отладки программы и Вам нужно передать параметры в нее, то для этого используйте меню: Run -> Parameters в появившемся окошке вбейте нужные параметры. Если взять пример выше, то вбить следует InFile.txt. Параметры отделяются друг от друга пробелом. -------------------- |
KolDun |
29.06.2004 0:43
Сообщение
#11
|
Группа: Пользователи Сообщений: 5 Репутация: 0 |
Цитата 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. Но этого не происходит Вышесказанными словами я не хочу обижать тебя и твой талант програмирование. и в предпоследнем топе я не имел ввиду что программа плохая так как она не работает у меня. Я сразу дописал что я что-то не так делаю, просто я програмирую не так уж долга и всех функций не знаю, и проект по Паскалю у меня большой это одно задание из 10 и на над ним я бился 2 дня прежде чем написать сюда. Я не хочу сор и оскарблением, и не говорю что код полхой, просто у меня что-то не получается... |
KolDun |
29.06.2004 0:46
Сообщение
#12
|
Группа: Пользователи Сообщений: 5 Репутация: 0 |
Цитата(APAL @ 28.06.04 22:55) По поводу передачи в программу данных как параметры: 1. Если програмку откомпилировать на диск, т.е. получить запускаемый файл с расширением EXE , то параметр задается в командной строке. Пример: MYPROG.EXE InFile.txt где InFile.txt - это и есть параметр 2. Если вы находитесь на стадии отладки программы и Вам нужно передать параметры в нее, то для этого используйте меню: Run -> Parameters в появившемся окошке вбейте нужные параметры. Если взять пример выше, то вбить следует InFile.txt. Параметры отделяются друг от друга пробелом. Спосибо заработало. Но хочу чтобы и твоя заработала. |
APAL |
29.06.2004 12:17
Сообщение
#13
|
Смотрю... Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
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 |
29.06.2004 12:18
Сообщение
#14
|
Смотрю... Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
Вот что у меня получилось в файле in2.txt для твоей строки "Hwllow My wordld wholw things":
Цитата H = 1 M = 1 W = 2 T = 1 P.S.: Извини вспылил. Я вобще миролюбивый! Удачи тебе в изучении TP. P.P.S.: Вывод в файл происходит сразу всех букв с указанием сколько раз каждая встречается. Ты сможешь сам написать поиск "самой частовстречающейся буквы"? Или надо помочь? Сообщение отредактировано: APAL - 29.06.2004 12:26 -------------------- |
BlackShadow |
29.06.2004 12:21
Сообщение
#15
|
Гость |
KolDun, посмотрю дома. Завтра выложу.
|
Текстовая версия | 15.06.2024 18:39 |