forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Множества (http://forum.boolean.name/showthread.php?t=13741)

KingMaks 18.11.2010 23:17

Множества
 
Нужна помощь в написании алгоритма:

Дана непустая последовательность слов из строчных русских букв; между соседними
словами - запятая, за последним словом - точка. Напечатать в алфавитном порядке все согласные буквы,
которые входят только в одно слово; все глухие согласные буквы, которые не входят только в одно слово.


Есть строка.Проверил я её на наличие согласных букв, а как проверить повторяются ли эти буквы и как расположить их в алфавитном порядке?

baton4ik 18.11.2010 23:25

Ответ: Множества
 
Записываешь согласные буквы в массив, но перед записью смотришь, нет ли в массиве уже такой буквы. По поводу расположения - кури сортировку.

Randomize 18.11.2010 23:29

Ответ: Множества
 
Цитата:

Сообщение от KingMaks (Сообщение 169231)
Нужна помощь в написании алгоритма:

Дана непустая последовательность слов из строчных русских букв; между соседними
словами - запятая, за последним словом - точка. Напечатать в алфавитном порядке все согласные буквы,
которые входят только в одно слово; все глухие согласные буквы, которые не входят только в одно слово.


Есть строка.Проверил я её на наличие согласных букв, а как проверить повторяются ли эти буквы и как расположить их в алфавитном порядке?

Ну смотри. Пробегаешься по согласным буквам и каждую добавляешь в некий список. Перед добавлением каждой новой буквы осуществляешь проверку нет ли её в списке. После этого простая сортировка в алфавитном порядке.

Reks888 19.11.2010 00:15

Ответ: Множества
 
кроме того просто для справки, чем дальше в алфавит зайдешь в строчных буквах, тем больше код в ASCII.
тоесть Chr(a)=Chr(б)-1=...=Chr(я)-32

IGR 19.11.2010 00:24

Ответ: Множества
 
изначально создать масивчик гласных букв (их 10 да ??)
Пербирать все символы в твоем тексте пока не точка !!
Сравнивать каждый с каждым елементом в массиве гласных (момент определения вхождение объекта в некое множество), увеличиваем счетчик для текущего символа, если он есть в массиве гласных !!
Важно учесть тот факт что буква может быть джва раза в слове (или больше), соу когда нашел запятую нужно обозначить что переходиш в новое слово !! А если еще не перешол то естественно счетчик не инкрементируеш для символа !!
Надеюсь понятно !! Надеюсь есть решения попроще !! :крейзи:

pax 19.11.2010 00:25

Ответ: Множества
 
Собственно забыли о том, что:

Цитата:

Сообщение от KingMaks (Сообщение 169231)
Напечатать в алфавитном порядке все согласные буквы, которые входят только в одно слово;

Алгоритм такой:
Код:

1. Разбить строку на слова, используя разделитель (запятую).
2. Создать временный массив для хранения обработанных согласных.
2. Создать временный массив для хранения не повторяющихся согласных.
3. Цикл по словам.
4. Вложенный цикл по буквам в словах.
5. Если найдена согласная - проверить обработана она или нет. Если не обработана то:
    а) установить флаг повторяющейся согласной в false.
    б) вложенный цикл по словам, исключая текущее и обработанные, т.е. начиная со следующего.
    в) вложенный цикл по буквам в словах.
    г) если буква найдена, то ставим флаг, что идентичная согласная найдена в true, т.е. повторяется и прерываем циклы.
    д) по завершении двух последних циклов, если флаг повторяющейся согласной false, то добавляем ее в массив не повторяющихся согласных
    е) добавляем согласную в массив обработанных.
6. Сортировка согласных в массиве не повторяющихся сравнивая их коды символов.
7. Вывод на экран.

Вторая задача аналогична.

KingMaks 21.11.2010 22:59

Ответ: Множества
 
Что то не получается.

[i]
PHP код:

program 123;
const 
sogl=['Ў','ў','Ј','¤','¦','§','«','¬','*','а',',',' '];
        
soglgl=['Є','Ї','б','в','д','е','ж','з','и','й',',',' '];
        
type symbol=set of char;
var 
stroka,s,s1:string;
        
i,k:integer;
        
d:boolean;
begin
writeln
('Vvedite stroku st');
readln(stroka);
s:=' ';
s1:=' ';
d:=false;

//poisk soglasnih
for i:=1 to length(stroka) do if stroka[iin sogl then
begin
s
:=s+stroka[i];
end;
writeln(s);

writeln(s);
readln;
end.[/i



Вот допустим строка:
Помидор, стул, стол, бревно, бить.
После пропуска в программе выходит:
мдр, л, л, брвн, б.
Как же мне оставить только те что повторяются лишь в одном слове?
в данном случае:
мд.

столько всего уже перепробовал и не выходит.


Часовой пояс GMT +4, время: 15:20.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot