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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2009, 18:13   #1
vitaly38
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 37
Восклицание Сортировка массива. Нужна помощь.

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


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


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

Принцип сам понимаю.
воот код
Код:
Count :=5;
  SetLength(SymArr, Count);

  // заполнение массима
  for inx := 0 to Count - 1 do
  begin
    SymArr[inx] :=SymArr[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;


  // вывод информации в интерфейс
  edit1.Text := '';
  for inx := 0 to Count - 1 do
  begin
    edit1.Text := edit1.Text + SymArr[inx];
  end;
end;
Но это при условии что мы работаем через едит. с массивами не знаю как быть. Подскажите пожалуйста.

Сама программа здесь http://www.sharemania.ru/0193096
При нажатии на кнопку ошибка появляется. Подправьте пожалуйста. Заранее благодарю.

Последний раз редактировалось Stilet; 13.10.2009 в 09:10.
vitaly38 вне форума Ответить с цитированием
Старый 12.10.2009, 20:22   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А у тебя уже есть массив, зачем тебе еще один? Ты ведь цифры будешь записывать как символы, а не как цифры? Верно?
edtBegin.Text - есть строка (ну в смысле выглядит как строка ). А строка есть массив символов. И все что требуется это длина строки .
Соответственно заполнять массив смысла нет, его и так заполнит пользователь.
Дальше, тебе нужно две пустые строчки (ну как вариант). Встретил число, запихал в первую строку. Встретил нечисло запихал во вторую.
А затем сложил обе строки и вывел в твой эдит.
Соответственно вывод будет без цикла, а это быстрей (мелочь, а приятно и если препод толковый, то оценит). И придраться не к чему, все строки можно рассматривать как массивы символов.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 12.10.2009, 20:37   #3
vitaly38
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 37
Восклицание вот структура

Структура вот какая должна быть
КОМПОНЕНТ StrinGrid (массив одномерный)

Кнопка ВЫПОЛНИТЬ

окно Tedit (сюда вывести отсортированный массив)


Код сам вот.
Код:
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.
прошу исправить.

Последний раз редактировалось Stilet; 13.10.2009 в 09:12.
vitaly38 вне форума Ответить с цитированием
Старый 12.10.2009, 20:43   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Это препод от тебя StringGrid для такой задачи требует? Ну извращенец!
Тогда не пойму зачем тебе SymArr? Массив символов?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 12.10.2009, 20:49   #5
vitaly38
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 37
По умолчанию

да. это массив символов.
vitaly38 вне форума Ответить с цитированием
Старый 12.10.2009, 20:53   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Я знаю что это массив символов. Тогда переформулируем вопрос, если тебе нужен массив символов, то зачем тебе StringGrid? И если тебе нужен StringGrid, то зачем тебе массив символов? Или в задаче требуется и то и другое? Выложите оригинальный текст задачи (а не Ваш вольный перевод).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 12.10.2009, 21:17   #7
vitaly38
Пользователь
 
Регистрация: 12.10.2009
Сообщений: 37
Восклицание

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

Структура проги должна быть такой.

СТРИНГ ГРИД(МАССИВ ИСХОДНЫЙ, КУДА ВВОДИМ СИМВОЛЫ И ЦИФРЫ)

КНОПКАК ВЫПОЛНЕНИЯ

ЕДИТ1 СЮДА ВЫВОДИМ ОТСОРТИРОВАННЫЙ МАССИВ,
vitaly38 вне форума Ответить с цитированием
Старый 13.10.2009, 08:26   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

В таком случае тебе нужно избаивться от своего SymArr и заменить его StringGrid. Добавлять StringGrid1.Add(строка или символ).
В общем заполняешь СтрингГрид символами из Эдита.
Затем в обратном порядке сканируешь Стрингрид (от последнего к первому). Если цифра то переносишь элемент на нулевую позицю (первый элемент имеет индекс 0). После этого процесса все будет перестроено так как тебе надо.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.05.2010, 15:32   #9
(himerochka)
Новичок
Джуниор
 
Регистрация: 13.05.2010
Сообщений: 1
По умолчанию

привет всем, помогите!!! Нужно написать программ: соотировка масива пузырьком
(himerochka) вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива Paul_AG Общие вопросы C/C++ 16 05.06.2009 21:42
сортировка массива Dimati87 Паскаль, Turbo Pascal, PascalABC.NET 6 03.06.2009 09:17
Сортировка массива ManU Помощь студентам 1 21.09.2008 10:41
Сортировка массива С/С++ Dagget Помощь студентам 1 16.07.2008 12:18
Сортировка массива Dagmaria Общие вопросы C/C++ 5 05.07.2008 00:23