博文

一道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

GlobalAlloc、GlobalLock、GlobalUnLock(2007-04-25 16:47:00)

摘要:调用GlobalAlloc函数分配一块内存,该函数会返回分配的内存句柄。 
调用GlobalLock函数锁定内存块,该函数接受一个内存句柄作为参数,然后返回一个指向被锁定的内存块的指针。 您可以用该指针来读写内存。 
调用GlobalUnlock函数来解锁先前被锁定的内存,该函数使得指向内存块的指针无效。 
调用GlobalFree函数来释放内存块。您必须传给该函数一个内存句柄。 GlobalAlloc  函数原型:
GlobalAlloc(UINT uFLAG,DWORD dwBytes);
说明 
分配一个全局内存块 
返回值 
Long,返回全局内存句柄。零表示失败。会设置GetLastError 
参数表 
参数 类型及说明 
uFlags Long,对分配的内存类型进行定义的常数标志,如下所示: 
             GMEM_FIXED 分配一个固定内存块 
             GMEM_MOVEABLE 分配一个可移动内存块 
             GMEM_DISCARDABLE 分配一个可丢弃内存块 
             GMEM_NOCOMPACT 堆在这个函数调用期间不进行累积 
          ......

阅读全文(4943) | 评论: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

Java设置环境变量(2007-04-21 17:19:00)

摘要:Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。
JAVA_HOME指向的是JDK的安装路径,如C:\JDK_1.4.2,在这路径下你应该能够找到bin、lib等目录。值得一提的是,JDK的安装路径可以选择任意磁盘目录,不过建议你放的目录层次浅一点,如果你放的目录很深,比如C:\XXXXXX\xxxxx\XXXX\xxxx\XXXX\xxxx\XXXX\xxx……
设置方法:
JAVA_HOME=C:\JDK_1.4.2
PATH环境变量原来Windows里面就有,你只需修改一下,使他指向JDK的bin目录,这样你在控制台下面编译、执行程序时就不需要再键入一大串路径了。设置方法是保留原来的PATH的内容,并在其中加上%JAVA_HOME%\bin (注,如果你对DOS批处理不了解,你可能不明白%%引起来的内容是什么意思;其实这里是引用上一步设定好的环境变量JAVA_HOME,你写成C:\JDK_1.4.2也是可以的;你可以打开一个控制台窗口,输入echo %JAVA_HOME%来看一下你的设置结果) :
PATH=%JAVA_HOME%\bin;%PATH%
同样,%PATH%是引用以前你设置的PATH环境变量,你照抄以前的值就行了。
CLASSPATH环境变量我放在最后面,是因为以后你出现的莫名其妙的怪问题80%以上都可能是由于CLASSPATH设置不对引起的,所以要加倍小心才行。
CLASSPATH=.;%JAVA_HOME%\lib\tools.jar
首先要注意的是最前面的".;",如果你看不清,我给你念念——句点分号。这个是告诉JDK,搜索CLASS时先查找当前目录的CLASS文件——为什么这样搞,这是由于LINUX的安全机制引起的,LINUX用户很明白,WINDOWS用户就很难理解(因为WINDOWS默认的搜索顺序是先搜索当前目录的,再搜索系统目录的,再搜索PATH环境变量设定的) ,所以如果喜欢盘根究底的朋友不妨研究一下LINUX。
为什么CLASSPATH后面指定了tools.jar这个具体文件?不指定行不行?显然不行,行的话我还能这么罗索嘛!:) 这个是由java语言的import机制和jar机制决定的,你可以查资料解......

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

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