Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Гаряка Асмик
Статус: Профессионал
Рейтинг: 4588
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2466
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 1995
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / C/C++

Номер выпуска:1568
Дата выхода:25.09.2010, 16:00
Администратор рассылки:Verena, Профессионал
Подписчиков / экспертов:337 / 167
Вопросов / ответов:2 / 3
IRC-канал по теме:#C

Вопрос № 179973: Добрый День, господа эксперты. Помогите пожалуйста написать такую программу на С++: Написать программу которая выводит на экран календарь на месяц, на год. В программе должна быть возможность указать через переменную на какой месяц вывести кал...


Вопрос № 179975: Добрый День, господа эксперты. Помогите пожалуйста написать такую программу на С++: Написать программу которая посчитает периметр прямоугольника заданного координатами вершин, проверить прямоугольник ли это. Заранее Вам благодарен....

Вопрос № 179973:

Добрый День, господа эксперты. Помогите пожалуйста написать такую программу на С++:

Написать программу которая выводит на экран календарь на месяц, на год. В программе должна быть возможность указать через переменную на какой месяц вывести календарь.

Заранее Вам благодарен.

Отправлен: 20.09.2010, 14:31
Вопрос задал: Уманский Денис, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Verena, Профессионал :
Здравствуйте, Уманский Денис.
Решение в приложении. Вводится месяц и год, программа выводит календарь на этот месяц. Алгоритм вычисления дня недели взят из Википедии, по нему вычисляем, на какой день недели приходится первое число месяца. Остальное должно быть ясно из комментариев.
Консольное приложение, скомпилировано в MS VS 2005.

Удачи!

Приложение:

-----
Эта история - не для истории, понимаешь?

Ответ отправил: Verena, Профессионал
Ответ отправлен: 24.09.2010, 20:16
Номер ответа: 263174

Оценка ответа: 5
Комментарий к оценке:
Благодарю!!!

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 263174 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 179975:

    Добрый День, господа эксперты. Помогите пожалуйста написать такую программу на С++:

    Написать программу которая посчитает периметр прямоугольника заданного координатами вершин, проверить прямоугольник ли это.

    Заранее Вам благодарен.

    Отправлен: 20.09.2010, 14:46
    Вопрос задал: Уманский Денис, Посетитель
    Всего ответов: 2
    Страница вопроса »


    Отвечает PsySex, Специалист :
    Здравствуйте, Уманский Денис.
    Код:
    #include "stdafx.h"

    int main(int argc, char* argv[])
    {
    int A[2];
    int B[2];
    int C[2];
    int D[2];
    int perimetr;

    printf("\nВведите координату X для точки А: ");
    scanf("%d",&A[0]) ;
    printf("\nВведите координату Y для точки А: ");
    scanf("%d",&A[1]) ;
    printf("\nВведите координату X для точки B: ");
    scanf("%d",&B[0]) ;
    printf("\nВведите координату Y для точки B: ");
    scanf("%d",&B[1]) ;
    printf("\nВведите координату X для точки C: ");
    scanf("%d",&C[0]) ;
    printf("\nВведите к оординату Y для точки C: ");
    scanf("%d",&C[1]) ;
    printf("\nВведите координату X для точки D: ");
    scanf("%d",&D[0]) ;
    printf("\nВведите координату Y для точки D: ");
    scanf("%d",&D[1]) ;

    //проверка на прямоугольность
    if (A[0]!=D[0] || A[1]!=B[1] || B[0]!=C[0] || C[1]!=D[1])
    {
    printf("\nОшибка! ABCD не является прямоугольником!!! \n");
    }
    else
    {
    //периметр
    perimetr=2*(B[0]-A[0])+2*(B[1]-C[1]);
    printf("\nПериметр прямоугольника ABCD равен: %d \n", perimetr);
    }
    return 0;
    }

    Приложение:

    -----
    Bom Shankar!

    Ответ отправил: PsySex, Специалист
    Ответ отправлен: 22.09.2010, 13:21
    Номер ответа: 263138

    Оценка ответа: 5
    Комментарий к оценке:
    Благодарю Вас! :)

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 263138 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает lamed, Профессионал :
    Здравствуйте, Уманский Денис! Code:Blocks / GCC. Поскольку Вы не указали, что известны структуры, точку описываем массивом из двух элементов. Не проверяется правильность ввода, а также не проверяется условие (A<>C) и (B<>D).
    Код:
    // Вопрос № 179975
    // Программа вычисляет периметр прямоугольника заданного координатами вершин,
    // проверяет, прямоугольник ли это.
    #include <iostream>
    #include <cmath>
    #include <cstdlib>

    using namespace std;
    typedef double TPoint[2]; // Тип точка на плоскости

    bool is_rectangle(TPoint points[]);
    /* является ли четырехугольник прямоугольником: проверка по теореме Пифагора */

    double distance( TPoint p1, TPoint p2);
    /* расстояние между двумя точками */

    double d2(TPoint p1, TPoint p2);
    /* квадрат расстояния между двумя точками */

    double perimeter(TPoint points[], int size);
    /* периметр */

    int main()
    {
    const int TOPS=4;
    int i;
    TPoint points[TOPS];

    // ввод
    for (int i=0; i<TOPS; ++i)
    {
    cout << "x["<<i<<"]=";
    cin >> points[i][0];

    cout << "y["<<i<<"]=";
    cin >> points[i][1];
    }

    cout << "Периметр=" << perimeter(points, TOPS) << endl;
    cout << (is_rectangle(points)? "Прямоугольник" : "Не прямоугольник") << endl;
    system("pause");

    return 0;
    }

    double distance(TPoint p1, TPoint p2)
    {
    double dx=p1[0]-p2[0];
    double dy=p1[1]-p2[1] ;

    return sqrt(dx*dx+dy*dy);
    }

    double d2(TPoint p1, TPoint p2)
    {
    double dx=p1[0]-p2[0];
    double dy=p1[1]-p2[1];

    return dx*dx+dy*dy;
    }

    double perimeter(TPoint points[], int size)
    {
    double p=0;
    for (int i=0; i<size-1; ++i)
    p+=distance(points[i], points[i+1]);
    p+=distance(points[size-1], points[0]);
    return p;
    }

    bool is_rectangle(TPoint points[])
    {
    // Проверку на равенство вещественных чисел корректно
    // заменить проверкой на сравнение абсолютной величины разности
    // с очень маленькой положительной величиной
    // Вариант сравнения на равенство закомментирован.
    const double eps=1e-6;
    // квадраты стороны
    double AB2=d2(points[0], points[1]);
    double BC2=d2(points[1], points[2]);
    double CD2=d2(points[2], points[3]);
    double DA2=d2(points[3], points[0]);

    // квадраты диагоналей
    double AC2= d2(points[0], points[2]);
    double BD2=d2(points[1], points[3]);

    // Проверяем три угла, если они прямые, то четвертый тоже прямой
    return fabs(AB2+BC2-AC2)<eps && fabs(BC2+CD2-BD2)<eps && fabs(CD2+DA2-AC2)<eps;
    }

    /*
    bool is_rectangle(TPoint points[])
    {
    // квадраты стороны
    double AB2=d2(points[0], points[1]);
    double BC2=d2(points[1], points[2]);
    double CD2=d2(points[2], points[3]);
    double DA2=d2(points[3], points[0]);

    // квадраты диагоналей
    double AC2=d2(points[0], points[2]);
    double BD2=d2(points[1], points[3]);

    // Проверяем три угла, если они прямые, то четвертый тоже прямой
    return (AB2+BC2==AC2) && (BC2+CD2==BD2) && (CD2+DA2==AC2);
    }
    */


    Данные:
    Код:
    0.0 0.0 1.0 1.0 2
    0 0.0 1.0 -1.0
    Получено:
    Периметр=5.65685
    Прямоугольник


    Данные:
    Код:
    0.0 0.0 0.0 2.0 2.0 2.0 1.0 0.0
    Результат:
    Периметр=7.23607
    Не прямоугольник

    Удачи!

    Ответ отправил: lamed, Профессионал
    Ответ отправлен: 22.09.2010, 13:51
    Номер ответа: 263139

    Оценка ответа: 5
    Комментарий к оценке:
    Спасибки Вам :)

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 263139 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.20 от 22.09.2010

    В избранное