Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывести в memo от 00000000 до 11111111 
:(
    Опции темы
RaIDeR
Дата 21.7.2005, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2005

Репутация: 1
Всего: 4



Здравствуйте ! Помогите составить алгоритм который выведет
в memo от 0 до 255 в двоичной системе т.е от 00000000 до 11111111.
Как бы это всё зациклить ... просто ручками писать долго smile

Заранее благодарен.
PM MAIL   Вверх
chaos
Дата 21.7.2005, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



вот черкнул тебе программку правда на С(первести думаю не сложно будет тк в ней нет ни чего...)
Код

#include <stdio.h>

void PrintBin(int n)
{
    for (int i = 7; i > -1; i--)
        ((n >> i) & 0x01) ? printf("1") : printf("0");
    printf("\n");
}

int main(int argc, char* argv[])
{
    for (int i = 0; i < 256; i++)
        PrintBin(i);
    return 0;
}



или так еще можно (n & (1 << i))

просьба модераторам не бить за код на С smile

Это сообщение отредактировал(а) chaos - 21.7.2005, 12:46
PM WWW   Вверх
Girder
Дата 21.7.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Код
procedure TForm1.Button1Click(Sender: TObject);
var b:Byte;
    i:integer;
    s:string;
begin
 s:='00000000';
 for b:=0 to $FF do
  begin
   for i:=0 to 7 do
    if (b and ($80 shr i))>0 then s[i+1]:='1' else s[i+1]:='0';
   Memo1.Lines.Add(s);
  end;
end;



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Poseidon
Дата 21.7.2005, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Код
function IntToBin(Value: integer; Digits: integer): string;
var
  i: integer;
begin
  result := '';
  for i := 0 to Digits - 1 do begin
    if Value and (1 shl i) > 0
      then result := '1' + result
      else result := '0' + result;
  end;
end; 

procedure TForm1.Button1Click(Sender: TObject);
var a, i: Integer;
begin
for i:= 0 to 255 do
  begin
  a:= StrToInt(IntToBin(StrToIntDef(IntToStr(i), 0), 10));
  Memo1.Lines.Add(IntToStr(a));
  end;
end;



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
SoWa
Дата 21.7.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



А теперь весь этот код впиши в Thread и будешь рад не тормозящей программе.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Poseidon
Дата 21.7.2005, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



SoWa, все ради вас smile
Код
function IntToBin(Value: integer; Digits: integer): string;
var
  i: integer;
begin
  result := '';
  for i := 0 to Digits - 1 do begin
    if Value and (1 shl i) > 0
      then result := '1' + result
      else result := '0' + result;
  end;
end;

procedure MemoAdd;
var a, i: Integer;
begin
for i:= 0 to 255 do
  begin
  a:= StrToInt(IntToBin(StrToIntDef(IntToStr(i), 0), 10));
  Form1.Memo1.Lines.Add(IntToStr(a));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
h:cardinal;
begin
CreateThread(nil,128,@MemoAdd,self,0,h);
end;


PS. Только у меня и предыдущий код не сильно уж вешал прогу. smile


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
RaIDeR
Дата 21.7.2005, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2005

Репутация: 1
Всего: 4



Спасибо всем большое ! smile
PM MAIL   Вверх
Петрович
Дата 22.7.2005, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата(Poseidon @ 21.7.2005, 21:04)
SoWa, все ради вас ...

Poseidon, да будет Вам известно что VCL не реентерабельна! А посему, подобное использование ее компонентов (Form1.Memo1.Lines.Add(IntToStr(a))) внутри не не основного потока НЕ ДОПУСТИМО! Это приводит к возникновению трудно выявимых ошибок.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Poseidon
Дата 22.7.2005, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата
Это приводит к возникновению трудно выявимых ошибок.
Трудно не согласится. Но в данном случае, когда код, да и сама опирация, не сложны, такой проблемы нет. В других случаях возможно. Но нужно-ли усложнять код для простого примера?



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Петрович
Дата 22.7.2005, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата(Poseidon @ 22.7.2005, 13:35)
Но нужно-ли усложнять код для простого примера?

Увы, обязательно!
Дело в том, что человек после учебы на "простом" примере, будет переносить такой подход и на сложные примеры, и на реальные программы. А ошибки в мультипоточных приложениях тем и плохи, что у автора на компе это может ввоще ни разу не привести в ошибкам, а у пользователя - нате вам. Но, даже если и у автора будут возникать ошибки, то лишь время от времени. По собственному опытку знаю - ловить такие ошибки крайне тяжело, практически невозможно. Только полным переписыванием программы!
Вот например, сейчас вынужден держать отключенным режим Hyper-Threading у своего компа только лишь потому что автор одиной из программ которой я пользуюсь не позаботился о потокобезопасности кода в своей программе. Вот и происходит что при загрузке он даже ось умудряется поставить ра*ом. Причем, автор не доступен, и отказаться от проги пока не могу smile.



Это сообщение отредактировал(а) Girder - 22.7.2005, 13:18


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Poseidon
Дата 22.7.2005, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Петрович, если не лень, приведи пример правильного кода. А то водать так со мной и приключилось:
Цитата
Дело в том, что человек после учебы на "простом" примере, будет переносить такой подход и на сложные примеры, и на реальные программы.
Конечно не всегда, но я пользуюсь этим "ошибочным" вариантом.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Петрович
Дата 22.7.2005, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата(Poseidon @ 22.7.2005, 15:36)
Петрович, если не лень, приведи пример правильного кода.

Ща некогда. Вечерком постараюсь набросать.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Marriage
Дата 22.7.2005, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Петрович
Всегда пользовался методом
Код
Synchronize
, если есть обращение к VCL.
Это являеться привильным ?????


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Poseidon
Дата 22.7.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Marriage @ 22.7.2005, 15:24)
Это являеться привильным ?????
Лично я думаю является. Т.к.:
Цитата
procedure Synchronize(Method: TThreadMethod);

Этот метод относится к секции protected, т. е. может быть вызван только из потомков TThread.

Delphi предоставляет программисту метод Synchronize для безопасного вызова методов VCL внутри потоков. Во избежание конфликтных ситуаций, метод synchronize дает гарантию, что к каждому объекту VCL одновременно имеет доступ только один поток.





--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Poseidon
Дата 22.7.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Вот набросал тут немного. Так правильно?

Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure MemoAdd;
  end;

type
  TMyThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}
function IntToBin(Value: integer; Digits: integer): string;
var
  i: integer;
begin
  result := '';
  for i := 0 to Digits - 1 do begin
    if Value and (1 shl i) > 0
      then result := '1' + result
      else result := '0' + result;
  end;
end;

procedure TForm1.MemoAdd;
var a, i: Integer;
begin
for i:= 0 to 255 do
  begin
  a:= StrToInt(IntToBin(StrToIntDef(IntToStr(i), 0), 10));
  Memo1.Lines.Add(IntToStr(a));
  end;
end;

procedure TMyThread.Execute;
begin
Synchronize(Form1.MemoAdd)
end;

procedure TForm1.Button1Click(Sender: TObject);
var Thread: TMyThread;
begin
Thread:= TMyThread.Create(False);
end;

end.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0994 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.