Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1223034925
Nik
2008-10-03 15:55
2009.11.29
Динамический массив


15-1254345618
Германн
2009-10-01 01:20
2009.11.29
Интересные системные требования.


15-1254244818
tesseract
2009-09-29 21:20
2009.11.29
литература по posix


4-1223938181
Ruzzz
2008-10-14 02:49
2009.11.29
как "ловить мышку" после ответа HTCAPTION на WM_NCHITTEST


1-1226044253
checkmate-maker
2008-11-07 10:50
2009.11.29
Динамическое подключение DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский