Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.01.2013, 00:35
mixasnt mixasnt вне форума
Прохожий
 
Регистрация: 16.12.2012
Сообщения: 7
Репутация: 10
По умолчанию ввод массива едит

скажите пожалуйста,как ввести одномерный массив в едит.(нет разделителей) Пример: вводим число в едит 1111,и делаем из него массив 1 1 1 1 ?
Ответить с цитированием
  #2  
Старый 07.01.2013, 00:40
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Так из массива в Edit или наоборот?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 07.01.2013, 00:44
mixasnt mixasnt вне форума
Прохожий
 
Регистрация: 16.12.2012
Сообщения: 7
Репутация: 10
По умолчанию

из Едит в массив

Суть моей задачи такова:
Пользователь вводит в едит двоичное число,программа должна его перевести в 10ое и вывести в другой едит.

Последний раз редактировалось mixasnt, 07.01.2013 в 00:47.
Ответить с цитированием
  #4  
Старый 07.01.2013, 00:48
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Примерно так:
Код:
var
  buf : array of Byte;
  I : Integer;
  St : String
...
  St := Edit1.Text;
  SetLength(Buf, Length(St));
  for I := 0 to Length(Edit1.Text) - 1 do
    Buf[i] := St[I + 1];
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 07.01.2013, 00:57
mixasnt mixasnt вне форума
Прохожий
 
Регистрация: 16.12.2012
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Примерно так:
Код:
var
  buf : array of Byte;
  I : Integer;
  St : String
...
  St := Edit1.Text;
  SetLength(Buf, Length(St));
  for I := 0 to Length(Edit1.Text) - 1 do
    Buf[i] := St[I + 1];

так не получается (ошибка типов данных)

я так ещё пробовал:
Код:
var
  A:array[1..n] of byte;
  i:byte;
  S:string[n];
begin
  s:=Edit1.Text; //присваеваем перменной
                 //строк-го типа значение в нах-я Edit1
  for I := 1 to n do      //цикловым процессом вводим необх-е эл.
    A[i]:=StrToInt(S[i]);  //в массив А

но тоже глухо(
Ответить с цитированием
  #6  
Старый 07.01.2013, 01:01
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Забыл преобразование дописать
Код:
 Buf[i] := ord(St[I + 1]) - $30;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 07.01.2013, 01:07
mixasnt mixasnt вне форума
Прохожий
 
Регистрация: 16.12.2012
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Забыл преобразование дописать
Код:
 Buf[i] := ord(St[I + 1]) - $30;
Ответить с цитированием
  #8  
Старый 07.01.2013, 01:08
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Читать умеешь? У меня как массив объявлен?

Можно сразу напрямую, минуя буфер
Код:
function BinToInt(BinStr : string) : Int64;
var
  i : Byte;
  RetVar : Int64;
begin
  BinStr := UpperCase(BinStr);
  if BinStr[Length(BinStr)] = 'B' then
    Delete(BinStr, Length(BinStr), 1);
  RetVar := 0;
  for i := 1 to Length(BinStr) do
  begin
    if not (BinStr[i] in ['0','1']) then
    begin
      RetVar := 0;
      Break;
    end;
    RetVar := (RetVar shl 1) + (Byte(BinStr[i]) and 1) ;
  end;
   
  Result := RetVar;
end;
...
  Edit2.Text := IntToStr(BinToInt(Edit1.Text));
...
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 07.01.2013 в 01:10.
Ответить с цитированием
  #9  
Старый 07.01.2013, 01:15
mixasnt mixasnt вне форума
Прохожий
 
Регистрация: 16.12.2012
Сообщения: 7
Репутация: 10
По умолчанию

Альтернативное решение задачиможет кому то понадобится)
Код:
procedure TForm1.Button1Click(Sender: TObject);
var base, rez : int64;
  i : integer;
begin
  base := 1;
  rez := 0;
  for i := Length(Edit1.Text) downto 1 do
    if Not ( Edit1.Text[i] in ['0'..'1'] )  then begin
       Application.MessageBox('В edit1 не двоичное число!!',
                'Ошибка', MB_ICONSTOP or MB_OK);
       Exit
    end
    else begin
      rez := rez +  StrToInt(Edit1.Text[i])*Base;
      Base := Base * 2;
    end;
  Edit2.Text := IntToStr( rez )
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:25.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025