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

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

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

> Слова
bigglewood
сообщение 14.06.2006 14:29
Сообщение #1


Пионер
**

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

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


Помогите с задачкой ато не получается самому sad.gif
Дана последовательность слов, слова разделяются пробелом.
Нужно вывести на экран все согласные буквы которые входят только в одно слово.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов(1 - 12)
Bokul
сообщение 14.06.2006 22:41
Сообщение #2


Гуру
*****

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

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


uses crt;
type
main=array[1..40] of string[50];

procedure take_array(s:string; var mas:main; var n:integer);
var i:byte;
begin
n:=1;
for i:=1 to length(s) do
if (s[i]=' ') and (i<>length(s)) then
inc(n)
else
mas[n]:=mas[n]+s[i];
end;

function dif_letters(s:string):string;
var i,j:byte; buf:string;
begin
buf:='';
for i:=1 to length(s) do
if pos(s[i],buf)=0 then
buf:=buf+s[i];
dif_letters:=buf;
end;

procedure consonant(mas:main; n:integer);
const
con='zxcvbnmlkhgfdsqwrtp';
var i,j,temp:integer;
buf:string;
num:array[1..20] of integer;
begin
for i:=1 to 20 do
num[i]:=0;
for i:=1 to n do
begin
buf:=dif_letters(mas[i]);
for j:=1 to length(buf) do
begin
temp:=pos(buf[j],con);
if temp<>0 then
inc(num[temp]);
end;
end;

for i:=1 to 20 do
if num[i]=1 then
write(con[i],' ');
readln;
end;

var s:string;
mas:main;
n:integer;
begin
clrscr;
writeln('Enter string');
readln(s);
take_array(s,mas,n);
consonant(mas,n);
end.


Сообщение отредактировано: volvo - 2.11.2006 19:43


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 15.06.2006 11:32
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Вот мое решение, оно несколько короче.
const
c:string='bcdfghklmnpqrstvwxz';
z:set of char=[];

var
s:string;
A,B,T:set of char;
i,j:integer;

begin
Write('Type in a line: '); ReadLn(s);
A:=Z;
for i:=1 to Length© do begin
T:=Z;
for j:=1 to Length(s) do if c[i]=s[j] then
if c[i] in A then Include(B,c[i]) else Include(T,c[i])
else if s[j]=' ' then begin
A:=A+T;
T:=Z;
end;
A:=A+T
end;
A:=A-B;
for i:=1 to Length© do if c[i] in A then Write(c[i],' ')
end.

Любопытно, что сначала я прочел условие неверно, и написал программу, которая выдает все буквы, которые входят в слова по одному разу. Когда я собрался ее постить, я увидел ошибку. Так вот, в результате мне оказалось нужно только в одном месте заменить одну букву, чтобы решение стало соответствовать правильному условию smile.gif.
Кто-нибудь может сказать, какую именно? smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
bigglewood
сообщение 15.06.2006 15:42
Сообщение #4


Пионер
**

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

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


огромное спасибоsmile.gif
по поводу буквы сказать не могуsmile.gif

Сообщение отредактировано: bigglewood - 15.06.2006 16:02
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 15.06.2006 21:26
Сообщение #5


Гуру
*****

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

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


Цитата
которая выдает все буквы, которые входят в слова по одному разу

Тоесть при такой строке
Цитата
vcx ccx xc

результат должен быть
Цитата
x

?

Сообщение отредактировано: Bokul - 15.06.2006 21:30


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 15.06.2006 21:59
Сообщение #6


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Рузельтат должен быть v. Толко эта буква входит в одно слово (первое).
c и x есть во всех словах.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 15.06.2006 22:06
Сообщение #7


Гуру
*****

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

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


Цитата
Рузельтат должен быть v. Толко эта буква входит в одно слово (первое).

Так по условию должно быть... Я же спрашиваю какой результат должен быть по задаче lapp'a (ч. п. 3)


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 15.06.2006 23:40
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Bokul @ 15.06.2006 22:26) *

Тоесть при такой строке
vcx ccx xc
результат должен быть
x
?

нет, тут результат (по моему измененному условию) такой:
v x

То есть те буквы, которые встречаются в каждом слове 0 или 1 раз (но хотя бы одно вхождение в одном слове должно быть).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bokul
сообщение 16.06.2006 1:49
Сообщение #9


Гуру
*****

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

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


Цитата
То есть те буквы, которые встречаются в каждом слове 0 или 1 раз (но хотя бы одно вхождение в одном слове должно быть).

Ну тогда все просто
       for j:=1 to Length(s) do if c[i]=s[j] then
if c[i] in A then {надо поменять A на T}
Include(B,c[i]) else Include(T,c[i])
else if s[j]=' ' then begin



Сообщение отредактировано: volvo - 2.11.2006 19:43


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 16.06.2006 11:58
Сообщение #10


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


В общем какие-то разнолгасия .. пусть автор уточнит условие, вот мой вариант но первоначальному условию

uses crt;
const
sogl = 'wrtpssdfghjklzxcvbnm';
var
s : string = 'cxx xyfc xcavv';
c : set of char = [];
i, j, start : integer;

begin
i := 1;
while (i <= length(s)) do begin
while (s[i] = ' ') do inc(i);
if i <= length(s) then begin
start := i;
while (s[i] <> ' ') and (i <= length(s)) do inc(i);
for j := start to i do
if (pos(s[j], sogl) <> 0) then begin
if not(s[j] in c) and (pos(s[j], copy(s, 1, pred(start))) = 0)
and (pos(s[j], copy(s, succ(i), 255)) = 0) then
writeln(s[j]);
include(c, s[j]);
end;
end;
end;
end.


cxx xyfc xcavv


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
bigglewood
сообщение 16.06.2006 16:05
Сообщение #11


Пионер
**

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

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


из vx vkx vkt ответ должен быть t
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Pola
сообщение 16.06.2006 18:56
Сообщение #12


Новичок
*

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

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


Цитата
Дана последовательность слов, слова разделяются пробелом.
Нужно вывести на экран все согласные буквы которые входят только в одно слово


const
sogl: set of char = ['b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z'];
var
S:String;
len,p :integer;
res, slo, vto: set of char;
ch: char;
begin
writeln('Введите строку ');
readln(S);

len:=Length(S);
p:=1; {начнем с первого символа}
res:=[]; {один раз}
vto:=[]; {неск слов}

{пропустить пробелы в начале строки}
while (p<=len) and (S[p]=' ') do p:=p+1;

{выделяем слова пока не конец строки}
while (p<=len) do
begin
{смотрим слово до пробела или конца строки}
slo:=[];
while (p<=len) and (S[p]<>' ') do
begin
slo:=sogl*[S[p]] + slo; {складываем согласные}
p:=p+1; {к следующему символу}
end;

vto:=slo*res + vto; {встречалась - запоминаем}
res :=res + slo - vto; {те, что не встречались еще - добавляем} {встречалась - убираем}

{пропускаем пробелы, не выходя за пределы строки}
while (p<=len) and (S[p]=' ') do p:=p+1;
end;

{вывод}
if res=[] then writeln('нет таких')
else
for ch:='b' to 'z' do
if ch in res then write(ch,' ');
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 16.06.2006 19:05
Сообщение #13


Гость






lapp, как видишь, одна лишь твоя фраза привела к полному запутыванию участников и продолжению решения уже давным-давно решенной задачи... Я бы попросил тебя в следующий раз быть осмотрительнее... Если ты совершил ошибку - зачем ВСЕМ об этом знать? Да еще и гадать, какой же, интересно, символ был изменен ?...

Закрыто...
 К началу страницы 
+ Ответить 

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

 



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