附件2:
克拉玛依区幼儿园教育教学计划框架图
附件3:
克拉玛依区幼儿园月(主题)计划范例
主题目标网络图
主题活动网络图
附件4:
克拉玛依区幼儿园周(分题)计划范例
主题活动:***——分题活动***
说明:周计划范例采用的是表格式书写方法,幼儿园可以根据本园课程特色采用其他方式进行书写。(如网络式)但注意不管用何种方法都必须包含基本的环节。
附件5:
对教案的内容及形式的要求
一、对教案外观、书写文字的要求
1、幼儿园的教案本大小规格统一,教案封面由幼儿园统一设计的书写格式。内容包括:幼儿园名称、班级、姓名。
2、教案书写一律用钢笔或中性笔书写,颜色只能选取蓝黑或黑色,但整个教案本只能使选用一种颜色。
3、文字书写字体要工整。
4、如需粘贴教学计划等纸张,必须保证与教案本大小一致。保证教案本平整、无破损,如有破损及时修补。
二、对教案书写内容及要求
根据对幼儿园及教师的了解,将取消表格式的备课形式。为了统一教案书写的内容,做统一规定。(以下范例,只是为了方便说明而采用表格的形式。)
1、主班教师教案书写内容及要求
2、副班教师教案书写要求
3、对教育教学反思的要求:
⑴书写篇数:主班、副班教师均在每周五教案后写一篇综合的教育教学反思。20##年以后参加工作的教师和教育教学反思还有待于提高的教师仍需每天书写。
⑵教育教学反思的内容:幼儿园反思内容不再是单纯的只关注集体教学活动,而更应加强对渗透在一日生活中的所有教育活动的关注。下面做具体说明:
①主班教师周反思内容分为集体教学效果分析、户外活动组织效果分析、区域活动效果分析、生活教育活动反馈与调整 四个部分。
②副班教师周反思内容分为自选一次游戏活动效果分析、户外活动组织效果分析、生活教育活动反馈与调整、特色活动开展情况反馈与调整、四个部分。
③每天书写反思内容:幼儿园根据实际情况自定要求,可以每天只重点关注一项内容,注意不要只关注集体教学活动。
⑶教育教学反思注意问题
①教育教学反思是对一周内教育活动的回顾思考,是教师依据教育理念对自身教育行为的评价和分析。
②教师反思的过程就是教师自评教育活动的过程,依据参考《克拉玛依市幼儿园指导纲要实施细则》中评价要点进行自评。
四、对教学案例、个案观察的要求:
⑴书写篇数:根据《克拉玛依区幼儿教师基本功训练方案》的规定,每名教师每月需书写1篇教学案例和1篇个案观察。
⑵要 求:教学案例、个案观察在幼儿园专用本上书写。
五、其它要求
1、 凡是教育教学活动中包含儿歌、歌曲、场地安排、幼儿观察记录用表、教师美术示范图等内容,必须将其附在当日教案中。
2、 教案书写原则上建议用手写方式进行。
六、对教案批改的要求:
1、批阅要具有示范作用,批语要清楚明白,具有指导、激励作用。
2、批阅书写要规范、工整,批阅后要注明批阅时间、批阅人。
3、教师之间的批阅采取本内夹条的方式,夹条写明批阅内容,教师批阅后交园长保存。
第二篇:数据结构与算法实验报告4图及教学计划的编制
数据结构与程序设计专题实验报告
实验报告
一、实验任务
实验题目:图的基本操作及教学计划的编制
二、实验内容
实验四:图的基本操作及教学计划编制问题
(一)实验目的:掌握图的基本操作
(二)基本要求:实现必要的图的基本操作,编写教学计划编制程序,输出正确结果。
(三)内容提要: 大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。
(1)输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。
(2)允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。
(3)若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。
(4)测试数据:学期总数6;学分上限10;共开设12门课,课程号从C1-C12,学分顺序为 2,3,4,3,2,3,4,4,7,5,2,3。先修关系见教材(严蔚敏-数据结构-C语言版)图7.26.但程序不能仅局限于该测试数据。
三、要点分析
题目中涉及的主要知识点有:
(1)栈。用到有关栈的操作有初始化栈、判断栈是否为空、入栈和出栈。其中栈主要用来存放入度为零的顶点,即当前无先修关系可以编排的课程。
(2)图。用到有关图的操作有创建图、统计图中各顶点的入度。利用邻接表作为有向图的存储结构,且在头结点中增加一个存放顶点入度的数组(indegree)。入度为零的顶点即为没有前驱的顶点,删除顶点及以它为尾的弧的操作,则可换以弧头顶点入度减一来实现。
(3)拓扑排序。
(a)在有向图中选一个没有前驱的顶点且输出之。
(b)从图中删除该顶点和所有以它为尾的弧。
重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止,后一种情况则说明有向图中存在环。
四、程序的算法描述
1、所用存储结构及宏定义:
#define MAX_VERTEX_NUM 100 //最大课程总数
#define STACK_INIT_SIZE 100 //存储空间的初始分配量
#define STACKINCREMENT 10 //存储空间的分配增量
typedef struct ArcNode
{
int adjvex;//该弧所指向顶点的位置
struct ArcNode *nextarc;//指向下一条弧的指针
}ArcNode;
typedef struct VNode
{
char name[24];//课程名
int classid; //课程号
int credit;//课程的学分
int indegree;//该结点的入度
int state;//该节点的状态,1代表已学,0代表未学
ArcNode *firstarc; //指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct
{
AdjList vertices;//顶点向量
int vexnum,arcnum;//图的当前顶点数和弧数
}ALGraph;
typedef int ElemType;
typedef struct //栈
{
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;
2、程序中各函数的简要说明:
(1)void CreatGraph(ALGraph &G)构建图。先输入各顶点(课程)的信息,包括课程名、课程号、课程学分。再输入弧信息(先修关系),将弧中顶点赋为弧尾,相应入度加1.最后输出构建好的邻接表。
(2)void FindInDegree(ALGraph G, int indegree[])求图中各节点的入度。从每个节点的第一条依附于该节点的弧出发,将该节点对应的入度加1,接着指向下一条弧执行同样的操作,直至指针为空。
(3)void TopologicalSort_1(ALGraph G,int numterm,int uplcredit)按课程尽可能集中到前几个学期进行编排。当每个学期的学分总数不超过学分上限时,在有向图中选一个没有前驱的顶点(课程)且输出之。从图中删除该顶点(课程)和所有以它为尾的弧。当某学期的学分已满时,进入下一学期的编排。重复上述几步,直至全部顶点(课程)均已输出,或者当前图中不存在无前驱的顶点(课程)为止,后一种情况则说明有向图中存在环。
(4)void TopologicalSort_2(ALGraph G,int numterm,int uplcredit)按课程尽量均匀分布编排。当每个学期的学分总数不超过学分上限且课程数不超过课程数上限时,在有向图中选一个没有前驱的顶点(课程)且输出之。从图中删除该顶点(课程)和所有以它为尾的弧。当某学期的学分已满或课程数已满时,进入下一学期的编排。重复上述几步,直至全部顶点(课程)均已输出,或者当前图中不存在无前驱的顶点(课程)为止,后一种情况则说明有向图中存在环。
(5)int main()主函数。在主函数中输出交互界面,要求用户输入各项信息。调用CreateGraph函数创建图,之后根据用户选择调用TopologicalSort_1或者TopologicalSort_2函数进行拓扑排序并输出编排结果,写入文件中。
3、源代码
完整程序及相应说明如下:
#include "stdio.h"
#include "malloc.h"
#define MAX_VERTEX_NUM 100 //最大课程总数
#define STACK_INIT_SIZE 100 //存储空间的初始分配量
#define STACKINCREMENT 10 //存储空间的分配增量
typedef struct ArcNode
{
int adjvex;//该弧所指向顶点的位置
struct ArcNode *nextarc;//指向下一条弧的指针
}ArcNode;
typedef struct VNode
{
char name[24];//课程名
int classid; //课程号
int credit;//课程的学分
int indegree;//该结点的入度
int state;//该节点的状态,1代表已学,0代表未学
ArcNode *firstarc; //指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct
{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
typedef int ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;
void CreatGraph(ALGraph &G)//构建图
{
int i, m, n;
ArcNode *p;
printf("请输入需要编排课程总数:");
scanf("%d",&G.vexnum);
for( i=1;i<=G.vexnum;i++)
{
printf("\n请输入课程名:");
scanf("%s",&G.vertices[i].name);
printf("\n请输入课程号:");
scanf("%d",&G.vertices[i].classid);
printf("\n请输入该课程的学分:");
scanf("%d",&G.vertices[i].credit);
G.vertices[i].indegree=0;
G.vertices [i].state=0;//NOTSTUDY
G.vertices[i].firstarc=NULL;
}
printf("请输入课程先修关系总数:");
scanf("%d",&G.arcnum);
printf("请顺序输入每个课程先修关系(先修课程在前并以逗号作为间隔):\n");
for (i = 1; i <= G.arcnum; i++)
{
printf("\n请输入存在先修关系的两个课程的序号:");
scanf("%d,%d",&n,&m);
while (n<0||n>G.vexnum||m<0||m>G.vexnum)
{
printf("输入的顶点序号不正确请重新输入:");
scanf("%d,%d",&n,&m);
}
p = (ArcNode*)malloc(sizeof(ArcNode));
if (p == NULL)
{
printf("memory allocation failed,goodbey");
return;
}
p->adjvex = m;
p->nextarc=G.vertices[n].firstarc;
G.vertices[n].firstarc = p;
}
printf("\n建立的邻接表为:\n");//输出建立好的邻接表
for(i=1;i<=G.vexnum;i++)
{
printf("%d:->",G.vertices[i].classid);
for(p=G.vertices[i].firstarc;p!=NULL;p=p->nextarc)
printf("%d->",p->adjvex);
printf("NULL");
printf("\n");
}
}
void InitStack(SqStack &S)
{
S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if (!S.base)
{
printf("ERROR");
return;
}
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}
int StackEmpty(SqStack &S)
{
if(S.top==S.base)
return 1;
else
return 0;
}
void Push(SqStack &S,int e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(int*)realloc(S.base,(S.stacksize+10)*sizeof(int));
if(!S.base)
{
printf("ERROR");
return;
}
S.top=S.base+S.stacksize;
S.stacksize+=10;
}
*S.top++=e;
}
int Pop(SqStack &S, int *e)
{
if(S.top==S.base)
return 1;
*e=*--S.top;
return 0;
}
void FindInDegree(ALGraph G, int indegree[])//求图中各节点的入度
{
int i;
for (i = 1; i <= G.vexnum; i++)
indegree[i] = 0;
for (i = 1; i <= G.vexnum; i++)
{
while (G.vertices[i].firstarc)
{
indegree[G.vertices[i].firstarc->adjvex]++;
G.vertices[i].firstarc = G.vertices[i].firstarc->nextarc;
}
}
}
void TopologicalSort_1(ALGraph G,int numterm,int uplcredit)
{
FILE *fp;
fp=fopen("bianpai.txt","w");
struct ArcNode *p;
SqStack S;
int indegree[MAX_VERTEX_NUM];//存放各节点的入度
int i,j,k;
int count; //课程编括排数目计数器
int sumcredit;//每个学期的课程学分累加器
FindInDegree(G,indegree);
for (i = 1; i <= G.vexnum; i++)
G.vertices[i].indegree=indegree[i];
InitStack(S);
count=0;
k=0;
while(count!=G.vexnum && k<=numterm)
{
sumcredit=0;
for(i=1;i<=G.vexnum;i++)
if((G.vertices[i].indegree==0)&&(G.vertices[i].state==0))//入度为零的节点入栈,即无先修的课程入栈
{
Push(S,i);
G.vertices[i].state =1;//避免入度为零节点重复入栈
}
if((!StackEmpty(S))&&(sumcredit<=uplcredit))
{
k= k+1;
printf("\n");
printf("第d个学期学得课程有:\n",k);
sumcredit = 0;
for(i=1;i<=G.vexnum;i++)
if((G.vertices[i].indegree==0)&&(G.vertices[i].state==0))//入度为零的节点入栈,即无先修的课程入栈
Push(S,i);
while((!StackEmpty(S))&&(sumcredit<uplcredit))//栈非空&&学分总数小于学分上限
{
Pop(S,&j);
sumcredit = sumcredit + G.vertices[j].credit;
if(sumcredit <= uplcredit)
{
printf(" %s ",G.vertices[j].name);
fprintf(fp," %s ",G.vertices[j].name);
count++;
for(p=G.vertices[j].firstarc;p;p=p->nextarc)//对j号顶点每个邻接点的入度减一
G.vertices[p->adjvex].indegree--;
}
else Push(S,j);//将未输出的节点重新压入栈
}
}
fprintf(fp,"\n");
}
printf("\n");
if(count<G.vexnum)
printf("\n课程编排出错\n");
else
{
printf("\n课程编排成功\n");
}
fclose(fp);
}
void TopologicalSort_2(ALGraph G,int numterm,int uplcredit)
{
FILE *fp;
fp=fopen("bianpai.txt","w");
struct ArcNode *p;
SqStack S;
int indegree[MAX_VERTEX_NUM];//存放各节点的入度
int i,j,k,m,n;
int maxnum;
int sumnum;
int count; //课程编排数目计数器
int sumcredit;//每个学期的课程学分累加器
FindInDegree(G,indegree);
for (i = 1; i <= G.vexnum; i++)
G.vertices[i].indegree=indegree[i];
InitStack(S);
count=0;
k=0;
maxnum=G.vexnum/numterm+1;
sumnum=0;
while(count!=G.vexnum && k<=numterm)
{
sumcredit=0;
for(i=1;i<=G.vexnum;i++)
if((G.vertices[i].indegree==0)&&(G.vertices[i].state==0))//入度为零的节点入栈,即无先修的课程入栈
{
Push(S,i);
G.vertices[i].state =1;//避免入度为零节点重复入栈
}
if((!StackEmpty(S))&&(sumcredit<=uplcredit))
{
k= k+1;
printf("\n");
printf("第d个学期学得课程有:\n",k);
sumcredit = 0;
sumnum=0;
for(i=1;i<=G.vexnum;i++)//入度为零的节点入栈,即无先修的课程入栈
if((G.vertices[i].indegree==0)&&(G.vertices[i].state==0))
Push(S,i);
while((!StackEmpty(S))&&(sumcredit<uplcredit)&&(sumnum<maxnum))//栈非空&&学分总数小于学分上限&&不超过每学期课程上限
{
Pop(S,&j);
sumcredit = sumcredit + G.vertices[j].credit;
sumnum=sumnum+1;
if((sumcredit<=uplcredit)&&(sumnum<=maxnum))
{
printf(" %s ",G.vertices[j].name);
fprintf(fp," %s ",G.vertices[j].name);
count++;
for(p=G.vertices[j].firstarc;p;p=p->nextarc)//对j号顶点每个邻接点的入度减一
G.vertices[p->adjvex].indegree--;
}
else Push(S,j);//将未输出的节点重新压入栈
}
}
fprintf(fp,"\n");
}
printf("\n");
if(count<G.vexnum)
printf("\n课程编排出错\n");
else
{
printf("\n课程编排成功\n");
}
fclose(fp);
}
int main()//主函数
{
int numterm;//学期总数
int uplcredit; //一个学期的学分上限
int selectway;
ALGraph G;
printf("请输入学期总数:\n");
scanf("%d",&numterm);
printf("请输入一个学期的学分上限:\n");
scanf("%d",&uplcredit);
CreatGraph(G);
printf("请选择编排策略:1.课程尽可能集中到前几个学期;2.课程尽量均匀分布\n");
scanf("%d",&selectway);
if(selectway==1)
TopologicalSort_1(G,numterm,uplcredit);
if(selectway==2)
TopologicalSort_2(G,numterm,uplcredit);
return 0;
}
五、程序运行结果
六、实验总结
通过本次实验一方面对学过的有关栈的知识进行了复习和应用,进一步熟悉和掌握了栈的有关操作。另一方面,熟悉和掌握了图的有关操作,尤其是邻接表作为存储结构的图的创建。加深了对拓扑排序的理解。对拓扑排序的应用还有待熟悉和提高。
七、致谢词
非常感谢刘老师在本次实验中对我的指导与帮助,尤其是在拓扑排序处的耐心指导,帮助我得到正确的运行结果。
八、参考文献
1.陈维兴,林小茶.C++面对对象的程序设计教程(第三版).北京:清华大学出版社,2009
2.谭浩强.C程序设计(第四版).北京:清华大学出版社,2010
3.严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,1997.4