Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 14.12.2017, 20:54   #1
arnora
Пользователь
 
Регистрация: 27.11.2017
Сообщений: 13
Репутация: 10
По умолчанию Помогите пожалуйста разобраться с ошибками

Создать программу, которая проверяет, можно ли поместить заданный прямоугольник внутри заданной окружности. Использовать два класса – класс «Правильный прямоугольник» и класс «Окружность».

Код:

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void write_c(LPCTSTR s, WORD color);
class rect {
public:
    int x, y, w, h;
public:
    rect(void) {}
    rect(int _x, int _y, int _w, int _h) :x(_x), y(_y), w(_w), h(_h) {}
};
class circle {
public:
    int x, y, r;
public:
    circle(void) {}
    circle(int _x, int _y, int _r) :x(_x), y(_y), r(_r) {}
};
inline bool isRectInCircle(const rect& rc, const circle& cr) {
    return (static_cast<double>(cr.r) * 2.0) > hypot(rc.w, rc.h);
}
int main(void) {
    HWND hwnd = GetConsoleWindow();
    HDC  hdc = GetDC(hwnd);
    HPEN    rp = CreatePen(PS_SOLID, 1, RGB(0xFF, 0, 0));
    HPEN    gp = CreatePen(PS_SOLID, 1, RGB(0, 0xFF, 0));
    HGDIOBJ hbr = SelectObject(hdc, (HBRUSH)GetStockObject(NULL_BRUSH));
    RECT    r;
    HGDIOBJ old;
    rect   rc;
    circle cr(150, 150, 100);
    for (int i = 0; i < 30; ++i) {
        GetClientRect(hwnd, &r);
        InvalidateRect(hwnd, &r, TRUE);
        //задаём произвольный размер прямоугольника
        rc.w = 50 + rand() % 150;
        rc.h = 50 + rand() % 150;
        if (isRectInCircle(rc, cr)) {
            write_c(_T("ПРЯМОУГОЛЬНИК ВХОДИТ В ОКРУЖНОСТЬ"), FOREGROUND_GREEN);
            old = SelectObject(hdc, gp);
        }
        else {
            write_c(_T("НЕЛЬЗЯ ПОМЕСТИТЬ ПРЯМОУГОЛЬНИК В ОКРУЖНОСТЬ"), FOREGROUND_RED);
            old = SelectObject(hdc, rp);
        }
        rc.x = (cr.x - cr.r) + (cr.r * 2 - rc.w) / 2;
        rc.y = (cr.y - cr.r) + (cr.r * 2 - rc.h) / 2;
        //вывод прямоугольника
        SetRect(&r, rc.x, rc.y, rc.x + rc.w, rc.y + rc.h);
        FrameRect(hdc, &r, (HBRUSH)GetStockObject(WHITE_BRUSH));
        //вывод окружности
        Ellipse(hdc, cr.x - cr.r, cr.y - cr.r, cr.x + cr.r, cr.y + cr.r);
        SelectObject(hdc, old);
 
        Sleep(1300);
    }
    DeleteObject(rp);
    DeleteObject(gp);
    SelectObject(hdc, hbr);
    ReleaseDC(hwnd, hdc);
    return 0;
}
//вывод
void write_c(LPCTSTR s, WORD color) {
    TCHAR b[128];
    CharToOem(s, b);
    static HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD n;
    COORD p = { 1, 0 };
    FillConsoleOutputCharacter(hout, _T(' '), 80, p, &n);
    FillConsoleOutputAttribute(hout, color | FOREGROUND_INTENSITY, 80, p, &n);
    WriteConsoleOutputCharacter(hout, b, _tcslen(b), p, &n);
}

E0167 аргумент типа "TCHAR *" несовместим с параметром типа "LPSTR" 69
C2664 "BOOL CharToOemW(LPCWSTR,LPSTR)": невозможно преобразовать аргумент 2 из "TCHAR [128]" в "LPSTR" 69



_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 15.12.2017 в 10:42.
arnora вне форума   Ответить с цитированием
Старый 14.12.2017, 23:10   #2
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,582
Репутация: 1780
По умолчанию

Заменить LPSTR на LPTSTR
waleri на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разобраться в ошибками ---Demon--- C/C++ Базы данных 5 23.12.2013 10:27
Разобраться с ошибками, delphi Nice42ru Работа с сетью в Delphi 0 11.03.2011 20:26
Не могу разобраться с ошибками, голову сломал Cyber Общие вопросы C/C++ 8 14.02.2011 17:40
Помогите разобраться с ошибками в Delphi7 Statusbar Виноградик Помощь студентам 2 05.06.2009 11:26
Помогите разобраться с ошибками в исходнике С++ Go6a Помощь студентам 1 03.05.2008 17:43


08:05.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru