第一篇:实验1 线性表应用-多项式计算
一.实验目的和要求
1.进一步掌握线性表的的基本操作。
2.掌握线性表的典型应用----多项式表示与计算。
二.实验内容
1. 设用线性表((a1, e1),(a2, e2), ……,(am, em))表示多项式P(x)= a1*xe1 + a2*xe2 +…+ am*xem,请编写用链式存储结构(带表头附加结点的单链表)存储该多项式时,多项式基本操作的实现函数。要求:把多项式线性表的结构定义及多项式基本操作实现函数存放在文件Linkpoly.h中。说明:基本操作可包括如下 ① 初始化多项式InitPoly(p)② 输出多项式TraversePoly(p)③ 清除多项式ClearPoly(p)④ 插入一项 InsertPoly(p, a, e)
⑤ 删除一项 DeletetPoly(p, a, e, pos)⑥ 多项式求值PolySum(p, x)
⑦ 多项式相加PolyAdd(p1, p2)
2. 建立主程序文件test1.cpp,在主函数main()中通过调用Linkpoly.h中的函数进行测试。
3. 编写用顺序存储结构存储多项式时,上述各多项式基本操作的实现函数。要求: 把多项式线性表的结构定义及多项式基本操作实现函数存放在文件Seqpoly.h中,在主程序文件test1.cpp中增加测试语句对Seqpoly.h中的函数进行测试。
4. 填写实验报告,实验报告文件取名为report1.doc。
5. 上传实验报告文件report1.doc与源程序文件test1.cpp及Linkpoly.h、Seqpoly.h 到Ftp服务器上自己的文件夹下。
三.函数的功能说明及算法思路
包括每个函数的功能说明,及一些重要函数的算法实现思路
四.实验结果与分析
包括运行结果截图等
五.心得体会
记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。
【附录----源程序】 Test1.cpp: #include //初始化多项式 InitPoly(pb);cout<<“请输入要测试的项数:”;cin>>n;cout<<“请依次输入要测试的各项的系数和指数:”;for(i=0;i cin>>a; cin>>e; InsertPoly(pa, a, e); //插入一项 pa=pa->next;} pa=pa->next;cout<<“该多项式为:”;TraversePoly(pa); //输出多项式 cout< cout<<“删除成功!现在多项式为:”; TraversePoly(pa); cout< cout<<“删除失败!”< cin>>a; cin>>e; InsertPoly(pb, a, e); //插入一项 pb=pb->next;} pb=pb->next;pp=PolyAdd(pa, pb);cout<<“两多项式相加后得到的多项式为:”;TraversePoly(pp);cout< cout< cout< cout<<“现在进行第二次测试。(顺序表表示)”< cin>>a; cin>>e; InsertPoly1(s, a, e);} cout<<“该多项式为:”;TraversePoly1(s);cout< cout<<“删除成功!现在多项式为:”; TraversePoly1(s); cout< cout<<“删除失败!”< cin>>a; cin>>e; InsertPoly1(t, a, e); //插入一项 } q=PolyAdd1(s, t);cout<<“两多项式相加后得到的多项式为:”;TraversePoly1(q);cout< Linkploy.h: struct NodeType{ float coef; int exp; NodeType *next;};bool InitPoly(NodeType *&p) //初始化多项式 { if((p=new NodeType)==NULL) return false;p->next=p;return true;} void TraversePoly(NodeType *p) //输出多项式 { NodeType *h=p->next;if(h!=p){ cout< h=h->next;} while(h!=p){ if(h->coef>0) cout<<“+”; cout< h=h->next;} } void ClearPoly(NodeType *&p) //清除多项式 { NodeType *cp,*np;cp=p->next;while(cp!=p){ np=cp->next; delete cp; cp=np;} p->next=p;} bool InsertPoly(NodeType *&p, float a, int e) //插入一项 { NodeType *h;if((h=new NodeType)==NULL) return false;h->coef=a;h->exp=e;h->next=p->next;p->next=h;return true;} bool DeletetPoly(NodeType *&p, float a, int e, int pos) //删除一项 { if(pos>1||pos<-1) return false;NodeType *cp=p->next;NodeType *np=p;if(pos==0){ while(cp!=p){ if(cp->coef==a&&cp->exp==e) break; else{ np=cp; cp=cp->next; } } } else if(pos==-1) while(cp!=p){ np=cp; cp=cp->next; } np->next=cp->next;delete cp; return true;} double PolySum(NodeType *p, float x) //多项式求值 { int i;double sum=0,item; NodeType *cp=p->next;while(cp!=p){ item=1; for(i=1;i<=cp->exp;i++) item=item*x; sum=sum+item*cp->coef; cp=cp->next;} return sum;} NodeType *PolyAdd(NodeType *p1, NodeType *p2) //多项式相加 { float coef;NodeType *a=p1->next,*b=p2->next,*c,*pc; InitPoly(c);pc=c;while(a!=p1&&b!=p2){ if(a->exp==b->exp){ coef=a->coef+b->coef; if(coef!=0){ InsertPoly(pc, coef, a->exp); pc=pc->next; } a=a->next; b=b->next; } else if(a->exp InsertPoly(pc,a->coef,a->exp); pc=pc->next; a=a->next; } else{ InsertPoly(pc,b->coef,b->exp); pc=pc->next; b=b->next; } } while(a!=p1){ InsertPoly(pc,a->coef,a->exp); pc=pc->next; a=a->next; } while(b!=p2){ InsertPoly(pc,b->coef,b->exp); pc=pc->next; b=b->next; } return c;} Seqploy.h: #define MaxSize 10000 struct ListType{ float *list; int size;};void InitPoly1(ListType &p) //初始化多项式 { p.list=(float*)malloc(MaxSize*sizeof(float)); if(p.list==NULL){ cout<<“动态可分配的储存空间用完,退出运行!”< exit(1); } p.size=0;for(int i=0;i p.list[i]=0;} void TraversePoly1(ListType p) //输出多项式 { int i=0;if(p.list[i]!=0) cout< for(i=1;i if(p.list[i]!=0) break; cout< if(p.list[i]>0){ cout<<“+”; cout< } if(p.list[i]<0) cout< //清除多项式 { if(p.list!=NULL){ delete []p.list; p.list=NULL;} p.size=0;} void InsertPoly1(ListType &p, float a, int e) //插入一项 { p.list[e]=a;if(p.size p.size=e;} bool DeletetPoly1(ListType &p, float a, int e, int pos) //删除一项 { int i,n;if(p.size==0){ cout<<“多项式为空,删除无效!”< return false;} if(pos==0) if(p.list[e]==a) p.list[e]=0;else if(pos==-1) p.list[p.size]=0;return true;} double PolySum1(ListType p, float x) { double sum=0,item;int i,j;for(i=0;i<=p.size;i++){ item=1; for(j=1;j<=i;j++) item=item*x; sum=sum+item*p.list[i];} return sum;} ListType PolyAdd1(ListType p1, ListType p2){ ListType p;InitPoly1(p);float coef;int i,j;for(i=0;i<=p1.size;i++){ coef=p1.list[i]+p2.list[i]; InsertPoly1(p, coef, i);} //多项式求值 //多项式相加 if(i<=p1.size) for(j=i;j<=p1.size;j++) InsertPoly1(p, p1.list[j], j);if(i<=p2.size) for(j=i;j<=p2.size;j++) InsertPoly1(p, p2.list[j], j);return p;} 实验总结报告—栈和队列 学号: 姓名: 时间: 一、目的 1.做实验的目的 加深对线性表的理解,学会定义线性表的存储结构,掌握线性表的基本操作。 2.撰写实验报告的目的 对本次实验情况进行总结,加强对实验内容的理解,对实验过程有一个系统的认识,从中获得本次试验的经验,并对实验结果进行适当的分析,加深对栈和队列的理解和认识。 二、内容 1.说明实验次数及实验内容 本次实验用一次实验课时完成 实验内容: 节点定义: typedef struct node{ int idx;int age;struct node *next;}Node,*List;本次实验的对象的存储内容包括ID和AGE,所以定义了如上的结构体,idx用于存储ID号,age用于存储年龄,next用于形成链式结构,Node定义了该类型的一个节点,List定义了该类型的一个链表。(1)、编写函数CreateList()和PrintList(),从给定数组创建链表,打印链表。 int idx[8] = {1,2,3,4,5,6,7,8};int age[8] = {15,18,13,22,50,18,30,20};List CreatList(int idx[], int age[],int len){} int PrintList(List L){}(2)、编写函数DeleteNode(List L, int delete_age),完成以下操作。int DeleteNodeAge(List L, int delete_age){} 该函数传入List L,可以直接修改链表的节点,建议返回值为int 或void类型,无需为List类型,3,4题同上。2.1删除年龄为18的成员,打印链表。2.2删除年龄为20的成员,打印链表。2.3删除年龄为15的成员,打印链表。 2.4(可选)删除年龄为21的成员(因无此成员,报错),打印链表。(3)、编写函数InsertNodeByIdx(List L, Node nd),完成以下操作。(或编写函数InsertNodeByIdx(List L, Node *pnd),完成以下操作。)(建议用 Node *pnd,因Node nd作为参数传给函数InsertNodeByIdx,nd本身不能被修改,而插入链表需修改nd.next,故需创建新的节点把nd的idx和age赋值给新节点。) 3.1将(idx,age)=(6,23)插入链表,保证链表的idx仍为升序,打印链表。3.2将(idx,age)=(1,25)插入链表,保证链表的idx仍为升序,打印链表。(4)(选做)、编写函数InsertNodeByAge(List L, Node nd),完成以下操作。(或编写函数InsertNodeByAge(List L, Node *pnd),完成以下操作。) 4.1将(idx,age)=(9,31)插入链表,不用保证链表的idx仍为升序,新节点插在节点nd0后面,要求nd0.age是整个链表节点的age小于且最接近nd.age,打印链表。 (提示:本例要求插在(7,30)后面。)4.2插入节点(8,1) (提示:本例要求插在(1,25)之前,即最前面,因age=1最小。)2.做实验完成情况 要求实验内容在实验时间内全部完成,选做实验未做。创建链表: List CreateList(int idx[],int age[],int len){ List p,L;int i;L=NULL;for(i=len-1;i>=0;i--){ p=new Node; p->age=age[i]; p->idx=idx[i]; p->next=L; L=p;} return L;} 该操作创建一个不带头节点的链表并返回类型为List的结果 打印链表: void PrintList(List L){ List p=L;printf(“idx agen”);while(p){ printf(“%d %dn”,p->idx ,p->age); p=p->next;} } 该操作从表头到表尾依次打印idx和age 删除节点: int DeleteNodeAge(List &L, int delete_age){ List p=L;int flag=0;if(p->age==delete_age){ L=L->next; flag=1;} else{ while(p->next){ if(p->next->age==delete_age){ flag++; if(p->next->next==NULL) p->next=NULL; else p->next=p->next->next; } else p=p->next; } } return flag;} 该操作删除需要删除的节点,成功删除返回删除节点的个数,否则返回0 插入节点: void InsertNodeByIdx(List &L, Node *pnd){ List p=L;if(p->idx>=pnd->idx){ pnd->next=L; L=pnd; return;} else{ while(p->next){ if(p->next->idx<=pnd->idx) p=p->next; else{ pnd->next=p->next; p->next=pnd; return; } } } } 该操作完成节点的插入,插入之后链表仍按idx成升序 主函数: int main(){ List L,pnd1,pnd2;pnd1=new Node;pnd2=new Node;int idx[8]={1,2,3,4,5,6,7,8},age[8]={15,18,13,22,50,18,30,20},r;L=CreateList(idx,age,8);PrintList(L);r=DeleteNodeAge(L,18);printf(“The result is %dn”,r);PrintList(L);r=DeleteNodeAge(L,20);printf(“The result is %dn”,r);PrintList(L);r=DeleteNodeAge(L,15);printf(“The result is %dn”,r);PrintList(L);pnd1->idx=6;pnd1->age=23;InsertNodeByIdx(L,pnd1);PrintList(L);pnd2->idx=1;pnd2->age=25;InsertNodeByIdx(L,pnd2);PrintList(L);system(“pause”);return 0;} 实验结果: 从实验代码及结果来看,首先按要求创建单链表,从打印结果来看,链表成功创建;第二步删除age为18的节点,从链表来看有两个age为18的节点,所以Delete的返回值r为2,从打印结果来看,两个节点成功删除;第三步删除age为20的节点,链表中只有一个符合要求的节点,所以返回值r为1,打印结果说明成功删除;第四步插入idx为6,age为23的节点,第四步插入idx为1,age为25的节点,从打印结果来看均成功操作。 三、总结 《数据结构》课程设计 多项式计算 班级: 学号: 姓名: 指导老师: 多项式计算 1、问题描述 能够按照指数降序排列建立多项式;能够完成两个多项式的相加、相减和相乘,并将结果输出。 2、设计思路 这个程序的关键是多项式的创建和排列,以及相乘时系数相乘和指数相加、相加时相同指数的系数相加、相减时相同指数的系数相减。由于多项式拥有指数和系数(假设基数已定),所以可以定义一个包含指数系数的结构体,用单链表存储多项式的数据,所以结构体包含next指针。数据插入时比较两数的指数,按照降序排序,从表头的next开始,直至找到合适的位置,然后开始链表中数值的插入,如果相等则直接将指数相加,如果大于就将新数据插入到当前指向的前面,否则将新数据插入到最后。输入完数据后选择计算方式(相乘、相加、相减),多项式运算时要循环遍历整个多项式,多项式的每一组数据都要和另一个多项式整组数据相运算(每一个运算值都存储到新建的“多项式”链表中),直到两个多项式都遍历完结束。 3、数据结构设计 在模拟多项式对象时,为了简化处理,只取最核心的两个数据:多项式的系数和指数。前面提到,要用单链表操作,所以要加上个next指针,再由该结构体定义一个结点类型和指针类型。具体数据结构定义如下: typedef struct node{ int xs;/*系数*/ int zs; /*指数*/ struct node * next;/*next指针*/ }Dnode,* Dnodelist; 4、功能函数设计 (1)链表初始化函数Creat_node() 带有头结点的头指针指向空(NULL)。(2)多项式数据的创建函数Creat_Dmeth() 当链表初始化成功后,开始创建多项式。分别循环输入两个多项式的系数和指数,其中要用到插入函数。 (3)数据的插入函数Insert_node()当创建多项式时,要用到此函数,即利用插入的方式将多项式的数据连接起来。再输入一组数据后,程序自动调用此函数,插入时也进行着排序,从表头的next开始,一一比较指数大小,直到大于或等于当前指向的数据或遍历完所有数据时停止,然后开始链表中数值的插入,如果相等则直接将指数相加,如果大于就将新数据插入到当前指向的前面,否则将新数据插入到最后。 (4)多项式的显示函数Show()从多项式表头的next开始,直到指向空(NULL),将系数与指数一一显示。 (5)选择运算方式的函数select()三种选择:1为相乘,2为相加,3为相减;每一种选择调用相应的运算函数。 (6)多项式的运算函数:新建链表存储计算后的多项式 1、多项式相乘Mulresult()创建两个指针分别指向两个多项式表头的next,使用两个while函数嵌套循环,遍历每一组数据,每遍历一次都将两组数据的系数相乘,指数相加,再利用插入函数将系数与指数存储到新建多项式的链表中。 2、多项式相加Addresult()创建两个指针分别指向两个多项式表头的next,分别使用两个while函数独自循环,遍历各自的每一组数据,每遍历一次都将系数与指数存储到新建多项式的链表中。因为存储时利用到插入函数,而插入函数中有相同指数的系数相加功能,所以直接将两个多项式的数据依次插入到新的多项式中即可完成多项式相加。 3、多项式相减Subresult()创建两个指针分别指向两个多项式表头的next,以两个指针同时不为空为条件循环遍历,如果当前多项式1的指数小于多项式2,则将当前多项式2的系数置负,指数不变,存入新建多项式中,指向多项式2的指针指向下一个;如果如果当前多项式1的指数大于多项式2,则将当前多项式1的系数指数不变,存入新建多项式中,指向多项式1的指针指向下一个;否则将多项式1的系数减去2的系数后存入新建多项式中,指数不变存入,再将两个指针同时指向下一个。结束循环后判断是哪一个多项式遍历完了,将未遍历完的多项式剩下的数据全部插入到新建多项式中。 (7)主函数main()创建两个多项式的链表并且初始化,分别调用相应的多项式创建函数,创建成功后选择运算方式,再将运算结果输出显示。 5、程序代码 #include Dnodelist Creat_node(void)/*链表初始化*/ { Dnodelist D;D=(Dnodelist)malloc(sizeof(Dnode));if(D) D->next=NULL;return D;} int Insert_node(Dnodelist D,int xs,int zs)/*插入函数*/ { Dnodelist p;Dnodelist q;Dnodelist r;p=D;while(p->next){ r=p; p=p->next; if(zs==p->zs)/*指数相等,系数直接相加,结束*/ { p->xs=p->xs+xs; return 1; } else if(zs>p->zs)/*指数大于当前数据的,将数据插入当前数据之前,结束*/ { q=Creat_node(); q->xs=xs; q->zs=zs; r->next=q; q->next=p; return 1; } }/*while(p->next)*/ q=Creat_node();/*要插入的数据指数最小,直接插入至链表最后*/ q->xs=xs;q->zs=zs;q->next=p->next;p->next=q;return 1;free(p);free(q);free(r);} Dnodelist Creat_Dmeth(int length)/*创建多项式*/ { int i,m,n;Dnodelist D;D=Creat_node();for(i=0;i scanf(“%d,%d”,&m,&n); Insert_node(D,m,n);/*调用插入函数,将输入的系数指数插入链表*/ } return D;} Dnodelist Mulresult(Dnodelist D1,Dnodelist D2)/*多项式相乘*/ { Dnodelist D;Dnodelist p,q;int x,z;D=Creat_node();p=D1->next;q=D2->next;while(q){ while(p) { x=p->xs*q->xs;/*系数相乘,指数相加*/ z=p->zs+q->zs; Insert_node(D,x,z); p=p->next; } p=D1->next; q=q->next;} return D;} Dnodelist Addresult(Dnodelist D1,Dnodelist D2)/*多项式相加*/ { Dnodelist D;Dnodelist p,q;int x,z;D=Creat_node();p=D1->next;q=D2->next;while(q){ x=q->xs; z=q->zs; Insert_node(D,x,z); q=q->next;} while(p){ x=p->xs; z=p->zs; Insert_node(D,x,z); p=p->next;/*直接插入数据,利用插入函数可完成该功能*/ } return D;} Dnodelist Subresult(Dnodelist D1,Dnodelist D2)/*多项式相减*/ { Dnodelist D;Dnodelist p,q;int x,z;D=Creat_node();p=D1->next;q=D2->next;while(p&&q){ if((p->zs)<(q->zs))/*指数小(1的数据在2中不存在),直接插入*/ { x=-(q->xs);/*由于是式1减式2,所以系数置负*/ z=q->zs; Insert_node(D,x,z); q=q->next; } else if((p->zs)>(q->zs))/*直接插入*/ { x=p->xs; z=p->zs; Insert_node(D,x,z); p=p->next; } else /*入*/ { z=q->zs; x=(p->xs)-(q->xs); Insert_node(D,x,z); p=p->next; q=q->next; } }/*while(p&&q)*/ while(p){ x=p->xs; z=p->zs; Insert_node(D,x,z); p=p->next;} while(q){ x=-(q->zs); z=q->zs; Insert_node(D,x,z); q=q->next; 指数大(2的数据在1中不存在),指数相同的先将系数相减,再插 } /*将未遍历完的数据直接插入*/ return D;} Dnodelist select(Dnodelist D1,Dnodelist D2)/*选择函数*/ { Dnodelist D;int s;printf(“请选择:n1:相乘n2:相加n3:相减n”);scanf(“%d”,&s);switch(s){ case 1: D=Mulresult(D1,D2);/*调用相乘函数*/ printf(“相乘结果(系数,指数):n”); break;case 2: D=Addresult(D1,D2);/*调用相加函数*/ printf(“相加结果(系数,指数):n”); break;case 3: D=Subresult(D1,D2);/*调用相减函数*/ printf(“相减结果(系数,指数):n”); break;default: printf(“无此选项n”); break;} return D;} void Show(Dnodelist D)/*显示(输出)函数*/ { Dnodelist r;r=D->next;while(r){ printf(“(%d,%d)+”,r->xs,r->zs); r=r->next;} printf(“n”);} void main(){ Dnodelist D1,D2,D;int length;D1=Creat_node();D2=Creat_node();/*D1为多项式1,D2为多项式2,初始化*/ } printf(“输入多项式1的组数:n”);scanf(“%d”,&length);printf(”输入多项式1系数,指数:(%d组)n“,length);D1=Creat_Dmeth(length);/*创建多项式1*/ printf(”输入多项式2的组数:n”);scanf(“%d”,&length);printf(“输入多项式2系数,指数:(%d组)n”,length);D2=Creat_Dmeth(length);/*创建多项式2*/ D=select(D1,D2);/*选择运算方式*/ Show(D);/*输出显示*/ getch(); 6、运行与测试 程序运行时,先提示第一个多项式的组数,确定组数后才可输入相应的数据,之后是多项式2;输入完数据后,程序提示选择运算方式。选择错误则提示“无此选项”,运行结束,选择正确的选项将进行相应的运算并输出显示。错误选择: 相乘: 相加: 相减: 7、设计心得 这个程序是我较早时就已经完成了的,当时只是完成了多项式相乘,并且由多项式相乘延伸到了大数相乘,由于设计思路大部分相同,所以在选题时只选了多项式计算这个程序。当今天再次看这个程序时发现有的代码是多余的,所以我又将主要功能函数简化了些。之后又增加了几个运算功能。本来大部分的输入与选择都是在主函数里实现的,为了是程序更美观,我又加了一个选择函数与显示函数。所以这次的设计,增加了我对程序美观的认识,其实模块清楚后看上去也更容易理解些。 IBM“蓝云"云计算平台应用实例 IBM的“蓝云”计算平台是一套软、硬件平台,将Internet上使用的技术扩展到企业平台上,使得数据中心使用类似于互联网的计算环境。“蓝云”大量使用了IBM先进的大规模计算技术,结合了IBM自身的软、硬件系统以及服务技术,支持开放标准与开放源代码软件。“蓝云”基于IBM Almaden研究中心的云基础架构,采用了Xen和PowerVM虚拟化软件,Linux操作系统映像以及Hadoop软件(Google File System以及MapReduce的开源实现)。IBM已经正式推出了基于x86芯片服务器系统的“蓝云”产品。 “蓝云”计算平台由一个数据中心、IBM Tivoli部署管理软件(Tivoli provisioning manager)、IBMTivoli监控软件(IBM Tivoli monitoring)、IBM WebSphere应用服务器、IBM DB2数据库以及一些开源信息处理软件和开源虚拟化软件共同组成。“蓝云”的硬件平台环境与一般的x86服务器集群类似,使用刀片的方式增加了计算密度。“蓝云”软件平台的特点主要体现在虚拟机以及对于大规模数据处理软件Apache Hadoop的使用上。Hadoop是开源版本的Google File System软件和MapReduce编程规范。 “蓝云”计算平台中的虚拟化技术:“蓝云”软件的一个重要特点是虚拟化技术的使用。虚拟化的方式在“蓝云”中有两个级别,一个是在硬件级别上实现虚拟化,另一个是通过开源软件实现虚拟化。硬件级别的虚拟化可以使用IBM P系列的服务器,获得硬件的逻辑分区LPAR(logic partition)。逻辑分区的CPU资源能够通过IBM Enterprise Workload Manager来管理。通过这样的方式加上在实际使用过程中的资源分配策略,能够使相应的资源合理地分配到各个逻辑分区。P系列系统的逻辑分区最小粒度是1/10颗中央处理器(CPU)。Xen则是软件级别上的虚拟化,能够在Linux基础上运行另外一个操作系统。 虚拟机是一类特殊的软件,能够完全模拟硬件的执行,运行不经修改的完整的操作系统,保留了一整套运行环境语义。通过虚拟机的方式。在云计算平台上获得如下一些优点: (1)云计算的管理平台能够动态地将计算平台定位到所需要的物理节点上,而无须停止运行在虚拟机平台上的应用程序,进程迁移方法更加灵活;(2)降低集群电能消耗,将多个负载不是很重的虚拟机计算节点合并到同一个物理节点上,从而能够关闭空闲的物理节点,达到节约电能的目的;(3)通过虚拟机在不同物理节点上的动态迁移,迁移了整体的虚拟运行环境,能够获得与应用无关的负载平衡性能;(4)在部署上也更加灵活,即可以将虚拟机直接部署到物理计算平台上,而虚拟机本身就包括了相应的操作系统以及相应的应用软件,直接将大量的虚拟机映像复制到对应的物理节点即可。 “蓝云”计算平台中的存储体系结构:“蓝云”计算平台中的存储体系结构对于云计算来说也是非常重要的,无论是操作系统、服务程序还是用户的应用程序的数据都保存在存储体系中。“蓝云”存储体系结构包含类似于Google File System的集群文件系统以及基于块设备方式的存储区域网络SAN。 在设计云计算平台的存储体系结构时,不仅仅是需要考虑存储容最的问题。实际上,随着硬盘容量的不断扩充以及硬盘价格的不断下降。可以通过组合多个磁盘获得很大的磁盘容量。相对于磁盘的容量,在云计算平台的存储中,磁盘数据的读写速度是一个更重要的问题,因此需要对多个磁盘进行同时读写。这种方式要求将数据分配到多个节点的多个磁盘当中。为达到这一目的,存储技术有两个选择,一个是使用类似于Google File System的集群文件系统。另一个是基于块设备的存储区域网络SAN系统。 在蓝云计算平台上,SAN系统与分布式文件系统(例如Google File System)并不是相互对立的系统,SAN提供的是块设备接口。需要在此基础上构建文件系统,才能被上层应用程序所使用。而Google File System正好是一个分布式的文件系统,能够建立在SAN之上。两者都能提供可靠性、可扩展性,至于如何使用还需要由建立在云计算平台上的应用程序来决定,这也体现了计算平台与上层应用相互协作的关系。 圆锥体积计算和应用 教材第15页例 2、“练一练”,练习三第6-11题。 教学目标: 使学生进一步掌握圆锥的体积计算方法,能根据不同的条件计算圆锥的体积,给应用圆锥体积解决一些简单的实际问题。 教学重点: 运用公式解决生活中的实际问题 教学难点: 运用公式解决生活中的实际问题 教具准备:小黑板 教学进程: 一、复习旧知 1、口算 练习三第6题,指名学生口算。 2、复习体积计算。 (1)问:圆锥的体积怎样计算?为什么圆锥体积V= Sh? (2)口答下列各圆锥的体积。 ①底面积3平方分米,高2分米。 ②底面积4平方厘米,高4.5。 3、引入新课 今天这节课,我们练习圆锥体积的计算,通过练习,还要能应用圆锥体积计算的方法解决些简单实际问题。 二、教学新课 1、教学例2 出示例2: 学生读题 问:你们认为这道题要先求什么,再求这堆沙的重量? 指名学生板演,其余学生独立做。 集体订正 2、组织练习 (1)“练一练”第1题 指名三人板演,其余学生做第(3)小题。 (2)“练一练”第2题 (3)练习三第11题 四、课内作业 练习三第7-9题 板书设计 圆锥体积计算和应用 例2 练习 V = Sh第二篇:实验总结报告-线性表
第三篇:数据结构课程设计报告-一元多项式加减乘计算
第四篇:云计算应用实例
第五篇:圆锥体积计算和应用