Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2013, 15:40   #1
rob7777
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 52
По умолчанию Графика

Добрый день! Срочно нужна помощь. Написал программу на делфи, она работает. Но препод на практике потребовал на с++. Я его не изучал, вот до чего сам дошел. Задание
Начертить узор. Узор образован 30 вложенными квадратами. Стороны первого квадрата параллельны осям координат экрана и равны 128. Вершины каждого последующего квадрата - это точки на сторонах предыдущего квадрата, делящие эти стороны в отношении 1 к 1.

Код Delphi
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var u:real;
    i,j,x1,y1,xc,yc,r:integer;
    x,y:array[1..4] of integer;
begin

 x[1]:=50;
 x[2]:=178;
 x[3]:=178;
 x[4]:=50;

 y[1]:=50;
 y[2]:=50;
 y[3]:=178;
 y[4]:=178;
 
with Canvas do
 begin
  moveto(x[4],y[4]);
  for i:=1 to 4 do
  lineto(x[i],y[i]);
  for j:=1 to 29 do
   begin
    x1:=x[1];
    y1:=y[1];
    for i:=1 to 3 do
     begin
      x[i]:=x[i]+((x[i+1]-x[i])/2);
      y[i]:=y[i]+((y[i+1]-y[i])/2);
     end;
    x[4]:=x[4]+((x1-x[4])/2);
    y[4]:=y[4]+((y1-y[4])/2);
    moveto(x[4],y[4]);
    for i:=1 to 4 do
    lineto(x[i],y[i]);
   end;
  end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
Color:=clWhite;
end;

end.
Код на си(проект win32)
Код:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;
	/*{
		MessageBoxA(NULL, "Ку","sss",MB_OK);
		return 0;
	}*/
	switch (message)
	{
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Разобрать выбор в меню:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: добавьте любой код отрисовки...
	//	MessageBox(NULL,"Hello, world!");
		COLORREF oldBkColor;
		HBRUSH holdBrush;
		HPEN hNewPen;
		hdc=BeginPaint(hWnd,&ps);
		oldBkColor=SetBkColor(hdc,RGB(36,15,4));
		SelectObject(hdc,holdBrush);

		int i,j,x1,y1;
		int x[5]; int y[5];
 x[1]=50;
 x[2]=178;
 x[3]=178;
 x[4]=50;

 y[1]=50;
 y[2]=50;
 y[3]=178;
 y[4]=178;
 MoveToEx(hdc,x[4],y[4],NULL);
 for(i=1;i<=4;i++)
 {
	 LineTo(hdc,x[i],y[i]);
 }
for(j=1;j<=29;j++)
 {
	x1=x[1];
	y1=y[1];
	for(i=1;i<=3;i++)
     {
      x[i]=x[i]+((x[i+1]-x[i])/2);
      y[i]=y[i]+((y[i+1]-y[i])/2);
     }
    x[4]=x[4]+((x1-x[4])/2);
    y[4]=y[4]+((y1-y[4])/2);
    MoveToEx(hdc,x[4],y[4],NULL);
	for(i=1;i<=4;i++)
    {
    LineTo(hdc,x[i],y[i]);
	}
 }
 
		//MessageBoxA(NULL, "Ку","sss",MB_OK);
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
И еще один вопрос, дома установил 10 visual studio,а он не запускается. даже пустой. все время одну и ту же ошибку выдает" Ошибка 1 error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден c:\Users\marcom\documents\visual studio 2010\Projects\Rob1\Rob1\LINKRob1" Exe файл как будто не создает. Антивирус отключал.
rob7777 вне форума Ответить с цитированием
Старый 03.07.2013, 18:32   #2
rob7777
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 52
По умолчанию

Я решил задачку. Может кому поможет. Тему можно закрывать
Код:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

switch (message)
	{
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Parse the menu selections:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: Add any drawing code here...
		
		//MoveToEx(hdc,125,50,NULL);//Линия
		//LineTo(hdc,175,100);

int i,j,x1,y1;
		int x[5]; int y[5];
 x[1]=50;
 x[2]=178;
 x[3]=178;
 x[4]=50;

 y[1]=50;
 y[2]=50;
 y[3]=178;
 y[4]=178;
 MoveToEx(hdc,x[4],y[4],NULL);
 for(i=1;i<=4;i++)
 {
	 LineTo(hdc,x[i],y[i]);
 }
 for(j=1;j<=29;j++)
 {
	x1=x[1];
	y1=y[1];
	for(i=1;i<=3;i++)
     {
      x[i]=x[i]+((x[i+1]-x[i])/2);
      y[i]=y[i]+((y[i+1]-y[i])/2);
     }
    x[4]=x[4]+((x1-x[4])/2);
    y[4]=y[4]+((y1-y[4])/2);
    MoveToEx(hdc,x[4],y[4],NULL);
	
	for(i=1;i<=4;i++)
    {
    LineTo(hdc,x[i],y[i]);
	}
 }

	
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
rob7777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое изменение графика при переносе данных, формулы и графика на другой лист REztor Microsoft Office Excel 0 01.06.2013 18:01
Графика Artem_Kokos Помощь студентам 2 15.04.2012 14:06
Графика в СИ. victor5133 Помощь студентам 0 23.02.2012 12:12
Графика. Leshii Паскаль, Turbo Pascal, PascalABC.NET 5 02.11.2011 01:03
Графика Solnze2 Общие вопросы Delphi 0 15.06.2010 09:46