Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > массивы


Автор: gerda 14.11.2005, 21:58
помогите пожалуйсто с програмкойб никак не могу сделать smile

дан буквенный рубеж с а до h и натуральное число n=<8. Например а1. Парное число расматривается на шахматном столике, на котором находится конь. Cоздать шахматний столик, отметив X те места которие конь прошел и остальние 0

как я понилаб это виглядит так если мы вводим b1, то;

a b c d e f g h
1x x x x
2 x x
3x x x
4
5
6
7
8

а в пустих местах 0.
конь просто должен с одного у4астка отпригать все места....




например если бы вместо коня нужно было бы поставить дамку то при вводе b2
1 2 3 4 5 6 7
a x x x
b x x x x x x x x
c x x x
d x
e x
f x
h x



сделала маленький набросок в файлах smile
но навсякий слу4ий напишу и сюда...


#include<iostream>


// Проверяем удовлетворяет ли конкретная клетка условиям
int check(int ii,int jj,int horisontal, int vertical)
{
if((ii==horisontal-1)&&(jj==vertical-2)) return 0;
if((ii==horisontal+1)&&(jj==vertical-2)) return 0;
if((ii==horisontal-2)&&(jj==vertical-1)) return 0;
if((ii==horisontal+2)&&(jj==vertical-1)) return 0;
if((ii==horisontal-2)&&(jj==vertical+1)) return 0;
if((ii==horisontal+2)&&(jj==vertical+1)) return 0;
if((ii==horisontal-1)&&(jj==vertical+2)) return 0;
if((ii==horisontal+1)&&(jj==vertical+2)) return 0;
return 1;
}
int main(int argc, char* argv[])
{
if(argc!=3)
{
cprintf("%s","Wrong parameters");
getch();
return -1;
}
int horisontal = StrToInt(argv[1])-1;
int vertical = StrToInt(argv[2])-1;


int desk[8][8];
for(int ii=0;ii<8;ii++)
{
for(int jj=0;jj<8;jj++)
{
if(check(jj,ii,horisontal,vertical)==0) desk[ii][jj]=1;
else desk[ii][jj]=0;
cprintf("%d%s",desk[ii][jj]," ");
}
cprintf("%s","\r\n");
}
getch();
return 0;
}

Автор: Бегемот 14.11.2005, 22:56
Привет,gerda.
Несовсем понятно в чём проблема-то.
У тебя рабочий код, за исключением маленьких нюансов:
- неподключены conio.h и stdio.h
- непонятно зачем подключен iostream,
- за место StrToInt применяй явное преобразование типов (int)
... или вопрос в выводе в те места, куда сходил конь, вместо единичек - "X"?

Автор: gerda 14.11.2005, 23:35
в этом тоже проблема smile просто програмка не работаетб ошибки какието smile
спасибо за советб попробаю smile

Автор: gerda 15.11.2005, 00:37
#include <iostream>
#include <conio.h>
#include <stdio.h>
int w;
int check(int ii,int jj,int horisontal, int vertical)
{
if((ii==horisontal-1)&&(jj==vertical-2)) return 0;
if((ii==horisontal+1)&&(jj==vertical-2)) return 0;
if((ii==horisontal-2)&&(jj==vertical-1)) return 0;
if((ii==horisontal+2)&&(jj==vertical-1)) return 0;
if((ii==horisontal-2)&&(jj==vertical+1)) return 0;
if((ii==horisontal+2)&&(jj==vertical+1)) return 0;
if((ii==horisontal-1)&&(jj==vertical+2)) return 0;
if((ii==horisontal+1)&&(jj==vertical+2)) return 0;
return 1;
}

main(int argc, char* argv[])
{
if(argc!=3)
{
cprintf("%s","Wrong parameters");
getch();
cin >> w;
return -1;
}
int horisontal = int(argv[1])-1;
int vertical = int(argv[2])-1;



int desk[8][8];
for(int ii=0;ii<8;ii++)
{
for(int jj=0;jj<8;jj++)
{
if(check(jj,ii,horisontal,vertical)==0) desk[ii][jj]=1;
else desk[ii][jj]=0;
cprintf("%d%s",desk[ii][jj]," ");
}
cprintf("%s","\r\n");
}
getch();

cin >> w;
return 0;
}


не понимаю, по4ему не работаетб ПОМАГИТЕ, пожалуйсто smile

Автор: AntonChik 15.11.2005, 06:11
а че выдает??? мне вломы так вот сразу разбираться тем более компилять твой исходник...

Автор: Neitron 15.11.2005, 13:18
Вообще я задание не понел, так как не вникал, но то чтобы код работал, если я правильно понел исходник, надо так.
Код

#include <iostream.h>
int horisontal;
int vertical;
int check(int ii,int jj)
{
        if((ii==horisontal-1)&&(jj==vertical-2)) return 0;
        if((ii==horisontal+1)&&(jj==vertical-2)) return 0;
        if((ii==horisontal-2)&&(jj==vertical-1)) return 0;
        if((ii==horisontal+2)&&(jj==vertical-1)) return 0;
        if((ii==horisontal-2)&&(jj==vertical+1)) return 0;
        if((ii==horisontal+2)&&(jj==vertical+1)) return 0;
        if((ii==horisontal-1)&&(jj==vertical+2)) return 0;
        if((ii==horisontal+1)&&(jj==vertical+2)) return 0;
        return 1;
}

main(int argc, char* argv[])
{
if(argc!=3)
{
        cout << "Wrong parameters";
        cin >> "";
        return -1;
}
horisontal = *argv[1] - '0' - 1;
vertical = *argv[2] - '0' - 1;

int desk[8][8];
for(int ii=0;ii<8;ii++)
{
        for(int jj=0;jj<8;jj++)
        {
                if(check(jj,ii)==0) desk[ii][jj]=1;
                else desk[ii][jj]=0;
                cout << desk[ii][jj] << " " ;
        }
        cout << endl;
}

cin >> "";
return 0;
}

Автор: gerda 16.11.2005, 13:22
програмка какбы работает... она виводит Wrong parameters... я ввожу, и она выклю4ается! smile

Автор: Neitron 16.11.2005, 13:42
gerda
Run->Parametrs
Введи в поле Parametrs "5 5" например (без кавычек)

Автор: gerda 19.11.2005, 15:04
сделала новый вариант, сдесь выводятся только парние числа, по которым прошелся конь, а что нужно сделать для тогоб, чтобы нарисовалась шахматная доска и на ней можно было бы видеть места, куда конь можен пригнуть с указ. участка??? smile

#include <iostream>
using namespace std;
int main()
{unsigned char koord[2],izvade[2]; int reizes,cikls;
cikls=0;
cout << "Дан буквенный рубеж с a до h и натуральное число n <= 8. Например, а2.\n";
cout << "-------------------------------------------------------------------------------------------------------------\n";
do {
reizes=1;
do {
cout<<"\nВедити координати где находится конь:";
cin>>koord;
if((koord[0]<97)||(koord[0]>104)||(koord[1]<49)||(koord[1]>56)) cout<<"Ведите провельные координаты!\n";
} while((koord[0]<97)||(koord[0]>104)||(koord[1]<49)||(koord[1]>56));
if((koord[0]-2>=97)&&(koord[1]-1>=49)) {izvade[0]=koord[0]-2;izvade[1]=koord[1]-1; cout<<reizes<<". Skaitlis ir "<<izvade[0]<<izvade[1]<<endl;reizes++;}
if((koord[0]-2>=97)&&(koord[1]+1<=56)) {izvade[0]=koord[0]-2;izvade[1]=koord[1]+1; cout<<reizes<<". Skaitlis ir "<<izvade[0]<<izvade[1]<<endl;reizes++;}
if((koord[0]-1>=97)&&(koord[1]-2>=49)) {izvade[0]=koord[0]-1;izvade[1]=koord[1]-2; cout<<reizes<<". Skaitlis ir "<<izvade[0]<<izvade[1]<<endl;reizes++;}
if((koord[0]-1>=97)&&(koord[1]+2<=56)) {izvade[0]=koord[0]-1;izvade[1]=koord[1]+2; cout<<reizes<<". Skaitlis ir "<<izvade[0]<<izvade[1]<<endl;reizes++;}
if((koord[0]+1<=104)&&(koord[1]-2>=49)) {izvade[0]=koord[0]+1;izvade[1]=koord[1]-2; cout<<reizes<<". Skaitlis ir "<<izvade[0]<<izvade[1]<<endl;reizes++;}
if((koord[0]+1<=104)&&(koord[1]+2<=56)) {izvade[0]=koord[0]+1;izvade[1]=koord[1]+2; cout<<reizes<<". Skaitlis ir "<<izvade[0]<<izvade[1]<<endl;reizes++;}
if((koord[0]+2<=104)&&(koord[1]-1>=49)) {izvade[0]=koord[0]+2;izvade[1]=koord[1]-1; cout<<reizes<<". Skaitlis ir "<<izvade[0]<<izvade[1]<<endl;reizes++;}
if((koord[0]+2<=104)&&(koord[1]+1<=56)) {izvade[0]=koord[0]+2;izvade[1]=koord[1]+1; cout<<reizes<<". Skaitlis ir "<<izvade[0]<<izvade[1]<<endl;reizes++;}
cout<<"\nНажмите 1, чтобы продолжить!\n";
cin>>cikls;
}while (cikls==1);
return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)