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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2012, 09:53   #1
Qwerik
Пользователь
 
Регистрация: 05.04.2010
Сообщений: 23
По умолчанию Считывание из поля Memo

Здравствуйте! Нужна помощь в написании программы. Язык программирования Delphi7.
задача состоит в том, что бы вычислить ASCII-код каждой буквы слова, введенного в поле Edit1, записать в десятичном виде в memo1, и в двоичном виде в memo2. Или просто сразу в двоичной системе счисления в memo1.
Вот так высчитываю ASCII-код каждой буквы и записываю в memo1:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
st:string;
s:string;
a:string;
b:string;
begin
 
S:=edit1.text;
for i:=1 to length(s) do
 
Form1.memo1.Lines.add(inttostr(ord(s[i])));
 
 
end;
Вот функция для перевода из десятичной СС в двоичную:
Код:
function Bin(x: Integer): string;
const t:array[0..1] of char = ('0','1');
var res:string;
d:0..1;
begin
res:='';
while (x<>0) do
begin
d:=x mod 2 ;
res:=t[d]+res;
x:=x div 2 ;
end;
Bin:=res;
 
end;
Не могу сделать так, что бы каждое число из мемо1 столбиком считывало и переводило в другую СС.
Помогите, пожалуйста!

Последний раз редактировалось Qwerik; 07.11.2012 в 10:01.
Qwerik вне форума Ответить с цитированием
Старый 07.11.2012, 10:15   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, функция Bin явно будет выдавать столько знаков, сколько значащих единиц в числе, но, если Вас она устраивает, тогда напишите так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, k : integer;
  s:string;
begin
 memo1.Clear; {очистка мемо1 - уберите, если очищать не нужно }
 memo2.Clear; {очистка мемо2 - уберите, если очищать не нужно }

 s:=edit1.text;
 for i:=1 to length(s) do begin
   k := ord(s[i]);
   memo1.Lines.append( inttostr(k) );
   memo2.Lines.append( Bin(k) );
 end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.11.2012, 10:18   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

либо так
Цитата:
что бы каждое число из мемо1 столбиком считывало и переводило в другую СС
Зачем читать из Мemo1? Надо сразу брать символ (уже есть)
и преобразовывать его сначала для Memo1(это есть) и потом (в этом же цикле) для Memo2.
Код:
r:=<получить число из символа>
s:=Bin(r);// получить строку с двоичным представлением
<добавить строку s в Меmo2>
Все что находится в <> уже есть в приведенном тобой коде!

но если хочется именно
Цитата:
каждое число из мемо1 столбиком считывало
то информация к размышлению
1. Мемо имеет набор строк (Lines: TStrings)
2. Набор строк имеет
2.1. количество строк в с списке count
2.2. индексированный список строк strings[5]: string
3. строка(string) это не число(integer), а запись числа символами(char)!
3.1. поэтому ее надо перевести в число strtoint
4.а уж число можно можно передать в функцию Bin и получить в результате строку двоичного представления.
5. и строку добавить в нужный Memo2.

P.S. код написать было б гораздо проще и быстрей, но ...
P.P.S.что вам и сделали.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 07.11.2012 в 10:21.
evg_m вне форума Ответить с цитированием
Старый 07.11.2012, 10:29   #4
Qwerik
Пользователь
 
Регистрация: 05.04.2010
Сообщений: 23
По умолчанию

Спасибо за ответ!
Только в случае вот такой записи:
Код:
k := ord(s[i]);
   memo1.Lines.append( inttostr(k) );
в memo1 заносится только ASCII-код последнего символа и дольше переводит в двоичную сс только его.
Qwerik вне форума Ответить с цитированием
Старый 07.11.2012, 10:37   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, это нужно делать в цикле (зачем Вы вырвали кусок из моего кода, да ещё и неправильно вырвали!!!
begin end зачем выкинули?!!!
Код:
   for i:=1 to length(s) do begin 
      k := ord(s[i]);
      memo1.Lines.append( inttostr(k) );
      memo2.Lines.append( Bin(k) );
  end
во-вторых, попытайтесь прочитать то, что Вам написал evg_m в пост #3

Последний раз редактировалось Serge_Bliznykov; 07.11.2012 в 10:40.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.11.2012, 10:44   #6
Qwerik
Пользователь
 
Регистрация: 05.04.2010
Сообщений: 23
По умолчанию

Serge_Bliznykov, прошу прощения. Я просто часть показала, что так не работает. А вообще само собой все в цикле, полностью. А то, что написал evg_m я полностью прочитала. Но уж простите. Как только не пыталась, у меня не получается. Извините еще раз.

Не могу понять, почему при записи:

Код:
memo1.Lines.append( inttostr(ord(s[i])) );
записывает в мемо1 ASCII-код каждого символа, а при записи:

Код:
k := ord(s[i]);
memo1.Lines.append( inttostr(k) );
записывает в мемо1 ASCII-код только последнего символа из Edit1

Помогите, пожалуйста.

Последний раз редактировалось Stilet; 07.11.2012 в 11:18.
Qwerik вне форума Ответить с цитированием
Старый 07.11.2012, 11:19   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Помогите, пожалуйста.
Читаем внимательно пост №5
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.11.2012, 11:24   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Stilet, +1

Цитата:
а при записи:
Код:
k := ord(s[i]);
memo1.Lines.append( inttostr(k) );
записывает в мемо1 ASCII-код только последнего символа из Edit1
этот код может вести себя так, как Вы описываете только в том случае, если он вынесен за цикл.

Ещё раз приведите сюда (скопируйте из редактора кода) ЦЕЛИКОМ код, который "висит" у Вас на обработке нажатия кнопки Button1
(целиком процедуру priocedure TForm1.Button1Click)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.11.2012, 11:29   #9
Qwerik
Пользователь
 
Регистрация: 05.04.2010
Сообщений: 23
По умолчанию

Спасибо, разобралась. Извините, что побеспокоила!
Qwerik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свойство Lines поля Memo Jaga_89 Общие вопросы Delphi 8 16.02.2012 18:11
Считывание из Memo в массив WiseElrond C++ Builder 1 24.10.2011 00:00
Построчное считывание информации memo xpams Компоненты Delphi 2 16.09.2011 19:36
Считывание данных со скрытого поля Claster Помощь студентам 2 09.09.2011 23:01
Как сделать посточное считывание с Memo Sanek777 Общие вопросы Delphi 19 25.09.2008 23:43