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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2010, 20:53   #1
Nostalgia
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 44
По умолчанию как считать масив с эдита ?

задание такое: считывается целых чисел. Сформировать и вывести 2 очереди - парных и непарных чисел. Использовать структуру данных "очередь".
обратите внимание на обработчик события Button1Click. ошибка где то там. мне нужно чтобы в Edit1 предлагалось ввести строку,нажав на кнопку Button2 должна происходить обработка цифр в строке(в мемо 1 отправляются четные цифры, в мемо2- нечетные). Подскажите пожалуйста как єто сделать ..проблема в том, что мне в Эдит нужно вводить не одну цифру, а строку цифр через пробел и они должны обрабатыватся(четные цифры в мемо1, нечетные в мемо2). есть какие-то идеи как єто реализовать ?
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,unit2, StdCtrls;
const n=15;
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    Label4: TLabel;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  q1,q2:TQueue;
  
implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
var
  S:array[1..n] of char;
i:byte;

begin
Edit1.Text:=s;
for i:=1 to n do
read (S[i]);
if edit1.text<>'' then
if strtoint(edit1.text) mod 2=0 then
q1.qAdd(strtoint(edit1.Text))
else
q2.qAdd(strtoint(edit1.Text))
else
showmessage('введите значение');
edit1.Text:='';   
end;




procedure TForm1.Button2Click(Sender: TObject);
begin
if not q1.qempty then
q1.view(memo1)
else
begin
memo1.Lines.Clear;
memo1.Lines.Add('четніх єлементов нет');
end;
if not q2.qempty then
q2.view(memo2)
else
begin
memo2.Lines.Clear;
memo2.Lines.Add('нечетніх єлементов нет');
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
q1.Free;
q2.Free;
form1.Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
q1:=TQueue.Create;
q2:=TQueue.Create;
end;

end.

unit Unit2;
interface
    uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
  type
  data=integer;        // òèï åëåìåíò³â ÷åðãè
  link=^node;
  node=record
       inf:data;         // ³íôîðìàö³éíå ïîëå
       next:link;      // âêàç³âíèê íà íàñòóïíèé åëåìåíò
       end;
  TQueue=class
	private
        begQ:link;   //âêàç³âíèê íà ãîëîâó ÷åðãè
        endQ:link;   //âêàç³âíèê íà õâ³ñò ÷åðãè
public
        constructor create;  //êîíñòðóêòîð

        function qempty:boolean; //ïåðåâ³ðêà ÷è ïîðîæíÿ ÷åðãà
        procedure qAdd(elem:data); //äîäàâàííÿ åëåìåíòó
        procedure qDel;  // âèëó÷åííÿ åëåìåíòó
        procedure view(m:Tmemo); //ïåðåãëÿä åëåìåíò³â ÷åðãè
        end;
implementation
constructor TQueue.create;
        begin
        endQ:=nil;
        begQ:=nil;
end;
function TQueue.qempty;
        begin
        result:=begQ=nil;
        end;
procedure TQueue.qAdd;
var help:link;
begin
new(help);
help^.inf:=elem;
help^.next:=nil;
if qempty then
begin
endQ:=help;
begQ:=help;
end
else
begin
endQ^.next:=help;
endQ:=help;
end;
end;

procedure TQueue.qDel;
var help:link;
begin
help:=begQ;
if not qempty then
begin
begQ:=begQ^.next;
dispose(help);
end
else showmessage('÷åðãà ïîðîæíÿ');
if begQ=nil then endQ:=nil;
end;

procedure TQueue.view;
var cur:link;
begin
m.Lines.Clear;
cur:=begQ;
while cur<>nil do
begin
m.Lines.add(inttostr(cur^.inf));
cur:=cur^.next;
end;
end;
end.
Вложения
Тип файла: rar 3.rar (173.0 Кб, 6 просмотров)
Nostalgia вне форума Ответить с цитированием
Старый 22.03.2010, 21:51   #2
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

Это реализовывается проще
Идея такая, считываем по символу из строки и переводим в цифру, далее делим с остатком, если остаток равен 0 то записываем в первое мемо, а если больше 0 то во второе.
Все остальное зачем вообще?

Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
i,r:Integer;
s:String;
begin
s:=Edit1.Text;
for i:=1 to length(s) do
 begin
  r:=strtoint(copy(s,i,1)) mod 2;
  if r=0 then
   memo1.Lines.Add(copy(s,i,1))
  else
   memo2.Lines.Add(copy(s,i,1));
 end;
end;
А обработчики всяких ситуаций типа не то ввели, думаю сам наростишь.
Шипулин А. В.

Последний раз редактировалось Шульц; 22.03.2010 в 22:01.
Шульц вне форума Ответить с цитированием
Старый 22.03.2010, 22:54   #3
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Функция Odd возвращает true если число четное и false нечетное.
psycho-coder вне форума Ответить с цитированием
Старый 23.03.2010, 20:56   #4
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

НУ вот еще проще Надо запомнить
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование Эдита, чтобы была видна каретка. Zeraim Общие вопросы Delphi 3 28.02.2010 23:27
Как считать часы? tararam Microsoft Office Excel 4 18.09.2009 01:06
Как избавиться от появления хвоста за движением эдита edit? Горожанин Мультимедиа в Delphi 9 30.04.2009 14:40
Как считать строки? Черничный Общие вопросы Delphi 14 01.09.2008 14:56
Запись слов из эдита с конца Zeraim Общие вопросы Delphi 7 04.06.2008 18:28