博文

一道autodesk笔试题的解答(2008-01-19 15:43:00)

摘要:第一题:
实现N*N矩阵,
如N=2时
1 2
4 3
N=4时
1  2  3  4
12 13 14 5
11 16 15 6
10 9  8  7
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std; #define N 5
int M[N][N]; void Matrix()
{
 int T = (N+1)/2;
 int num = 0;  for(int t=0; t<T; t++)
 {
  for(int i=t; i<=N-1-t; i++)
   M[t][i] = ++num;
  for(int i= t+1; i<=N-1-t-1; i++)
   M[i][N-1-t] = ++num;
  for(int i=N-1-t; i>=t; i--)
   M[N-1-t][i] = ++num;
  for(int i=N-1-t-1; i>=t+1; i--)
   M[i][t] = ++num;
 }
 if(N%2 != 0)
  M[N/2][N/2] = N*N;
} void Print()
{
 for(int i=0; i<=N-1; i++)
 {
  for(int j=0; j<=N-1; j++)
  &n......

阅读全文(2015) | 评论:0

BitBlt函数的参数说明(2007-05-22 15:04:00)

摘要:BitBlt函数的参数说明如下: BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop ); x 目的地的左上角X坐标;
 
y 目的地的左上角Y坐标;
 
nWidth 目的地的区域宽度;
 
nHeight 目的地的区域高度;
 
pSrcDC 存储源位图的设备描述表;
 
xSrc 源位图的左上角X坐标;
 
ySrc 源位图的左上角Y坐标;
 
dwRop为柵格运算标志,一般我们选择SRCCOPY,直接拷贝源位图到目标。还可以让源位图和目标位图进行XOR,AND,OR等等的操作。
......

阅读全文(3528) | 评论:0

求直线与三角形有效交点的算法(2007-05-04 21:38:00)

摘要:/*已知直线(方向),和空间3个点构成的三角形,求直线与该三角形有效交点的算法。*/   //在Visual C++6.0及Turbo C3.0下编译通过
#include "stdio.h"
#include "conio.h"
#include "math.h" #define MINERROR 0.0001
//定义空间点坐标结构
typedef struct SpacePoint
{
 float x;
 float y;
 float z;
}SpacePoint; //定义空间向量结构
typedef struct SpaceVector
{
 float m;
 float n;
 float p;
}SpaceVector; float Distance(SpacePoint p1, SpacePoint p2);
float Area(float a, float b, float c);
int ValidPoint(SpacePoint LinePoint, SpaceVector LineV, SpacePoint TrianglePoint1,
      SpacePoint TrianglePoint2, SpacePoint TrianglePoint3); void main()
{
 //空间直线上的一个点
 SpacePoint LinePoint;
 //构成三角形的空间三个点
 SpacePoint TrianglePoint1, TrianglePoint2, TrianglePoint3;
 //空间直线的方向向量
 SpaceVector LineV;  /*------------输入数据------------*/
 printf("Input the coordinate of the point in the line:\n");
......

阅读全文(5677) | 评论:0

CArray 剖析【转载】(2007-05-04 21:31:00)

摘要:C++并不支持动态数组,MFC提供了一个CArray类来实现动态数组的功能。有效的使用CArray类,可以提高程序的效率。
MFC提供了一套模板库,来实现一些比较常见的数据结构如Array,List,Map。CArray即为其中的一个,用来实现动态数组的功能。CArray是从CObject派生,有两个模板参数,第一个参数就是CArray类数组元素的变量类型,后一个是函数调用时的参数类型。有一个类 class Object,要定义一个Object的动态数组,那么可以用以下两种方法: CArray<Object,Object> Var1;
CArray<Object,Object&> Var2;
Var2的效率要高。   先了解一下CArray中的成员变量及作用。TYPE* m_pData; // 数据保存地址的指针
int m_nSize; // 用户当前定义的数组的大小
int m_nMaxSize; // 当前实际分配的数组的大小
int m_nGrowBy; // 分配内存时增长的元素个数 构造函数,对成员变量进行了初始化。 CArray<TYPE, ARG_TYPE>::CArray()
{
m_pData = NULL;
m_nSize = m_nMaxSize = m_nGrowBy = 0;
} SetSize成员函数是用来为数组分配空间的。SetSize的函数定义如下:  void SetSize( int nNewSize, int nGrowBy = -1 );
nNewSize 指定数组的大小
nGrowBy 如果需要增加数组大小时增加的元素的个数。 对SetSize的代码,进行分析。
void CArray<TYPE, ARG_TYPE>::SetSize(int nNewSize, int nGrowBy)
{
if (nNewSize == 0)
{
// 第一种情况
// 当nNewSize为0时,需要将数组置为空,
// 如果数组本身即为空,则不需做任何处理
// 如果数组本身已含有数据,则需要清除数组元素
if (m......

阅读全文(3276) | 评论:0

"英特尔杯"全国计算机多核程序设计大赛[初赛试题](2007-04-26 08:04:00)

摘要: 1 . 英特尔线程档案器有助于有效利用处理器,当 – A、多进程应用程序运行在单核心处理器 B、多进程应用程序运行在多核心处理器 C、多线程应用程序运行在单核心处理器 D、多线程应用程序运行在多核心处理器     2 . 我们应该在产品生命周期中的哪个阶段考虑产品的性能? A、设计阶段 B、测试阶段 C、需求收集阶段 D、以上全部     3 . 英特尔集成性能函数库(Intel® IPP)涵盖了下哪些领域? A、音频、视频编解码 B、图像处理和信号处理 C、语音编解码和语音识别 D、计算机视觉 E、数据压缩、字符串处理以及加解密算法 F、向量数学与矩阵处理 G、以上都包括     4 . 假定一个串行应用程序可被优化为50%的串行工作量和50%的并行工作量, 这个应用程序运行于双核心处理器,在理论上描述“加速的上限” = T(原串行程序的执行时间) / T(现并行程序的执行时间)。 请问下列哪个值是正确的?

A、1.25 B、1.33 C、1.50 D、1.67     5 . “如果这两条指令都是简单指令,处理器会将两条指令合并为单个微操作指令(micro-op)”,是哪个功能的定义:

A、Macro-Fusion B、Instruction-Meld™ C、Micro-op-Combination     6 . Vtune性能分析器不搜集以下哪个执行上下文(Execution context)中的信息? A、线程号(Thread ID) B、操作系统的进程(Operating system process) C、执行代码在内存中的......

阅读全文(2436) | 评论:0

点到一空间直线的垂足【程序实现】(2007-04-25 16:43:00)

摘要:考试程序:                    case 9:                 //"检验空间点到一空间直线的垂足"                             {                                      float xo,yo,zo;                                      float x0,y0,z0,xp,yp,zp,xv,yv,zv;                   ......

阅读全文(5505) | 评论:0

点到一空间直线的垂足[证明](2007-04-25 16:41:00)

摘要:题目:设nL是直线L的单位方向向量,P0是L上的任意一点,P是空间中的任意一点,则P在L上的垂足点P v是:Pv=P+ ((P-P0)×nL)×nL 证明:如图4.4-1所示(在单位立方体下测试的状态),将P0看作为相对坐标原点,有:          (Z1-P0)=(P-P0)×nL         (Z2-P0) = (Z1-P0)×nL P0,P,P v,Z2四点构成一个平行四边形,有,Pv-P=Z2-P0,即Pv=P+(Z2-P0),于是: Pv=P+(Z2-P0)=P+(Z1-P0)×nL=P+((P-P0)×nL)×nL    
......

阅读全文(2855) | 评论:0

error LNK2001错误(2007-04-20 10:38:00)

摘要:在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
下面介绍解决的方法:
1. Windows子系统设置错误, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:console改成/subsystem:windows
2. Console子系统设置错误, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/s......

阅读全文(2554) | 评论:1

获取鼠标点的颜色(2007-04-17 20:14:00)

摘要:VC++的关键代码实现如下:   1、获取屏幕DC  
  HDC   hDC   =   ::GetDC(NULL);   //获取屏幕DC  
  2、获取当前鼠标位置像素值  
  CPoint   pt;  
  GetCursorPos(&pt);          //得到当前鼠标所在位置  
  COLORREF   clr   =   ::GetPixel(hDC,   pt.x,   pt.y);   //获取当前鼠标点像素值  
  3、分解出像素点中的红、绿、蓝颜色值  
  CString   ClrText;  
  ClrText.Format("%d",GetRValue(clr)); //分解出红色值  
  ClrText.Format("%d",GetGValue(clr));   //分解出绿色值  
  ClrText.Format("%d",GetBValue(clr));   //分解出蓝色值  
  ::ReleaseDC(NULL,   hDC);   //释放屏幕DC  
......

阅读全文(2442) | 评论:0

多进程调度模拟程序(2007-04-16 18:18:00)

摘要:#include <windows.h>
#include <dos.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream.h> #define P_NUM 5  //进程数
#define P_TIME 50//时间片长度
#define MIN -9999 //最小优先级 enum state{
    ready,   //就绪
    execute, //执行
    block,   //阻塞
    finish   //完成
}; struct pcb{  //进程控制块结构
    char name[4]; //进程名
    int priority; //优先级
    int cputime;  //占用CPU时间
    int needtime; //还需要执行的时间
    int count;
    int round;
    state process; //进程状态
    pcb * next;
}; pcb * get_process()//获取进程信息
{
    pcb *q;
    pcb *t;
    pcb *p;//进程链表头指针
    int i=0;
    cout<<"input "<<P_NUM&l......

阅读全文(3450) | 评论:0