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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 19:20   #1
BataniQ
 
Регистрация: 11.12.2011
Сообщений: 5
По умолчанию Работа со строками

Вот задание:
Дан массив, состоящий из символов. Преобразовать массив по
следующему правилу: все прописные латинские буквы перенести в начало, а все строчные латинские буквы – в конец, сохраняя исходное взаимное
расположение.
Вот текст:
Код:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a:array of char;
  n:integer;
implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
begin
memo1.Clear;
memo2.Clear;
edit1.Clear;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.Clear;
memo2.Clear;
edit1.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
var c:string;
begin
c:=Edit1.Text;
n:=n+1;
Setlength(a,n);
a[n-1]:=c[1];
Memo1.Text:=Memo1.Text+c;
Edit1.Clear;
Edit1.SetFocus; 
end;

procedure TForm1.Button2Click(Sender: TObject);
var i,j,k:integer;
    x:char;
begin
{A..Z âïåðåä}
k:=-1;
for i:=0 to n-1 do
if a[i] in ['A'..'Z'] then
  begin
    k:=k+1;
    x:=a[i];
    for j:=i downto k+1 do
    a[j]:=a[j-1];
    a[k]:=x;
  end;
{a..z â êîíåö}
k:=-1;
for i:=n-1 downto 0 do
if a[i] in ['a'..'z'] then
  begin
    k:=k+1;
    x:=a[i];
    for j:=i to n-k do
    a[j]:=a[j+1];
    a[n-k+1]:=x;
  end;
for i:=0 to n-1 do 
Memo2.Text:=Memo2.Text+a[i];
end;

end.
Вот скрин:


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

Последний раз редактировалось Stilet; 11.12.2011 в 23:49.
BataniQ вне форума Ответить с цитированием
Старый 11.12.2011, 20:21   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Та всё просто:
Код:
Function DoIt(aStr:String):string;
var
 tmp:array of Char;
 i:Integer;
begin
  //Превращение строки в массив чаров
  SetLength(tmp,Length(aStr)+1);
  for i:=1 to Length(aStr) do
  begin
   Tmp[i]:=aStr[i];
  end;

  //Ищем мелочь
  For i:=Low(tmp) to High(Tmp) do
  begin
    If (tmp[i] in ['a'..'z']) then
   Result:=Result+tmp[i];
  end;

  //ищем крупнячок
    For i:=Low(tmp) to High(Tmp) do
  begin
    If (tmp[i] in ['A'..'Z']) then
    Result:=Result+tmp[i];
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit2.Text:=DoIT(Edit1.Text);
end;
Если я правильно понял, то ABCcba должно стать cbaABC
Человек_Борща вне форума Ответить с цитированием
Старый 11.12.2011, 20:43   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Человек_Борща
только ТС наоборот надо имхо
Цитата:
прописные латинские буквы перенести в начало, а все строчные латинские буквы
то есть cbaABC--->ABCcba
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 11.12.2011 в 21:14.
Mad_Cat вне форума Ответить с цитированием
Старый 11.12.2011, 21:01   #4
BataniQ
 
Регистрация: 11.12.2011
Сообщений: 5
По умолчанию

Не ребята чета я не понял. Я так когда программы не вижу ничего не понимаю скиньте плиз весь текст. ПЛИЗ!!!
BataniQ вне форума Ответить с цитированием
Старый 11.12.2011, 21:15   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Я тебе готовую функцию дал, вместе со способом её при менения. 1 кнопка 2 эдита. Копипаст.

Чтобы сначло были AAA и затем aaaa , нужно циклы поиска больших и маленьких местами поменять.

[ADD]
Mad_cat, в твоём коде есть бесконечный цикл:
Код:
while (i<=n) and(j<=n) do begin
программа из него сама не выходит =)

Последний раз редактировалось Человек_Борща; 11.12.2011 в 21:31.
Человек_Борща вне форума Ответить с цитированием
Старый 11.12.2011, 22:57   #6
BataniQ
 
Регистрация: 11.12.2011
Сообщений: 5
По умолчанию

Function DoIt(aStr:String):string; где вот это находится бутон клик понятно что ето а это после чего вписывать в каком компаненте?
BataniQ вне форума Ответить с цитированием
Старый 11.12.2011, 23:46   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Функция не связана с компонентами. Можете обявить её в секции public формы. Получите function TForm1.DoIT(aStr:string):string;
А можете просто вставить её в код, после Implementation.

И использовать как показанов в коде обработчика кнопки, который я привёл вместе с функцией.
Человек_Борща вне форума Ответить с цитированием
Старый 11.12.2011, 23:47   #8
BataniQ
 
Регистрация: 11.12.2011
Сообщений: 5
По умолчанию

Все всем спасибо разобрался!!!!!!!!!!!
BataniQ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со Строками Dodjik Общие вопросы C/C++ 0 09.11.2011 21:25
работа со строками missg Помощь студентам 3 09.11.2011 16:36
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
работа со строками lg12 Помощь студентам 8 17.08.2009 10:07
Работа со строками semennn Помощь студентам 6 05.05.2009 19:10