Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.087 c
2-1273183195
Light-blr
2010-05-07 01:59
2010.08.27
Переход стрелочками между окошками


15-1264458604
Юрий
2010-01-26 01:30
2010.08.27
С днем рождения ! 26 января 2010 вторник


15-1275759433
Alkid
2010-06-05 21:37
2010.08.27
Code Review


2-1267595287
allrussia
2010-03-03 08:48
2010.08.27
Перекодировка русского текста DOS+ANSI в ANSI


2-1270538489
istok
2010-04-06 11:21
2010.08.27
TTimer в Delphi2010





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский