Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Кроссворд

Автор: barlog 29.10.2006 17:39

По строкам дали задание сделать кроссворд.
Вот один из них.

uses crt;
type vect=array [1..7,1..8] of string;
var i,j,c,v:integer;
x,y:vect;k:char;
begin
x[1,2]:='в';x[2,2]:='о';x[3,2]:='з';x[4,2]:='г';x[5,2]:='л';x[6,2]:='а';x[7,2]:='с';
x[1,4]:='л';x[2,4]:='а';x[3,4]:='т';x[5,4]:='ы';
x[6,5]:='а';x[7,5]:='с';
x[1,6]:='н';x[2,6]:='о';x[3,6]:='т';x[4,6]:='а';
x[1,8]:='с';x[2,8]:='п';x[3,8]:='е';x[4,8]:='к';x[5,8]:='т';x[6,8]:='р';
x[1,3]:='и';x[1,5]:='ь';x[1,7]:='ю';
x[3,1]:='д';x[3,3]:='о';
x[6,3]:='т';x[6,4]:='л';x[6,6]:='с';
clrscr;
c:=2;v:=2;
textcolor(green);
writeln(' ЪДї ');
writeln(' і і ');
writeln('ЪДВДЕДЕДВДВДВДї');
writeln('і і і і і і і і');
writeln('ГДЕДЕДЕДБДЕДЕДЩ');
writeln('і і і і і і ');
writeln('ГДЕДЕДЕДї ГДґ ');
writeln('і і і і і і і ');
writeln('ГДЕДБДБДЩ ГДЕДї');
writeln('і і і і і');
writeln('ГДЕДВДВДї ГДЕДЩ');
writeln('і і і і і і і ');
writeln('ГДЕДБДБДЩ АДЩ ');
writeln('і і ');
writeln('ГДЕДВДВДВДВДї ');
writeln('і і і і і і і ');
writeln('АДБДБДБДБДБДЩ ');
gotoxy(c,v);
repeat
gotoxy(c,v);
k:=readkey;
case k of
#72: begin v:=v-2;gotoxy(c,v);end;
#75: begin c:=c-2;gotoxy(c,v);end;
#77: begin c:=c+2;gotoxy(c,v);end;
#80: begin v:=v+2;gotoxy(c,v);end;
#13: begin i:=c div 2;j:=v div 2; readln(y[i,j]);gotoxy(c,v);end;
#59: begin for i:=1 to 7 do
for j:=1 to 8 do
if (y[i,j]<>' ')and(y[i,j]<>x[i,j]) then
begin
textcolor(red);
gotoxy(i*2,j*2);write(y[i,j]);
gotoxy(i*2,j*2);
textcolor(green);
end;
end;
end;
gotoxy(20,15);writeln(' ');
gotoxy(20,10);writeln(' ');

if (c>1)and(c<15)and(v=4)then begin gotoxy(20,10);writeln('восклицание');gotoxy(c,v);end;
if (c>1)and(c<13)and(v=16)then begin gotoxy(20,10);writeln('цвета радуги по сути');gotoxy(c,v);end;
if (c>1)and(c<9)and(v=8)then begin gotoxy(20,10);writeln('одежда рыцаря');gotoxy(c,v);end;
if (c>1)and(c<9)and(v=12)then begin gotoxy(20,10);writeln('музыкальный знак');gotoxy(c,v);end;
if (c>11)and(c<15)and(v=10)then begin gotoxy(20,10);writeln('профессионал');gotoxy(c,v);end;
if (v>2)and(v<17)and(c=2)then begin gotoxy(20,15);writeln('столица Литвы');gotoxy(c,v);end;
if (v>1)and(v<9)and(c=6)then begin gotoxy(20,15);writeln('укрепленная огневая точка');gotoxy(c,v);end;
if (v>2)and(v<13)and(c=12)then begin gotoxy(20,15);writeln('книга карт');gotoxy(c,v);end;
until readkey=#27;
clrscr;
gotoxy(20,15);
writeln('Спасибо за просмотр программы');
readln;
end.


Чё то в глючный какой-то. Не всегда работает как надо.
Хотел переделать вот в такой
uses crt;
type vect=array [1..18,1..24] of string;
var i,j,c,v:integer;
x,y:vect; k:char;
begin
x[2,7]:='b';x[4,7]:='r';x[6,7]:='a';x[8,7]:='z';x[10,7]:='i';x[12,7]:='l';x[14,7]:='i'; x[16,7]:='a';

x[4,2]:='e';x[4,4]:='v';x[4,6]:='e';x[4,8]:='r';x[4,10]:='e';x[4,12]:='s';x[4,14]:='t';

x[12,4]:='k';x[12,6]:='o';x[12,8]:='l';x[12,10]:='o';x[12,14]:='m';x[12,16]:='b';x[12,18]:='o';

x[12,6]:='н';x[2,6]:='о';x[3,6]:='т';x[4,6]:='а';

x[18,14]:='f';x[18,16]:='u';x[18,18]:='t';x[18,20]:='b';x[18,22]:='o';x[18,24]:='l';

x[10,16]:='p';x[12,16]:='o';x[14,16]:='r';x[14,18]:='t';x[14,20]:='u';

x[18,24]:='r';x[16,24]:='e';x[14,24]:='a';x[12,24]:='l';


clrscr;
c:=2;v:=2;
textcolor(green);
writeln(' ЪДї');
writeln(' і і');
writeln('ЪДВДВДЕДЕДВДВДї ');
writeln('і і і і і і і і');
writeln('АДБДБДЕДЕДБДБДЩ');
writeln(' і і ');
writeln(' ГДґ');
writeln(' і і');
writeln(' ГДґ ЪДї');
writeln(' і і і і');
writeln(' ЪДВДЕДЕДВДВДЕДґ ЪДї ');
writeln(' і і і і і і і і і і');
writeln(' АДБДЕДЕДБДБДЕДґ ГДґ');
writeln(' і і і і і і');
writeln(' ГДґ ГДґ ГДґ');
writeln(' і і і і і і');
writeln(' АДЩ ЪДЕДЕДВДВДЕДґ ');
writeln(' і і і і і і і');
writeln(' АДБДБДБДБДБДЩ');
gotoxy(c,v);
repeat
gotoxy(c,v);
k:=readkey;
case k of
#72: begin v:=v-2;gotoxy(c,v);end;
#75: begin c:=c-2;gotoxy(c,v);end;
#77: begin c:=c+2;gotoxy(c,v);end;
#80: begin v:=v+2;gotoxy(c,v);end;
#13: begin i:=c div 2;j:=v div 2; readln(y[i,j]);gotoxy(c,v);end;
#59: begin for i:=1 to 16 do
for j:=1 to 8 do
if (y[i,j]<>' ')and(y[i,j]<>x[i,j]) then
begin
textcolor(red);
gotoxy(i*2,j*2);write(y[i,j]);
gotoxy(i*2,j*2);
textcolor(green);
end;
end;
end;
gotoxy(20,15);
writeln('Спасибо за просмотр программы');
readln;
end.

Выдаёт ошибки. Помогите пожалуйста. Может по строкам есть кроссворды и по проще? Или не глючные.
Буду рад помощи!

Автор: volvo 29.10.2006 18:05

barlog, 2 ошибки: первая - синтаксическая, июо ловится компилятором... Ты открыл цикл Repeat, но не закрыл его... Слова Until у тебя в программе нет...

Вторая - более серьезная: программа будет компилироваться, но работать правильно начнет только тогда, когда ты эту ошибку исправишь... Коды стрелок - расширенные, т.е. сначала идет символ с кодом #0, и только потом - сам код клавиши (поищи по форуму, было несколько раз, почему это делается, и как с этим работать)...

С учетом этого, нижнюю часть программы (начиная от слова Repeat) я бы переделал так:

repeat
gotoxy(c,v);
k:=readkey;
case k of
#13: begin i:=c div 2;j:=v div 2; readln(y[i,j]);gotoxy(c,v);end;
#0: case readkey of
#72: begin v:=v-2;gotoxy(c,v);end;
#75: begin c:=c-2;gotoxy(c,v);end;
#77: begin c:=c+2;gotoxy(c,v);end;
#80: begin v:=v+2;gotoxy(c,v);end;
#59: begin for i:=1 to 16 do
for j:=1 to 8 do
if (y[i,j]<>' ')and(y[i,j]<>x[i,j]) then begin
textcolor(red);
gotoxy(i*2,j*2);write(y[i,j]);
gotoxy(i*2,j*2);
textcolor(green);
end;
end;
end;
end;
until k = #27;

gotoxy(20,15);
writeln('Спасибо за просмотр программы');
readln;
end.

Теперь программа деет тебе ходить по клеткам ... Осталось дополнить функциональность...

Автор: barlog 29.10.2006 19:08

При попадании в определённуй клетку он выводит вопрос на который надо ответить.

uses crt;
type vect=array [1..7,1..8] of string;
var i,j,c,v:integer;
x,y:vect;k:char;
begin
x[1,2]:='в';x[2,2]:='о';x[3,2]:='з';x[4,2]:='г';x[5,2]:='л';x[6,2]:='а';x[7,2]:='с';
x[1,4]:='л';x[2,4]:='а';x[3,4]:='т';x[5,4]:='ы';
x[6,5]:='а';x[7,5]:='с';
x[1,6]:='н';x[2,6]:='о';x[3,6]:='т';x[4,6]:='а';
x[1,8]:='с';x[2,8]:='п';x[3,8]:='е';x[4,8]:='к';x[5,8]:='т';x[6,8]:='р';
x[1,3]:='и';x[1,5]:='ь';x[1,7]:='ю';
x[3,1]:='д';x[3,3]:='о';
x[6,3]:='т';x[6,4]:='л';x[6,6]:='с';
clrscr;
c:=2;v:=2;
textcolor(green);
writeln(' ЪДї ');
writeln(' і і ');
writeln('ЪДВДЕДЕДВДВДВДї');
writeln('і і і і і і і і');
writeln('ГДЕДЕДЕДБДЕДЕДЩ');
writeln('і і і і і і ');
writeln('ГДЕДЕДЕДї ГДґ ');
writeln('і і і і і і і ');
writeln('ГДЕДБДБДЩ ГДЕДї');
writeln('і і і і і');
writeln('ГДЕДВДВДї ГДЕДЩ');
writeln('і і і і і і і ');
writeln('ГДЕДБДБДЩ АДЩ ');
writeln('і і ');
writeln('ГДЕДВДВДВДВДї ');
writeln('і і і і і і і ');
writeln('АДБДБДБДБДБДЩ ');
gotoxy(c,v);
repeat
gotoxy(c,v);
k:=readkey;
case k of
#13: begin i:=c div 2;j:=v div 2; readln(y[i,j]);gotoxy(c,v);end;
#0: case readkey of
#72: begin v:=v-2;gotoxy(c,v);end;
#75: begin c:=c-2;gotoxy(c,v);end;
#77: begin c:=c+2;gotoxy(c,v);end;
#80: begin v:=v+2;gotoxy(c,v);end;
#59: begin for i:=1 to 16 do
for j:=1 to 8 do
if (y[i,j]<>' ')and(y[i,j]<>x[i,j]) then begin
textcolor(red);
gotoxy(i*2,j*2);write(y[i,j]);
gotoxy(i*2,j*2);
textcolor(green);
end;
end;
end;
end;

gotoxy(20,15);writeln(' ');
gotoxy(20,10);writeln(' ');

if (c>1)and(c<15)and(v=4)then begin gotoxy(20,10);writeln('восклицание');gotoxy(c,v);end;
if (c>1)and(c<13)and(v=16)then begin gotoxy(20,10);writeln('цвета радуги по сути');gotoxy(c,v);end;
if (c>1)and(c<9)and(v=8)then begin gotoxy(20,10);writeln('одежда рыцаря');gotoxy(c,v);end;
if (c>1)and(c<9)and(v=12)then begin gotoxy(20,10);writeln('музыкальный знак');gotoxy(c,v);end;
if (c>11)and(c<15)and(v=10)then begin gotoxy(20,10);writeln('профессионал');gotoxy(c,v);end;
if (v>2)and(v<17)and(c=2)then begin gotoxy(20,15);writeln('столица Литвы');gotoxy(c,v);end;
if (v>1)and(v<9)and(c=6)then begin gotoxy(20,15);writeln('укрепленная огневая точка');gotoxy(c,v);end;
if (v>2)and(v<13)and(c=12)then begin gotoxy(20,15);writeln('книга карт');gotoxy(c,v);end;
until readkey=#27;
clrscr;
gotoxy(20,15);
writeln('Спасибо за просмотр программы');
readln;
end.

Надо доделать этот вариант кроссворда до рабочего состояния. Если получиться то смогу переделать на другие вопросы потом. Нужно чтобы вводил тоже без глюков, и проверял на правильность ответ. Если так можено то помоги на премере этого кроссворда!

Автор: barlog 29.10.2006 22:52

Окончательный вариант кроссворда. Нужно как то упростить ввод. Приходиться постоянно нажимать Enter. И чтобы принеправельном вводе и нажатие на F1 слово меняло цвет или выводилось сообщения о неправильном ответе.

uses crt;
type vect=array [1..10,1..10] of string;
var i,j,c,v:integer;
x,y:vect;k:char;
begin
x[1,5]:='Ф';x[1,6]:='л';x[1,7]:='а';x[1,8]:='г';
x[2,2]:='з';x[2,3]:='и';x[2,4]:='з';x[2,5]:='У';
x[3,5]:='Т';x[3,6]:='у';x[3,7]:='л';x[3,8]:='а';
x[4,2]:='к';x[4,3]:='р';x[4,4]:='а';x[4,5]:='Б';
x[5,5]:='О';x[5,6]:='с';x[5,7]:='л';x[5,8]:='о';
x[6,2]:='р';x[6,3]:='е';x[6,4]:='а';x[6,5]:='Л';
clrscr;
c:=2;v:=2;
textcolor(green);
writeln(' ЪДВДВДВДї ');
writeln(' 1 і і і і і ');
writeln(' ЪДВДВДЕДЕДБДБДЩ');
writeln('2 і і і і і');
writeln(' АДБДБДЕДЕДВДВДї ');
writeln(' 3 і і і і і');
writeln(' ЪДВДВДЕДЕДБДБДЩ');
writeln('4 і і і і і');
writeln(' АДБДБДЕДЕДВДВДї');
writeln(' 5 і і і і і');
writeln(' ЪДВДВДЕДЕДБДБДЩ');
writeln('6 і і і і і');
writeln(' АДБДБДБДЩ');

writeln('1. Для выхода нажмите Esc');
writeln('2. Для ввода нажмите Enter');
gotoxy(35,5); writeln('1. Один из составляющих визитной карточки любой страны?');
gotoxy(35,6); writeln('2. Футбольная кличка Зидана?');
gotoxy(35,7); writeln('3. Куда с самоварами не ездят?');
gotoxy(35,8); writeln('4. Морская закуска к пиву?');
gotoxy(35,9); writeln('5. Столица Норвегии?');
gotoxy(35,10); writeln('6. Футбольный <Королевский клуб>');

repeat
gotoxy(c,v);
k:=readkey;
case k of
#13: begin i:=c div 2;j:=v div 2; readln(y[i,j]);gotoxy(c,v);end;
#0: case readkey of
#72: begin v:=v-2;gotoxy(c,v);end;
#75: begin c:=c-2;gotoxy(c,v);end;
#77: begin c:=c+2;gotoxy(c,v);end;
#80: begin v:=v+2;gotoxy(c,v);end;
#59: begin for i:=1 to 10 do
for j:=1 to 10 do
if (y[i,j]<>' ')and(y[i,j]<>x[i,j]) then begin
textcolor(red);
gotoxy(i*2,j*2);write(y[i,j]);
gotoxy(i*2,j*2);
textcolor(green);
end;
end;
end;
end;
until k = #27;

gotoxy(20,20);
writeln('Спасибо за просмотр программы');
readln;
end.