![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
bigglewood |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 55 Пол: Мужской Репутация: ![]() ![]() ![]() |
Помогите с задачкой ато не получается самому
![]() Дана последовательность слов, слова разделяются пробелом. Нужно вывести на экран все согласные буквы которые входят только в одно слово. |
Bokul |
![]() ![]()
Сообщение
#2
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
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 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Вот мое решение, оно несколько короче.
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(c) 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(c) do if c[i] in A then Write(c[i],' ')
end.
Любопытно, что сначала я прочел условие неверно, и написал программу, которая выдает все буквы, которые входят в слова по одному разу. Когда я собрался ее постить, я увидел ошибку. Так вот, в результате мне оказалось нужно только в одном месте заменить одну букву, чтобы решение стало соответствовать правильному условию ![]() Кто-нибудь может сказать, какую именно? ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
bigglewood |
![]()
Сообщение
#4
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 55 Пол: Мужской Репутация: ![]() ![]() ![]() |
огромное спасибо
![]() по поводу буквы сказать не могу ![]() Сообщение отредактировано: bigglewood - 15.06.2006 16:02 |
Bokul |
![]() ![]()
Сообщение
#5
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата которая выдает все буквы, которые входят в слова по одному разу Тоесть при такой строке Цитата vcx ccx xc результат должен быть Цитата x ? Сообщение отредактировано: Bokul - 15.06.2006 21:30 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
klem4 |
![]()
Сообщение
#6
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Рузельтат должен быть v. Толко эта буква входит в одно слово (первое).
c и x есть во всех словах. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Bokul |
![]()
Сообщение
#7
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата Рузельтат должен быть v. Толко эта буква входит в одно слово (первое). Так по условию должно быть... Я же спрашиваю какой результат должен быть по задаче lapp'a (ч. п. 3) -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
Lapp |
![]()
Сообщение
#8
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Тоесть при такой строке vcx ccx xc результат должен быть x ? нет, тут результат (по моему измененному условию) такой: v x То есть те буквы, которые встречаются в каждом слове 0 или 1 раз (но хотя бы одно вхождение в одном слове должно быть). -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Bokul |
![]()
Сообщение
#9
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата То есть те буквы, которые встречаются в каждом слове 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 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
klem4 |
![]()
Сообщение
#10
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
В общем какие-то разнолгасия .. пусть автор уточнит условие, вот мой вариант но первоначальному условию
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";'
|
bigglewood |
![]()
Сообщение
#11
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 55 Пол: Мужской Репутация: ![]() ![]() ![]() |
из vx vkx vkt ответ должен быть t
|
Pola |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Женский Репутация: ![]() ![]() ![]() |
Цитата Дана последовательность слов, слова разделяются пробелом. Нужно вывести на экран все согласные буквы которые входят только в одно слово 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.
|
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
lapp, как видишь, одна лишь твоя фраза привела к полному запутыванию участников и продолжению решения уже давным-давно решенной задачи... Я бы попросил тебя в следующий раз быть осмотрительнее... Если ты совершил ошибку - зачем ВСЕМ об этом знать? Да еще и гадать, какой же, интересно, символ был изменен ?...
Закрыто... |
![]() ![]() |
![]() |
Текстовая версия | 17.07.2025 7:25 |