Pomoć C kod

poruka: 8
|
čitano: 1.368
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Pomoć C kod ( šahovski zadatak )

zadatak: unosi se polje na kojem je kralj i polje na kojem je lovac. program treba ispisati da li lovac napada kralje il ne.

 

Pokušavam i ovo mi je dosad najbolja ideja: matrične elemente kao šahovske ploče 8x8 predstaviti svaki jedinstvaenim poljem, znači element(1,1)=1, (1,2)=2, (1,3)=3....(8,8)=64

primjetio da za lovca kretnje idu gore lijevo svako polje za -9, gore desno -7, dolje desno +9, dolje lijevo +7. Onda sam unos kralja i lovca stavio tako da unosim matrične elemente a program mi ih preračuna u taj jedinstveni broj tog polja. I sad onaj najvažniji dio neznam napraviti, ideja moja je ovakva da mi program radi sljedeće prvo dodaje vrijednosti lovca +9 pa ispituje dali je vrijednost lovca jednaka vrijednosti kralja, ako je ispis lovac napada kralja i tako za sva 4 slučaja +9, -9, -7, +7 i na kraju ako niti jedan od tih slučajeva nebude istinit ispiše da ne napada.

 

evo kak to izgleda

 

#include<stdio.h>


void konverzija_pozicija_za_brojeve(int M[8][8])
{
     int i, j,z;
     z=1;
     for(i=1; i<=8; i++)
     for(j=1; j<=8; j++)
     {
     printf("          M[%d][%d]=%d",i,j,z);
     z=z+1;
     }
}



int main()
{    
int A[8][8],i,j,n,m,K,k,l,v,b,L,o;
konverzija_pozicija_za_brojeve(A);

printf("\n\nunesi poziciju kralja stupac(n) i liniju(m):"); scanf("%d %d",&n, &m);
    K=1;
   
     for(i=1; i<=n; i++)
     for(j=1; j<=8; j++)
         {if((i==n)&&(j==m))
              printf("K=%d",K);
               else K=K+1;     }
               K=K-(8-m);

printf("\nunesi poziciju lovca stupac(v) i liniju(b):"); scanf("%d %d",&v, &b);
    L=1;
    
     for(k=1; k<=v; k++)
     for(l=1; l<=8; l++)
         {if((k==v)&&(l==b))
              printf("L=%d",L);
               else L=L+1;     }
               L=L-(8-b);



if(L==K) printf("lovac napada kralja");
else
for(o=L;o>=K;o=o+9)
if(o==K) printf("lovac napada kralja");
else
for(o=L;o<=K;o=o-9)
if(o==K) printf("lovac napada kralja");
else
for(o=L;o<=K;o=o-7)
if(o==K) printf("lovac napada kralja");
else
for(o=L;o>=K;o=o+9)
if(o==K) printf("lovac napada kralja");
else
 printf("lovac ne napada kralja");

 printf("\nza kraj unesi bilo koji karakter i pritisni ENTER");
    scanf(" ");
    return 0;
}

 

ovdje kod ovih if i for znam da mi vjerojatno fali dosta {}, ali eto probavao sam dosta kombinacija, ako neko znam bio bih jako zahvalan.

 

ovako bi izgledala ta šahovska ploča:

 

1 2 3 4 5 6 7 8
1 9 17 25 33 41 49 57 A 2 10 18 26 34 42 50 58 B 3 11 19 27 35 43 51 59 C 4 12 20 28 36 44 52 60 D 5 13 21 29 37 45 53 61 E 6 14 22 30 38 46 54 62 F 7 15 23 31 39 47 55 63 G 8 16 24 32 40 48 56 64 H
 
0 0 hvala 0
14 godina
neaktivan
offline
Pomoć C kod

izgled šahovske ploče zanemarite xD kad mi se sve pobrkalo :D

 
0 0 hvala 0
17 godina
offline
Pomoć C kod

To si već tražio :

i ja sam to napisao

http://www.bug.hr/forum/topic/programiranje/programiranje-c/952.aspx?page=4

btw. zašto bi zanemario šahovsku notaciju  - uvrstio sam je.

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Pomoć C kod

hvala ti puno, neznam kak to nisam prije vidio :(

 

17 godina
offline
Re: Pomoć C kod
dale090 kaže...

hvala ti puno, neznam kak to nisam prije vidio :(

 

ma nije to ništa - samo iskoristi matematičko pravilio da su elementi na dijagonali matrice ako im je zbroj koordinata ili razlika koordinata ista - a lovac ide po dijagonali.

plus onaj algoritam za pretvaranje šahovske notacije u matričnu - i to je to.

 

Poruka je uređivana zadnji put čet 15.9.2011 15:04 (Floki).
14 godina
neaktivan
offline
Re: Pomoć C kod

ala :D odlično, budem si sad to napisao ali drugačije, više je problem očito matematika xD

 

int prvaKoordinataK = 8 - pozicijaK2;    
int drugaKoordinataK = pozicijaK1 - 65;   
int prvaKoordinataL = 8 - pozicijaL2;      

int drugaKoordinataL = pozicijaL1 - 65;

 

možeš malo pojasniti, to je taj algoritam za pretvaranje, ali ja sam ti radio onako neke jednostavne naredbe i to, eto ti ogledan primjer ovo gore šta sam pisao :P

 

volim znati štaznači ono šta napišem, nevolim samo kopirati pa neznam kako to rai i tak to

14 godina
neaktivan
offline
Re: Pomoć C kod

evo gle

 

#include<stdio.h>

int main()
{
    int s1,r1,s2,r2;


printf(" unesi poziciju kralja stupac(s1) i red(r1):"); scanf("%d %d",&s1,&r1);
printf(" unesi poziciju lovca stupac(s2) i red(r4):"); scanf("%d %d",&s2,&r2);

if(((s1+r1)==(s2+r2))or((s1-r1)==(s2-r2))) printf("lovac napada kralja");
else printf("lovac ne napada kralja");

printf("\n\nza izlaz pritisni bilo koji gumb i pritisni ENTER");
    scanf(" ");
    return 0;
}

 

i radi :P

17 godina
offline
Pomoć C kod

Uzmi šahovsku ploču ispred sebe i prmjetit ćeš da se njezina notacija razlikuje od matrične notacije:

http://en.wikipedia.org/wiki/Chessboard

Kao što vidiš koordinata A8 na šahovskoj ploči je u matričnoj notaciji mjesto matrica[0][0].

Kad to znamo dalje pretvorimo šahovsku koordinatu u matrično mjesto:

int redMatrice = 8 - (druga šahovska koordinata) - dakle - ovdje dobijamo: 8 - 8 = 0 (broj 8 je broj redaka polja)

int stupacMatrice = (prva šahovska koordinata) - 65 - mi prvu šahovsku koordinatu unosimo kao char znak A - njegova dekadska vrijednost je 65 , od njega oduzmemo 65 i dobijemo int vrijednost 0

 

u stvari ovom pretvorbom smo dobili element matrice matrica[redMatrice][stupacMatrice] - u našem slučaju matrica[0][0].

uoči kako se stupac u šahovskoj notaciji koristi za izračun reda u matričnoj notaciji i red u šahovskoj notaciji za stupac u matričnoj notaciji.

 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice