![]() |
|
#1
|
|||
|
|||
![]() задание такое: считывается целых чисел. Сформировать и вывести 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. |
#2
|
||||
|
||||
![]() Ну у тебя там есть серьёзные ошибки, симантические то есть логика работы нарушена.
Во-первых string это и есть массив из символов Во-вторых ты там присваеваешь Edit1.Text:=s; хотя должно быть наоборот. Вот тебе верный вариант. Код:
procedure TForm1.Button1Click(Sender: TObject); var s: string; i: integer; begin s:=Edit1.Text; For i:=1 to Length(s) do if StrToInt(s[i]) mod 2 = 0 then Memo1.Lines.Add(s[i]) else Memo2.Lines.Add(s[i]); end; |