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

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

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

> множество, вывести согл. буквы
сообщение
Сообщение #1


Новичок
*

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

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


вывести согласные буквы, которые встречаются во всех нечетных словах и не встречаются во всех четных.

program sogl_v_ne4_slovax;

{$APPTYPE CONSOLE}

uses
SysUtils,
windows;

type
TElem=string;
Tslov=set of char;

function PoiskSogl (slovo: string): boolean;// смотрит, есть ли в слове согл. буквы
var
Mn: Tslov;
i,l: integer;
begin
result:=false;
Mn:=[];
Mn:=['б','в','г','д','ж','з','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ','ъ','ь','Б','В','Г','Д','Ж','З','К','Л','М','Н','П','Р','С','Т','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ь'];
i:=1;
l:=length(slovo);
while (i<=l) do
begin
if slovo[i] in Mn then
begin
result:=true;
inc(i);
end
else
inc(i);
end;
end;
const
n=10;
procedure PrintNechBykv (slovo: string);
i,j,l: integer;
nomer: integer;
f: boolean;
Mn: Tslov;
A: array [1..n] of integer;
begin
i:=1;
j:=1;
l:=length(slovo);
nomer:=0;// запоминаем номер слова
f:=true;
Mn:=[];
Mn:=['б','в','г','д','ж','з','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ','ъ','ь','Б','В','Г','Д','Ж','З','К','Л','М','Н','П','Р','С','Т','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ь'];
while i<=l do
begin
while (slovo[i]= ' ') and (i<=l) do inc(i);
while (slovo[i]<>' ') and (i<=l) do inc(i);
begin
inc(nomer);
A[j]:=nomer;
inc(j);
end;
end;
end;


var
slovo: string;
simvol: char;
begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
slovo:='';
writeln('напишите текст, точка- конец');
read(simvol);
if simvol='.' then
begin
writeln('слов нет');
readln;
readln;
exit
end
else
begin
while simvol<> '.' do
begin
slovo:=slovo+simvol;
read(simvol)
end;
end;
PoiskSogl(slovo);
writeln('согл. буквы, встречающиеся во всех нечетных словах и отсутствующие в четных');
PrintNechBykv(slovo);
readln;
readln
end.


никак не могу придумать алгоритм, который исках бы буквы. Я предполагал, что сначала пронумерую слова все, занесу их в массив, а потом каждую букву буду сравнивать со словами со всеми в 1 цикле и смотреть, условие задачи выполняется или нет. Занести все в множество будет не правильным. Или у меня заведомо неправильный подход к решению?

Добавлено через 11 мин.
написал код, который выводит все согл. буквы в нечетных словах. Хотел по подобию сделать, но не могу до ума до вести. И может этот код вообще очень громоздкий и не рациональный и нужен более простой путь к решению? помогите пожалуйста понять.

program pe4at_sogl_v_ne4_slovah;

{$APPTYPE CONSOLE}

uses
SysUtils,windows;

type
TElem=string;
Tslov=set of char;

function PoiskSogl (slovo: string): boolean;//смотрим, есть ли в слове согл. буквы
var
Mn: Tslov;
i,l: integer;
begin
result:=false;
Mn:=[];
Mn:=['б','в','г','д','ж','з','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ','ъ','ь','Б','В','Г','Д','Ж','З','К','Л','М','Н','П','Р','С','Т','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ь'];
i:=1;
l:=length(slovo);
while (i<=l) do
begin
if slovo[i] in Mn then
begin
result:=true;
inc(i);
end
else
inc(i);
end;
end;

procedure PrintNechBykv (slovo: string);//печатаем буквы согл., пропуская четные слова.
var
i,j,l: integer;
nomer: integer;
f: boolean;
Mn: Tslov;
MnBykv: Tslov;
begin
i:=1;
l:=length(slovo);
nomer:=0;// номер слова
f:=true;
MnBykv:=[];
Mn:=[];
Mn:=['б','в','г','д','ж','з','к','л','м','н','п','р','с','т','ф','х','ц','ч','ш','щ','ъ','ь','Б','В','Г','Д','Ж','З','К','Л','М','Н','П','Р','С','Т','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ь'];
while i<=l do
begin
while (slovo[i]= ' ') and (i<=l) do inc(i);//пропускаем пробелы
while (slovo[i]<>' ') and (i<=l) do
if (slovo[i] in Mn) and (nomer mod 2 = 0) then {последнее усл. ставим, что бы в мн-во не вкл. буквы с четных слов}
begin
MnBykv:=MnBykv+[slovo[i]];
inc(i)
end
else inc(i);
inc(nomer);
if (nomer mod 2 <> 0) and PoiskSogl(slovo) then
begin
for j:=1 to 255 do // проверяем по табл. ASCII соответствующий номер символа
begin
if chr(j) in MnBykv then write(chr(j):2);
end;
f:=false;
MnBykv:=[];//опустошаем мн-во, что бы при выводе старые буквы не повторялись с новыми
end;
if f then writeln ('нет');
end;
end;




var
slovo: string;
simvol: char;
begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
slovo:='';
writeln('введите текст, точка - конец');
read(simvol);
if simvol='.' then
begin
writeln('слов нет');
readln;
readln;
exit
end
else
begin
while simvol<> '.' do
begin
slovo:=slovo+simvol;
read(simvol)
end;
end;
PoiskSogl(slovo);
writeln('согл. буквы в нечетных словах');
PrintNechBykv(slovo);
readln;
readln
end.


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

Сообщений в этой теме


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

 





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