Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2010, 20:14   #1
Kurai
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 27
По умолчанию Работа со строками в Delphi

Задание: Дана строка символов, состоящая из произвольных десятичных чисел, разделенных пробелами. Вывести на экран числа этой строки в порядке возрастания их значений.

Скажите, пожалуйста, правильно ли написан код... и почему у меня в месте s:=Edit1.Text; ошибка E2003 Undeclared identifier: 'Edit1', хотя сначала вроде бы запускалось все...

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Char(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Function FWrd(st: string) : string;
var n,i,j:integer;
    c:widechar;
   s,m:string;
begin
 s:=Edit1.Text;
 n:=length(s); {определяем длину}
for i:=1 to n-1 do {сортировка}
for j:=i+1 to n do
if ord(s[i])>ord(s[j]) then
  begin
   c:=s[i];
   s[i]:=s[j];
   s[j]:=c;
  end;
Result:=m;
end;
procedure TForm1.Char(Sender: TObject; var Key: Char);

begin
    if Key = #13 then Edit2.Text:=FWrd(Edit1.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Clear;  Edit2.Clear;
end;

end.

Последний раз редактировалось Kurai; 12.04.2010 в 20:17.
Kurai вне форума Ответить с цитированием
Старый 12.04.2010, 20:40   #2
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию

Вот,с Edit я тебе помог ну а остальные ошибки думаю ты и сам исправиш.

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Char(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
   Function FWrd(st: string) : string; { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function TForm1.FWrd(st: string): string;
var
n,i,j:integer;
    c:widechar;
   s,m:string;
begin
s:=Edit1.Text;
n:=length(s); {îïðåäåëÿåì äëèíó}
for i:=1 to n-1 do {ñîðòèðîâêà}
for j:=i+1 to n do
if ord(s[i])>ord(s[j]) then
  begin
   c:=s[i];
   s[i]:=s[j];
   s[j]:=c;
  end;
Result:=m;
end;


procedure TForm1.Char(Sender: TObject; var Key: Char);
begin
if Key = #13 then Edit2.Text:=FWrd(Edit1.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Clear;  Edit2.Clear;
end;


end.
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 12.04.2010, 21:31   #3
Kurai
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 27
По умолчанию

спасибо!
я вот тут ее позапускала и решила сделать так

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Char(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Char(Sender: TObject; var Key: Char);
var
n,i,j:integer;
    c:widechar;
   s,m:string;
begin
s:=Edit1.Text;
n:=length(s);
for i:=1 to n-1 do
for j:=i+1 to n do
if ord(s[i])>ord(s[j]) then
  begin
   c:=s[i];
   s[i]:=s[j];
   s[j]:=c;
  end;
  if Key = #13 then Edit2.Text:=s;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Clear;  Edit2.Clear;
end;

end.
только проблема в том, что у меня из первой строки считываются не числа, а символы, то есть если там написано 3 65 87 21 результатом будет 1235678, причем снчала идут пробелы
возможно я где-то не тот тип данных указала или все-таки нужно как-то заставить делфи читать пробелы?

Последний раз редактировалось Kurai; 12.04.2010 в 21:34.
Kurai вне форума Ответить с цитированием
Старый 12.04.2010, 21:33   #4
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

пользуемся copy/delete.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 12.04.2010, 21:50   #5
Kurai
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 27
По умолчанию

russian-stalker, никогда таковой не пользовалась... каковы ее функции? ну понятно, что копировать/удалить... то есть в моем случае нужно скопировать исходную строку, а потом преобразовывать, так? а delete тогда не нужно использовать?
Kurai вне форума Ответить с цитированием
Старый 13.04.2010, 20:57   #6
Kurai
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 27
По умолчанию

попробовала очередной вариант... разделить на числа получается, а вот как конкретно здесь применить сортировку методом пуузырька (если она возможна) - не знаю...

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Char(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Char(Sender: TObject; var Key: Char);
var
n,i,j,k:integer;
    c:widechar;
   s,chislo,sl:string;
   a:array of integer;
begin
s:=Edit1.Text;
n:=length(s);
chislo:='';
s:=s+' ';
n:=n+1; sl:='';
i:=1;
for i:=1 to n do
begin
  if s[i] in ['0'..'9'] then sl:=sl+s[i]
  else if sl<>'' then
  begin
        for j:=n to i do
        if sl[j-1]>sl[j] then
        begin
        c:=s[j];
        s[j]:=s[j-1];
        s[j-1]:=c;
        end;
end;

 if Key = #13  then Edit2.Text:=s;
end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Clear;  Edit2.Clear;
end;

end.
Kurai вне форума Ответить с цитированием
Старый 13.04.2010, 21:57   #7
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Я бы сделал примерно так:
Код:
procedure TForm1.Char(Sender: TObject; var Key: Char);
var
 s,t:string;
 a:array[1..100] of integer;
 i,j,c,q:integer;
BEGIN
 s:=edit1.text;
 c:=0;
 for i:=1 to length(s) do	
 begin
  while length(s)<>0 do
  begin
  if pos(' ',s)<>0 then
  begin
   inc(c);
   t:=copy(s,1,pos(' ',s)-1);
   delete(s,1,pos(' ',s));  
   a[c]:=strtoint(t);
  end else
  begin
   inc(c);
   t:=copy(s,1,length(s));
   delete(s,1,length(s));
   a[c]:=strtoint(t);
  end;
  end;
 end;	
 for i:=1 to c-1 do
 for j:=c-1 downto i do
 if a[j-1]>a[j] then
 begin
  q:=a[j];
  a[j]:=a[j-1];
  a[j-1]:=q;
 end;
 for i:=1 to c do
  s:=s+inttostr(a[i])+' ';
  if Key = #13 then Edit2.Text:=s;
END;
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками.(Delphi) SfSpawN Помощь студентам 1 09.06.2009 18:13
Работа со строками. Delphi сер4ей Помощь студентам 1 09.03.2009 23:22
Работа с строками в Delphi. Lassard Помощь студентам 8 21.11.2008 18:27
Работа со строками. Delphi defeat Помощь студентам 4 10.01.2008 13:39