Нужно срочно сделать меню для программы
1. Работа самой программы
2. Выход.
Заранее спасибо, буду очень благодарен за помощь.
Вот и сам програмный код:
Код:
Program 1;
uses crt;
const nmax=20;
var A,D,U:array[1..nmax,1..nmax]of integer;
ka,la,kd,ld,i,j,r:integer;
begin
clrscr;
randomize;
writeln('Razmery matricy A:');
repeat
write('Kolichestvo strok ka=');readln(ka);
until (ka>0)and(ka<=nmax);
repeat
write('Kolichestvo stolbcov la=');readln(la);
until (la>0)and(la<=nmax);
writeln('Razmery matricy D:');
repeat
write('Kolichestvo strok kd=');readln(kd);
until (kd>0)and(kd<=nmax);
repeat
write('Kolichestvo stolbcov ld=');readln(ld);
until (ld>0)and(ld<=nmax)and(ld=ka); {количество столбцов второй матрицы должно быть равно количеству строк первой матрицы}
writeln('Matrica A:');
for i:=1 to ka do
begin
for j:=1 to la do
begin
A[i,j]:=random(9)+1;
write(A[i,j]:3);
end;
writeln;
end;
readln;
writeln('Matrica D:');
for i:=1 to kd do
begin
for j:=1 to ld do
begin
D[i,j]:=random(9)+1;
write(D[i,j]:3);
end;
writeln;
end;
readln;
for r:=1 to ka do
for j:=1 to ld do
begin
U[r,j]:=0;
for i:=1 to la do
begin
U[r,j]:=U[r,j]+A[r,i]*D[i,j];
end;
end;
writeln('Matrica U=A*D:');
for i:=1 to ka do
begin
for j:=1 to ld do
write(U[i,j]:5);
writeln;
end;
readln;
end.
uses crt;
const nmax=20;
var A,D,U:array[1..nmax,1..nmax]of integer;
ka,la,kd,ld,i,j,r:integer;
begin
clrscr;
randomize;
writeln('Razmery matricy A:');
repeat
write('Kolichestvo strok ka=');readln(ka);
until (ka>0)and(ka<=nmax);
repeat
write('Kolichestvo stolbcov la=');readln(la);
until (la>0)and(la<=nmax);
writeln('Razmery matricy D:');
repeat
write('Kolichestvo strok kd=');readln(kd);
until (kd>0)and(kd<=nmax);
repeat
write('Kolichestvo stolbcov ld=');readln(ld);
until (ld>0)and(ld<=nmax)and(ld=ka); {количество столбцов второй матрицы должно быть равно количеству строк первой матрицы}
writeln('Matrica A:');
for i:=1 to ka do
begin
for j:=1 to la do
begin
A[i,j]:=random(9)+1;
write(A[i,j]:3);
end;
writeln;
end;
readln;
writeln('Matrica D:');
for i:=1 to kd do
begin
for j:=1 to ld do
begin
D[i,j]:=random(9)+1;
write(D[i,j]:3);
end;
writeln;
end;
readln;
for r:=1 to ka do
for j:=1 to ld do
begin
U[r,j]:=0;
for i:=1 to la do
begin
U[r,j]:=U[r,j]+A[r,i]*D[i,j];
end;
end;
writeln('Matrica U=A*D:');
for i:=1 to ka do
begin
for j:=1 to ld do
write(U[i,j]:5);
writeln;
end;
readln;
end.
Цитата: Prewior
Здравствуйте, помогите пожалуйста, нужно срочно сделать меню для программы. В меню должны быть 2 пункта:
1. Работа самой программы
2. Выход.
Заранее спасибо, буду очень благодарен за помощь.
1. Работа самой программы
2. Выход.
Заранее спасибо, буду очень благодарен за помощь.
Код:
uses crt;
const nmax=20;
var A,D,U:array[1..nmax,1..nmax]of integer;
ka,la,kd,ld,i,j,r:integer;
function menu : Integer;
var
menuitems : array[1 .. 5] of string;
menuitemcount : integer;
menucuritem : integer;
row1, col1, row2, col2 : integer;
i, j, maxlen : integer;
begin
menuitems[1] := 'Работа самой программы';
menuitems[2] := 'Выход';
menuitemcount := 2;
menucuritem := 1;
row1 := 7; row2 := row1 + menuitemcount + 2 - 1;
maxlen := 0;
for i := 1 to menuitemcount do
if length(menuitems) > maxlen then
maxlen := length(menuitems);
col1 := 40 - ((maxlen + 4) div 2);
col2 := col1 + maxlen + 4 - 1;
clrscr;
repeat
textbackground(blue);
textcolor(lightgray);
gotoxy(col1, row1);
write(chr($da));
for i := 1 to col2 - col1 - 1 do
write(chr($c4));
write(chr($bf));
for j := 1 to row2 - row1 - 1 do
begin
gotoxy(col1, row1 + j);
textbackground(blue);
textcolor(lightgray);
write(chr($b3));
if j = menucuritem then
begin
textbackground(lightgray);
textcolor(blue);
end else
begin
textbackground(blue);
textcolor(lightgray);
end;
write(' ', menuitems[j]);
for i := length(menuitems[j]) + 1 + 1 to col2 - col1 - 1 do
write(' ');
textbackground(blue);
textcolor(lightgray);
write(chr($b3));
end;
textbackground(blue);
textcolor(lightgray);
gotoxy(col1, row2);
write(chr($c0));
for i := 1 to col2 - col1 - 1 do
write(chr($c4));
write(chr($d9));
gotoxy(col1 + 1, row1 + menucuritem);
case readkey of
#27 : { Escape }
begin menu := 0; break; end;
#13 : { Enter }
begin menu := menucuritem; break; end;
#0 :
case readkey of
'H' :
if menucuritem > 1 then
menucuritem := menucuritem - 1;
'P' :
if menucuritem < menuitemcount then
menucuritem := menucuritem + 1;
end;
end;
until False;
textbackground(black);
textcolor(lightgray);
clrscr;
end;
begin
if menu <> 1 then exit;
randomize;
writeln('Размеры матрицы A:');
repeat
write('Количество строк ka=');readln(ka);
until (ka>0)and(ka<=nmax);
repeat
write('Количество столбцов la=');readln(la);
until (la>0)and(la<=nmax);
writeln('Размеры матрицы D:');
repeat
write('Количество строк kd=');readln(kd);
until (kd>0)and(kd<=nmax);
repeat
write('Количество столбцов ld=');readln(ld);
until (ld>0)and(ld<=nmax)and(ld=ka);
{количество столбцов второй матрицы должно быть равно
количеству строк первой матрицы}
writeln('Матрица A:');
for i:=1 to ka do
begin
for j:=1 to la do
begin
A[i,j]:=random(9)+1;
write(A[i,j]:3);
end;
writeln;
end;
readln;
writeln('Матрица D:');
for i:=1 to kd do
begin
for j:=1 to ld do
begin
D[i,j]:=random(9)+1;
write(D[i,j]:3);
end;
writeln;
end;
readln;
for r:=1 to ka do
for j:=1 to ld do
begin
U[r,j]:=0;
for i:=1 to la do
begin
U[r,j]:=U[r,j]+A[r,i]*D[i,j];
end;
end;
writeln('Матрица U=A*D:');
for i:=1 to ka do
begin
for j:=1 to ld do
write(U[i,j]:5);
writeln;
end;
readln;
end.
const nmax=20;
var A,D,U:array[1..nmax,1..nmax]of integer;
ka,la,kd,ld,i,j,r:integer;
function menu : Integer;
var
menuitems : array[1 .. 5] of string;
menuitemcount : integer;
menucuritem : integer;
row1, col1, row2, col2 : integer;
i, j, maxlen : integer;
begin
menuitems[1] := 'Работа самой программы';
menuitems[2] := 'Выход';
menuitemcount := 2;
menucuritem := 1;
row1 := 7; row2 := row1 + menuitemcount + 2 - 1;
maxlen := 0;
for i := 1 to menuitemcount do
if length(menuitems) > maxlen then
maxlen := length(menuitems);
col1 := 40 - ((maxlen + 4) div 2);
col2 := col1 + maxlen + 4 - 1;
clrscr;
repeat
textbackground(blue);
textcolor(lightgray);
gotoxy(col1, row1);
write(chr($da));
for i := 1 to col2 - col1 - 1 do
write(chr($c4));
write(chr($bf));
for j := 1 to row2 - row1 - 1 do
begin
gotoxy(col1, row1 + j);
textbackground(blue);
textcolor(lightgray);
write(chr($b3));
if j = menucuritem then
begin
textbackground(lightgray);
textcolor(blue);
end else
begin
textbackground(blue);
textcolor(lightgray);
end;
write(' ', menuitems[j]);
for i := length(menuitems[j]) + 1 + 1 to col2 - col1 - 1 do
write(' ');
textbackground(blue);
textcolor(lightgray);
write(chr($b3));
end;
textbackground(blue);
textcolor(lightgray);
gotoxy(col1, row2);
write(chr($c0));
for i := 1 to col2 - col1 - 1 do
write(chr($c4));
write(chr($d9));
gotoxy(col1 + 1, row1 + menucuritem);
case readkey of
#27 : { Escape }
begin menu := 0; break; end;
#13 : { Enter }
begin menu := menucuritem; break; end;
#0 :
case readkey of
'H' :
if menucuritem > 1 then
menucuritem := menucuritem - 1;
'P' :
if menucuritem < menuitemcount then
menucuritem := menucuritem + 1;
end;
end;
until False;
textbackground(black);
textcolor(lightgray);
clrscr;
end;
begin
if menu <> 1 then exit;
randomize;
writeln('Размеры матрицы A:');
repeat
write('Количество строк ka=');readln(ka);
until (ka>0)and(ka<=nmax);
repeat
write('Количество столбцов la=');readln(la);
until (la>0)and(la<=nmax);
writeln('Размеры матрицы D:');
repeat
write('Количество строк kd=');readln(kd);
until (kd>0)and(kd<=nmax);
repeat
write('Количество столбцов ld=');readln(ld);
until (ld>0)and(ld<=nmax)and(ld=ka);
{количество столбцов второй матрицы должно быть равно
количеству строк первой матрицы}
writeln('Матрица A:');
for i:=1 to ka do
begin
for j:=1 to la do
begin
A[i,j]:=random(9)+1;
write(A[i,j]:3);
end;
writeln;
end;
readln;
writeln('Матрица D:');
for i:=1 to kd do
begin
for j:=1 to ld do
begin
D[i,j]:=random(9)+1;
write(D[i,j]:3);
end;
writeln;
end;
readln;
for r:=1 to ka do
for j:=1 to ld do
begin
U[r,j]:=0;
for i:=1 to la do
begin
U[r,j]:=U[r,j]+A[r,i]*D[i,j];
end;
end;
writeln('Матрица U=A*D:');
for i:=1 to ka do
begin
for j:=1 to ld do
write(U[i,j]:5);
writeln;
end;
readln;
end.
А можно сделать чтобы когда заходил в меню, чтобы фон был синего цвета, и кнопки розмещились не по вентру, а вверху 1 кнопка вверху с левой стороны, п арпавая кнопка вверху с правой стороны, и чтобы они были больше крупного размера, и их отступ сверху был хотябы 2 см.
Заранее спасибо.
Код:
uses crt;
const nmax=20;
var A,D,U:array[1..nmax,1..nmax]of integer;
ka,la,kd,ld,i,j,r:integer;
procedure drawbox(x1, y1, x2, y2 : integer;
forecolor, backcolor, innerfore, innerback : integer);
var i, j : integer;
begin
textbackground(backcolor);
textcolor(forecolor);
gotoxy(x1, y1);
write(chr($da));
for i := 1 to x2 - x1 - 1 do
write(chr($c4));
write(chr($bf));
for j := y1 + 1 to y2 - 1 do
begin
gotoxy(x1, j);
write(chr($b3));
textbackground(innerback);
textcolor(innerfore);
for i := 1 to x2 - x1 - 1 do
write(' ');
textbackground(backcolor);
textcolor(forecolor);
write(chr($b3));
end;
gotoxy(x1, y2);
write(chr($c0));
for i := 1 to x2 - x1 - 1 do
write(chr($c4));
write(chr($d9));
end;
function menu : Integer;
var
menucuritem, menuitemcount : integer;
forecolor, backcolor, innerfore, innerback : integer;
cursx, cursy : integer;
begin
menucuritem := 1;
menuitemcount := 2;
textbackground(blue);
clrscr;
repeat
if menucuritem = 1 then
begin
forecolor := red;
backcolor := lightgray;
innerfore := blue;
innerback := lightgray;
end else
begin
forecolor := lightgray;
backcolor := blue;
innerfore := lightgray;
innerback := blue;
end;
drawbox(4, 4, 15, 8, forecolor, backcolor, innerfore, innerback);
textbackground(innerback);
textcolor(innerfore);
gotoxy(7, 6); write('Запуск');
if menucuritem = 1 then begin cursx := 6; cursy := 6; end;
if menucuritem = 2 then
begin
forecolor := red;
backcolor := lightgray;
innerfore := blue;
innerback := lightgray;
end else
begin
forecolor := lightgray;
backcolor := blue;
innerfore := lightgray;
innerback := blue;
end;
drawbox(66, 4, 76, 8, forecolor, backcolor, innerfore, innerback);
textbackground(innerback);
textcolor(innerfore);
gotoxy(69, 6); write('Выход');
if menucuritem = 2 then begin cursx := 68; cursy := 6; end;
gotoxy(cursx, cursy);
case readkey of
#27 : { Escape }
begin menu := 0; break; end;
#13 : { Enter }
begin menu := menucuritem; break; end;
#0 :
case readkey of
'H', 'K' :
if menucuritem > 1 then
menucuritem := menucuritem - 1;
'P', 'M' :
if menucuritem < menuitemcount then
menucuritem := menucuritem + 1;
end;
end;
until False;
textbackground(black);
textcolor(lightgray);
clrscr;
end;
begin
if menu <> 1 then exit;
randomize;
writeln('Размеры матрицы A:');
repeat
write('Количество строк ka=');readln(ka);
until (ka>0)and(ka<=nmax);
repeat
write('Количество столбцов la=');readln(la);
until (la>0)and(la<=nmax);
writeln('Размеры матрицы D:');
repeat
write('Количество строк kd=');readln(kd);
until (kd>0)and(kd<=nmax);
repeat
write('Количество столбцов ld=');readln(ld);
until (ld>0)and(ld<=nmax)and(ld=ka);
{количество столбцов второй матрицы должно быть равно
количеству строк первой матрицы}
writeln('Матрица A:');
for i:=1 to ka do
begin
for j:=1 to la do
begin
A[i,j]:=random(9)+1;
write(A[i,j]:3);
end;
writeln;
end;
readln;
writeln('Матрица D:');
for i:=1 to kd do
begin
for j:=1 to ld do
begin
D[i,j]:=random(9)+1;
write(D[i,j]:3);
end;
writeln;
end;
readln;
for r:=1 to ka do
for j:=1 to ld do
begin
U[r,j]:=0;
for i:=1 to la do
begin
U[r,j]:=U[r,j]+A[r,i]*D[i,j];
end;
end;
writeln('Матрица U=A*D:');
for i:=1 to ka do
begin
for j:=1 to ld do
write(U[i,j]:5);
writeln;
end;
readln;
end.
const nmax=20;
var A,D,U:array[1..nmax,1..nmax]of integer;
ka,la,kd,ld,i,j,r:integer;
procedure drawbox(x1, y1, x2, y2 : integer;
forecolor, backcolor, innerfore, innerback : integer);
var i, j : integer;
begin
textbackground(backcolor);
textcolor(forecolor);
gotoxy(x1, y1);
write(chr($da));
for i := 1 to x2 - x1 - 1 do
write(chr($c4));
write(chr($bf));
for j := y1 + 1 to y2 - 1 do
begin
gotoxy(x1, j);
write(chr($b3));
textbackground(innerback);
textcolor(innerfore);
for i := 1 to x2 - x1 - 1 do
write(' ');
textbackground(backcolor);
textcolor(forecolor);
write(chr($b3));
end;
gotoxy(x1, y2);
write(chr($c0));
for i := 1 to x2 - x1 - 1 do
write(chr($c4));
write(chr($d9));
end;
function menu : Integer;
var
menucuritem, menuitemcount : integer;
forecolor, backcolor, innerfore, innerback : integer;
cursx, cursy : integer;
begin
menucuritem := 1;
menuitemcount := 2;
textbackground(blue);
clrscr;
repeat
if menucuritem = 1 then
begin
forecolor := red;
backcolor := lightgray;
innerfore := blue;
innerback := lightgray;
end else
begin
forecolor := lightgray;
backcolor := blue;
innerfore := lightgray;
innerback := blue;
end;
drawbox(4, 4, 15, 8, forecolor, backcolor, innerfore, innerback);
textbackground(innerback);
textcolor(innerfore);
gotoxy(7, 6); write('Запуск');
if menucuritem = 1 then begin cursx := 6; cursy := 6; end;
if menucuritem = 2 then
begin
forecolor := red;
backcolor := lightgray;
innerfore := blue;
innerback := lightgray;
end else
begin
forecolor := lightgray;
backcolor := blue;
innerfore := lightgray;
innerback := blue;
end;
drawbox(66, 4, 76, 8, forecolor, backcolor, innerfore, innerback);
textbackground(innerback);
textcolor(innerfore);
gotoxy(69, 6); write('Выход');
if menucuritem = 2 then begin cursx := 68; cursy := 6; end;
gotoxy(cursx, cursy);
case readkey of
#27 : { Escape }
begin menu := 0; break; end;
#13 : { Enter }
begin menu := menucuritem; break; end;
#0 :
case readkey of
'H', 'K' :
if menucuritem > 1 then
menucuritem := menucuritem - 1;
'P', 'M' :
if menucuritem < menuitemcount then
menucuritem := menucuritem + 1;
end;
end;
until False;
textbackground(black);
textcolor(lightgray);
clrscr;
end;
begin
if menu <> 1 then exit;
randomize;
writeln('Размеры матрицы A:');
repeat
write('Количество строк ka=');readln(ka);
until (ka>0)and(ka<=nmax);
repeat
write('Количество столбцов la=');readln(la);
until (la>0)and(la<=nmax);
writeln('Размеры матрицы D:');
repeat
write('Количество строк kd=');readln(kd);
until (kd>0)and(kd<=nmax);
repeat
write('Количество столбцов ld=');readln(ld);
until (ld>0)and(ld<=nmax)and(ld=ka);
{количество столбцов второй матрицы должно быть равно
количеству строк первой матрицы}
writeln('Матрица A:');
for i:=1 to ka do
begin
for j:=1 to la do
begin
A[i,j]:=random(9)+1;
write(A[i,j]:3);
end;
writeln;
end;
readln;
writeln('Матрица D:');
for i:=1 to kd do
begin
for j:=1 to ld do
begin
D[i,j]:=random(9)+1;
write(D[i,j]:3);
end;
writeln;
end;
readln;
for r:=1 to ka do
for j:=1 to ld do
begin
U[r,j]:=0;
for i:=1 to la do
begin
U[r,j]:=U[r,j]+A[r,i]*D[i,j];
end;
end;
writeln('Матрица U=A*D:');
for i:=1 to ka do
begin
for j:=1 to ld do
write(U[i,j]:5);
writeln;
end;
readln;
end.
Огромное спасибо!