powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите пожалуйста написать программу на с++
24 сообщений из 24, страница 1 из 1
Помогите пожалуйста написать программу на с++
    #38863652
des666sar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит восьми: первое число – номер вертикали (при счете слева направо), второе – номер горизонтали (при счете снизу вверх). Даны натуральные числа – a, b, c, d, e, f, каждое из которых не превосходит восьми. Определить, сможет ли белый слон, расположенный на поле (a, b), одним ходом пойти на поле (e, f), не попав при этом под удар черного ферзя, находящегося на поле (c, d).
Я написал что-то, но не понимаю, что не так, помогите!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
	setlocale(LC_ALL, "rus");
	int a, b, c, d, e, f;
	cout<<"Введите координаты белого слона:";
	cin>>a>>b;
	cout<<"Введите координаты поля, на которое необходимо переместить белого слона:";
	cin>>e>>f;
	cout<<"Введите координаты черного ферзя, под удар которого может попасть белый слон:";
	cin>>c>>d;
	if (a==e || b==f)
	{
		if (c==e || d==f)
		{
			if ((c-d==e-f) || (c+d==e+f))
		cout<<"Белый слон сможет пойти, но попадет под удар черного ферзя.";
		}
		else
		{
		cout<<"Белый слон сможет пойти, и не попадет под удар черного ферзя.";
		}
    }
	else
	{
		cout<<"Белый слон не может пойти одним ходом на поле (e,f).";
	}
	cout<<endl;
	getch();
}
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38863699
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
des666sarЯ написал что-то, но не понимаю, что не так, помогите!


Не так то, что ты написал просто какой-то бред.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38863714
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
des666sar
Код: plaintext
1.
2.
3.
4.
5.
	if (a==e || b==f)
	{
...
		cout<<"Белый слон сможет пойти...";
...


Слон не ходит по горизонтали/вертикали, это не ладья.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38863726
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор. Считай дельты.

P.S. С конём было бы интереснее...
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38863822
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
des666sar,не проверял то что написал, протестируйте сами, и проверьте все ли условия учтены

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
#include <math.h>

struct Point
{
	int x;
	int y;
};

int isAvailableCell_forRunnner(struct Point* cur, struct Point* dest)
{
	if (abs((double)(cur->x - dest->x)) == abs((double)(cur->y - dest->y)))
	{
		return 1;
	}
	return 0;
}

int isQueen_beat_cell(struct Point* cur, struct Point* cell)
{
	if (abs((double)(cur->x - cell->x)) == abs((double)(cur->y - cell->y)) || cur->x==cell->x|| cur->y==cell->y)
	{
		return 1;
	}
	return 0;
}

int task_from_des666sar(struct Point* runner, struct Point* dest, struct Point* queen)
{
	if (isAvailableCell_forRunnner(runner, dest) && !isQueen_beat_cell(queen, dest))
	{
		return 1;
	}
	return 0;
}
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38863985
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

проверять double на равенство — плохая идея.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864219
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfSashaMercury,

проверять double на равенство — плохая идея.

то есть вы хотите сказать что операция сравнения не применима(некорректна) к типу double ?


Судя по всему это не так:

ISO/IEC 9899:201x 6.5.9 Equality operatorsSyntax
1 equality-expression: relational-expression equality-expression == relational-expression equality-expression != relational-expression
Constraints
2 One of the following shall hold:
— both operands have arithmetic type;


каких-то комментариев в стандарте об особенности использования == к типам double(который принадлежит arithmetic type ) не встретил.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864230
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, double как и float неточно маппят целое число в свой диапазон.

Они в некотором роде напоминают хеш целого числа. Вобщем я щас не готов
указать нужные условия. Возможно для шахмат это и прокатит но в целом
погрешность кастинга к floating-point имеет место уже на этапе присваивания.

Кроме того есть нюансы с грязным нулём. Их два. +0.0 и -0.0. Есть нюансы
со спец-константой типа NaN (не число) и бесконечностями. Они .. понятное
дело не мапятся в обратную сторону.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864237
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
верю. Странно, что в стандарте про это не написали. Тогда вообще нельзя применять операцию сравнения к подмножеству типов float. Если эти проблемы не устранены.

Автор топика, в таком случае проверяйте квадраты.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864335
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymayton,
верю. Странно, что в стандарте про это не написали.
Какой стандарт ты имеешь в виду? Язык программирования не постулирует
алгебры floating-point. Он обычно (99%) поддерживает какую-то существующую
программно-аппаратную архитектуру. И просто ссылается на нее. Нюансы
могут быть в обработке исключений, в кастингах при выполнении операций.
Ну и конечно (хе-хе) вывод на экран. По сабжу - самая коварная вещь
и грабель с топором для новичка.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864459
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonАвтор. Считай дельты.

P.S. С конём было бы интереснее...

Ты уверен, что фигура в данном случае важна ?
Я вот совсем не уверен. Т.е. даже наоборот -- уверен, не важна.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864463
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymayton,
верю. Странно, что в стандарте про это не написали. Тогда вообще нельзя применять операцию сравнения к подмножеству типов float.


Да, как ни странно. Т.е. на самом деле можно, иногда, если знаешь, что делаешь.

SashaMercuryЕсли эти проблемы не устранены.


Нет, эти "проблемы" не устранены
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864474
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я просто вспомнил шахматные задачки которые решал на сях. Конь - самая интересная фигура.
Ходя в данной задачке. В один ход. Пожалуй да. Тривиально.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864533
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Машинальный рефакт. Не компилил. Не знаю работает-ли. Но вроде меньше букв.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
#include <iostream>
#include <conio.h>
using namespace std;

void input(string comment, int &x, int &y) {
	cout << "Введите координаты " << comment;
	cin >> x >> y;
}

int main() {
	setlocale(LC_ALL, "rus");
	int a, b, c, d, e, f;
	input("белого слона:", a, b);
	input("поля, на которое необходимо переместить белого слона:", c, d);
	input("черного ферзя, под удар которого может попасть белый слон:", e, f);
	cin >> c >> d;
	cout << "Белый слон ";
	if (a == e || b == f) {
		if (c == e || d == f) && ((c - d == e - f) || (c + d == e + f)) {
			cout << "сможет пойти, но ";			
		} else {
			cout << "сможет пойти, и не ";
		}
		count << "попадет под удар черного ферзя."
	} else {
		cout << "не может пойти одним ходом на поле (e,f).";
	}
	cout << endl;
	getch();
}
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864962
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivSashaMercurymayton,
верю. Странно, что в стандарте про это не написали. Тогда вообще нельзя применять операцию сравнения к подмножеству типов float.


Да, как ни странно. Т.е. на самом деле можно, иногда, если знаешь, что делаешь.

SashaMercuryЕсли эти проблемы не устранены.


Нет, эти "проблемы" не устранены

1) тогда почему не написали про integer types\enumaration types, вместо aritmetic types=integer types\enumaration types+floating types ?
2) Очень странно. Тип данных подразумевает не только объем памяти выделяемый на объект и способ чтения этой памяти, но операции которые можно к нему применять. А если в случае операции сравнения мы имеем UB, то эту операцию вообще нельзя применять. В ней нет смысла, потому что она недостоверна.
3) Приведите пожалуйста пример, когда сравнение двух наверняка эквивалентных значений даст неверный результат.
fe
Код: plaintext
1.
2.
3.
double a = 0.0;
	double b = -0.0;
	printf("%i\n", a == b);



рисует 1
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864966
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Информация к размышлению.

wiki0x 0000 0000 0000 0000 = 0.0
0x 8000 0000 0000 0000 = –0.0
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864968
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но сравнил то он их корректно
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864979
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSMasterZivпропущено...


Да, как ни странно. Т.е. на самом деле можно, иногда, если знаешь, что делаешь.

пропущено...


Нет, эти "проблемы" не устранены

1) тогда почему не написали про integer types\enumaration types, вместо aritmetic types=integer types\enumaration types+floating types ?
2) Очень странно. Тип данных подразумевает не только объем памяти выделяемый на объект и способ чтения этой памяти, но операции которые можно к нему применять. А если в случае операции сравнения мы имеем UB, то эту операцию вообще нельзя применять. В ней нет смысла, потому что она недостоверна.
3) Приведите пожалуйста пример, когда сравнение двух наверняка эквивалентных значений даст неверный результат.
fe
Код: plaintext
1.
2.
3.
double a = 0.0;
	double b = -0.0;
	printf("%i\n", a == b);



рисует 1

1) Непонятно почему. Должны были написать следующее: сравнение FT производится по норме FT.
2) Можно применять сравнение по норме, и это нудно было прокомментировать в стандарте. И хотя в стандарте об этом написано, но намного позже, и по другому:
ISO/IEC 9899:201xDBL_EPSILON 2.2204460492503131E-16 // decimal constant
3)
Код: plaintext
1.
2.
3.
long double a = 0.1;
	long double b = 0.10000000000000001;
	printf("%i\n", a == b);
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864980
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfSashaMercury,

проверять double на равенство — плохая идея.

Сравнение целых чисел приведенных к FTвсегда будет корректным. Сравнение чисел имеющих различие в 17 знаке после запятой должно быть рассмотрено особым образом.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38864981
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryRWolfSashaMercury,

проверять double на равенство — плохая идея.

Сравнение целых чисел приведенных к FTвсегда будет корректным. Сравнение чисел имеющих различие в 17 знаке после запятой должно быть рассмотрено особым образом.

число 17 варьируется в зависимости от конкретного типа FT.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38865103
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саш. Скажи пожалуйста. А зачем ты в шахматной задаче использовал кастинг в double?
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38865105
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryСравнение целых чисел приведенных к FTвсегда будет корректным. Сравнение чисел имеющих различие в 17 знаке после запятой должно быть рассмотрено особым образом.
Спору нет. А вот если из целого числа извлечь корень, а потом возвести в квадрат и сравнить с оригинальным, то сравнение может уже и не дать правильного результата.
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38865112
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСаш. Скажи пожалуйста. А зачем ты в шахматной задаче использовал кастинг в double?

мне показалось что abs принимает FT. Ошибся ? Сейчас в стандарте посмотрел, оказывается нет. А VS выводил подсказу о том, что тип параметра должен быть double
...
Рейтинг: 0 / 0
Помогите пожалуйста написать программу на с++
    #38865131
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymaytonСаш. Скажи пожалуйста. А зачем ты в шахматной задаче использовал кастинг в double?

мне показалось что abs принимает FT. Ошибся ? Сейчас в стандарте посмотрел, оказывается нет. А VS выводил подсказу о том, что тип параметра должен быть double
Какие пустяки. Мы в смежном форуме разработали кучу макросов для abs(...). Готовое (и наверное лучшее решение)
есть в библиотеке std. Для всех типов данных.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите пожалуйста написать программу на с++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]