![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка массива
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]Понятно.
Ну а затык-то в чем ?