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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2011, 03:11   #1
aerosm
Пользователь
 
Регистрация: 28.02.2011
Сообщений: 14
Восклицание С Delphi на C++ Builder

Помогите, нужен перевод куска кода с Делфи на Си Билдер. Помогите кто умеет)
Код:
Код:
procedure TMainForm.CheckButtonClick(Sender: TObject);
begin
  ShowError(  CheckBracket( BracketEdit.Text )  );
end;

procedure TMainForm.ShowError( ErrList: TStringList );
var
  i: integer;
begin
  ErrorList.Items.Clear;

  if ErrList.Count > 0 then
    for i := 0 to ErrList.Count - 1 do
      ErrorList.Items.Add( ErrList[i] )
  else
    ErrorList.Items.Add( 'Ошибок не обнаружено' );
end;
aerosm вне форума Ответить с цитированием
Старый 16.12.2011, 04:07   #2
aerosm
Пользователь
 
Регистрация: 28.02.2011
Сообщений: 14
Восклицание

Что никто не может помочь?
aerosm вне форума Ответить с цитированием
Старый 16.12.2011, 04:13   #3
Felian
Пользователь
 
Регистрация: 13.11.2011
Сообщений: 24
По умолчанию

Что-то такое, наверное. По-любому остальные функции надо смотреть - как в них параметры передаются.

Код:
Код:
void TMainForm::CheckButtonClick(TObject *Sender) {
  ShowError(CheckBracket(BracketEdit->Text));
}


void TMainForm::ShowError(TStringList *ErrList) {
  int i;
  ErrorList->Items->Clear();

  if (ErrList->Count > 0) {
    for (i = 0; i < ErrList->Count; i++) {
      ErrorList->Items->Add(ErrList[i]);
    }
  } else {
    ErrorList->Items->Add("Ошибок не обнаружено");
  }
}

Последний раз редактировалось Felian; 16.12.2011 в 04:16.
Felian вне форума Ответить с цитированием
Старый 16.12.2011, 04:18   #4
aerosm
Пользователь
 
Регистрация: 28.02.2011
Сообщений: 14
Радость

Вот могу даже весь код скинуть

Код:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, StStack, Generics.Collections;

type
  TBracket = class
  private
    FOpen: char;
    FClose: char;
  public
    constructor Create( setOpen: char );

    property Open: char read FOpen;   // Открывающаяся скобка
    property Close: char read FClose; // Закрывающаяся скобка
  end;


  TMainForm = class(TForm)
    BracketEdit: TEdit;
    CheckButton: TButton;
    ErrorList: TListBox;
    procedure CheckButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ErrorListClick(Sender: TObject);
    procedure BracketEditChange(Sender: TObject);
  private
    Stack: TStack<TBracket>;
  public
    function CheckBracket( CheckStr: string ): TStringList;
    procedure ShowError( ErrList: TStringList );
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

constructor TBracket.Create( setOpen: char );
begin
  FOpen := setOpen;
  // Если setOpen не является открывающейся скобкой, получаем ошибку 
  if not (setOpen in ['{','[','(']) then
    raise Exception.Create('Неизвестный вид скобок');
  
  // Находим парную скобку
  case setOpen of
    '(': FClose := ')';
    '[': FClose := ']';
    '{': FClose := '}';
  end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Stack := TStack<TBracket>.Create;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  Stack.Free;
end;

function TMainForm.CheckBracket( CheckStr: string ): TStringList;
var
  i: integer;
  ResultList: TStringList;
begin
  // Очищаем стек
  Stack.Clear;
  // Создаем список для ошибок
  ResultList := TStringList.Create;

  // Посимвольно пробегаем выражение
  for i := 1 to Length( CheckStr ) do
    begin
       // Если символ не является скобкой, то дальнейший код не выполняется
       if not ( CheckStr[i] in ['{','[','(','}',']',')'] ) then
         Continue;

       // Если скобка открывающаяся
       if CheckStr[i] in ['{','[','('] then
         Stack.Push( TBracket.Create( CheckStr[i] ) ) // Кладем ее в стек
       else
         if Stack.Count > 0 then // Если стек не пуст выполняем проверку
           if TBracket(Stack.Peek).Close <> CheckStr[i] then
             ResultList.Add( 'Неcовместимый тип открывающей и закрывающей скобки ' +
                             TBracket(Stack.Peek).Open + ' и ' + CheckStr[i]  )
           else Stack.Pop.Free; // Если проверка прошла, тогда выталкиваем скобку
         else // Если стек пуст, получаем ошибку
           ResultList.Add( 'Лишная закрывающая скобка: ' + CheckStr[i] ); 

    end;

  // Если после проверки остались открытые скобки,получаем ошибку
  if Stack.Count > 0 then
    ResultList.Add( 'Не все скобки закрыты!' );

  Result := ResultList;
end;
aerosm вне форума Ответить с цитированием
Старый 16.12.2011, 04:21   #5
Felian
Пользователь
 
Регистрация: 13.11.2011
Сообщений: 24
По умолчанию

В общем то что ты попросил я перевёл на сколько это понятно, а если какие-то проблемы, ты пиши, а там посмотрим - я или ещё кто-нибудь.
Felian вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из Delphi в Builder C++ Leorr Помощь студентам 1 08.04.2011 16:54
Синтаксис Delphi Builder --> C++ Builder KingBelt C++ Builder 2 28.11.2010 16:25
Rad Studio 2011 XE: новое в Delphi, C++ Builder, RadPHP и Delphi Prism savva-paladin Софт 18 02.10.2010 20:24
С Delphi 7 на C++ Builder 6 Kazik Помощь студентам 0 06.06.2010 13:25
Builder -> Delphi Avtograf Общие вопросы Delphi 0 02.06.2010 20:02