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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2009, 22:37   #1
galinka
 
Регистрация: 13.06.2009
Сообщений: 5
По умолчанию Помогите, пожалуйста дописать программку на Delphi

У меня задание написать программку, в которой вводится число в десятичном виде, надо преобразовать его в прямой код в зависимости от выбранного представления в памяти в 1 или 2 байта,сформировать окна для вывода обратного и дополнительного кода. туда пользователь сам вносит ответ, а программа должна проверить верный ли он.Вот что написала, но у меня ошибки возникают.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var a1,a,i,n,q,j:integer;
f:string;
begin
k:=8*strtoint(bit.Text);
a:=strtoint(edit1.Text);
pich(abs(a),f);
n:=length(f);
setlength(ed,k);
setlength(ed1,k);
setlength(ed2,k);
for i:=0 to (k-2) do begin
  Ed[i]:=TEdit.Create(self);
  with Ed[i] do begin
    parent:=Form1;
          Left:=340-20*i;
          Top:=160;
          visible:=true;
          width:=20;
          height:=20;
          if (i<n) then text:=f[n-i]
          else text:='0';
   end;
end;
if (pos('-',edit1.Text)=1) then begin
  Ed[i+1]:=TEdit.Create(self);
  with Ed[i+1] do begin
    parent:=Form1;
          Left:=335-20*i;
          Top:=160;
          visible:=true;
          width:=20;
          height:=20;
          text:='1';
   end;
end
else begin
  Ed[i+1]:=TEdit.Create(self);
  with Ed[i+1] do begin
    parent:=Form1;
          Left:=335-20*i;
          Top:=160;
          visible:=true;
          width:=20;
          height:=20;
          text:='0';
   end;
end;
for j:=0 to (k-2) do begin
  Ed1[j]:=TEdit.Create(self);
  with Ed1[j] do begin
    parent:=Form1;
          Left:=340-20*j;
          Top:=200;
          visible:=true;
          width:=20;
          height:=20;
  end;
end;
if (pos('-',edit1.Text)=1) then begin
  Ed1[j+1]:=TEdit.Create(self);
  with Ed1[j+1] do begin
    parent:=Form1;
          Left:=335-20*j;
          Top:=200;
          visible:=true;
          width:=20;
          height:=20;
          text:='1';
   end;
end
else begin
  Ed1[j+1]:=TEdit.Create(self);
  with Ed1[j+1] do begin
    parent:=Form1;
          Left:=335-20*j;
          Top:=200;
          visible:=true;
          width:=20;
          height:=20;
          text:='0';
   end;
end;
for q:=0 to (k-2) do begin
  Ed2[q]:=TEdit.Create(self);
  with Ed2[q] do begin
    parent:=Form1;
          Left:=340-20*q;
          Top:=240;
          visible:=true;
          width:=20;
          height:=20;
  end;
end;
if (pos('-',edit1.Text)=1) then begin
  Ed2[q+1]:=TEdit.Create(self);
  with Ed2[q+1] do begin
    parent:=Form1;
          Left:=335-20*q;
          Top:=240;
          visible:=true;
          width:=20;
          height:=20;
          text:='1';
   end;
end
else begin
  Ed2[q+1]:=TEdit.Create(self);
  with Ed2[q+1] do begin
    parent:=Form1;
          Left:=335-20*q;
          Top:=240;
          visible:=true;
          width:=20;
          height:=20;
          text:='0';
   end;
end;
end;

Последний раз редактировалось galinka; 16.06.2009 в 22:39.
galinka вне форума Ответить с цитированием
Старый 16.06.2009, 22:38   #2
galinka
 
Регистрация: 13.06.2009
Сообщений: 5
По умолчанию

это остальная часть программы
Код:
procedure TForm1.Button2Click(Sender: TObject);
var perenos,otvet:boolean;
    i:integer;
begin
k:=8*strtoint(bit.Text);
//проверка обратного кода
if (pos('-',edit1.Text)=1) then begin
perenos:=true;
i:=0;
while (perenos<>false) and (i<k-1) do begin
if (ed[i].Text=ed1[i].Text) then
perenos:=false
else perenos:=true;
inc(i);
end;
if (perenos=true) then showmessage('Обратный код правильный!')
 else showmessage('Обратный код не правильный!');
end
else begin
perenos:=true;
i:=0;
while (perenos<>false) and (i<k-1) do begin
if (ed[i].Text=ed1[i].Text) then
perenos:=true
else perenos:=false;
inc(i);
end;
if (perenos=true) then showmessage('Обратный код правильный!')
 else showmessage('Обратный код не правильный!');
end;

//проверка дополнительнго кода
if (pos('-',edit1.Text)=1) then begin
perenos:=true;   i:=0;  otvet:=true;
while (otvet=true) and (i<k-1)do begin
  if (perenos=true) then
  begin
    if (ed1[i].Text='1') then
    begin
      if (ed2[i].Text='1') then begin  otvet:=false; end;
    end
    else
    if (ed1[i].Text='0') then begin
      if (ed2[i].Text='0') then begin otvet:=false;  end;
      perenos:=false;
    end;
  end
  else
    if(ed1[i].Text<>ed2[i].Text)then begin otvet:=false;   end;
  inc(i);
end;
if otvet=false then showmessage('Дополнительный код не правильный!')
else showmessage('Дополнительный код правильный!');
end
else begin
perenos:=true;
i:=0;
while (perenos<>false) and (i<k-1)do begin
if (ed[i].Text=ed2[i].Text)then
perenos:=true
else perenos:=false;
inc(i);
end;
if (perenos=false) then showmessage('Дополнительный код не правильный!')
 else showmessage('Дополнительный код правильный!');
end;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
#8, '0'..'9','-': ;
else
Key:=Chr(0);
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
begin

edit1.Clear;
bit.Text:='1';
for i:=0 to k do FreeAndNil(Ed[i]);
for i:=0 to k do FreeAndNil(Ed1[i]);
for i:=0 to k do FreeAndNil(Ed2[i]);
end;

procedure TForm1.Button4Click(Sender: TObject);
var i:integer;
begin
edit1.Clear;
bit.Text:='1';
for i:=0 to k do FreeAndNil(Ed[i]);
for i:=0 to k do FreeAndNil(Ed1[i]);
for i:=0 to k do FreeAndNil(Ed2[i]);
form1.Close;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageDlg('Вы действительно хотите выйти?',mtWarning,[mbYes,mbNo],0) = mrNo then
    CanClose:=False
end;
galinka вне форума Ответить с цитированием
Старый 16.06.2009, 22:50   #3
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

Ух!!!Ё-ё-ё-ё.... ну и кодинг! А попроще нельзя было?! Тут же без бутылки кефира и пачки печенья не разобраться...
И ответов нет ни от кого... Не удивительно.
Маленьктй советик, на комментарии не поскупитесь, пожалуйста, чтоб люди понимали, где какая формула что делает в каждой строчке, да и самой легче будет вспоминать, что делает эта программа.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 16.06.2009, 22:57   #4
galinka
 
Регистрация: 13.06.2009
Сообщений: 5
По умолчанию

В первой процедуре - нажатие кнопки 1, происходит формирование прямого кода числа и соответствующих полей для ответов пользователя.
Дальше на второй кнопке идет проверка правильности введенного обратного и дополнительнго кодов, думаю, это понятно. а вот в остальных процедурах возникают ошибки, при уничтожении созданных элементов, а также при закрытии формы, выдает сообщение, что не правильный адрес.
Не знаю как еще подробнй описать
galinka вне форума Ответить с цитированием
Старый 17.06.2009, 09:01   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Галина, вместо запостеного впустую кода лучше кинь в архив проект и прикрепи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2009, 13:46   #6
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Вы создаёте обекты в цикле:
Код:
for i:=0 to (k-2) do begin
  Ed[i]:=TEdit.Create(self);
и плюс
Код:
if (pos('-',edit1.Text)=1) then begin
  Ed[i+1]:=TEdit.Create(self);
, а уничтожаете:
Код:
for i:=0 to k do FreeAndNil(Ed[i]);
при чём в двух местах, что может привести к попытке удаления несуществующих обектов. Перед уничтожением обекта не мешало бы проверить его существование.
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Старый 18.06.2009, 21:01   #7
galinka
 
Регистрация: 13.06.2009
Сообщений: 5
По умолчанию

Спасибо за помощь, уже сама разобралась)).
А как перевести действительное десятичное число в 8-байтовое представлении в компьютере с помощью Delphi?
galinka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, дописать программу на C++ (построение эквивалентной логической функции) Anastasiya209 Помощь студентам 0 07.06.2009 23:58
Помогите пожалуйста составить программку с использованием функций и процедур ЛесенОК Помощь студентам 1 17.02.2009 18:27
Помогите пожалуйста дописать программу Xan Помощь студентам 5 16.02.2009 09:18
Помогите Пожалуйста Найти Одну Программку mustaa Свободное общение 1 18.01.2007 02:44