Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Delphi 7: строки, обратный порядок слов   Найти похожие ветки 

 
Первокурсница ©   (2010-03-25 21:53) [0]

Добрый вечер, господа! =)
У меня очень лёгкий вопрос. Мне нужно вывести слова в строке в обратном порядке. Т.е.: папа мама брат->брат мама папа.
Вот программа которую я пытаюсь делать:
unit Laba4_2Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Label1: TLabel;
   Edit2: TEdit;
   Label2: TLabel;
   Button1: TButton;
   procedure Edit1Change(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 str: string;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
begin
str:=Edit1.Text;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var
 A   : Array[1..100] of String;
 i,n : Longint;
 z : String;
begin
 str:=str+" ";
 z:="";
 n:=0;
 For i:=1 to Length(str) Do
 If str[i]<>" " Then
 z:=z+str[i]
   Else
    Begin
      n:=n+1;
      A[n]:=z;
      z:="";
    End;
 For i:=n Downto 1 Do
 Edit2.Text:=A[n]+" ";
end;
end.

Но она мне выводит только последнее слово и всё. Как исправить?


 
Игорь Шевченко ©   (2010-03-25 22:07) [1]

используй TStringList


 
Первокурсница ©   (2010-03-25 22:08) [2]

Сейчас попробую, спасибо :)


 
Первокурсница ©   (2010-03-25 22:12) [3]

А так программа правильная? только Edit не вписывается?


 
Jeer ©   (2010-03-25 22:26) [4]

Лови, может когда и лишнее спасибо скажешь :)
Другим людям... по другому поводу - им будет приятно.

 i: integer;
//
 Edit2.Text := "";
 with  TStringList.Create do begin
   Text := StringReplace(Edit1.Text, #32, #10, [rfReplaceAll]);
   for i:= Count-1 downto 0 do
     Edit2.Text := Edit2.Text + #32 +  Strings[i];
   Free;
 end;


 
Первокурсница ©   (2010-03-25 22:28) [5]

Jeer, спасибо спасибо спасибо всем :*. Самый лучший форум! =)


 
Германн ©   (2010-03-25 22:42) [6]


> Но она мне выводит только последнее слово и всё.

И сколько раз выводит, если не секрет? :)


 
Первокурсница ©   (2010-03-25 22:47) [7]

Не секрет, один раз


 
Германн ©   (2010-03-25 22:53) [8]


> Не секрет, один раз

А ну да. Один раз. Остальные затираются.

>  For i:=n Downto 1 Do
>  Edit2.Text:=A[n]+" ";
>


 
Первокурсница ©   (2010-03-25 22:57) [9]

 For i:=1 to n Do
 Edit2.Text:=A[i]+" ";

так тоже не выходит :(


 
Плохиш ©   (2010-03-25 22:59) [10]


> Первокурсница ©   (25.03.10 22:57) [9]
>
>  For i:=1 to n Do
>  Edit2.Text:=A[i]+" ";
> так тоже не выходит :(

мда...


 
Германн ©   (2010-03-26 00:53) [11]


> Первокурсница ©   (25.03.10 22:57) [9]
>
>  For i:=1 to n Do
>  Edit2.Text:=A[i]+" ";
> так тоже не выходит :(
>

Сравни два фрагмента из "твоего" кода:
1.
>  z:="";
>  ...
>  For i:=1 to Length(str) Do
>  If str[i]<>" " Then
>  z:=z+str[i]
>

2.
>  For i:=1 to n Do
>  Edit2.Text:=A[i]+" ";
>


Найди два существенных отличия.


 
Германн ©   (2010-03-26 00:58) [12]


> Первокурсница ©   (25.03.10 22:12) [3]
>
> А так программа правильная?

Если исправить то на что я указал, то для лабы сойдёт. В кулинарном техникуме потянет на 4+.


 
Anatoly Podgoretsky ©   (2010-03-26 07:30) [13]

> Первокурсница  (25.03.2010 22:12:03)  [3]

А так программ тоже неправильная, надо использовать конкатенацию, чтобы получить список


 
Leonid Troyanovsky ©   (2010-03-26 08:43) [14]


> Jeer ©   (25.03.10 22:26) [4]

Edit2.Text := "";

Это лишнее, у меня тут все стерильно. [ОНР]


 with TStringList.Create do
   begin
     Delimiter := " ";
     DelimitedText := Edit1.Text;
     for i := 0 to (Count-1) div 2 do
       Exchange(i, Count-1-i);
     Edit1.Text := DelimitedText;
     Free;
   end;

--
Regards, LVT.


 
Jeer ©   (2010-03-26 08:51) [15]


> Leonid Troyanovsky ©   (26.03.10 08:43) [14]


Я и не сомневался, что Первокурсницу завалят предложениями и чем дальше, тем более для нее (него) непонятными.  :)


 
12 ©   (2010-03-26 09:03) [16]

имхо пост без

> unit ***;
>
> interface
>
> uses
>  Windows, Messages, SysUtils, Variants, Classes, Graphics,
>  Controls, Forms,
>  Dialogs, StdCtrls;
>

вызовет более вероятно ответы.
Ничего в этом тексте полезного нет, только наводит на мысль, что автор не понимает какую часть текста программы надо привести.


 
Sha ©   (2010-03-26 15:47) [17]

procedure SwapChars(var s: string; BegPos, EndPos: integer);
var
 ch: char;
begin;
 while BegPos<EndPos do begin;
   ch:=s[BegPos]; s[BegPos]:=s[EndPos]; s[EndPos]:=ch;
   inc(BegPos);
   dec(EndPos);
   end;
 end;

procedure SwapWords(var s: string);
var
 BegPos, EndPos: integer;
begin;
 if Length(s)>0 then begin;
   SwapChars(s,1,Length(s));
   BegPos:=1;
   for EndPos:=1 to Length(s)+1 do
     if s[EndPos]<=" " then begin;
       if BegPos<EndPos then SwapChars(s,BegPos,EndPos-1);
       BegPos:=EndPos+1;
       end;
   end;
 end;

procedure TForm1.Button1Click(Sender: TObject);
var
 s: string;
begin;
 s:=Edit1.Text;
 SwapWords(s);
 Edit2.Text:=s;
 end;


 
Плохиш ©   (2010-03-26 16:24) [18]

Ну, кто ещё лабу выполнит?


 
Jeer ©   (2010-03-26 18:23) [19]


> Sha ©   (26.03.10 15:47) [17]


Кстати, к вопросу о стиле - посмотри на стиль Sha :)
Одни ; после бегинов - чего стоят !

А вот такие вещи
<=" "
я давно себе не позволяю, заменяя на
<=#32
или через объявление/инициализацию
WS = #32;


 
Sha ©   (2010-03-26 19:42) [20]

> Jeer ©   (26.03.10 18:23) [19]
> посмотри на стиль Sha :)

А мне он нравится :)
Не воспринимайте дальнейшее слишком серьезно, но все-таки...

Точка с запятой после begin"а - наследие Algol"а.
Если это противоречит чьему-то вкусу, то можно задать встречный вопрос:
почему в коде эстетов встречаются точки с запятой перед end"ами? :)

Аналогичная непоследовательность бросается в глаза с отступами.
Если вы делаете отступ после begin"а, то почему делаете отступ перед, а не после end"а. Программирование на ПЛ/1 приучило делать отступы после end"ов, т.к. в этом случае блок кода становится на одну строчку выше и хорошо выделяется на распечатках с близко идущими строками.

Возможность в любой момент рассыпать колоду перфокарт или расположить карты не в той последовательности после использования ручного дырокола приучила не разрывать оператор if, или, если это невозможно, располагать then на той же строке, что и следующий за ним оператор.

Разработчики терминала ЕС-1066 не предполагали, что вы будете писать begin на отдельной строке. Я хоть и недолюбливаю их, но тоже считаю, что код с меньшим числом строк понимается проще.

Есть и другие причуды, но эти основные.

Вот <=" " я тоже никогда не пишу, почти всегда <=#32.
Точно также никогда не вызываю Length(s) по 3 раза в одной процедуре.
Скорее всего и s[BegPos]:=s[EndPos] никогда не напишу.
А все не так потому, что код в [17] для Первокурсницы. Когда она перейдет на второй курс, я напишу ей по-другому :)


 
Jeer ©   (2010-03-26 20:59) [21]


> Sha ©   (26.03.10 19:42) [20]
> А все не так потому, что код в [17] для Первокурсницы.


Мне захотелось услышать твой комментарий - иного тут тоже много слышал.

Отлично, Sha - спасибо.

Полагаю, что вопросы "стиля" волнуют многих, об этом уже был разговор.
Вот и еще один пример, из уст "вполне" состоявшегося специалиста.


 
Игорь Шевченко ©   (2010-03-26 21:49) [22]


> А все не так потому, что код в [17] для Первокурсницы. Когда
> она перейдет на второй курс, я напишу ей по-другому :)


непременно на PL/1 и на перфокартах :)


 
Демо ©   (2010-03-26 23:48) [23]


> Плохиш ©   (26.03.10 16:24) [18]
> Ну, кто ещё лабу выполнит?


function SwapPh(const Src: String): String;
var
  i: Integer;
  s: String;
begin
  for i := Length(Src) downto 1 do
  begin
    if Src[i]=" " then
    begin
      Result := Result + " "+ReverseString(s);
      s := "";
    end
    else s := s+Src[i];
  end;
  Result := Result + " "+ReverseString(s);
end;


 
Sha ©   (2010-03-27 00:33) [24]

>> А все не так потому, что код в [17] для Первокурсницы. Когда
>> она перейдет на второй курс, я напишу ей по-другому :)

> Игорь Шевченко ©   (26.03.10 21:49) [22]
> непременно на PL/1 и на перфокартах :)

Смысл кода [17] в том, чтобы не использовать внешних функций в простейшем алгоритме, показать алгоритм в чистом виде.

А после этого будет о чем поговорить со Второкурсницей.

А что откуда взять и куда кинуть батон, можно и потом показать, если они сами не узнают.


 
Sha ©   (2010-03-27 00:49) [25]

В [20] опечатка. Терминал, конечно, ЕС-7066.


 
Игорь Шевченко ©   (2010-03-27 00:53) [26]

Sha ©   (27.03.10 00:49) [25]


> Терминал, конечно, ЕС-7066.


Что за страшный зверь ?
ЕС-7920 (он же 3270) помню, 7066 - уже не успел застать ?


 
Германн ©   (2010-03-27 01:02) [27]


> А все не так потому, что код в [17] для Первокурсницы. Когда
> она перейдет на второй курс, я напишу ей по-другому :)

А на третьем курсе ещё раз и так далее?
Лучше помочь учащемуся самому найти ошибки в том, что он написал сам.
Имхо.

P.S. Ну и еще. Автор заявил, что это лаба. А лабы, как известно, предполагают наличие темы. Нам эту тему не озвучили.


 
brother ©   (2010-03-27 09:35) [28]

> Нам эту тему не озвучили.

Тема сисек не раскрыта в очередной раз ;)


 
Sha ©   (2010-03-27 10:41) [29]

>> Терминал, конечно, ЕС-7066.

> Игорь Шевченко ©   (27.03.10 00:53) [26]
> Что за страшный зверь ?
> ЕС-7920 (он же 3270) помню, 7066 - уже не успел застать ?

Когда появился 7920, это был луч света в темном царстве :)
7920 имел 22 (не помню точно) строки вместо ~10 строк у 7066.

> Германн ©   (27.03.10 01:02) [27]
>А на третьем курсе ещё раз и так далее?

И так до конца без конца.
Стоит показывать нормальные примеры того, как это можно сделать на каждом уровне знаний.

> Лучше помочь учащемуся самому найти ошибки в том, что он написал сам.

И это тоже. Ну там, вроде, нашлись помогающие - зачем мешать.
А примеры чужого кода заставят ее еще раз переосмыслить свой.


 
Демо ©   (2010-03-27 14:37) [30]

Да, я только с 7920 работал.
На них можно было даже в игры играть...


 
Демо ©   (2010-03-27 14:59) [31]

ЕС-ЭВМ, если интересно кому:
http://andy.sumy.ua/old_computers/world_museum/ec.htm
-)


 
Игорь Шевченко ©   (2010-03-27 15:14) [32]

Демо ©   (27.03.10 14:59) [31]

Фотографии хорошие, комментарии - отстой полный.


 
Демо ©   (2010-03-27 15:24) [33]


> Игорь Шевченко ©   (27.03.10 15:14) [32]
> Демо ©   (27.03.10 14:59) [31] Фотографии хорошие, комментарии
> - отстой полный.


Комментарии откровенно слабые.

Но что-то ностальгическое вдруг появляется. когда смотришь на эту технику... Диски 29Мб...


 
Игорь Шевченко ©   (2010-03-27 15:31) [34]

Демо ©   (27.03.10 15:24) [33]

Я еще успел застать 7-мегабайтные диски, ЕС-5052 которые. И ничего, на 4-х дисковой стойке с такими дисками решались вполне себе задачи центра расчетов Аэрофлота.


 
Anatoly Podgoretsky ©   (2010-03-27 17:24) [35]

> Демо  (27.03.2010 14:59:31)  [31]

Ну это очень современный компьютер, такой рано в музей, видимо не смогли достать рабочую лошадку EC-1022


 
Anatoly Podgoretsky ©   (2010-03-27 17:27) [36]

> Игорь Шевченко  (27.03.2010 15:31:34)  [34]

Видимо ты не видел 2 мегабайтные диски, они в основном в ходу были на миниЭВМ


 
Демо ©   (2010-03-27 19:42) [37]


> Anatoly Podgoretsky ©   (27.03.10 17:24) [35]
> > Демо  (27.03.2010 14:59:31)  [31]Ну это очень современный
> компьютер, такой рано в музей, видимо не смогли достать
> рабочую лошадку EC-1022


Я успел только на 1035 и 1036 поработать-)


 
Игорь Шевченко ©   (2010-03-27 20:20) [38]

Anatoly Podgoretsky ©   (27.03.10 17:24) [35]


> Ну это очень современный компьютер, такой рано в музей,
> видимо не смогли достать рабочую лошадку EC-1022


Я на ней в Аэрофлоте как раз работал. Пока они 1045 не приобрели.

Anatoly Podgoretsky ©   (27.03.10 17:27) [36]


> Видимо ты не видел 2 мегабайтные диски, они в основном в
> ходу были на миниЭВМ


Обижаешь, причем незаслуженно :) На СМ-3 как раз был 2х мегабайтный диск на полтора десятка пользователей.
И 56 кило памяти (часть вечно была в ремонте).


 
oldman ©   (2010-03-29 12:36) [39]


> И 56 кило памяти (часть вечно была в ремонте).


Да, да, да!
Если учеть, что в качестве памяти использовались те же микросхему,что и в Спектрумах, то ремонт затягивался...
:))


 
Игорь Шевченко ©   (2010-03-29 13:31) [40]

oldman ©   (29.03.10 12:36) [39]

Ты о чем ? Там была память на ферритовых сердечниках



Страницы: 1 2 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.054 c
2-1274677239
viktooor
2010-05-24 09:00
2010.08.27
Поис в диапазоне дат


15-1265559467
Riply
2010-02-07 19:17
2010.08.27
Как расщепляют мгновение


15-1265377108
vovko26
2010-02-05 16:38
2010.08.27
С чего начать?


2-1267526403
Sairex
2010-03-02 13:40
2010.08.27
Как сравнить версии


2-1268082650
GoTo
2010-03-09 00:10
2010.08.27
Запись пути к файлу в БД