Паскаль.Строки

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Lange
Сообщения: 12
Зарегистрирован: 07 ноя 2009, 14:26
Откуда: Kazakhstan
Контактная информация:

Мне нужно написать программу на Паскале!Задание:Дана непустая последовательность слов из строчных букв;между соседними словами запятая,за последним словом точка.Напечатать в алфавитном порядке все звонкие согласные звуки,которые входят более чем в 1 слово.Задачу оформить с применением множеств и без применения множеств.С применением множеств я сделала,а вот без их применения никак не получается.Может подскажете хотя бы? :(
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

без применения множеств, это с массивом символов?
Изображение
Lange
Сообщения: 12
Зарегистрирован: 07 ноя 2009, 14:26
Откуда: Kazakhstan
Контактная информация:

Игорь Акопян писал(а):без применения множеств, это с массивом символов?

Я тоже так думаю,но никак не получается :confused:
Lange
Сообщения: 12
Зарегистрирован: 07 ноя 2009, 14:26
Откуда: Kazakhstan
Контактная информация:

Игорь Акопян писал(а):без применения множеств, это с массивом символов?

А вот так у меня получилось с применением множеств(работает):

[syntax='Pascal']uses crt;
var
s:string;
a,m:set of char;
l,p:integer;
c:char;
procedure vvod;
var
i:integer;
begin
writeln('Введите строку:');
i:=0;
repeat
i:=i+1;
read(s);
until s='.'
end;
begin
clrscr;
vvod;
a:=['b','v','g','d','z','l','m','n','r'];
for c:='b' to 'z' do
begin
l:=0;
p:=0;
m:=[];
repeat
l:=l+1;
if s[l]=',' then m:=[]
else;
if (s[l]=c)and(s[l]in a)and not(s[l]in m)then
begin
m:=m+[s[l]];
p:=p+1
end
else;
until (s[l]='.')or(p>1);
if p>1 then write(c,' ')
else
end;
readkey
end.[/syntax]
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

что-то мне кажется там не всё верно...
1. Слова разделяются пробелами и знаками препинания - множество симовлов-разделителей.
2. Идём по тексту, проверяя каждый символ на принадлежность к множеству звонких и не принадлежность к разделителям.
3. Если символ - разделитель - увеличиваем счётчик слов.
4. Если количество вхождений больше 1 запоминаем символ и идём дальше

Для массива придётся делать не проверку на вхождение в множество, а внутренний цикл по массиву согласных

ЗЫ. По коду - если ветка else пустая, то её лучше вообще не писать чтобы не сбивало
Изображение
Ответить