Консультация № 182273
21.02.2011, 00:45
61.25 руб.
0 10 2
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Из слова программирование получите слова: гром, грамм, навар. (обыкновенный вывод этих слов не принимается)

Обсуждение

Неизвестный
21.02.2011, 03:28
общий
Здравствуйте! Вечером представлю свой вариант решения..Есть мысли...
Неизвестный
21.02.2011, 04:24
общий
а можно как нибудь до 8 утра? просто срочно надо.
давно
Профессор
401888
1232
21.02.2011, 05:47
общий
это ответ
Здравствуйте, Буянов Антон Иванович!
Вариант получения заданных слов с использованием строковых функций приведен в приложении.

Приложение:
uses crt;
var s,s1:string;
c:char;
i:byte;
begin
clrscr;
s:='программирование';
writeln('Исходное слово:');
writeln(s);
writeln('Сформированные слова:');
{копируем буквы 4 и 5, добавляем 3 и 7}
s1:=copy(s,4,2)+s[3]+s[7];
writeln(s1);
{копируем буквы с 4 по 8}
s1:=copy(s,4,5);
writeln(s1);
{копируем 5 и 6+ 12..14}
s1:=copy(s,5,2)+copy(s,12,3, получаем раван);
{переворачиваем слово}
for i:=1 to length(s1) div 2 do
begin
c:=s1[i];
s1[i]:=s1[length(s1)-i+1];
s1[length(s1)-i+1]:=c;
end;
writeln(s1);
readln
end.
Неизвестный
21.02.2011, 13:17
общий
это ответ
Здравствуйте, Буянов Антон Иванович!
Вот мой вариант решения вашей задачи.
Идея такая:
1)Функция search_lexem получает в качестве параметров исходное слово и слово, которое требуется получить.
2)Она ищет лексемы(буквы) в основном слове и если находит присутствие всех, то она принимает значение true
в противном случае false.

Спецификация функции search_lexem:
1)function search_lexem(s,s1:string):boolean;
2)Функция возвращает true, если слово s1 можно определить
в слове s путем поиска в слове s лексем слова s1, в противном случае функция возвращает false.
3)Входные парамаметры:s,s1;
Выходные параметры:нет.

Преимущества:
1)Не требуется знания расположения букв в исходном слове.
2)Работает с любыми словами в которых до 255 символов.
3)Если требуется вывод слова, то он лекго дописывается условием:
Код:
if search_lexem(s,s1) then
writeln(s1,'слово получено')
else
writeln(s1,'слово не получено');


Вот код:
Код:
program p182273;

function search_lexem(s,s1:string):boolean;
var i,j,k,h,g:byte;
tmp:string;
begin
k:=length(s);
h:=length(s1);
for i:=1 to h do
begin
for j:=1 to k do
begin
if s[j]=s1[i] then
begin
inc(g);
break;
end;
end;
end;
if g=h then
search_lexem:=true
else
search_lexem:=false;
end;

var s1_b,s2_b,s3_b:boolean;
begin
s1_b:=search_lexem('программирование','гром');
s2_b:=search_lexem('программирование','грамм');
s3_b:=search_lexem('программирование','навар');
writeln('первая проверка=',s1_b);
writeln('вторая проверка=',s2_b);
writeln('третья проверка=',s3_b);
end.


Тестовые данные:
Код:

s=программировани s1=гром
первая проверка=True

s=программировани s2=грамм
вторая проверка=True

s=программировани s3=навар
третья проверка=True


Все тестировал на ABC паскале. Если чтото не понятно, то пишите, поправлю!
Удачи!
Неизвестный
21.02.2011, 13:25
общий
Извините, что не в 8 утра. В это время я спал.
Неизвестный
21.02.2011, 16:55
общий
if s[j]=s1[i] then
begin
inc(g);
break;
end;

Приведенный участок кода виновник того, что функция будет возвращать true для пары ('програмирование', 'грамм') - первое слово намеренно написано с ошибкой :).
Или же задание требует уточнения - можно ли использовать одну букву несколько раз?
Неизвестный
21.02.2011, 17:08
общий
Ну указаний не было - какого рода пользователь введет слово...и с какой грамотностью это произойдет. Пусть автор вопроса уточнит задание и если что я подправлю код.
Неизвестный
21.02.2011, 17:10
общий
Даже если это и не требуется, но чтобы устранить эту коллизию я думаю нужно добавить массив, в котором в каждой ячейке будут номера символов, которые использовались....если программа пробегая по слову найдет букву, то она пусть сверяется с массивом этим и в зависимости от этого учитывает коллизию
Неизвестный
21.02.2011, 18:32
общий
Цитата: 324791
Ну указаний не было - какого рода пользователь введет слово...и с какой грамотностью это произойдет.
Вы правильно понимаете, что это задание не подразумевает проверку орфографии.
Цитата: 324791
Даже если это и не требуется, но чтобы устранить эту коллизию я думаю нужно добавить массив, в котором в каждой ячейке будут номера символов, которые использовались....если программа пробегая по слову найдет букву, то она пусть сверяется с массивом этим и в зависимости от этого учитывает коллизию
На мой взгляд, проще будет избавляться от букв в исходной слове - вы ведь его все равно передаете в функцию по значению.
Неизвестный
21.02.2011, 19:12
общий
Можно и так. Ждем указаний автора)
Форма ответа