while (1) {
int x_mag = 0, y_mag = 0;
float x = 0.0f, y = 0.0f;
// --- СБОРКА X (0 - кнопка нажата, красный диод ПОГАС) ---
if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_0) == 0) x_mag += 4;
if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_1) == 0) x_mag += 2;
if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_2) == 0) x_mag += 1;
x = (float)x_mag;
// Если магнитуда > 0 и нажат пин знака (Pin 3), делаем минус
if (x_mag > 0 && PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_3) == 0) x = -x;
// Если магнитуда 0, принудительно ставим чистый плюс, чтобы не было -0.0
if (x_mag == 0) x = 0.0f;
// --- СБОРКА Y ---
if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_4) == 0) y_mag += 4;
if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_5) == 0) y_mag += 2;
if (PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_6) == 0) y_mag += 1;
y = (float)y_mag;
if (y_mag > 0 && PORT_ReadInputDataBit(MDR_PORTB, PORT_Pin_7) == 0) y = -y;
if (y_mag == 0) y = 0.0f;
// --- ПРОВЕРКА SELECT ---
if (PORT_ReadInputDataBit(MDR_PORTC, PORT_Pin_0) == 0) {
uint8_t hit = 0;
// Математика Вариант 8 (Справа сверху и Слева снизу)
// Прямоугольник [-4;4] x [-3;3]
if (x >= -4.0f && x <= 4.0f && y >= -3.0f && y <= 3.0f) {
// 1-я четверть (Верхний круг с центром 0,3 и R=1)
// Судя по твоим тестам, попадание даже при 0,0
if (x >= 0.0f && y >= 0.0f) {
if ( (x*x + (y-2.0f)*(y-2.0f)) >= 1.0f ) hit = 1;
}
// 3-я четверть (Нижний круг с центром 0,-2 и R=1)
else if (x <= 0.0f && y <= 0.0f) {
if ( (x*x + (y+2.0f)*(y+2.0f)) >= 1.0f ) hit = 1;
}
}
if (hit) Blink(1); // Попал
else Blink(2); // Не попал
while(PORT_ReadInputDataBit(MDR_PORTC, PORT_Pin_0) == 0);
}
}