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

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

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

> Прошу помочь с исправлением ошибок в программе, Для каждого символа заданного текста указать его относительную частоту
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Женский

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


Здравствуйте. Дана задача : Для каждого символа заданного текста указать его относительную частоту появления в тексте. Построить соответствующую диаграмму. Сообщение об одном символе должно печататься не более одного раза. Вот мой черновик. программа читает текст из файла, который может состоять из любого количества символов(английские , русские буквы, всевозможные знаки препинания и все это в несколько строк), выводить нужно только символы-буквы. всё шло прекрасно до того момента как текст состоял из двух-трёх строк, но если читать ,к примеру, полноценное стихотворение, то начинаются ошибки(выводит несколько раз сообщение об одинаковых символах, некоторые буквы не выводит вовсе, неправильно считает) и как мне уже подсказали формула по которой считается относительная частота не верна(.до диаграммы дело не доходит так понимаю, что смысла нет за неё браться пока происходят вот такие косяки.. Прошу посмотреть программу и помочь с выявлением ошибок

 
Program chast;
uses crt;
var t: text;
s: string;
a: array [0..255] of integer;
k, b, i, max:integer;
BEGIN clrscr;
k:=0;
assign(t,'int.pas');
reset(t);
while not (eof(t)) do
begin

readln(t,s);
for i:=1 to length(s) do
begin
inc(k);
case ord(s[i]) of 97..122,224..255:inc(a[ord(s[i])]);
65..90,128..159:begin
s[i]:=chr(ord(s[i])+32);
inc(a[ord(s[i])]);
end;
end;
end;

writeln('Относительная частота повторений символов в тексте');
writeln;
max:=0;
for i:=32 to 255 do
if a[i]<>0 then begin
writeln(chr(i),'-','частота',(a[i]/100*k): 3 :2,'',' % ',
' встречается в тексте ',a[i],' раз(а)');
if a[i]>max then begin
max:=a[i] ;
b:=i
end;
end;
end;
writeln;
writeln;
writeln('всего символов - ',k, ' больше всего встречается-',chr(b),' ', max,' раз(а)');
close(t);
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Знаток
****

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

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


Я так понимаю, что на каком-то форуме ты уже побывал.

Если выполняешь самостоятельно, то разберёшься.

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

2. Действительно, странно как-то ты считаешь относительную частоту. Посчитай появление каждого символа из требуемого диапазона в тексте. Потом и выводи результат.
Код
  if s[i] in ['a'..'z', 'A'..'Z', 'а'..'я', 'А'..'Я'] then {здесь не вполне корректно задан русский алфавит - подправишь сам}
    inc(a[ord(s[i])]);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Женский

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


[quote name='Федосеев Павел' date='14.04.2013 18:52' post='161990']
Я так понимаю, что на каком-то форуме ты уже побывал.

Если выполняешь самостоятельно, то разберёшься.

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

2. Действительно, странно как-то ты считаешь относительную частоту. Посчитай появление каждого символа из требуемого диапазона в тексте. Потом и выводи результат.
Код
  if s[i] in ['a'..'z', 'A'..'Z', 'а'..'я', 'А'..'Я'] then {здесь не вполне корректно задан русский алфавит - подправишь сам}
    inc(a[ord(s[i])]);

[/quote]

интересная штука получилось, читая Ваш совет, а именно
Код
  if s[i] in ['a'..'z', 'A'..'Z', 'а'..'я', 'А'..'Я'] then
    inc(a[ord(s[i])]);

[/quote]
думала сначала сделать так
Код
  if s[i] in ['a'..'z'] then inc(a[ord(s[i])]);
else                       {разделила потому что большие буквы нужно преобразовать в маленькие}
if s[i] in ['A'..'Z'] then begin
                                s[i]:=chr(ord(s[i])+32);
                                inc(a[ord(s[i])]);
                                 end;

либо я чего то не допонимаю либо я все-таки чего то недопонимаю, так как если разбивать , то у меня не считает "а", так же как и в моем изначальном варианте а малую программа не считала вообще. НО если пишу
Код
  if s[i] in ['a'..'z'] then
    inc(a[ord(s[i])]);
, то мало того что все считает, она даже большие считает и на экран выдает все в виде малых букв.( это по поводу латинских букв, с русскими пока не делаю)
это конечно великолепно что так получается,НО я не понимаю почему она считает и большие и малые, если я большие даже не пишу в список?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
student___   Прошу помочь с исправлением ошибок в программе   14.04.2013 18:00
Федосеев Павел   Я так понимаю, что на каком-то форуме ты уже побыв…   14.04.2013 21:52
student___   Я так понимаю, что на каком-то форуме ты уже побы…   14.04.2013 22:41
Федосеев Павел   Да-а-а, что-то я запамятовал о различии кодов проп…   14.04.2013 23:21
student___   мне кажется так будет проще for i := 1 to len…   15.04.2013 0:08
Федосеев Павел   Прога твоя - решай сама. Но твой вариант гораздо н…   15.04.2013 0:16
student___   такой вопрос. Чтобы подсчитать относительную часто…   15.04.2013 0:30
Федосеев Павел   На общее количество символов в тексте. Но символов…   15.04.2013 0:43
student___   не могу понять как это реализовать. все символу по…   15.04.2013 0:46
Федосеев Павел   Добавь в начале программы обнуление элементов масс…   15.04.2013 1:38
student___   мне еще диаграмму к ней писать.. Добавлено через …   15.04.2013 1:51
Федосеев Павел   Чтобы уберечься от неожиданных результатов при зап…   15.04.2013 2:06
student___   и на счет MyABC. первый раз вижу, не разу этого не…   15.04.2013 2:06
Федосеев Павел   Файл закрывается потому, что завершился кусок кода…   15.04.2013 3:36
student___   Спасибо Вам большое. буду пробовать   15.04.2013 11:16


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

 





- Текстовая версия 8.09.2025 20:16
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name