Консультация № 169287
11.06.2009, 12:23
0.00 руб.
0 6 2
Здравствуйте!
Помогите пожалуйста написать программу. Работа со строками. Если переставлять, заменять.. и т.д со строками могу, но в этой задачке возникли трудности. Если есть хоть какие-то намеки, как решить, я приму, и разберусь.

Приложение:
(Златопольский, задача 9.159)*
Даны два слова. Напечатать только те буквы слов, которые встречаются в обоих словах только один раз. Например, если заданные слова "процессор" и "информация", то ответом должно быть: "пефмая".

Обсуждение

давно
Профессор
401888
1232
11.06.2009, 12:48
общий
это ответ
Здравствуйте, Reresana!
Один из вариантов решения в приложении.

Приложение:
uses crt;
var s1,s2,s:string;
i,k,j:byte;
begin
clrscr;
write('Первое слово: ');
readln(s1);
write('Второе слово: ');
readln(s2);
s:=s1+s2;{объединим строки}
i:=1;
while i<=length(s) do{нельзя цикл for, мы не знаем точно какой длины будет строка после всех поисков}
begin
k:=0;
for j:=length(s) downto i+1 do{идем от конца строки к текущему символу}
if s[j]=s[i] then{если встречаем такой же}
begin
k:=k+1;{считаем}
delete(s,j,1);{удаляем его}
end;
if k=0 then write(s[i]);{если ни разу такой дальше по строке не попался, выводим его}
i:=i+1;{проверяем следующий}
end;
readln;
end.
давно
Старший Модератор
31795
6196
11.06.2009, 13:31
общий
это ответ
Здравствуйте, Reresana.

В приложении программа без лишних переменных. Думаю с вводом строк разберетесь.
Можно ещё сократить S2, а в условие записать оператор вывода, т.е. строка будет формироватся на экране.
S3 сокращать нельзя, т.к. компилятор не пропускает такой вызов delete(copy(s1,2,length(s1)-1),pos(s1[ 1 ],copy(s1,2,length(s1)-1)),1) подпрограммы.
Удачи!

Приложение:
var
s1,s2:string;
s3:char;
begin
s1:='процессор информация';
s2:='';
while length(s1)>0 do
begin
s3:=s1[1];
delete(s1,1,1);
if s3 in['а'..'я'] then
if pos(s3,s1)=0 then s2:=s2+s3;
while pos(s3,s1)>0 do
delete(s1,pos(s3,s1),1);
end;
write('Result:=',s2);
readln;
end.
5
Спасибо вам большое за ответ! По совету- буду учиться! :)
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
11.06.2009, 13:50
общий
Что тут еще сказать? Спасибо.
Вопрос к Юрию Борисовичу.
Я тут разбираю ваш код программы, и попрошу объяснить мне:

while i<=length(s) do{нельзя цикл for, мы не знаем точно какой длины будет строка после всех поисков}
begin
k:=0;
for j:=length(s) downto i+1 do{идем от конца строки к текущему символу}
if s[j]=s[i] then{если встречаем такой же}
begin
k:=k+1;{считаем}
delete(s,j,1);{удаляем его}
end;

Так как я самоучусь, может поможете разобраться с ходом этого решения , length- понятно, возвращает длину строки. А почему k:=0, и почему k:=k+1. Я знаю, что возможно для вас это глупые вопросы , но всё же...
И еще, нашлась ошибка в самом учебнике, и как раз на этом конкретном примере: результат: пенфмая (а я думала, что неправильно написала), когда разобралась с программой, то заметила такую ошибку. Проверить можно, даже написать те же два слова на листочке, и разобраться...
давно
Профессор
401888
1232
11.06.2009, 13:58
общий
Это просто считаем совпадающие символы, и если их больше ноля, то этот символ нам не нужен, если ноль подойдет. Сразу скажу это очень неграмотный вариант решения, но я думал Вы его скорее поймете. По хорошему, лучше уж разбирайте код Константина Николаевича, не учитесь простым, но плохим решениям.
давно
Старший Модератор
31795
6196
11.06.2009, 14:02
общий
k:=0;k:=k+1;
Эти строки считают сколько раз встречается проверяемый символ в оставшейся строке.
ЕСли больше не встречается, т.к. k:=0, то выводится информация о нем.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
11.06.2009, 14:13
общий
[q=187336][/q]

Большое спасибо за всё! Буду учиться! (еще многому). Дело в том, что моей базы знаний на этот счет еще оч мало, я держусь за каждое решение, анализирую, и думаю, потом пробую писать свое решение (прежде перечитываю всё в книжках по данной теме, ищу подобное и т.д). Вот когда возникают какие-то трудности в определенной задаче, прошу уже помочь тут на сайте.
И очень рада, что люди здесь мне помогают.
Форма ответа