Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2015, 15:12   #1
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
Вопрос Строки...

Дан текст из слов, разделенных пробелами. Вывести на экран все слова, в которых все буквы разные. Если таких слов нет, выдать соответствующее сообщение.

Помогите пожалуйста...
manchester_alan вне форума Ответить с цитированием
Старый 17.01.2015, 15:16   #2
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
Помогите пожалуйста...
Помочь, или дать готовое решение? Если помочь, то чем?
Цитата:
Вывести на экран все слова
Сдаётся мне что это не делфи, а паскаль. Разделом ошиблись.

Последний раз редактировалось WinCoder; 17.01.2015 в 15:18.
WinCoder вне форума Ответить с цитированием
Старый 17.01.2015, 15:19   #3
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

наверно решение все таки, по нему разберусь...( У меня есть наподобие этой программа с решением про строки, но не получается переделать ее под эту... заранее благодарен...

Цитата:
Сообщение от WinCoder Посмотреть сообщение
Помочь, или дать готовое решение? Если помочь, то чем?

Сдаётся мне что это не делфи, а паскаль. Разделом ошиблись.
Ну это по делфи...

у меня есть решение оказывается, но по-моему не совсем правильное...

Код:
procedure Words(s:string;var x:mas;var n:byte);
var i,k:integer;
begin
k:=1; n:=0;
for i:=1 to length(s) do
if (s[i]in [' ', ',', '.']) then
begin
n:=n+1;
x[n]:=copy(s,k,i-k);
k:=i+1;
end;
end;

procedure OneBukva(s:string; x:mas; n:byte);
var i,j,n1:integer; f:boolean; d:mas;
begin
n1 :=0;
for i:=1 to n do
begin
f:=false;
for j:=1 to n1 do
if s[i]=s[j] then f:=true;
if f=false then
begin
n1:=n1+1;
d[n1]:=x[i];
end;
end;
for i:=1 to n1 do write(d[i],' ');
Writeln;
end;

Последний раз редактировалось Stilet; 17.01.2015 в 17:26.
manchester_alan вне форума Ответить с цитированием
Старый 17.01.2015, 15:35   #4
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
Сообщение от manchester_alan Посмотреть сообщение
наверно решение все таки, по нему разберусь...
За готовым решением идите в раздел фриланс. Ну или попросите модераторов перенести тему, чтоб не плодить темы.
WinCoder вне форума Ответить с цитированием
Старый 17.01.2015, 15:38   #5
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

а вот по этому коду не сможете помочь? Он выводит просто все слова из строки,а надо где буквы разные...
manchester_alan вне форума Ответить с цитированием
Старый 17.01.2015, 15:47   #6
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Ну прекрасно. Значит предложение на слова Вы можете разбить. Разбиваете предложение, и в цикле от первого до последнего слова делаете к примеру такой алгоритм. Начинаете отрезать от слова по одной букве через функцию Delete, и проверять, есть ли в слове ещё такие буквы через функцию pos. Если буквы есть, то выходим из цикла обработки слова ни чего не делая. Если до конца слова повторов не встретилось, то это слово искомое. Заносим его в буферный String. По окончанию процесса показываем, что накопилось в String. Это как один из вариантов. Так же можно воспользоваться функцией PosEx. Почитайте как она работает. Алгоритм будет почти таким же за исключением того, что не нужно применять Delete.
WinCoder вне форума Ответить с цитированием
Старый 17.01.2015, 17:32   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Он выводит просто все слова из строки,а надо где буквы разные...
Предлагаю следующую функцию:
Код:
function OneWrid(s:String):Boolean;
var j,i:integer;
begin
 for i:=1 to Length(s) do begin
  for j:=i+1 to Length(s) do if s[i]=s[j] then begin OneWrid:=false; exit;  end;
 end;
 OneWrid:=true;
end;
Разбиваешь строку на слова (судя по всему у тебя есть код) Потом в цикле применяешь эту функу:
Код:
 if OneWrid(d[i]) then В d[i] нет повторов
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2015, 17:42   #8
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Разбиваешь строку на слова (судя по всему у тебя есть код) Потом в цикле применяешь эту функцию:
Код:
 if OneWrid(d[i]) then В d[i] нет повторов
Код:
for j:=1 to n1 do
if s[i]=s[j] then f:=true;
if f=false then
вот здесь?
manchester_alan вне форума Ответить с цитированием
Старый 17.01.2015, 18:12   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вот здесь?
Что "здесь"?
Я твой вариант кода посчитал некорректным, поэтому предложил свой.
Вопрос: Разбить на массив слов ты сможешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2015, 18:12   #10
manchester_alan
Форумчанин
 
Регистрация: 07.01.2015
Сообщений: 231
По умолчанию

Цитата:
Сообщение от WinCoder Посмотреть сообщение
Ну прекрасно. Значит предложение на слова Вы можете разбить. Разбиваете предложение, и в цикле от первого до последнего слова делаете к примеру такой алгоритм. Начинаете отрезать от слова по одной букве через функцию Delete, и проверять, есть ли в слове ещё такие буквы через функцию pos. Если буквы есть, то выходим из цикла обработки слова ни чего не делая. Если до конца слова повторов не встретилось, то это слово искомое. Заносим его в буферный String. По окончанию процесса показываем, что накопилось в String. Это как один из вариантов. Так же можно воспользоваться функцией PosEx. Почитайте как она работает. Алгоритм будет почти таким же за исключением того, что не нужно применять Delete.
можете, пожалуйста, показать на коде, где именно что нужно, а то так не очень представляется мне..(
manchester_alan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Сделать в гриде строки выше, чтобы не растягивать строки до бесконечности kris__tina БД в Delphi 1 09.06.2011 15:31
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10