Несколько Задачек По С++

  • Автор темы VjLeOn
  • Дата начала
V

VjLeOn

#1
помоги решить задачку в С++:

0.Для данных областей составить линейную программу, которая
печатает true, если точка с координатами (х, у) принадлежит
закрашенной области, и false — в противном случае



Начал писать но что то не то помогите плиз.

<!--shcode--><pre><code class='С++'>#include <iostream.h>
#include <conio.h>
int main()
{float x, y;
cout <<" Ведите координаты точек x, y" << endl;
cin >> x >> y;
bool res;
res = (x >= -6 && y >= -6 && (-y) < (2 * x)) ||
(x <= 6 && y <= 6 && y < (2 * x)) ||
(0 + x * x + y * y) >= 1 && y < x) ||
(0 + x * x + y * y) >= -1 && x == (-y) ||
(x > 0 && y > 0 && x * x + y * y >= 1) ||
(x < 0 && y < 0 && x * x + y * y <=1));
cout<< "res = "<<res;
getch();
}[/CODE]



Также буду благодарен если поможете решить еще несколько задачек:
1.Написать программу вычисления суммы(1+1/2+1/3+1/n)
для заданного числа n. Результат представить в виде несократимой
дроби p/q (р, q — натуральные).
(Не надо зделал)
2.Написать программу, определяющую сумму n-значных чисел,
содержащих только нечетные цифры. Определить также, сколько
четных цифр в найденной сумме.
3.Дано натуральное число N. Найти наибольшее число М
(М > 1), на которое сумма цифр в цифровой записи числа N-делится
без остатка. Если такого числа нет, то вывести слово «нет». Пример.
N = 12 345, М = 5. Сумма цифр числа N, равная 15, делится на
4.На отрезке [2, и] найти все натуральные числа, сумма цифр
которых при умножении числа на а не изменится.
P.S.если такие задачки уже решались не серчайте скиньте ссылочку.(Заранее спасибо


Вот Картинка к 0 заданию.
 

Вложения

И

Истребитель

#2
0) Увы нет времени написать полное решение но по сути тебе нужно следующее:
а) разбить картинку на базовые фигуры и выписать это в виде условий (на русском)
Например, отметим треугольники слева направо сверху вниз
1,2,3,; (т.е. 1 это левый верхний, а 4 это правый нижний) и окружность у нас единственная
Итого условие того что точка закрашена это:
(Точка находится внутри треугольника 2 или 3) или ((точка находится внутри треугольника 1 или 4) и НЕ(точка находится внутри окружности) или (НЕ(точка находится внутри треугольника 1 или 4) и (точка находится внутри окружности) )

Далее можешь просто вставить нужный код (проверяющий внутри ли точка или нет, как ты в своём примере писал) и заработает. Но это будет некрасиво.
Лучше - напиши функции (чтобы показать что ты "умный" =) которые считают, находится ли точка внутри треугольника, задаваемого координатами вершин, и внутри окружности, задаваемой координатой центра и радиусом. Т.е. функции вида

bool IsPointInTriangle(double px, double py, double x1, double y1, double x2, double y2, double x3, double y3) { код }
bool IsPointInCircle(double px, double py, double x, double y, double r) { код }

И затем врапперы вокруг них

bool IsPointInT1(doube px, double py) {return IsPointInTriangle (px, py, -6.0, 0.0, 0.0, 6.0, 0.0, 0.0)}
bool IsPointInT2(doube px, double py) {...}
...
bool IsPointInC1(double px, double py {return IsPointInCircle(px, py, 0,0, 0,0, 1,0)

Итого финальный код условия будет:

(IsPointInT2(x,y) || IsPointInT3(x,y)) || ((IsPointInT1(x,y) || IsPointInT4(x,y)) && !IsPointInC1(x,y)) || (!(IsPointInT1(x,y) || IsPointInT4(x,y)) && IsPointInC1(x,y))

Если лень писать функцию считающую лежит ли точка в указанном треугольнике просто напиши конкретный код внутри IsPointInT1..4 который считает лежит ли точка внутри треугольника конкретного из твоей фигуры, ибо это проще, т.к. твои треугольники очень просто расположены - тебе надо просто проверять знак точки по x и y а также её положение относительно прямой y=+-x+-6.

3) Очень просто:

а) Считаешь сумму цифр. Быть может есть какой-то "хитрый" способ но можно и в лоб - цифра на позиции n (с конца, отсчет с нуля) числа x считается как (x / 10 ^ n) % 10, где / это целочисленное деление, ^ возведение в степень а % это остаток от деления. Например, для числа 12345 цифра на позиции 3 это (12345/1000) % 10 = 12 % 10 = 2
Соответственно в цикле while повышая n на единицу каждый раз суммируешь цифры пока x/10^n не равно нулю. Получил сумму цифр.
б) Дальше находишь наибольший делитель:
C++:
int maxdivisor = 0;
for (int i=0;i<sqrt(x);i++)
if (x%i==0)
maxdivisor = i;
Т.е. перебираешь все числа меньшие чем корень квадратный от числа, для которого ищется делитель, если делится - запоминаешь. В конце если maxdivisor=0 пишешь НЕТ иначе выводишь maxdivisor
 
V

VjLeOn

#3
0) Увы нет времени написать полное решение но по сути тебе нужно следующее:
а) разбить картинку на базовые фигуры и выписать это в виде условий (на русском)
Например, отметим треугольники слева направо сверху вниз
1,2,3,; (т.е. 1 это левый верхний, а 4 это правый нижний) и окружность у нас единственная
Итого условие того что точка закрашена это:
(Точка находится внутри треугольника 2 или 3) или ((точка находится внутри треугольника 1 или 4) и НЕ(точка находится внутри окружности) или (НЕ(точка находится внутри треугольника 1 или 4) и (точка находится внутри окружности) )

Далее можешь просто вставить нужный код (проверяющий внутри ли точка или нет, как ты в своём примере писал) и заработает. Но это будет некрасиво.
Лучше - напиши функции (чтобы показать что ты "умный" =) которые считают, находится ли точка внутри треугольника, задаваемого координатами вершин, и внутри окружности, задаваемой координатой центра и радиусом. Т.е. функции вида

bool IsPointInTriangle(double px, double py, double x1, double y1, double x2, double y2, double x3, double y3) { код }
bool IsPointInCircle(double px, double py, double x, double y, double r) { код }

И затем врапперы вокруг них

bool IsPointInT1(doube px, double py) {return IsPointInTriangle (px, py, -6.0, 0.0, 0.0, 6.0, 0.0, 0.0)}
bool IsPointInT2(doube px, double py) {...}
...
bool IsPointInC1(double px, double py {return IsPointInCircle(px, py, 0,0, 0,0, 1,0)

Итого финальный код условия будет:

(IsPointInT2(x,y) || IsPointInT3(x,y)) || ((IsPointInT1(x,y) || IsPointInT4(x,y)) && !IsPointInC1(x,y)) || (!(IsPointInT1(x,y) || IsPointInT4(x,y)) && IsPointInC1(x,y))

Если лень писать функцию считающую лежит ли точка в указанном треугольнике просто напиши конкретный код внутри IsPointInT1..4 который считает лежит ли точка внутри треугольника конкретного из твоей фигуры, ибо это проще, т.к. твои треугольники очень просто расположены - тебе надо просто проверять знак точки по x и y а также её положение относительно прямой y=+-x+-6.

3) Очень просто:

а) Считаешь сумму цифр. Быть может есть какой-то "хитрый" способ но можно и в лоб - цифра на позиции n (с конца, отсчет с нуля) числа x считается как (x / 10 ^ n) % 10, где / это целочисленное деление, ^ возведение в степень а % это остаток от деления. Например, для числа 12345 цифра на позиции 3 это (12345/1000) % 10 = 12 % 10 = 2
Соответственно в цикле while повышая n на единицу каждый раз суммируешь цифры пока x/10^n не равно нулю. Получил сумму цифр.
б) Дальше находишь наибольший делитель:
C++:
int maxdivisor = 0;
for (int i=0;i<sqrt(x);i++)
if (x%i==0)
maxdivisor = i;
Т.е. перебираешь все числа меньшие чем корень квадратный от числа, для которого ищется делитель, если делится - запоминаешь. В конце если maxdivisor=0 пишешь НЕТ иначе выводишь maxdivisor
спасибо большое,правда все таки первую задачку не понел,не так уж много я ознакомился с С(((