Форум: "Начинающим";
Текущий архив: 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.144 c