21

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

bla_bla_bla1();
goto ignore;
bla_bla_bla2();
surprize_motherf_cker:bla_bla_bla3();
ignore:
bla_bla_bla4();
...
if(something)goto surprize_motherf_cker;

Ми намагалися виключити рядки між goto ignore; та ignore:, але невдало - bla_bla_bla3(); може бути виконано.

22

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

В цьому сенсі — так. Проте, bla_bla_bla2() перебуває між безумовним переходом на ignore та найближчою після переходу міткою surprize_motherf_cker, а тому bla_bla_bla2() за межами досяжності.

23

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

P.Y. написав:

В цьому сенсі — так. Проте, bla_bla_bla2() перебуває між безумовним переходом на ignore та найближчою після переходу міткою surprize_motherf_cker, а тому bla_bla_bla2() за межами досяжності.

Так. Але виконання bla_bla_bla3() може бути несподіваним, про що я й казав. Звісно, за умови, що там не два виклики, а пара десятків рядків.

Подякували: Дмитро-Чебурашка1

24

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

Прошу вибачення за оффтоп, але не хотів створювати нову тему. Питання вроді як і легке, але вже 2й день сиджу і не можу догнати.

#include<iostream>
using namespace std;
template <typename T>
T massiv(T arr[5][5])
{
    T max = arr[0][0], min = arr[0][0];
    for (int i = 0; i<5; i++)
    {
        for (int j = 0; j<5; j++)
        {
            arr[i][j] = rand() % 100;
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
    for (int i = 0; i<5; i++)
    {
        for (int j = 0; j<5; j++)
        {
            if(i==j)
            {
                if (arr[i][j] > max)
                    max=arr[i][j];
                if (arr[i][j] < min)
                    min = arr[i][j];
            }
        }
    }
    cout << "Max element - " << max << " " << "Min element - " << min << " ";
}

void main()
{
    int arr1[5][5];
    massiv(arr1);
    cout << endl;
    double arr2[5][5];
    massiv(arr2);
    cout << endl;
    char arr3[5][5];
    massiv(arr3);
    cout << endl;
}

Повернути через ретурн 2 значення не можливо, повертає тільки макс значення. В функції коли намагаюсь повернути, видає помилку, де я прорахувався підскажіть будь ласка

25

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

Видаліть цей код повністю і залишить

#include<iostream>
void main(){std::cout<<"Hello world!";}

Так буде працювати.

26 Востаннє редагувалося Husky (10.03.2018 20:30:13)

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

koala написав:

Видаліть цей код повністю і залишить

#include<iostream>
void main(){std::cout<<"Hello world!";}

Так буде працювати.

працює, дякую

Подякували: koala1

27

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

яку помилку, в якій функції?

28 Востаннє редагувалося Husky (10.03.2018 23:34:02)

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

FakiNyan написав:

яку помилку, в якій функції?

Int, double, char повинне повертати значення (мин, макс), у программи я не можу повернути значення, як його вивести?

29

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

int, double і char - то є типи даних, вони не повинні нічого повертати.

В функції коли намагаюсь повернути, видає помилку, де я прорахувався підскажіть будь ласка

Так а яка помилка вилазить?

30

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

Husky написав:
koala написав:

Видаліть цей код повністю і залишить

#include<iostream>
void main(){std::cout<<"Hello world!";}

Так буде працювати.

працює, дякую

Схоже, ви сарказму не розумієте.
Ви не написали, як програма має працювати, лише те, це цей код не працює. Яким чином ми маємо визначти, як вам потрібно, щоб код працював, єдина надана вами інформація - це не той код, що вам треба?

Крім того, ваше небажання виконувати Правила, зокрема, п.3.6 не є виправданням для їх порушення. Створіть нову тему відповідно до Правил, і не забудьте вказати, про яку саме помилку повідомляє компілятор. А поки що вам попередження.

31

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

koala написав:

Розв'язав, давайте наступну.

Прихований текст

Може я ще дам ?)

32

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

Husky написав:

Прошу вибачення за оффтоп, але не хотів створювати нову тему. Питання вроді як і легке, але вже 2й день сиджу і не можу догнати.

#include<iostream>
using namespace std;
template <typename T>
T massiv(T arr[5][5])
{
    T max = arr[0][0], min = arr[0][0];
    for (int i = 0; i<5; i++)
    {
        for (int j = 0; j<5; j++)
        {
            arr[i][j] = rand() % 100;
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
    for (int i = 0; i<5; i++)
    {
        for (int j = 0; j<5; j++)
        {
            if(i==j)
            {
                if (arr[i][j] > max)
                    max=arr[i][j];
                if (arr[i][j] < min)
                    min = arr[i][j];
            }
        }
    }
    cout << "Max element - " << max << " " << "Min element - " << min << " ";
}

void main()
{
    int arr1[5][5];
    massiv(arr1);
    cout << endl;
    double arr2[5][5];
    massiv(arr2);
    cout << endl;
    char arr3[5][5];
    massiv(arr3);
    cout << endl;
}

Повернути через ретурн 2 значення не можливо, повертає тільки макс значення. В функції коли намагаюсь повернути, видає помилку, де я прорахувався підскажіть будь ласка

Можливо ви помилились темою?

33

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

Оцініть пліз

Прихований текст
#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

int main(int argc, char** argv) {
    system("chcp 1251 >> nul");
    setlocale(LC_ALL, "UKR");
    cout.setf(ios::boolalpha);
    
    int x, y;
    cout << " X = "; cin >> x;
    cout << " Y = "; cin >> y;
    
//    bool black = (x==y)||((x%2==0)&&(y%2==0))||((x%2!=0)&&(y%2!=0));
    
    bool ok = ((x!=y)||(x + y == 9)||(x%2==0)||(y%2==0)||((y + x)%2!=0));
    
    cout <<" Answer is: " << ok;
    
    

    cout << endl << endl << endl << endl << endl << endl << endl << endl << endl;
    system("pause");
    return 0;
}

34

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

(x%2==0)||(y%2==0)

хіба мона додати два парних числа і отримати 9 ?

35

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

А чому так мало умов? Можна ж для кожної клітинки розписати:

(x==1&&y==1)||(x==1&&y==3)&&...

Ну і клітинки (5,6) і (6,6) навряд чи одночасно будуть одного кольору, а формула дає true для обох.

36

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

Maxrad20, мені в таких випадках легше думати, намалювавши задачу на аркуші.
Для цієї задачі я намалював дошку і позначив на ній темні та світлі клітинки:

y
...
4 с т с т
3 т с т с
2 с т с т
1 т с т с
  1 2 3 4 ... x

Так трохи легше побачити, що тут є закономірність.
Наприклад, якщо x - непарне число і y - непарне, то клітинка темна, якщо в цьому ж випадку y - парне, то клітинка світла.
Якщо x - парне число, то все навпаки: якщо y непарне - клітинка світла, а якщо парне - темна.
Таке легко закодувати: http://cpp.sh/8edet.
Однак, це не дуже хороше рішення, оскільки на сайті code golf на цю задачу є дуже багато інших, кращих рішень: https://codegolf.stackexchange.com/ques … ess-square.
Сподіваюсь, це буде для Вас корисним.

37 Востаннє редагувалося ReAl (20.03.2018 10:12:58)

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

Ярослав написав:

Наприклад, якщо x - непарне число і y - непарне, то клітинка темна, якщо в цьому ж випадку y - парне, то клітинка світла.
Якщо x - парне число, то все навпаки: якщо y непарне - клітинка світла, а якщо парне - темна.

Так чого ж не робите наступний крок ще на рівні слів:
якщо парність (або непарність) чисел x і y співпадає, то клітинка темна
Якщо не співпадає, то світла.

Власне, саме це і закодував leofun01 ще на початку (x ^ y) & 1, бо отой дворівневий if-else є шаблоном, який розпізнається як «виключне АБО», тобто XOR, а (x & 1) ^ (y & 1) простими перетвореннями зводиться до (x ^ y) & 1.
Він це зробив, спираючись на двійкове, бітове представлення чисел, а я переписав як (x + y) % 2, спираючись на ту властивість, що сума двох парних чи двох непарних чисел (чисел з однаковою парністю) дає парне число. Це має працювати і на трійковому комп'ютері :-)

У вашому варіанті можна було і так

    std::cout << isOdd(x) == isOdd(y) ?  "dark" : "light" << std::endl;

38

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

ReAl, через неуважність. Не прочитав всі повідомлення теми, перепрошую. Дякую за пояснення.

39

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

Потрібна допомога з програмою.

#include <iostream>
#include <windows.h>
#include <graphics.h>       //Графічна бібліотека, для роботи з статичними малюнками
using namespace std;

class Straight           //Базовий клас "Пряма"
{
    public:         //Робить нижче наведені змінні та методи публічними(доступними)
        int x1, x2, y1, y2;    //Змінні цілочисельного типу, надають координати
        int X, Y, r1, r2, k1, k2, W1, W2, Z1, Z2, a; //Змінні цілочисельного типу, надають координати вектора на кут
        virtual void vv()
        {
            //Ввіртуальний метод вводу
        }
        virtual void vuv()
        {
            //Віртуальний метод виводу
        }
};
class Vvod : public Straight      //Клас - нащадок "Введення простої лінії" від класу "Пряма"
{
    public:         //Робить нижче наведені змінні та методи публічними(доступними)
        void vv()     //Метод введення
        {
            cout << "Введіть координати\n:";
            cin >> x1;
            cin >> y1;
            cin >> x2;
            cin >> y2;
        }
        void vuv()     //Метод виведення
        {
            closegraph();       //Закриває графічне вікно
            initwindow(500, 500);        //Створює графічне вікно розміром 500х500 пікселей
            setcolor(GREEN);       //Надає слідуючим графічним елементам зеленого кольору
            line(x1, y1, x2, y2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
        }
};
class Delete : public Straight      //Клас - нащадок "Видалення" від класу "Пряма"
{
    public:         //Робить нижче наведені змінні та методи публічними(доступними)
        void vuv()      //Метод виведення
        {
            closegraph();       //Закриває графічне вікно
            initwindow(500, 500);        //Створює графічне вікно розміром 500х500 пікселей
        }
};
class Shift:public Straight      //Клас - нащадок "Переміщення" від класу "Пряма"
{
    public:         //Робить нижче наведені змінні та методи публічними(доступними)
        void vv()       //Метод введення
        {
            cout << "Введіть координати\n:";
            cin >> x1;
            cin >> y1;
            cin >> x2;
            cin >> y2;
            cout << "Введіть вектор:  ";
            cin >> X;
            cin >> Y;
            r1 = x1 + X;
            r2 = x2 + X;
            k1 = y1 + Y;
            k2 = y2 + Y;
        }
        void vuv()      //Метод виведення
        {
            closegraph();       //Закриває графічне вікно
            initwindow(500, 500);        //Створює графічне вікно розміром 500х500 пікселей
            setcolor(GREEN);       //Надає слідуючим графічним елементам зеленого кольору
            line(x1, y1, x2, y2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
            setcolor(GREEN);       //Надає слідуючим графічним елементам зеленого кольору
            line(r1, k1, r2, k2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
        }
};
class Turn : public Straight       //Клас - нащадок "Поворот" від класу "Пряма"
{
    public:         //Робить нижче наведені змінні та методи публічними(доступними)
        void vv()       //Метод введення
        {
            cout << "Введіть координати\n:";
            cin >> x1;
            cin >> y1;
            cin >> x2;
            cin >> y2;
            cout << "Введіть кут:  ";
            cin >> a;
        }
        void vuv()      //Метод виведення
        {
            closegraph();       //Закриває графічне вікно
            initwindow(500, 500);        //Створює графічне вікно розміром 500х500 пікселей
            setcolor(GREEN);       //Надає слідуючим графічним елементам зеленого кольору
            line(x1, y1, x2, y2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
            if (a == 45)      //Перевірка умови, якщо здійснюється, то повертає значення "істина"
            {
                Z2 = (x2 + x1) - y1;
                line(x1, y1, x2, Z2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
            }
            if (a == 90)      //Перевірка умови, якщо здійснюється, то повертає значення "істина"
            {
                Z2 = x2 + x1;
                line(x1, y1, x1, Z2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
            }
            if (a == 180)      //Перевірка умови, якщо здійснюється, то повертає значення "істина"
            {
                W2 = x1 + x2;
                line(W2, y1, x1, y1);     //Створення лінії з х,у - (початки) і х,у - (кінці)
            }
        }
};
int main () //Головна функція
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int menu;   //Зміна для вибору пункту меню, цілочисельного типу
    while(1)    //цикл з передумовою, працює безкінечно, тому що в умові стоїть "1"
    {
        Straight *A;     //Створення об'єкт - вказівник від класу "Пряма", яка буде перегружатись
        //Якщо об'єкт(не вказівник) пишеться для виклику методу через крапку("."),то
        //об'єкт(вказівник) пишеться через стрілку "->"
        cout << "\t\t\tMENU\n";
        cout << "1 - Намалювати пряму\t\t2 - Видалити" << endl;
        cout << "3 - Зрушити\t\t\t4 - Поворот" << endl;
        cout << "5 - Вихід\t\t\t6 - Очистити консоль'" << endl;
        cout << "\n Вибрати пункт меню: ";
        cin >> menu;
        switch(menu)       //Оператор меню вибору
        {
            case 1: A = new Vvod; A->vv(); A->vuv(); break;
            case 2: A = new Delete; A->vuv(); break;
            case 3: A = new Shift; A->vv(); A->vuv(); break;
            case 4: A = new Turn; A->vv(); A->vuv(); break;
            case 5: return 0; break;
            case 6: system("cls"); break;
            default: cout << "Невірно вибраний пункт меню!\n";
        }
    }
    system("pause>>int");
}
Оригінальний код
#include <iostream>
#include <windows.h>
#include <graphics.h>       //Графічна бібліотека, для роботи з статичними малюнками
using namespace std;

class Straight           //Базовий клас "Пряма"
{
public:         //Робить нижче наведені змінні та методи публічними(доступними)
int x1,x2,y1,y2;    //Змінні цілочисельного типу, надають координати
int X,Y,r1,r2,k1,k2,W1,W2,Z1,Z2,a; //Змінні цілочисельного типу, надають координати вектора на кут
virtual void vv()
{
//Ввіртуальний метод вводу
}
virtual void vuv()
{
//Віртуальний метод виводу
}
};
class Vvod:public Straight      //Клас - нащадок "Введення простої лінії" від класу "Пряма"
{
 public:         //Робить нижче наведені змінні та методи публічними(доступними)
  void vv()     //Метод введення
  {
cout << "Введіть координати\n:";
cin >> x1;
cin >>y1;
cin >>x2;
cin >>y2;
 }
 void vuv()     //Метод виведення
{
closegraph();       //Закриває графічне вікно
initwindow(500,500);        //Створює графічне вікно розміром 500х500 пікселей
setcolor (GREEN);       //Надає слідуючим графічним елементам зеленого кольору
line (x1,y1,x2,y2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
}
};
class Delete:public Straight      //Клас - нащадок "Видалення" від класу "Пряма"
{
public:         //Робить нижче наведені змінні та методи публічними(доступними)
void vuv()      //Метод виведення
{
closegraph();       //Закриває графічне вікно
initwindow(500,500);        //Створює графічне вікно розміром 500х500 пікселей
}
};
class Shift:public Straight      //Клас - нащадок "Переміщення" від класу "Пряма"
{
public:         //Робить нижче наведені змінні та методи публічними(доступними)
void vv()       //Метод введення
{
cout << "Введіть координати\n:";
cin >> x1;
cin >>y1;
cin >>x2;
cin >>y2;
cout <<"Введіть вектор:  ";
cin >>X;
cin >>Y;
r1=x1+X;
r2=x2+X;
k1=y1+Y;
k2=y2+Y;
}
void vuv()      //Метод виведення
{
closegraph();       //Закриває графічне вікно
initwindow(500,500);        //Створює графічне вікно розміром 500х500 пікселей
setcolor (GREEN);       //Надає слідуючим графічним елементам зеленого кольору
line (x1,y1,x2,y2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
setcolor (GREEN);       //Надає слідуючим графічним елементам зеленого кольору
line (r1,k1,r2,k2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
}
};
class Turn:public Straight       //Клас - нащадок "Поворот" від класу "Пряма"
{
public:         //Робить нижче наведені змінні та методи публічними(доступними)
void vv()       //Метод введення
{
cout << "Введіть координати\n:";
cin >> x1;
cin >>y1;
cin >>x2;
cin >>y2;cout <<"Введіть кут:  ";
cin >> a;
}
void vuv()      //Метод виведення
{
 closegraph();       //Закриває графічне вікно
initwindow(500,500);        //Створює графічне вікно розміром 500х500 пікселей
setcolor (GREEN);       //Надає слідуючим графічним елементам зеленого кольору
line (x1,y1,x2,y2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
if (a==45)      //Перевірка умови, якщо здійснюється, то повертає значення "істина"
{
Z2=(x2+x1)-y1;
  line (x1,y1,x2,Z2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
}
if (a==90)      //Перевірка умови, якщо здійснюється, то повертає значення "істина"
{ Z2= x2+x1;
line (x1,y1,x1,Z2);     //Створення лінії з х,у - (початки) і х,у - (кінці)
}
if (a==180)      //Перевірка умови, якщо здійснюється, то повертає значення "істина"
{
   W2=x1+x2;
line (W2,y1,x1,y1);     //Створення лінії з х,у - (початки) і х,у - (кінці)
}
}
};
int main () //Головна функція
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
int menu;   //Зміна для вибору пункту меню, цілочисельного типу
while(1)    //цикл з передумовою, працює безкінечно, тому що в умові стоїть "1"
{
Straight *A;     //Створення об'єкт - вказівник від класу "Пряма", яка буде перегружатись
//Якщо об'єкт(не вказівник) пишеться для виклику методу через крапку("."),то
//об'єкт(вказівник) пишеться через стрілку "->"
cout<<"\t\t\tMENU\n";
cout<<"1 - Намалювати пряму\t\t2 - Видалити"<<endl;
cout<<"3 - Зрушити\t\t\t4 - Поворот"<<endl;
cout<<"5 - Вихід\t\t\t6 - Очистити консоль'"<<endl;
cout<<"\n Вибрати пункт меню: ";
cin>>menu;
switch(menu)       //Оператор меню вибору
{
case 1: A=new Vvod;A->vv();A->vuv();  break;
case 2: A=new Delete;A->vuv();break;
case 3:A=new Shift; A->vv();A->vuv();break;
case 4: A=new Turn;A->vv();A->vuv();break;
case 5: return 0;; break;
case 6:system("cls");break;
default:cout<<"Невірно вибраний пункт меню!\n";
}
}
system("pause>>int");
}

40

Re: C++ Розв'яжіть задачу (клітинки шахматної дошки)

h1st_one написав:

Потрібна допомога з програмою.

Тоді створіть окрему тему і опишіть, у чому ваша проблема і яка допомога потрібна.
І код відформатуйте, очі болять його читати.