Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.03.2010, 18:37
Nostalgia Nostalgia вне форума
Прохожий
 
Регистрация: 29.12.2008
Сообщения: 15
Репутация: 10
По умолчанию очереди

задание такое: считывается целых чисел. Сформировать и вывести 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  
Старый 24.03.2010, 20:50
Аватар для W1ndow
W1ndow W1ndow вне форума
Новичок
 
Регистрация: 15.09.2009
Адрес: Березники
Сообщения: 61
Репутация: 16
По умолчанию

Ну у тебя там есть серьёзные ошибки, симантические то есть логика работы нарушена.
Во-первых 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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:22.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025