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

Тема в разделе "C/C++/C#", создана пользователем VjLeOn, 18 апр 2012.

  1. VjLeOn

    VjLeOn Гость

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

    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. Истребитель

    Истребитель Well-Known Member

    Регистрация:
    9 июн 2010
    Сообщения:
    110
    Симпатии:
    0
    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
     
  3. VjLeOn

    VjLeOn Гость

    спасибо большое,правда все таки первую задачку не понел,не так уж много я ознакомился с С(((
     
Загрузка...

Поделиться этой страницей