![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Вася |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Как посчитать в строке количество каждой латинской и русской прописной (или строчной) буквы?
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
В поиске посмотреть... Надоело уже на ОДНО и ТО ЖЕ отвечать в трехтысячный раз!!! Если тебе лень набрать в поиске 3 слова, то почему другим не должно быть лень набивать несколько строк, ты не подумал? Подумай.
|
Вася |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Извини меня пожалуйста, я совсем не подумал над этим, но теперь я постараюсь исправится. Короче у меня теперь есть один вариант:
Код // для русских букв 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); Но мне он не совсем подходит. Ты не мог ли мне сказать как обойтись без множеств? |
Tan |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 559 Пол: Мужской Реальное имя: Бруно Репутация: ![]() ![]() ![]() |
сделай массив из русских и латинских букв и сравнивай с его элементами, а почему множества не годятся ?
-------------------- Цитата Imagination is more important than knowledge. Albert Einstein |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата Ты не мог ли мне сказать как обойтись без множеств? Вот так, например...Var
count: array[char] of integer;
...
for i := 1 to length(s) do inc(count[s[i]]);
(тебе же надо КАЖДОЙ, а ты считаешь ВСЕХ вместе... Вот с массивом - будет действительно каждой) |
Вася |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я понял как это сделать для каждой прописной латинской, но что мне делать с русскими?
Код var count1: array ['A'..'Z'] of integer; ... for i := 1 to length(s) do count1[s[i]]:=inc(count1[s[i]]); ... Добавлено через 2 мин. Я и сам был не против множеств, но всё дело в преподе. |
Ozzя |
![]()
Сообщение
#7
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
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я - |
Вася |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я так пробовал с русскими так помоему нельзя. С ними надо как-то по другому. Вопрос: как?
|
Ozzя |
![]()
Сообщение
#9
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
Заглавные русские буквы в альтернативной кодировке ASCII лежат единым блоком. А вот строчные, действительно с разрывом.
Ты пробовал уже? Что именно не получается? |
Вася |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну если в ASCII русские прописные лежат единым блоком, то я надеюсь, что препод ко мне не придерётся. Знаете ли у него всегда один убийственный аргумент, что программ должна работать при любой кодировке (даже не существующей), но к латинским в отличии от русских у него таких претензий нет. Итак если там всё нормально я сейчас доделаю программу и пойду её сдавать. И всё же скажите мне, с русскими никак по другому не получится? Заранее всем спасибо.
|
Ozzя |
![]()
Сообщение
#11
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
Тогда нужно забить все русские буквы в константный массив, типа
ruschars:array [1..33] of char=('А','Б', и т.д.,'Я'); |
volvo |
![]()
Сообщение
#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;
...
|
klem4 |
![]()
Сообщение
#13
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата(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; ![]() а при таком раскладе ужасный range checking error мы разьве не получим ?! Да это ведь вообще компилироваться не будет! -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Ozzя |
![]()
Сообщение
#14
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
klem4
![]() |
Вася |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ты прав сейчас действительно учат так. Препод говорит, что случаи с латинскими и русскими мы должны рассматривать отдельно. Интересно, что он мне скажет на твоё предложение. Лично мне оно нравится (всё гениальное просто).
|
Вася |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 27 Пол: Мужской Репутация: ![]() ![]() ![]() |
Так, если делать твоим простым способом, то всё прекрасно до тех пор пока не возникает один вопрос: как вывести теперь мне кол-во букв в порядке частоты появления? И ещё я не понимаю почему вот здесь 0, а не 1?
Код ... var count: array[0 .. len] of integer; ... |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Ноль там - потому, что если pos НЕ найдет букву в строке, то вернется 0... В нулевой ячейке будет храниться общее количество символов, НЕ присутствующих в строке alpha
Цитата всё прекрасно до тех пор пока не возникает один вопрос: как вывести теперь мне кол-во букв в порядке частоты появления Индексная сортировка массива Count тебе поможет... Кстати, вот это надо было в задании указывать СРАЗУ, а не теперь... И этому тоже учат? Сначала создать себе сложности, а потом их успешно преодолевать? В общем, пока не будет точного задания, чтобы потом ни на миллиметр (!!!) от него не надо было отступать - я на вопросы в этой теме больше не отвечаю... "Сделай то, не знаю что" - это на форум телепатов... |
![]() ![]() |
![]() |
Текстовая версия | 21.04.2025 15:53 |