Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сортировка массива


Страницы:   1 2

Vitaly38 ©   (2009-10-12 17:25:00) 

Добрый вечер всем. Прошу помощи. Задача следующая.

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

Задачу решить испоьзуя стринг грид. Вывод организовать в едит.

Принцип сам понимаю.
вот код

Count := Length(edtBegin.Text);
 SetLength(SymArr, Count);

 // заполнение массима
 for inx := 0 to Count - 1 do
 begin
   SymArr[inx] := edtBegin.Text[inx + 1];
 end;

 curr_pos := 0;
 for inx := 0 to Count - 1 do
 begin
   if (SymArr[inx] >= '0') and (SymArr[inx] <= '9') then
   begin
     CurrCh := SymArr[inx];
     for idx := inx downto curr_pos + 1 do
     begin
       SymArr[idx] := SymArr[idx - 1];
     end;
     SymArr[curr_pos] := CurrCh;
     curr_pos := curr_pos + 1;
   end;
 end;

 // вывод информации в интерфейс
 edtEnd.Text := '';
 for inx := 0 to Count - 1 do
 begin
   edtEnd.Text := edtEnd.Text + SymArr[inx];
 end;
end;

Но это при условии что мы работаем через едит. А как сделать через массив? Поскажите пожалуйста.


sniknik   (2009-10-12 20:58:00) [1]

говорить можно сколько угодно, помогать можно как угодно долго, делать за студента нельзя...


vitaly38   (2009-10-12 20:20:00) [2]

Можешь подправить код? А то 5 часов говорим и говорим.....


Сергей М.   (2009-10-12 20:14:00) [3]

Ее и определять нечего - в случае она [24] равна нулю.


vitaly38   (2009-10-12 20:12:00) [4]

как длину определить не знаю.


Сергей М.   (2009-10-12 20:09:00) [5]


> begin
>  count:=Length(SymArr); //Чему, по-твоему, равна count после этого присвоения ?


Сергей М.   (2009-10-12 20:07:00) [6]


> Как это не заданы?


см. [26]

И думай..


Сергей М.   (2009-10-12 20:06:00) [7]


> begin
>  count:=Length(SymArr); // <- Гдеинициализация массива SymArr ?
>  SymArr[inx]:=SymArr[inx + 1]; // Чемуравна inx ?


vitaly38   (2009-10-12 20:03:00) [8]

все ошибки убрались кроме Project Project1.exe raised exception class EAcessViolation with message 'Acces violation at address 0045E100 in module 'Project.exe' Read of address 00000000' Process stopped/ Use step or run to continue(после нажатия на кнопку выполнить)
И после нее внизу под кодом там где ошибки пишется
variable 'SymArr' might not have been initialized
variable 'inx' might not have been initialized
Типо значения не заданы. Как это не заданы?


vitaly38   (2009-10-12 20:02:00) [9]

unit Unit1;

interface

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

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

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
      var
  Count, inx, idx, curr_pos:integer;
  SymArr: array of char;
  CurrCh: char;
begin
 count:=Length(SymArr);;
 SymArr[inx]:=SymArr[inx + 1];

curr_pos:=0;
 for inx:=0 to Count-1 do
 begin
   if (SymArr[inx] >='0') and (SymArr[inx] <='9') then
   begin
     CurrCh:=SymArr[inx];
     for idx:=inx downto curr_pos+1 do
     begin
       SymArr[idx]:=SymArr[idx - 1];
     end;
     SymArr[curr_pos]:=CurrCh;
     curr_pos:=curr_pos + 1;
   end;
 end;
    for inx:=0 to Count - 1 do
 begin
   edit1.Text:=edit1.Text + SymArr[inx];
 end;
end;

end.


Сергей М.   (2009-10-12 19:59:00) [10]


> выдается ошибка Incompatible types: 'Char' and " integer'


И что ?
Ни одной знакомой буквы в выданном ?


Сергей М.   (2009-10-12 19:56:00) [11]


> прогу залил


Ну и зачем ?
Что-то мешает несчастные три-четыре десятка строчек привести прямо сюда ?


vitaly38   (2009-10-12 19:50:00) [12]

http://www.sharemania.ru/0193096сюда прогу залил.


vitaly38   (2009-10-12 19:46:00) [13]

Теперь уже выдает
variable 'SymArr' might not have been initialized
variable 'inx' might not have been initialized


vitaly38   (2009-10-12 19:39:00) [14]

причем потом после нажатия ок выделяется строка  if (SymArr[inx] >= '0') and (SymArr[inx] <= '9') then

Я попробовал поменять. тосеть создал множество mn: set of 1..9;
и строку с ошибкой поменял на  if SymArr[inx] in mn then

выдается ошибка Incompatible types: 'Char' and " integer'/


vitaly38   (2009-10-12 19:34:00) [15]

тоесть код подходит но как длину массива узнать?

Ошибка вот такая
Project Project1.exe raised exception class EAcessViolation with message 'Acces violation at address 0045E100 in module 'Project.exe' Read of address 00000000' Process stopped/ Use step or run to continue


Сергей М.   (2009-10-12 19:05:00) [16]


> в ошибке


В какой ?


> код не подходит для массива


Что значит "не подходит" и почему ?


vitaly38   (2009-10-12 19:02:00) [17]

в ошибке. И  код не подходит для массива.


Сергей М.   (2009-10-12 18:52:00) [18]

У тебя мозгов хватает только на "заливание" ?
Вопрос же к тебе был - в чем конкретноу тебя затык  ?


vitaly38   (2009-10-12 18:44:00) [19]

http://www.sharemania.ru/0193096сюда прогу залил.
Ошибка выдается. Прошу исправить.


Сергей М.   (2009-10-12 18:33:00) [20]

Понятно.

Ну а затык-то в чем ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо