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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2013, 00:37   #1
Mixasnt
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 54
По умолчанию ввод массива едит

скажите пожалуйста,как ввести одномерный массив в едит.(нет разделителей) Пример: вводим число в едит 1111,и делаем из него массив 1 1 1 1 ?
Редактировать/Удалить сообщение
Mixasnt вне форума Ответить с цитированием
Старый 07.01.2013, 00:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Никак. Массив без ограничителей элементов не может быть расщеплен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.01.2013, 00:48   #3
Mixasnt
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 54
По умолчанию

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

что посоветуешь?
как сделать по другому?
Mixasnt вне форума Ответить с цитированием
Старый 07.01.2013, 00:55   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet
Никак. Массив без ограничителей элементов не может быть расщеплен.
стоп-стоп! Что значит - без разделителей. Автор темы в примере ясно показал, что у него каждая отдельная цифра - это отдельный элемент массива!

Mixasnt, я правильно понял, что у вас элементы массива это строго ЦИФРЫ от 0 до 9 ? Тогда - легко:
Код:
var Mas : array of byte;
  i, k, n : integer
begin
  n := 0;
  for i:=1 to Length(Edit1.Text) do
    if Edit1.Text[i] in ['0'..'9'] then Inc(n);
  SetLength(Mas, n);
  k:=0;
  for i:=1 to Length(Edit1.Text) do
    if Edit1.Text[i] in ['0'..'9'] then begin 
       Mas[k] := StrToInt(Edit1.Text[i]);
       Inc(k)
    end;

  // готово. Все цифры записаны в массив Mas длиной n 
  .... тут что надо делаем с массивом Mas
end;

UPDATE
пока писал, задача прояснилась..

Mixasnt, ну и зачем Вам переводить число в массив?!! Идите по Edit1.Text справа налево и вычисляйте значение. Массив тут совсем не нужен!


ещё раз обновлено
пусть в Edit1.Text исходное двоичное число.
и по нажатию на кнопку результат нужно поместить в Edit2.Text
тогда вешаем на кнопку такой код:
Код:
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;

Последний раз редактировалось Serge_Bliznykov; 07.01.2013 в 01:05.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.01.2013, 01:14   #5
Mixasnt
Пользователь
 
Регистрация: 07.10.2012
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
пусть в Edit1.Text исходное двоичное число.
и по нажатию на кнопку результат нужно поместить в Edit2.Text
тогда вешаем на кнопку такой код:
Код:
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;
огромное спасибо)
правда я не совсем въехал как она работает)



_______________
НЕ злоупотребляйте излишним цитированием!
Это нарушение называется overquoting (оверквотинг)
Удаляйте из цитаты лишний текст!

Модератор.


Последний раз редактировалось Serge_Bliznykov; 07.01.2013 в 02:14.
Mixasnt вне форума Ответить с цитированием
Старый 07.01.2013, 02:17   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
правда я не совсем въехал как она работает)
о!!
А если Вам дано, например, двоичное число 1100
Вы знаете, как его перевести в десятичное?

Вот по такому же принципу и программа переводит.
берёт крайнюю справа цифру (0) умножает на базу (сначала база равна 1)
сдвигает базу путём умножения её на два
потом следующуу справа цифру (0) умножает на базу (база уже равна 2)
сдвигает базу путём умножения её на два
потом следующуу справа цифру (1) умножает на базу (база уже равна 4)
сдвигает базу путём умножения её на два
потом следующуу справа цифру (1) умножает на базу (база уже равна 8)
суммирует результаты.
готово!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.01.2013, 14:06   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Автор темы в примере ясно показал
Повезло. Сам того не понимая пример четкий вписал )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод массива mTRIX C++ Builder 6 13.11.2012 00:14
Как сделать ввод в окно Едит и вывод в лейбл? (простая прога на Delphi) Игрушка96 Помощь студентам 9 28.03.2012 09:52
Зацикливает ввод массива Яна_Max Помощь студентам 2 07.11.2011 00:58
Ввод массива из файла aank10 C++ Builder 2 09.10.2011 12:46
ввод массива TotKtoNado БД в Delphi 16 19.06.2011 18:01