Модераторы: Poseidon
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> [Delphi] Простая задачка на строки, Строки 
:(
    Опции темы
Denwer
Дата 26.11.2007, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.6.2007
Где: Харьков

Репутация: нет
Всего: нет



Помогите плиз с задачкой на строки, 

Нужно вывести слово в котором первая буква ходит в него только ОДИН раз, 
если больше, то слово не выводиться. 

Пример:
тетрадь - выводиться;
анапа - не выводиться;

Задачку то я решил, но у меня выводяться слова
даже если первая буква входит в него больше двух раз.

Function TwoWord (var word: string) : boolean;
var i: integer;
first: string;
begin
Result := False;
first := word[1];
for i:=2 to Length(Word) do
if (Word[i] = first) then
Result := True;
end;

Вот моя функця. Подправьте плиз

PM WWW   Вверх
Alexeis
Дата 26.11.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
  Дата 27.11.2007, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 1
Всего: 12



Тебе нужен счетчик вхождения букв в слово:
Код

function TwoWord(Word: String) : Boolean;
var 
   I, I1: Integer;
begin
 Result := False;
 if Length(Word) < 2 then Exit; // Если меньше 2 букв то выход.
 I1 := 0;
 for I := 2 to Length(Word) do
  if Word[I] = Word[1] then Inc(I1);
 if I1 = 1 then Result := True;
end;



Это сообщение отредактировал(а) ivan219 - 27.11.2007, 01:22
PM MAIL ICQ   Вверх
Denwer
Дата 27.11.2007, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.6.2007
Где: Харьков

Репутация: нет
Всего: нет



Спасибо, всё работает !!! smile 
PM WWW   Вверх
THandle
Дата 27.11.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Я бы ещё Length(Word) вынес бы в отдельную переменную
PM   Вверх
Denwer
Дата 30.11.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.6.2007
Где: Харьков

Репутация: нет
Всего: нет



Не подскажете, например та же самая задача, только вторая буква не первая?
 это типа так (if Word[I] = Word[2] then Inc(I1);)???


PM WWW   Вверх
mr.Anderson
Дата 30.11.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



Denwer, именно.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
ivan219
  Дата 30.11.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 1
Всего: 12



Любая позиция буквы:
Код

function TwoWord(Word: String; PosChar: Integer) : Boolean;
var 
   I, I1, LengthW, PosC: Integer;
begin
 Result := False;
 LengthW := Length(Word);
 PosC := PosChar + 1;
 I1 := 0;
 if LengthW < PosC then Exit;
 for I := PosC to LengthW do
  if Word[I] = Word[PosChar] then Inc(I1);
 if I1 = 1 then Result := True;
end;

На все случаи smile 
Код

function TwoWord(Word: String; PosChar, Max: Integer) : Boolean;
var 
   I, I1, LengthW, PosC: Integer;
begin
 Result := False;
 LengthW := Length(Word);
 PosC := PosChar + 1;
 I1 := 0;
 if LengthW < PosC then Exit;
 for I := PosC to LengthW do
  if Word[I] = Word[PosChar] then Inc(I1);
 if I1 = Max then Result := True;
end;

PM MAIL ICQ   Вверх
Denwer
Дата 1.12.2007, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.6.2007
Где: Харьков

Репутация: нет
Всего: нет



Спасибо, все понял, но ещё один вопрос.
1. Функция ведь должна возвращать и вот такое слово, например (vvcccccc),
так как вторая буква входит в слово ещё раз. 

Можно было бы конечно добавить типа того: 

for I := PosC to LengthW do
  if (Word[I] = Word[PosChar])
  then Inc(I1);
  if (I1 = 1) or (Word[1] = Word[2]) then Result := True;

но тогда она будет и возвращать и (vvcccccvv), к примеру.
Вот как тут быть? 
PM WWW   Вверх
ivan219
  Дата 4.12.2007, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 1
Всего: 12



Denwer, что-то я не соображу что тебе надо smile эта функция возвращяет все буквы от позиции и в право т.е. если у тебя позиция 2 то в слово vvcccccc вернёт False так как поле v стоят одни только cccc а это слово vvcccccvv тоже вернёт False так как в нём больше чем 1 буква v.

Цитата(Denwer @  1.12.2007,  22:11 Найти цитируемый пост)
1. Функция ведь должна возвращать и вот такое слово, например (vvcccccc),так как вторая буква входит в слово ещё раз. 

Да если позиция будет 1 а число вхождений то же 1 иначе False

Вобщем разясни что тебе нужно поконкретнее!!!
PM MAIL ICQ   Вверх
Denwer
Дата 5.12.2007, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.6.2007
Где: Харьков

Репутация: нет
Всего: нет



Я точно узнаю условие, и тогда если что обращусь.

Ещё одно, у меня здесь есть процедура которая бежит по Memo
и находит самое короткое слово. Но к сожалению выводит
только одно слово. А надо чтоб выводило все  самые коротке
слова одинаковой длины.

Вот код. 

procedure TForm1.btnFindClick(Sender: TObject);
var i: integer;
word: string;
begin
  if (Memo1.Lines.Count >= 2) and (Memo1.Lines.Count < 50) then
  begin
    for i := 0 to Memo1.Lines.Count - 1 do
    begin
      if i = 0 then word := Memo1.Lines[0]
      else
        if Length(Memo1.Lines[i]) < Length(word) then word := Memo1.Lines[i];
    end;
  end;
 Memo2.Lines.Add(word);
end;

Может подправите...?
PM WWW   Вверх
ivan219
  Дата 6.12.2007, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 1
Всего: 12



Но вобщето эта процедура всё правильно делает, не много подправил:
Код

procedure TForm1.btnFindClick(Sender: TObject);
var
  I: Integer;
  Word: String;
begin
 if (Memo1.Lines.Count >= 2) and (Memo1.Lines.Count < 50) then
  begin
   Word := Memo1.Lines[0];
   for I := 1 to Memo1.Lines.Count - 1 do
    if Length(Memo1.Lines[I]) < Length(Word) then Word := Memo1.Lines[I];
  end;
 Memo2.Lines.Add(Word);
end;

А найти все короткие можно так:
Код

procedure TForm1.btnFindClick(Sender: TObject);
var
  I: Integer;
  Word: String;
begin
 if (Memo1.Lines.Count >= 2) and (Memo1.Lines.Count < 50) then
  begin
   Word := Memo1.Lines[0];
   for I := 1 to Memo1.Lines.Count - 1 do
    if Length(Memo1.Lines[I]) < Length(Word) then Word := Memo1.Lines[I];

   for I := 0 to Memo1.Lines.Count - 1 do
    if Length(Memo1.Lines[I]) = Length(Word) then Memo2.Lines.Add(Memo1.Lines[I]);
  end;
end;


Конечно алгоритм не ахти и написан на коленках но должен работать.

P.S. Используй подсветку синтаксиса кнопка Код

Это сообщение отредактировал(а) ivan219 - 6.12.2007, 02:27
PM MAIL ICQ   Вверх
Denwer
Дата 6.12.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 19.6.2007
Где: Харьков

Репутация: нет
Всего: нет



Спасибо, с меня пиво...  
PM WWW   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0567 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.