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

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

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

> Прописные буквы в строке, Как посчитать
Вася
сообщение 30.05.2007 16:52
Сообщение #1


Новичок
*

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

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


Как посчитать в строке количество каждой латинской и русской прописной (или строчной) буквы?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 16)
volvo
сообщение 30.05.2007 17:23
Сообщение #2


Гость






В поиске посмотреть... Надоело уже на ОДНО и ТО ЖЕ отвечать в трехтысячный раз!!! Если тебе лень набрать в поиске 3 слова, то почему другим не должно быть лень набивать несколько строк, ты не подумал? Подумай.
 К началу страницы 
+ Ответить 
Вася
сообщение 30.05.2007 20:11
Сообщение #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 
 К началу страницы 
+ Ответить 
Tan
сообщение 30.05.2007 20:15
Сообщение #4


Профи
****

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

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


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


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


Гость






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

Var
count: array[char] of integer;
...
for i := 1 to length(s) do inc(count[s[i]]);
(тебе же надо КАЖДОЙ, а ты считаешь ВСЕХ вместе... Вот с массивом - будет действительно каждой)
 К началу страницы 
+ Ответить 
Вася
сообщение 31.05.2007 7:25
Сообщение #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 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 31.05.2007 7:28
Сообщение #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я - 31.05.2007 7:38
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Вася
сообщение 31.05.2007 7:40
Сообщение #8


Новичок
*

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

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


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


Гуру
*****

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

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


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


Новичок
*

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

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


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


Гуру
*****

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

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


Тогда нужно забить все русские буквы в константный массив, типа
ruschars:array [1..33] of char=('А','Б', и т.д.,'Я');
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 31.05.2007 8:28
Сообщение #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
сообщение 31.05.2007 8:37
Сообщение #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 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 31.05.2007 8:43
Сообщение #14


Гуру
*****

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

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


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


Новичок
*

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

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


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


Новичок
*

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

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


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

Код

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


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


Гость






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

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

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

 



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