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

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

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

 
 Ответить  Открыть новую тему 
> Прописные буквы в строке, Как посчитать
сообщение
Сообщение #1


Новичок
*

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

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


Как посчитать в строке количество каждой латинской и русской прописной (или строчной) буквы?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






В поиске посмотреть... Надоело уже на ОДНО и ТО ЖЕ отвечать в трехтысячный раз!!! Если тебе лень набрать в поиске 3 слова, то почему другим не должно быть лень набивать несколько строк, ты не подумал? Подумай.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Извини меня пожалуйста, я совсем не подумал над этим, но теперь я постараюсь исправится. Короче у меня теперь есть один вариант:
Код

// для русских букв
for i:=1 to length(s) do
if s[i] in ['А'..'Я','Ё'] then inc(j);
// для латинских букв
for i:=1 to length(s) do
if s[i] in ['A'..'Z'] then inc(j);

Но мне он не совсем подходит. Ты не мог ли мне сказать как обойтись без множеств?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

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

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


сделай массив из русских и латинских букв и сравнивай с его элементами, а почему множества не годятся ?


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
Ты не мог ли мне сказать как обойтись без множеств?
Вот так, например...

Var
count: array[char] of integer;
...
for i := 1 to length(s) do inc(count[s[i]]);
(тебе же надо КАЖДОЙ, а ты считаешь ВСЕХ вместе... Вот с массивом - будет действительно каждой)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


Я понял как это сделать для каждой прописной латинской, но что мне делать с русскими?
Код

var
  count1: array ['A'..'Z'] of integer;
...
for i := 1 to length(s) do
   count1[s[i]]:=inc(count1[s[i]]);
...


Добавлено через 2 мин.
Я и сам был не против множеств, но всё дело в преподе.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

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

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


var
count2: array ['А'..'Я'] of integer;
count1: array ['A'..'Z'] of integer;
...
for i := 1 to length(s) do
begin
count1[s[i]]:=inc(count1[s[i]]);
count2[s[i]]:=inc(count2[s[i]]);
end;


Сообщение отредактировано: Ozzя -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

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

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


Я так пробовал с русскими так помоему нельзя. С ними надо как-то по другому. Вопрос: как?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гуру
*****

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

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


Заглавные русские буквы в альтернативной кодировке ASCII лежат единым блоком. А вот строчные, действительно с разрывом.
Ты пробовал уже? Что именно не получается?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Ну если в ASCII русские прописные лежат единым блоком, то я надеюсь, что препод ко мне не придерётся. Знаете ли у него всегда один убийственный аргумент, что программ должна работать при любой кодировке (даже не существующей), но к латинским в отличии от русских у него таких претензий нет. Итак если там всё нормально я сейчас доделаю программу и пойду её сдавать. И всё же скажите мне, с русскими никак по другому не получится? Заранее всем спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

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

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


Тогда нужно забить все русские буквы в константный массив, типа
ruschars:array [1..33] of char=('А','Б', и т.д.,'Я');
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Вот объясни мне, почему ты все время разбиваешь русские и латинские символы? Это что, так теперь учат? Чтобы циклов больше было, что-ли? Или чтобы свалить тебя было легче?

const
len = 33 + 26;
alpha = 'АБВГДЕ...ЮЯABCDEF ... YZ'; { всего 33 + 26 символов }

var
count: array[0 .. len] of integer;
...
for i := 1 to length(s) do begin
inc(count[pos(s[i], alpha)]);
end;
...

 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Perl. Just code it!
******

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

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


Цитата(Ozzя)
var
count2: array ['А'..'Я'] of integer;
count1: array ['A'..'Z'] of integer;
...
for i := 1 to length(s) do
begin
count1[s[i]]:=inc(count1[s[i]]);
count2[s[i]]:=inc(count2[s[i]]);
end;


blink.gif

а при таком раскладе ужасный range checking error мы разьве не получим ?! Да это ведь вообще компилироваться не будет!


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гуру
*****

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

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


klem4
norespect.gif мне
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

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

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


Ты прав сейчас действительно учат так. Препод говорит, что случаи с латинскими и русскими мы должны рассматривать отдельно. Интересно, что он мне скажет на твоё предложение. Лично мне оно нравится (всё гениальное просто).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

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

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


Так, если делать твоим простым способом, то всё прекрасно до тех пор пока не возникает один вопрос: как вывести теперь мне кол-во букв в порядке частоты появления? И ещё я не понимаю почему вот здесь 0, а не 1?

Код

...
var
  count: array[0 .. len] of integer;
...
  


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Ноль там - потому, что если pos НЕ найдет букву в строке, то вернется 0... В нулевой ячейке будет храниться общее количество символов, НЕ присутствующих в строке alpha
Цитата
всё прекрасно до тех пор пока не возникает один вопрос: как вывести теперь мне кол-во букв в порядке частоты появления
Индексная сортировка массива Count тебе поможет...

Кстати, вот это надо было в задании указывать СРАЗУ, а не теперь... И этому тоже учат? Сначала создать себе сложности, а потом их успешно преодолевать? В общем, пока не будет точного задания, чтобы потом ни на миллиметр (!!!) от него не надо было отступать - я на вопросы в этой теме больше не отвечаю... "Сделай то, не знаю что" - это на форум телепатов...
 К началу страницы 
+ Ответить 

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

 





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