• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Программа на Pascal. Помогите пожалуйста!

  • Автор темы Автор темы shadnik
  • Дата начала Дата начала

shadnik

Ученик
Регистрация
23 Фев 2010
Сообщения
3
Реакции
0
Баллы
0
Программа на Pascal. Помогите пожалуйста!

На шахматной доске ферзь занимает определенную позицию. Отметить положение
ферзя на шахматной доске буквой «Ф» и символом «*» те клетки шахматной доски, которые
находятся под боем ферзя.
Подсказка. Шахматную доску представить в виде двумерного массива размером 8*8.
Задание:
Разработать алгоритм и изобразить блок-схему вывода на экран монитора (печать) схемы
шахматной доски с отмеченным положением ферзя в виде буквы «Ф» и отмеченных
символом «*» клеток, находящихся под боем ферзя.
Входные данные:Координаты ферзя (вводятся с клавиатуры).
Выходные данные:Вывести на экран монитора (распечатать) схему шахматной доски в виде двумерного
массива с обозначенными номерами строк, буквенными обозначениями столбцов,
отмеченным положением ферзя в виде буквы «Ф» и отмеченных символом «*» клеток,
находящихся под боем ферзя. Остальные клетки пометить символом «0».
 
Пожалуйста. Единственное, во избежание путаницы с кодировками, я обозначил ферзя латинской буквой F, а не кириллической Ф. Пояснение - в первой части программы вводится положение ферзя в стандартной шахматной нотации, при этом отрабатываются как заглавные, так и строчные обозначения вертикалей (можно вводить и те, и другие). Учитывается также принятая нумерация горизонталей "снизу вверх". Блок-схемы, извините, не умею, тут уж Вы сами. А массив не понадобился.
Код:
VAR
 t:CHAR;
 i,j,Iq,Jq:INTEGER;

BEGIN
 WriteLn('Enter the Queen position, e.g. a2, c5, D2 etc. :');
 Read(t); ReadLn(Iq);
 Iq:=9-Iq;
 Jq:=ORD(t);
 IF Jq<73 THEN Jq:=Jq-64 ELSE Jq:=Jq-96;
 WriteLn;
 FOR i:=1 TO 8 DO
  begin
   Write(9-i:2,' ');
   FOR j:=1 TO 8 DO
    if (i=Iq) and (j=Jq) then Write(' F ') else
    if ((i=Iq) and (j<>Jq)) or
       ((i<>Iq) and (j=Jq)) or
       (ABS(i-Iq)=ABS(j-Jq)) then Write(' * ') else
    Write(' 0 ');
   WriteLn;
  end;
 Write('   ');
 For j:=1 to 8 do
  Write(' ',CHR(j+64),' ');
 WriteLn;
 ReadLn;
END.
 
Большое спасибо
 
Да, строчку с Qpos в описании переменных можно убрать - она осталась от другого варианта. Я поправил в тексте.
 
У меня тут тоже кое-что есть:
Program ferzgraph;
Uses crt,graph;
Const a: array[1..8] of char=('a','b','c','d','e','f','g','h');
b: array[1..8] of char=('1','2','3','4','5','6','7','8');
d: array[1..8] of integer=(165,207,249,291,333,375,417,459);
e: array[1..8] of integer=(78,120,162,204,246,288,330,372);
Var gd,gm,x,y,xf,yf,zx,zy: integer; i,j: byte; c: char;
Procedure Dsk(x1,y1,x2,y2,k,p: integer);
Var i,j,sx,sy,xb,xc: integer;
begin
xb:=x1;
xc:=x2;
For j:=1 to k do
begin
For i:=1 to k do
begin
if (j mod 2 = 0) then
if (i mod 2 = 0) then
begin
Setfillstyle(1,15);
Bar(x1,y1,x2,y2);
end
else
begin
Setfillstyle(1,p);
Bar(x1,y1,x2,y2);
end
else if i mod 2 = 0 then
begin
Setfillstyle(1,p);
Bar(x1,y1,x2,y2);
end
else
begin
Setfillstyle(1,15);
Bar(x1,y1,x2,y2);
end;
sx:=x1;
x1:=x2+2;
x2:=2*x2-sx+2;
end;
x1:=xb;
x2:=xc;
sy:=y1;
y1:=y2+2;
y2:=2*y2-sy+2;
end;
end;
Procedure Linex(x1,y1,x2,y2,k,q,c: integer);
Var i: integer;
begin
Setcolor(c);
For i:=1 to k do
begin
Line(x1,y1,x2,y2);
x1:=x1 + q;
x2:=x2 + q;
end;
end;
Procedure Liney(x1,y1,x2,y2,k,q,c: integer);
Var i: integer;
begin
Setcolor(c);
For i:=1 to k do
begin
Line(x1,y1,x2,y2);
y1:=y1 + q;
y2:=y2 + q;
end;
end;
Begin
Randomize;
gd:=installuserdriver('bgi256',nil);
gm:=4;
Initgraph(gd,gm,'');
Repeat
Cleardevice;
x:=175;
y:=380;
Dsk(160,80,200,120,8,6);
Linex(201,80,201,414,7,42,7);
Liney(160,121,494,121,7,42,7);
Setfillstyle(6,8);
Bar(159,49,129,443);
Bar(495,49,525,443);
Bar(159,49,510,79);
Bar(159,414,510,443);
For i:=1 to 8 do
begin
Setcolor(15);
Settextstyle(1,0,3);
Outtextxy(x,413,a);
x:=x+42;
end;
For i:=1 to 8 do
begin
Setcolor(15);
Settextstyle(1,0,3);
Outtextxy(140,y,b);
y:=y-42;
end;
Settextstyle(4,0,4);
i:=random(8)+1;
j:=random(8)+1;
Setcolor(cyan);
Outtextxy(d,e[j],'Ф');
Setcolor(0);
For yf:=1 to 8 do
For xf:=1 to 8 do
begin
If (xf<>i) and (yf=j) or (yf<>j) and (xf=i) then
Circle(d[xf]+15,e[yf]+20,6);
If (xf=i) and (yf=j) then
begin
zx:=xf;
zy:=yf;
repeat
zx:=zx-1;
zy:=zy-1;
Circle(d[zx]+15,e[zy]+20,6);
Until (zx<1) or (zy<1);
zx:=xf;
zy:=yf;
repeat
zx:=zx+1;
zy:=zy+1;
Circle(d[zx]+15,e[zy]+20,6);
Until (zx>8) or (zy>8);
zx:=xf;
zy:=yf;
repeat
zx:=zx-1;
zy:=zy+1;
Circle(d[zx]+15,e[zy]+20,6);
Until (zx<1) or (zy>8);
zx:=xf;
zy:=yf;
repeat
zx:=zx+1;
zy:=zy-1;
Circle(d[zx]+15,e[zy]+20,6);
Until (zx>8) or (zy<1);
end;
end;
c:=readkey;
Until c=#13;
Closegraph;
End.

Только координаты определяются генератором случайных чисел.
 
Последнее редактирование:
Назад
Сверху