IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача на текстовые файлы, Помогите решить, завтра последний день пересдачи..!
MAD-GTX
сообщение 11.01.2008 20:20
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской
Реальное имя: Азамат

Репутация: -  0  +


Дан файл содержащий текст набранный заглавными английскими буквами. Провести частотный анализ текста, то есть указать (в %), сколько раз встречается та или иная буква. Помогите пожалуйста, препод двойку поставил за семестр и дал три задачи, одну нашел на форуме, одну решил сам. С этой никак не разберусь, ведь сначала надо подсчитать количество символов в тексте?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 11.01.2008 20:52
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


ну... например:
заводишь массив:
letters = array['A'..'Z'] of integer;

обнуляешь его.
пока не кончится файл, считываешь из него строки - S. далее - как-то так:
Код
for i:=1 to length(S) do
  letters[S[i]]:=letters[S[i]]+1;
sum:=sum+length(S);
//конец работы с файлом
for ch:='A' to 'Z' do
  writeln(ch, ':', ((letters[ch]/sum)*100):4:2, '%');

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
MAD-GTX
сообщение 11.01.2008 20:57
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской
Реальное имя: Азамат

Репутация: -  0  +


Спасибо! Но не очень понимаю, а как текст преобразовать в строку? Не, не могу разобраться, если можно поподробней и сильно не пинайте - я с 10 утра уже парюсь
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 11.01.2008 22:11
Сообщение #4


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Цитата(MAD-GTX @ 11.01.2008 19:57) *
а как текст преобразовать в строку?
прчитать из файла
read(fi, s);{fi -- файловая переменная }



--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
MAD-GTX
сообщение 11.01.2008 22:28
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской
Реальное имя: Азамат

Репутация: -  0  +


Кто нибудь может разобраться и решить эту задачу ну оочень надо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 11.01.2008 22:36
Сообщение #6


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


мисс_граффити тебе ее уже решила:)
осталось только немного дописать. Файлы тебе в помощь...


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
MAD-GTX
сообщение 11.01.2008 22:56
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской
Реальное имя: Азамат

Репутация: -  0  +


Ха! Разобрался, всем спс за ответы.

Program lab;
uses crt;
var letters:array[0..26] of word;
s:string;
t,all:word;
f:text;
begin
clrscr;
assign(f,'D:\File.txt');
reset (f);
read(f,s);
for t:=1 to length(s) do
if((upcase(s[t])>='A')and(upcase(s[t])<='Z')) then
begin
inc(letters[ord(upcase(s[t]))-ord('A')]);
inc(all);
end;
writeln('--------------------------------');
for t:=0 to 25 do
if(letters[t]>0)then
writeln(chr(t+ord('A')),': ',letters[t]:3,' ',letters[t]/all*100:3:0,'%');
Writeln;
writeln('all char: ',all);
readln;
end.



Сообщение отредактировано: MAD-GTX - 11.01.2008 23:14
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.01.2008 23:01
Сообщение #8


Гость






Строка
readln(s);
- просто лишняя... Без нее нет никаких ошибок, программа прекрасно работает (если файл состоит из одной строки... Если больше - то надо зациклить чтение строки из файла и подсчет количества букв...)
 К началу страницы 
+ Ответить 
MAD-GTX
сообщение 11.01.2008 23:17
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской
Реальное имя: Азамат

Репутация: -  0  +


Действительно обрабатывает только 255 символов! А как зациклить чтение из файла и подсчет букв? Ответьте пожалуйста!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 9:47
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"