Форум: "Начинающим";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];
ВнизСортировка массива Найти похожие ветки
← →
Vitaly38 © (2009-10-12 17:25) [0]Добрый вечер всем. Прошу помощи. Задача следующая.
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;
Но это при условии что мы работаем через едит. А как сделать через массив? Поскажите пожалуйста.
← →
Сергей М. © (2009-10-12 17:47) [1]
> как сделать через массив?
А ничего и делать не надо - все уже сделано, даже лишнего.
> // заполнение массима
Зачем, спрашивается, его заполнять, если он тебе уже дан готовый, т.е. уже заполненный, неважно где,кем и как ?
← →
Медвежонок Пятачок © (2009-10-12 17:48) [2]сделать едит невидимым, а преподу сказать, что усе сделано через массив.
хотя и с эдитом все равно у тебя все уже сделано через массив
← →
vitaly38 © (2009-10-12 17:55) [3]Но ведь определение длины Count := Length(edtBegin.Text) не походит для массива.
Сергей М. Я заполняю отсортированный массив.
Поскажите код именно для работы с массивом.
← →
Медвежонок Пятачок © (2009-10-12 17:57) [4]edtBegin.Text - это и так уже массив. почти.
сделав с помощью эдита ты все сделал с помощью массива.
← →
Сергей М. © (2009-10-12 17:59) [5]Length() прекрасно подходит для определения длины дин.массива, каковым у тебя кака раз и является массив SymArr
> Я заполняю отсортированный массив
Какой же он отсортированный, если собственно его сортировка у тебя происходит после его заполнения ?
← →
vitaly38 © (2009-10-12 18:03) [6]Наверное забыл указать саму структуру программы.
КОМПОНЕНТ StrinGrid (массив одномерный)
Кнопка ВЫПОЛНИТЬ
окно Tedit (сюда вывести отсортированный массив)
← →
Сергей М. © (2009-10-12 18:05) [7]
> КОМПОНЕНТ StrinGrid
Т.е. StringGrid нужен для ввода пользователем содержимого будущего сортируемого массива ?
← →
vitaly38 © (2009-10-12 18:14) [8]Да. Именно так.
← →
Сергей М. © (2009-10-12 18:17) [9]
> vitaly38 © (12.10.09 18:14) [8]
Ну а почему же тогда он, массив, "дан" ?
Программа -то у тебя начинает работу, когда ни длина ни содержимое этого массива еще не известны ..
← →
vitaly38 © (2009-10-12 18:19) [10]я написал то на что мозгов хватило. Остальное прошу добавить либо исправить))
← →
Сергей М. © (2009-10-12 18:25) [11]
> написал то на что мозгов хватило
Полагаю, что и задачу ты формулировал тоже сам ? Или это уже отсебячина в форме вольной интерпретации оригинального текста задания ?
Не мог же, наверно, препод так безобразно ее сформулировать)
← →
vitaly38 © (2009-10-12 18:30) [12]Задача из методички. Точь в точь сформулирована как в методичке.
КОМПОНЕНТ StrinGrid (массив одномерный)
Кнопка ВЫПОЛНИТЬ
окно Tedit (сюда вывести отсортированный массив)
Это он после сказал. Структуру саму.
← →
Сергей М. © (2009-10-12 18:33) [13]Понятно.
Ну а затык-то в чем ?
← →
vitaly38 © (2009-10-12 18:44) [14]http://www.sharemania.ru/0193096 сюда прогу залил.
Ошибка выдается. Прошу исправить.
← →
Сергей М. © (2009-10-12 18:52) [15]У тебя мозгов хватает только на "заливание" ?
Вопрос же к тебе был - в чем конкретно у тебя затык ?
← →
vitaly38 © (2009-10-12 19:02) [16]в ошибке. И код не подходит для массива.
← →
Сергей М. © (2009-10-12 19:05) [17]
> в ошибке
В какой ?
> код не подходит для массива
Что значит "не подходит" и почему ?
← →
vitaly38 © (2009-10-12 19:34) [18]тоесть код подходит но как длину массива узнать?
Ошибка вот такая
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
← →
vitaly38 © (2009-10-12 19:39) [19]причем потом после нажатия ок выделяется строка 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:46) [20]Теперь уже выдает
variable "SymArr" might not have been initialized
variable "inx" might not have been initialized
← →
vitaly38 © (2009-10-12 19:50) [21]http://www.sharemania.ru/0193096 сюда прогу залил.
← →
Сергей М. © (2009-10-12 19:56) [22]
> прогу залил
Ну и зачем ?
Что-то мешает несчастные три-четыре десятка строчек привести прямо сюда ?
← →
Сергей М. © (2009-10-12 19:59) [23]
> выдается ошибка Incompatible types: "Char" and " integer"
И что ?
Ни одной знакомой буквы в выданном ?
← →
vitaly38 © (2009-10-12 20:02) [24]
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.
← →
vitaly38 © (2009-10-12 20:03) [25]все ошибки убрались кроме 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
Типо значения не заданы. Как это не заданы?
← →
Сергей М. © (2009-10-12 20:06) [26]
> begin
> count:=Length(SymArr); // <- Где инициализация массива SymArr ?
> SymArr[inx]:=SymArr[inx + 1]; //Чему равна inx ?
← →
Сергей М. © (2009-10-12 20:07) [27]
> Как это не заданы?
см. [26]
И думай ..
← →
Сергей М. © (2009-10-12 20:09) [28]
> begin
> count:=Length(SymArr); //Чему, по-твоему, равна count после этого присвоения ?
← →
vitaly38 © (2009-10-12 20:12) [29]как длину определить не знаю.
← →
Сергей М. © (2009-10-12 20:14) [30]Ее и определять нечего - в случае она [24] равна нулю.
← →
vitaly38 © (2009-10-12 20:20) [31]Можешь подправить код? А то 5 часов говорим и говорим.....
← →
sniknik © (2009-10-12 20:58) [32]говорить можно сколько угодно, помогать можно как угодно долго, делать за студента нельзя...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.005 c