Obliczenie ruchów króla w szachach

0

robie program obliczający ruchy króla z szachów
kod:

#include <string>
#include <iostream>
using namespace std;
int wariant1 = 0;
int wariant2 = 0;
int wariant3 = 0;
int wariant4 = 0;
int ruchy = 0;
void szukajZnaku( string & tekst, char szukanyZnak1, char szukanyZnak2, char szukanyZnak3, char szukanyZnak4, char szukanyZnak5, char szukanyZnak6, char szukanyZnak7, char szukanyZnak8)
{ 
    size_t znalezionaPozycja1 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja1 == string::npos ){
         size_t znalezionaPozycja2 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja2 == string::npos ){
         size_t znalezionaPozycja3 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja3 == string::npos ){
         size_t znalezionaPozycja4 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja4 == string::npos ){
         size_t znalezionaPozycja5 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja5 == string::npos ){
         size_t znalezionaPozycja6 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja6 == string::npos ){
         size_t znalezionaPozycja7 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja7 == string::npos ){
         size_t znalezionaPozycja8 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja8 == string::npos ){
         
    }else{
    wariant1=wariant1+8;
    
    }    
    }else{
    wariant1=wariant1+7;
    
    }    
    }else{
    wariant1=wariant1+6;
    
    }    
    }else{
    wariant1=wariant1+5;
    
    }    
    }else{
    wariant1=wariant1+4;
    
    }    
    }else{
    wariant1=wariant1+3;
    
    }    
    }else{
     wariant1=wariant1+2;
     
    }    
    }else{
     wariant1=wariant1+1; 
     
    }
}
void szukajZnaku2( string & tekst, char szukanyZnak1, char szukanyZnak2, char szukanyZnak3, char szukanyZnak4, char szukanyZnak5, char szukanyZnak6, char szukanyZnak7, char szukanyZnak8)
{ 
    size_t znalezionaPozycja1 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja1 == string::npos ){
         size_t znalezionaPozycja2 = tekst.find( szukanyZnak1);
         
    if( znalezionaPozycja2 == string::npos ){
         size_t znalezionaPozycja3 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja3 == string::npos ){
         size_t znalezionaPozycja4 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja4 == string::npos ){
         size_t znalezionaPozycja5 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja5 == string::npos ){
         size_t znalezionaPozycja6 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja6 == string::npos ){
         size_t znalezionaPozycja7 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja7 == string::npos ){
         size_t znalezionaPozycja8 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja8 == string::npos ){
         
    }else{
    wariant2=wariant2+8;
    
    }    
    }else{
    wariant2=wariant2+7;
    
    }    
    }else{
    wariant2=wariant2+6;
    
    }    
    }else{
    wariant2=wariant2+5;
    
    }    
    }else{
    wariant2=wariant2+4;
    
    }    
    }else{
    wariant2=wariant2+3;
    
    }    
    }else{
     wariant2=wariant2+2;
     
    }    
    }else{
     wariant2=wariant2+1; 
     
    }
   
}
void szukajZnaku3( string & tekst, char szukanyZnak1, char szukanyZnak2, char szukanyZnak3, char szukanyZnak4, char szukanyZnak5, char szukanyZnak6, char szukanyZnak7, char szukanyZnak8)
{ 
    size_t znalezionaPozycja1 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja1 == string::npos ){
         size_t znalezionaPozycja2 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja2 == string::npos ){
         size_t znalezionaPozycja3 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja3 == string::npos ){
         size_t znalezionaPozycja4 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja4 == string::npos ){
         size_t znalezionaPozycja5 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja5 == string::npos ){
         size_t znalezionaPozycja6 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja6 == string::npos ){
         size_t znalezionaPozycja7 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja7 == string::npos ){
         size_t znalezionaPozycja8 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja8 == string::npos ){
         
    }else{
    wariant3=wariant3+8;
    
    }    
    }else{
    wariant3=wariant3+7;
    
    }    
    }else{
    wariant3=wariant3+6;
    
    }    
    }else{
    wariant3=wariant3+5;
    
    }    
    }else{
    wariant3=wariant3+4;
    
    }    
    }else{
    wariant3=wariant3+3;
    
    }    
    }else{
     wariant3=wariant3+2;
     
    }    
    }else{
     wariant3=wariant3+1; 
     
    }
   
}
void szukajZnaku4( string & tekst, char szukanyZnak1, char szukanyZnak2, char szukanyZnak3, char szukanyZnak4, char szukanyZnak5, char szukanyZnak6, char szukanyZnak7, char szukanyZnak8)
{ 
    size_t znalezionaPozycja1 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja1 == string::npos ){
         size_t znalezionaPozycja2 = tekst.find( szukanyZnak1);
         
    if( znalezionaPozycja2 == string::npos ){
         size_t znalezionaPozycja3 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja3 == string::npos ){
         size_t znalezionaPozycja4 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja4 == string::npos ){
         size_t znalezionaPozycja5 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja5 == string::npos ){
         size_t znalezionaPozycja6 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja6 == string::npos ){
         size_t znalezionaPozycja7 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja7 == string::npos ){
         size_t znalezionaPozycja8 = tekst.find( szukanyZnak1);
    if( znalezionaPozycja8 == string::npos ){
         
    }else{
    wariant4=wariant4+8;
    }    
    }else{
    wariant4=wariant4+7;
    }    
    }else{
    wariant4=wariant4+6;
    }    
    }else{
    wariant4=wariant4+5;
    }    
    }else{
    wariant4=wariant4+4;
    }    
    }else{
    wariant4=wariant4+3;
    }    
    }else{
     wariant4=wariant4+2;
    }    
    }else{
     wariant4=wariant4+1; 
    }
   
}

int main()
{
    string naszTekst;
    cin >> naszTekst;
    string naszTekst2;
    cin >> naszTekst2;
    szukajZnaku( naszTekst, 'a','b','c','d','e','f','g','h'); 
    szukajZnaku2( naszTekst, '1','2','3','4','5','6','7','8'); 
    szukajZnaku3( naszTekst2, 'a','b','c','d','e','f','g','h'); 
    szukajZnaku4( naszTekst2, '1','2','3','4','5','6','7','8'); 
    return 0;
    if (wariant1 <= wariant3)
    {
        while(wariant1 <= wariant3)
        {
            ruchy=ruchy+1;
            wariant1=wariant1+1;
             cout<<"Hello World2";
        }

    }else{
            ruchy=ruchy+1;
            wariant1=wariant1-1;
             cout<<"Hello World";
    }
    
}
5

Wyjaśniłbyś co mamy zrobić z tym kodem? Chcesz się pochwalić? A może coś nie działa? A jak nie działa, to co nie działa? Nie kompiluje się? Wywala się? Nie wywala się, ale zwraca błędne wyniki?
Ogólnie, zastosuj się do https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/ oraz popraw posta.

0

zapomniałem sprecyzować
niestety niedziała poniewasz cout nie wypisuje "hallo word" ani "hallo word2"

3
    return 0;
    if (wariant1 <= wariant3)
    {
        while(wariant1 <= wariant3)
        {
            ruchy=ruchy+1;
            wariant1=wariant1+1;
             cout<<"Hello World2";
        }

    }else{
            ruchy=ruchy+1;
            wariant1=wariant1-1;
             cout<<"Hello World";
    }

a jak miałby wypisywać, jak masz return 0 przedtem? Jakiego edytora/IDE używasz? Gdyby dodać opcję pokazywania ostrzeżeń/po prostu je przeczytać (zakładająć, że jest już włączona), to byś od razu się zorientował, że masz tak zwany "martwy kod", czyli taki który nigdy się nie ma prawa wykonać, niezależnie od danych wejściowych.

0
enedil napisał(a):
    return 0;
    if (wariant1 <= wariant3)
    {
        while(wariant1 <= wariant3)
        {
            ruchy=ruchy+1;
            wariant1=wariant1+1;
             cout<<"Hello World2";
        }

    }else{
            ruchy=ruchy+1;
            wariant1=wariant1-1;
             cout<<"Hello World";
    }

a jak miałby wypisywać, jak masz return 0 przedtem? Jakiego edytora/IDE używasz? Gdyby dodać opcję pokazywania ostrzeżeń/po prostu je przeczytać (zakładająć, że jest już włączona), to byś od razu się zorientował, że masz tak zwany "martwy kod", czyli taki który nigdy się nie ma prawa wykonać, niezależnie od danych wejściowych.

https://www.onlinegdb.com/online_c++_compiler poniewarz visual studio mi niedziała;
a zabranie return 0; niby pomogło ale wypisuje tylko "Hello World2" i tylko 1 raz a potem nic

1
rudy101 GAMING napisał(a):

a zabranie return 0; niby pomogło ale wypisuje tylko "Hello World2" i tylko 1 raz a potem nic

To by znaczyło, że pętla się wykonała jedynie jeden raz. Być może (a w zasadzie, jestem pewien), że masz błędy gdzie indziej.

Swoją drogą, kod poniżej jest równoważny z tym co napisałeś:

#include <iostream>
#include <string>
using namespace std;

int szukajZnaku(string &tekst, char szukanyZnak1, char szukanyZnak2, char szukanyZnak3, char szukanyZnak4,
                char szukanyZnak5, char szukanyZnak6, char szukanyZnak7, char szukanyZnak8)
{
    int wariant = 0;
    if (tekst.find(szukanyZnak1) != string::npos)
    {
        wariant += 8;
    }
    return wariant;
}
int main()
{
    int ruchy = 0;
    string naszTekst;
    cin >> naszTekst;
    string naszTekst2;
    cin >> naszTekst2;
    int wariant1 = szukajZnaku(naszTekst, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
    int wariant2 = szukajZnaku(naszTekst, '1', '2', '3', '4', '5', '6', '7', '8');
    int wariant3 = szukajZnaku(naszTekst2, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
    int wariant4 = szukajZnaku(naszTekst2, '1', '2', '3', '4', '5', '6', '7', '8');
    if (wariant1 <= wariant3)
    {
        while (wariant1 <= wariant3)
        {
            ruchy = ruchy + 1;
            wariant1 = wariant1 + 1;
            cout << "Hello World2";
        }
    }
    else
    {
        ruchy = ruchy + 1;
        wariant1 = wariant1 - 1;
        cout << "Hello World";
    }
}

Zastanów się co z tym jest nie tak.

2

Jak patrzę na ten kod to widzę ewidentnie że jedyną słuszną decyzją może być jego wywalenie i napisanie od nowa.
Nadal nie podałeś co ten kod ma robić, założę się że da rady napisać to samo co najmniej 5 razy krócej.

0
_13th_Dragon napisał(a):

Jak patrzę na ten kod to widzę ewidentnie że jedyną słuszną decyzją może być jego wywalenie i napisanie od nowa.
Nadal nie podałeś co ten kod ma robić, założę się że da rady napisać to samo co najmniej 5 razy krócej.

kod ma przyją pozycje króla na planszy
i podać ile ruch€ mu ta zajeło i potem podać kierunki w ktura ma sie kurl poruszyć
powinno to wyglondać np.:
a1
h1
8
do góry, do góry, do góry, do góry, do góry, do góry, do góry, do góry

0
enedil napisał(a):
rudy101 GAMING napisał(a):

a zabranie return 0; niby pomogło ale wypisuje tylko "Hello World2" i tylko 1 raz a potem nic

To by znaczyło, że pętla się wykonała jedynie jeden raz. Być może (a w zasadzie, jestem pewien), że masz błędy gdzie indziej.

Swoją drogą, kod poniżej jest równoważny z tym co napisałeś:

#include <iostream>
#include <string>
using namespace std;

int szukajZnaku(string &tekst, char szukanyZnak1, char szukanyZnak2, char szukanyZnak3, char szukanyZnak4,
                char szukanyZnak5, char szukanyZnak6, char szukanyZnak7, char szukanyZnak8)
{
    int wariant = 0;
    if (tekst.find(szukanyZnak1) != string::npos)
    {
        wariant += 8;
    }
    return wariant;
}
int main()
{
    int ruchy = 0;
    string naszTekst;
    cin >> naszTekst;
    string naszTekst2;
    cin >> naszTekst2;
    int wariant1 = szukajZnaku(naszTekst, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
    int wariant2 = szukajZnaku(naszTekst, '1', '2', '3', '4', '5', '6', '7', '8');
    int wariant3 = szukajZnaku(naszTekst2, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
    int wariant4 = szukajZnaku(naszTekst2, '1', '2', '3', '4', '5', '6', '7', '8');
    if (wariant1 <= wariant3)
    {
        while (wariant1 <= wariant3)
        {
            ruchy = ruchy + 1;
            wariant1 = wariant1 + 1;
            cout << "Hello World2";
        }
    }
    else
    {
        ruchy = ruchy + 1;
        wariant1 = wariant1 - 1;
        cout << "Hello World";
    }
}

Zastanów się co z tym jest nie tak.

jak naprawić pentle jeżeli tak?

0
#include <iostream>
#include <iomanip>
#include <cctype>
#include <cmath>
using namespace std;

void toCoord(char sx,char sy,int &x,int &y)
{
	x=tolower(sx)-'a';
	y=sy-'1';
}

void readCoord(int &x,int &y)
{
	char sx,sy;
	cin>>ws>>sx>>ws>>sy;
	toCoord(sx,sy,x,y);
}

int si(int v) { return (v>0)-(v<0); }

int main()
{
	static const char *dir[3][3]={{"lewo-gora","gora","prawo-gora"},{"lewo","?","prawo"},{"lewo-dol","dol","prawo-dol"}};
	for(int ax,ay,bx,by;;)
	{
		readCoord(ax,ay); // if(0>ax||ax>7||0>ay||ax>y) podano śmiecie
		readCoord(bx,by); // j.w.
		int h=by-ay,w=bx-ax,vmin=min(abs(h),abs(w)),vmax=max(abs(h),abs(w));
		int sh=h-si(h)*vmin,sw=w-si(w)*vmin;
		int sih=si(h),siw=si(w),sish=si(sh),sisw=si(sw);
		const char *dira=dir[sih+1][siw+1],*dirb=dir[sish+1][sisw+1];
		cout<<"Ruchow: "<<vmax<<endl;
		for(int i=0;i<vmax;++i) cout<<(i<vmin?dira:dirb)<<" ";
		cout<<endl;
	}
    return 0;
}
1
enedil napisał(a):

Swoją drogą, kod poniżej jest równoważny z tym co napisałeś:

#include <iostream>
#include <string>
using namespace std;

int szukajZnaku(string &tekst, char szukanyZnak1, char szukanyZnak2, char szukanyZnak3, char szukanyZnak4,
                char szukanyZnak5, char szukanyZnak6, char szukanyZnak7, char szukanyZnak8)
{
    int wariant = 0;
    if (tekst.find(szukanyZnak1) != string::npos)
    {
        wariant += 8;
    }
    return wariant;
}
int main()
{
    int ruchy = 0;
    string naszTekst;
    cin >> naszTekst;
    string naszTekst2;
    cin >> naszTekst2;
    int wariant1 = szukajZnaku(naszTekst, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
    int wariant2 = szukajZnaku(naszTekst, '1', '2', '3', '4', '5', '6', '7', '8');
    int wariant3 = szukajZnaku(naszTekst2, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
    int wariant4 = szukajZnaku(naszTekst2, '1', '2', '3', '4', '5', '6', '7', '8');
    if (wariant1 <= wariant3)
    {
        while (wariant1 <= wariant3)
        {
            ruchy = ruchy + 1;
            wariant1 = wariant1 + 1;
            cout << "Hello World2";
        }
    }
    else
    {
        ruchy = ruchy + 1;
        wariant1 = wariant1 - 1;
        cout << "Hello World";
    }
}

Zastanów się co z tym jest nie tak.

To o czym mówiłem (w komentarzu), jak już wiadomo co trzeba zrobić to wystarczy:

#include <iostream>
#include <cctype>
#include <cmath>
using namespace std;

void toCoord(char sx,char sy,int &x,int &y)
{
	x=tolower(sx)-'a';
	y=sy-'1';
}

void readCoord(int &x,int &y)
{
	char sx,sy;
	cin>>ws>>sx>>ws>>sy;
	toCoord(sx,sy,x,y);
}

int main()
{
	for(int ax,ay,bx,by;;)
	{
		readCoord(ax,ay); // if(0>ax||ax>7||0>ay||ax>y) podano śmiecie
		readCoord(bx,by); // j.w.
		cout<<"Ruchow: "<<max(abs(by-ay),abs(bx-ax))<<endl;
	}
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1