Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выбор цикла (while или repeat)? выбор цикла (while или repeat) 
:(
    Опции темы
Pcrepair
Дата 26.6.2012, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добрый день. Есть следующий код:

Код

procedure TForm1.Button1Click(Sender: TObject);
var DataIn,DataOut: TStringList; i,s: integer; 
Data: string; (*первые три строки из МЕМО1 переделанные в одну строку из 3-х слов*)
begin
   DataIn := TStringList.Create; (*начальный массив строк из МЕМО1*)
   DataOut := TStringList.Create; (*финишный накопитель строк типа СТЕК*)
   DataIn.AddStrings(Memo1.Lines); (*копируем из МЕМО1 все строки*)
   s := DataIn.Count; (*начальное значение кол-ва строк в ПЕРЕМ*)
   
     (*вот этот код надо ввести в цикл*)
     (*вызов процедур*)
     CopyStrings(DataIn, Data); (*скопировали первые три строки из DataIn в Data как одну строку*)
     DataOut.Insert(0, Data); (*перекинули строку в накопитель строк*)
     DelStrings(DataIn); (*удаление первых 2-х строк из ПЕРЕМ DataIn*)

   Memo2.Text := DataOut.Text; (*контрольный просмотр результата*)
   DataIn.Free;
   DataOut.Free;
end;


Что должен делать код
ввод строк в МЕМО1:
мама
папа
бобо
огого
еще
больше
ничего

вывод строк в МЕМО2:
мама папа бобо
бобо огого еще
еще больше ничего

на текущий момент просто выводятся "мама папа бобо" а дальше остановка

По отдельности все процедуры (CopyStrings и DelStrings) работают как надо
никак не пойму как все это дело ввести в цикл
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
XperT
Дата 26.6.2012, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Слишком сложный алгоритм для решения простой задачи. Вот решение в 15 строк без использования лишних объектов, функций и т.д.:
Код

const
    step = 3; // Количество слов, которые нужно объединить
var
    i, j : integer;
    str : string;
begin
    i := 0;
    while i < Memo1.Lines.Count do
    begin
        str := '';
        for j := i to min(i + step - 1, Memo1.Lines.Count - 1) do str := str + Memo1.Lines.Strings[j] + ' ';
        Memo2.Lines.Add(trim(str));

        i := i + step;
    end;
end;


Только не понятно, почему у вас последнее слово предыдущей строки, это первое слово следуюшей строки. Если это всё таки не ошибка, а условие задачи, тогда i необходимо увеличивать не на шаг, а на шаг минус 1

Это сообщение отредактировал(а) XperT - 26.6.2012, 15:31
PM MAIL   Вверх
Pcrepair
Дата 26.6.2012, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



там не просто три слова объедтняются:
было 7 слов

мама
папа
бобо
огого
еще
больше
ничего


стало 9 слов

мама папа бобо
бобо огого еще
еще больше ничего


Модератор:  красный цвет - цвет модераторской правки. Просьба не использовать.

Это сообщение отредактировал(а) MetalFan - 27.6.2012, 13:39
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
XperT
Дата 26.6.2012, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хорошо, что вы научились пользоваться выделением слов цветом на форуме, но очень плохо, что не постигли искусство чтения. Перечитайте моё сообщение еще раз и полностью.

Это сообщение отредактировал(а) XperT - 26.6.2012, 16:21
PM MAIL   Вверх
Pcrepair
Дата 26.6.2012, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



XperT спасибо за работающий код
но, все таки сейчас изучаю как работают циклы с вызовом процедуры, отсюда и вопрос
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
XperT
Дата 27.6.2012, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вариант с процедурой в цикле:

Код

const
    step = 3; // Количество слов, которые нужно объединить
var
    i : integer;
begin
    i := 0;
    while i < Memo1.Lines.Count do
    begin
        AddWords(i, step);
        i := i + step - 1;
    end;
end;

procedure TFrom1.AddWords(start, count : integer);
var
    i : integer;
    str : string;
begin
    str := '';
    for i := start to min(start + count - 1, Memo1.Lines.Count - 1) do str := str + Memo1.Lines.Strings[i] + ' ';
    Memo2.Lines.Add(trim(str));
end;

PM MAIL   Вверх
Pcrepair
Дата 27.6.2012, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



XperT мне пришлось код немного переделать под свои задачи

Код

procedure TForm1.Button1Click(Sender: TObject);
var DataIn,DataOut : TStringList;
begin
    DataIn := TStringList.Create;
    DataOut := TStringList.Create;
    DataIn.AddStrings(Memo1.Lines);
       Control(DataIn, DataOut);
    Memo2.Text := DataOut.Text;
    DataIn.Free;
    DataOut.Free;
end;

procedure TForm1.Control(var T1,T2: TStringList);
const  step = 3; (*Количество слов, которые нужно объединить*)
var   i, j : integer;   str : string;
begin
    i := 0;  (*начальное значение*)
    while i < T1.Count do (*пока в ПЕРЕМ есть строки*)
    begin
        str := ''; (*сделать ПЕРЕМ пустой*)
        for j := i to min(i + step - 1, T1.Count - 1) do  (*вот тут условие*)
        str := str + T1.Strings[j] + ' '; (*ПЕРЕМ присвоить ПЕРЕМ+строку из
        ПЕРЕМ*)
        T2.Add(trim(str)); (*переност строк в ПЕРЕМ*)
        i := i + (step-1); (*меняем условие*)
    end;
end;

end.

Твой вариант лучший, буду изучать на примере как работают условия цикла
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
XperT
Дата 27.6.2012, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так делать не стоит:
Код

procedure TForm1.Control(var T1,T2: TStringList);


T1 и T2 - это указатель на объект, и эти указатели внутри процедуры не меняются (меняется только содержимое объектов, на которые эти указатели указывают), потому достаточно описать процедуру следующим образом:
Код

procedure TForm1.Control(T1,T2: TStringList);


Так делать, как вы сделали, подходит для обычных типов данных (integer, string, real и т.д.). Знаю что немного мутно и не понятно, в своё время я запомнил это так: если необходимо вызывать процедуру Create - значит это объект, а переменная, к которой относится этот объект - указатель.

Это сообщение отредактировал(а) XperT - 27.6.2012, 21:28
PM MAIL   Вверх
Pcrepair
Дата 28.6.2012, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



XperT спасибо за важное дополнение, пригодится в понимании разницы между объектами и типами
--------------------
Сборник рабочего кода Процедур и Функций DelPhi     http://validcoderepo.narod.ru/
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


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

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


 




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


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

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