Связные списки, переписать код с использованием Case - PascalABC.NET
Формулировка задачи:
Препода не устраивает "простыня" вот в этом куске. требует переписать кейсами, но как-то не ахти получается, выручите пожалуйста
procedure mousedown(x, y, mb: integer); // обработчик событий мыши(кнопки, операции, цвета и все все и меню) begin if ((x >= 0) and (x < 150) and (y >= 0) and (y < 30)) then begin op := 1; setpencolor(clred); drawrectangle(0, 0, 150, 30); setpencolor(clblack); drawrectangle(150, 0, 300, 30); drawrectangle(300, 0, 450, 30); drawrectangle(450, 0, 600, 30); drawrectangle(600, 0, 750, 30); drawrectangle(750, 0, 900, 30); end else if ((x >= 150) and (x < 300) and (y >= 0) and (y < 30)) then begin op := 2; setpencolor(clred); drawrectangle(150, 0, 300, 30); setpencolor(clblack); drawrectangle(0, 0, 150, 30); drawrectangle(300, 0, 450, 30); drawrectangle(450, 0, 600, 30); drawrectangle(600, 0, 750, 30); drawrectangle(750, 0, 900, 30); end else if ((x >= 300) and (x < 450) and (y >= 0) and (y < 30)) then begin op := 3; setpencolor(clred); drawrectangle(300, 0, 450, 30); setpencolor(clblack); drawrectangle(150, 0, 300, 30); drawrectangle(0, 0, 150, 30); drawrectangle(450, 0, 600, 30); drawrectangle(600, 0, 750, 30); drawrectangle(750, 0, 900, 30); end else if ((x >= 450) and (x < 600) and (y >= 0) and (y < 30)) then begin op := 4; setpencolor(clred); drawrectangle(450, 0, 600, 30); setpencolor(clblack); drawrectangle(150, 0, 300, 30); drawrectangle(300, 0, 450, 30); drawrectangle(0, 0, 150, 30); drawrectangle(600, 0, 750, 30); drawrectangle(750, 0, 900, 30); redrawall(head); op := 1; setpencolor(clred); drawrectangle(0, 0, 150, 30); setpencolor(clblack); drawrectangle(150, 0, 300, 30); drawrectangle(300, 0, 450, 30); drawrectangle(450, 0, 600, 30); drawrectangle(600, 0, 750, 30); drawrectangle(750, 0, 900, 30); setpencolor(clred); drawrectangle(5, 55, 45, 95); setpencolor(clblack); clr := clyellow; drawrectangle(5, 95, 45, 135); drawrectangle(5, 135, 45, 175); drawrectangle(5, 175, 45, 215); drawrectangle(5, 215, 45, 255); drawrectangle(5, 255, 45, 295); drawrectangle(5, 295, 45, 335); drawrectangle(5, 335, 45, 375); drawrectangle(5, 375, 45, 415); drawrectangle(5, 415, 45, 455); end else if ((x >= 600) and (x < 750) and (y >= 0) and (y < 30)) then begin op := 5; setpencolor(clred); drawrectangle(600, 0, 750, 30); setpencolor(clblack); drawrectangle(150, 0, 300, 30); drawrectangle(300, 0, 450, 30); drawrectangle(450, 0, 600, 30); drawrectangle(0, 0, 150, 30); drawrectangle(750, 0, 900, 30); deleteall(head); op := 1; setpencolor(clred); drawrectangle(0, 0, 150, 30); setpencolor(clblack); drawrectangle(150, 0, 300, 30); drawrectangle(300, 0, 450, 30); drawrectangle(450, 0, 600, 30); drawrectangle(600, 0, 750, 30); drawrectangle(750, 0, 900, 30); setpencolor(clred); drawrectangle(5, 55, 45, 95); setpencolor(clblack); clr := clyellow; drawrectangle(5, 95, 45, 135); drawrectangle(5, 135, 45, 175); drawrectangle(5, 175, 45, 215); drawrectangle(5, 215, 45, 255); drawrectangle(5, 255, 45, 295); drawrectangle(5, 295, 45, 335); drawrectangle(5, 335, 45, 375); drawrectangle(5, 375, 45, 415); drawrectangle(5, 415, 45, 455); end else if ((x >= 750) and (x <= 900) and (y >= 0) and (y < 30)) then ext else if ((x >= 5) and (x <= 45) and (y >= 55) and (y < 95)) then begin setpencolor(clred); drawrectangle(5, 55, 45, 95); setpencolor(clblack); clr := clyellow; drawrectangle(5, 95, 45, 135); drawrectangle(5, 135, 45, 175); drawrectangle(5, 175, 45, 215); drawrectangle(5, 215, 45, 255); drawrectangle(5, 255, 45, 295); drawrectangle(5, 295, 45, 335); drawrectangle(5, 335, 45, 375); drawrectangle(5, 375, 45, 415); drawrectangle(5, 415, 45, 455); end else if ((x >= 5) and (x <= 45) and (y >= 95) and (y < 135)) then begin setpencolor(clred); drawrectangle(5, 95, 45, 135); setpencolor(clblack); drawrectangle(5, 55, 45, 95); clr := clgreen; drawrectangle(5, 135, 45, 175); drawrectangle(5, 175, 45, 215); drawrectangle(5, 215, 45, 255); drawrectangle(5, 255, 45, 295); drawrectangle(5, 295, 45, 335); drawrectangle(5, 335, 45, 375); drawrectangle(5, 375, 45, 415); drawrectangle(5, 415, 45, 455); end else if ((x >= 5) and (x <= 45) and (y >= 135) and (y < 175)) then begin setpencolor(clred); drawrectangle(5, 135, 45, 175); setpencolor(clblack); drawrectangle(5, 55, 45, 95); drawrectangle(5, 95, 45, 135); clr := clblue; drawrectangle(5, 175, 45, 215); drawrectangle(5, 215, 45, 255); drawrectangle(5, 255, 45, 295); drawrectangle(5, 295, 45, 335); drawrectangle(5, 335, 45, 375); drawrectangle(5, 375, 45, 415); drawrectangle(5, 415, 45, 455); end else if ((x >= 5) and (x <= 45) and (y >= 175) and (y < 215)) then begin setpencolor(clred); drawrectangle(5, 175, 45, 215); setpencolor(clblack); drawrectangle(5, 55, 45, 95); drawrectangle(5, 95, 45, 135); drawrectangle(5, 135, 45, 175); clr := clsilver; drawrectangle(5, 215, 45, 255); drawrectangle(5, 255, 45, 295); drawrectangle(5, 295, 45, 335); drawrectangle(5, 335, 45, 375); drawrectangle(5, 375, 45, 415); drawrectangle(5, 415, 45, 455); end else if ((x >= 5) and (x <= 45) and (y >= 215) and (y < 255)) then begin setpencolor(clred); drawrectangle(5, 215, 45, 255); setpencolor(clblack); drawrectangle(5, 55, 45, 95); drawrectangle(5, 95, 45, 135); drawrectangle(5, 135, 45, 175); drawrectangle(5, 175, 45, 215); clr := clorange; drawrectangle(5, 255, 45, 295); drawrectangle(5, 295, 45, 335); drawrectangle(5, 335, 45, 375); drawrectangle(5, 375, 45, 415); drawrectangle(5, 415, 45, 455); end else if ((x >= 5) and (x <= 45) and (y >= 255) and (y < 295)) then begin setpencolor(clred); drawrectangle(5, 255, 45, 295); setpencolor(clblack); drawrectangle(5, 55, 45, 95); drawrectangle(5, 95, 45, 135); drawrectangle(5, 135, 45, 175); drawrectangle(5, 175, 45, 215); drawrectangle(5, 215, 45, 255); clr := clbrown; drawrectangle(5, 295, 45, 335); drawrectangle(5, 335, 45, 375); drawrectangle(5, 375, 45, 415); drawrectangle(5, 415, 45, 455); end else if ((x >= 5) and (x <= 45) and (y >= 295) and (y < 335)) then begin setpencolor(clred); drawrectangle(5, 295, 45, 335); setpencolor(clblack); drawrectangle(5, 55, 45, 95); drawrectangle(5, 95, 45, 135); drawrectangle(5, 135, 45, 175); drawrectangle(5, 175, 45, 215); drawrectangle(5, 215, 45, 255); drawrectangle(5, 255, 45, 295); clr := clcyan; drawrectangle(5, 335, 45, 375); drawrectangle(5, 375, 45, 415); drawrectangle(5, 415, 45, 455); end else if ((x >= 5) and (x <= 45) and (y >= 335) and (y < 375)) then begin setpencolor(clred); drawrectangle(5, 335, 45, 375); setpencolor(clblack); drawrectangle(5, 55, 45, 95); drawrectangle(5, 95, 45, 135); drawrectangle(5, 135, 45, 175); drawrectangle(5, 175, 45, 215); drawrectangle(5, 215, 45, 255); drawrectangle(5, 255, 45, 295); drawrectangle(5, 295, 45, 335); clr := clmagenta; drawrectangle(5, 375, 45, 415); drawrectangle(5, 415, 45, 455); end else if ((x >= 5) and (x <= 45) and (y >= 375) and (y < 415)) then begin setpencolor(clred); drawrectangle(5, 375, 45, 415); setpencolor(clblack); drawrectangle(5, 55, 45, 95); drawrectangle(5, 95, 45, 135); drawrectangle(5, 135, 45, 175); drawrectangle(5, 175, 45, 215); drawrectangle(5, 215, 45, 255); drawrectangle(5, 255, 45, 295); drawrectangle(5, 295, 45, 335); drawrectangle(5, 335, 45, 375); clr := clgold; drawrectangle(5, 415, 45, 455); end else if ((x >= 5) and (x <= 45) and (y >= 415) and (y < 455)) then begin setpencolor(clred); drawrectangle(5, 415, 45, 455); setpencolor(clblack); drawrectangle(5, 55, 45, 95); drawrectangle(5, 95, 45, 135); drawrectangle(5, 135, 45, 175); drawrectangle(5, 175, 45, 215); drawrectangle(5, 215, 45, 255); drawrectangle(5, 255, 45, 295); drawrectangle(5, 295, 45, 335); drawrectangle(5, 335, 45, 375); drawrectangle(5, 375, 45, 415); clr := clpurple; end else if ((x >= 855) and (x <= 895) and (y >= 55) and (y < 95)) then begin setpencolor(clred); drawrectangle(855, 55, 895, 95); setpencolor(clblack); mrkr := 1; drawrectangle(855, 95, 895, 135); drawrectangle(855, 135, 895, 175); drawrectangle(855, 175, 895, 215); drawrectangle(855, 215, 895, 255); end else if ((x >= 855) and (x <= 895) and (y >= 135) and (y < 175)) then begin setpencolor(clred); drawrectangle(855, 135, 895, 175); setpencolor(clblack); drawrectangle(855, 55, 895, 95); drawrectangle(855, 95, 895, 135); mrkr := 2; drawrectangle(855, 175, 895, 215); drawrectangle(855, 215, 895, 255); end else if ((x >= 855) and (x <= 895) and (y >= 215) and (y <= 255)) then begin setpencolor(clred); drawrectangle(855, 215, 895, 255); setpencolor(clblack); drawrectangle(855, 55, 895, 95); drawrectangle(855, 95, 895, 135); drawrectangle(855, 135, 895, 175); drawrectangle(855, 175, 895, 215); mrkr := 3; end else if ((x > 55) and (x < 845) and (y > 40) and (y < 490)) then if op = 1 then begin newnode(x, y, clr, mrkr); drawnode(p); end else if op = 2 then deletenode(x, y, head) else if op = 3 then movenode(x, y, head); end;
Код к задаче: «Связные списки, переписать код с использованием Case - PascalABC.NET»
uses GraphABC; var MouseX, MouseY : Integer; myProcedure : procedure; type /// Кнопка tButton = class private X, Y, Width, Height : Integer; Text : String; btnSelect : Boolean; proc : procedure; procedure Show; begin if btnSelect then begin Brush.Color := RGB(128, 128, 255); Font.Color := RGB(255, 255, 0); end else begin Brush.Color := RGB(192, 192, 192); Font.Color := RGB(255, 255, 0); end; Font.Style := fsBold; FillRectangle(X, Y, X + Width, Y + Height); DrawTextCentered(X + 1, Y + 1, X + Width - 1, Y + Height - 1, Text); end; constructor Create(X, Y, Width, Height : Integer; Text : String; proc : procedure); begin Self.X := X; Self.Y := Y; Self.Width := Width; Self.Height := Height; Self.Text := Text; btnSelect := False; Self.proc := proc; Show; end; procedure Select; begin btnSelect := Not btnSelect; Show; if btnSelect then myProcedure := proc; end; function MouseDown(mouseX, mouseY : Integer) := (mouseX > X) and (mouseX < X + Width) and (mouseY > Y) and (mouseY < Y + Height); end; procedure Slider; begin PutPixel(MouseX, MouseY, clBlack); end; procedure None; begin end; const btnsCount = 2; var btns : array [1..btnsCount] of tButton; procedure MouseDown(x, y, mb : Integer); begin // Может это кнопка? for var num := 1 to btnsCount do if btns[num].MouseDown(x, y) then begin btns[num].Select; // Эту включим for var i := 1 to btnsCount do if (i <> num) and btns[i].btnSelect then btns[i].Select; // Другие погасим Exit; // Событие отловлено. Другие не нужны end; // Обработка других событий end; procedure MouseMove(x, y, mb : Integer); begin MouseX := X; MouseY := Y; myProcedure; end; begin SetWindowSize(900, 500); myProcedure := None; btns[1] := New tButton( 2, 2, 180, 20, 'Создать маркер', Slider); btns[2] := New tButton(202, 2, 180, 20, 'Удалить маркер', None ); OnMouseDown := MouseDown; OnMouseMove := MouseMove; end.

Эта работа вам не подошла?
Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.
СДЕЛАЙТЕ РЕПОСТ
7 голосов, оценка 3.857 из 5
Похожие ответы