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

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

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

 
Closed Topic Открыть новую тему 
> Слова
сообщение
Сообщение #1


Пионер
**

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

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


Помогите с задачкой ато не получается самому sad.gif
Дана последовательность слов, слова разделяются пробелом.
Нужно вывести на экран все согласные буквы которые входят только в одно слово.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

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

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


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

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


Гуру
*****

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

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


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

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

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

?

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


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


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

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

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


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


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


Гуру
*****

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

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


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

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


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


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

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

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


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

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

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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


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


Пионер
**

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

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


из vx vkx vkt ответ должен быть t
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






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

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

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

 




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