如何正确使用教辅书
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确使用教辅书相关的知识,希望对你有一定的参考价值。
参考技术A如何正确使用教辅书
参考老师的推荐意见,与同学交流用书心得,可以比较有效地帮助学生避免盲目购买。购买时注意尽量选择专业教辅图书出版社的产品,因为从与中小学教育、教材相关性和社会分工来看,各类教育出版社、师范大学出版社是教辅图书的专业出版机构,相对来说更能保证图书的品质。
教辅图书是学习的辅助工具,工善其事,先利其器。根据自身的需求,选择好适合你教辅书,合理利用,才可能真正实现教辅图书的功能效用。
首先不能过分依赖教辅书,“教辅”,顾名思义,以“教”为主,“辅”是次要的。使用教辅书最忌以其取代教材、取代课堂。学生使用教辅图书的首要前提是掌握好教材的知识内容。
其次要量体裁衣,明确自己的需要,掌握自己的进度。不同的教辅图书有的与课时同步,有按知识专题划分;有的是以习题训练为主,有的侧重知识例题讲解。作为“知识消费者”的学生读者要明确自己使用教辅图书的目的,根据自己的学习成绩、知识薄弱环节以及学校教学进度,有针对性、高效地利用不同型别教辅。
如果学习成绩一般或中等偏下,笔者建议学生使用基础同步习题类图书达到巩固基础知识,较快提高成绩的目的。同时,成绩较好的学生如果在课后及时使用这类教辅也会促进对课上知识的消化理解。
提高综合类图书特别适合学习成绩中等以上、学有余力的学生,题目典型但不陈旧、新活但不偏难,在基础之上将各个知识点串联起来,可以有效提高学生解题的综合能力。
对于知识梳理并例题讲解类图书,笔者认为,并不是所有的学生都需要使用。课前稍作预习,课上认真听讲,课后及时思考理解,老师的授课过程就能让学生较好地掌握教材要求。但如果学生确实没有较好理解课堂所授知识,这类教辅图书就可派上用场。此外,学生进行阶段复习的时候,也可以选择一本精选的讲解类教辅图书专门用于强化理解教材内容。
很想了解一下,南京的孩子应该如何正确使用教辅书呢?
辨伪去妄,去伪存真。吸其精华,弃其糟粕。以南京出版社的《课课通》为例,要根据每个人的实际情况不一样,教辅图书要与镇江的地方特点相结合,同时能够与教材同步,这样家长辅导孩子,也简单省力,而且孩子形成提前阅读的习惯,会事半功倍,迅速提高学习成绩。
教师如何正确使用教科书
教科书是教材系列中最规范、最具代表性的印刷材料,也是教师教和学生学的最重要媒介。很多时候,我在备课中,对教科书的使用下意识存在如专家所说,“仅在直观素材的表面‘做文章’”;“将符合儿童认识规律的‘隐喻’式呈现方式显性化、成人化”;“误解生活情景背后的学科含义”等解读误区。究竟教科书扮演什么角色?如何研究教科书、如何最大限度地发挥教科书应有的作用和价值?通过这次学习,终于让我明白: 在备课活动中,备教科书是一项最基本的工作,相对于教师而言,备教科书是一项基本的技能。随着时代的发展,特别是从以往照本宣科式的“以本为本”,“教教材”,到今天的“用教材教”,备教科书的技能成为当代教师必须熟练掌握的基本功。教科书的使用和理解教科书的设计开发意图,评价与选择教科书,研究和运用教科书等诸多个方面应该引起教师高度重视。 1、教师理解、研究、分析教科书是实现课程目标的首要前提。 不同版本的教科书往往具有不同的编写意图和潜在的意向性。教师分析、理解、研究教科书以及教科书编写的基本依据——课程标准,可以更好地运用教科书资源,使得课程实施更适合学生已有的知识经验和兴趣需要,提高教科书的适应性,增进学生对教科书的理解,促进学生的和谐发展。 2、教科书直接影响教学活动的质量,影响着学生未来的发展。 如何选择教科书,可以说教师的责任重大。选择教科书则要依据评价的结果作出决策。评价教科书不只是评判纸张、印刷、插图、文字等物理属性和外在内容,更重要的是评价其内容的选择、组织和结构的编排是否符合课程标准的目标和要求,是否符合学生的学习需要,不仅要做到教师“好教”,学生“好学”,而且能保证学生“学好”,有效地促进学生主动而全面,健康和谐地发展。 3、教师要有能力深入研究教科书,并创造性地使用教科书。 教科书作为教材系列中最具代表性的印刷材料,不再是预先规定好的,等待学生学习的教学内容,而是实现课程目标的重要资源。同时,这种资源的价值只有在具体的教学活动中才能动态地呈现出来,鲜活地“生成”,离开了学生富有个性的参与和体验,教科书内容就成为毫无意义的符号。同时,有效利用一切可以利用的课程资源,也是有效完成课程实施的重要举措。因此,教师深入研究进而准确把握教科书体现的教育理念和课程目标,以此为出发点来创造性地开发教科书,使用教科书,使教学过程成为教材内容的持续生成与意义建构的过程,成为学生学会学习和形成正确价值观的过程。 4、教师能够结合教科书的使用效果,主动对教科书进行评判,积累进一步使用教科书的有关资源。 5、在日常教学中,可用于备课的教科书资讯集中表现为合理解读教科书素材,这是创造性用教材教的具体体现,在深化课程改革、落实素质教育的今天,这是课程实施的关键。 一方面,对于课程来说,合理解读(进而最大限度地有效利用)教科书中的素材,是提高课程实施有效性的重要渠道。在倡导现代课程观的今天,解读教科书既不是将教科书作为唯一的“孤本”,视教科书为静态的、必须遵循的根本,也不是完全撇开教科书另行其事——教科书毕竟是专业人员经过潜心研究精心编制的专门材料,业已通过全国中小学教材审定委员会审定。因而,如何适度调整优化教科书中的素材,就成为创造性用教材教的关键。 另一方面,追求个人的专业发展是每位教师的重要任务,结合课堂教学主动寻找适合自己的教学风格是其核心要领,其主要工作包括如何充分利用教科书内容启用学生的自主意识,如何以教科书为起点向外自然延伸、拓展(这种延伸、拓展既可以是内容上的,也可以是形式上的),立足教科书而不拘泥于教科 书…… 其宗旨在于完成教学任务、促进学生全面、健康、和谐和可持续发展,同时,有助于形成自己的教学风格。
如何正确使用Vitamix
vitamix5200不是金属机身。750功率比5200低,5200是1380瓦,750是1200瓦,但是马力提高了(2.2匹),5200是2匹。转速低了(25000转),5200是37000转。
官 网上,5200的技术引数上写的是60HZ,750写的是50/60HZ.
国 内的是50HZ,所以5200买回来用有可能会影响转速(变压器只能改变电压不能改变频率)
如何正确使用 Signal
因为新的django开发人员得知signal之后, 往往会很高兴去使用它. 他们在能使用signal的地方就使用signal, 并且这是他们觉得自己是django专家一样. 然而, 像这样编码一段时间后, django专案就会变得异常复杂, 许多内容都纠结在一起无法解开.
简单回答是: 在其他方法无法使用的情况下, 才最后考虑使用signal.
因为新的django开发人员得知signal之后, 往往会很高兴去使用它. 他们在能使用signal的地方就使用signal, 并且这是他们觉得自己是django专家一样. 然而, 像这样编码一段时间后, django专案就会变得异常复杂, 许多内容都纠结在一起无法解开.
许多开发者也会将django signal和非同步讯息列队(例如celery)搞混. signal是同步处理, 因此通过signal呼叫大处理量的程序时并无法提高效能. 事实上, 将这些需要大处理量的程序移到signal中被视作是一种不好的习惯.
1. 何时使用signal
以下情况不要使用signal:
signal与一个model紧密相关, 并能移到该model的save()时
signal能使用model manager代替时
signal与一个view紧密相关, 并能移到该view中时
以下情况可以使用signal:
signal的receiver需要同时修改对多个model时
将多个app的相同signal引到同一receiver中处理时
在某一model储存之后将cache清除时
无法使用其他方法, 但需要一个被调函式来处理某些问题时
2. Signal的代替方法
使用mod而来manager
以下程式码演示了当使用者建立Event model时, 需要通知管理员, 如果改写model中的post_save(), 则需要新增额外的逻辑来区分使用者还是管理员:
# myapp/managers.py
from django.db import models
class EventManager(models.Manager):
def create_event(self, title, start, end, creator):
event = self.model(title=title, start=start, end=end, creator=creator)
event.save()
event.notify_admins()
return event
在model中设定model manager:
# myapp/models.py
from django.conf import settings
from django.core.mail import mail_admins
from django.db import models
from model_utils.models import TimeStampedModel
from .managers import EventManager
class Event(TimeStampedModel):
STATUS_UNREVIEWED, STATUS_REVIEWED = (0, 1)
STATUS_CHOICES = (
(STATUS_UNREVIEWED, "Unreviewed"),
(STATUS_REVIEWED, "Reviewed")
)
title = models.CharField(max_length=100)
start = models.DateTimeField()
end = model.dateTimeField()
status = models.IntegerField(choices=STATUS_CHOICES, default=STATUS_UNREVIEWED)
creator = models.ForeignField(settings.AUTH_USER_MODEL)
objects = EventManager()
def notify_admins(self):
subject = "user submitted a new event!".format(user=self.creator.get_full_name())
message = """TITLE: title
START: start
END: end""".format(title=self.title, start=self.start, end=self.end)
mail_admins(subject=subject, message=message, fail_silently=False)
在view中使用create_event()代替create()时, 便会通知管理员了.
在其他程式码中验证model
如果你使用pre_save signal来验证某一model, 则应当尝试自己写一个validator取代之. 如果验证是通过ModelForm时, 通过改写clean()实现验证.
使用model的save()和delete()
如果使用pre_save 或 post_save signal, 如果可以, 则将这些程式码移到model的save()方法中.
同样如果使用pre_delete 或 post_delete signal, 如果可以, 则将这些程式码移到model的delte()方法中.
使用其他程式码代替signal
如果可能, 我们可以将signal的逻辑使用其他帮助程式实现.
如何正确使用Timer
在需要按时间计划执行简单任务的情况下,Timer是最常被使用到的工具类。使用Timer来排程TimerTask的实现者来执行任务,有两种方式,一种是使任务在指定时间被执行一次,另一种是从某一指定时间开始周期性地执行任务。
下面是一个简单的Timer例子,它每隔10秒钟执行一次特定操作doWork。
Timer timer = new Timer();
TimerTask task = new TimerTask ()
public void run()
doWork();
;
timer.schedule (task, 10000L, 10000L);
可以看到,具体的任务由TimerTask的子类实现,Timer负责管理、执行TimerTask。
Timer 的使用
在不同的场景下,需要使用不同的Timer介面。如上所说,主要区分两种情况
1) 在指定时间执行任务,只执行一次
- public void schedule(TimerTask task, long delay)
- public void schedule(TimerTask task, Date time)
2)从指定时间开始,周期性地重复执行,直到任务被cancel掉。其中又分两种型别:
2.1) 一种是按上一次任务执行的时间为依据,计算本次执行时间,可以称为相对时间法。比如,如果第一次任务是1分10秒执行的,周期为5秒,因系统繁忙(比如垃圾回收、虚拟记忆体切换),1分15秒没有得到机会执行,直到1分16秒才有机会执行第二次任务,那么第3次的执行时间将是1分21秒,偏移了1秒。
- public void schedule(TimerTask task, long delay, long period)
- public void schedule(TimerTask task, Date firstTime, long period)
2.2) 另一种是绝对时间法,以使用者设计的起始时间为基准,第n次执行时间为“起始时间+n*周期时间”。比如,在上面的情况下,虽然因为系统繁忙,第二执行时间被推后1秒,但第3次的时间点仍然应该是1分20秒。
- public void scheduleAtFixedRate(TimerTask task, long delay, long period)
- public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
相对时间法,关注于满足短时间内的执行间隔,绝对时间法,则更关注在一个长时间范围内,任务被执行的次数。如果我们要编写一个程式,用timer控制文件编辑器中提示游标的闪烁,用哪种更合适? 当然是相对时间法。如果改用绝对时间法,当从系统繁忙状态恢复后,游标会快速连续闪烁多次,以弥补回在系统繁忙期间没有被执行的任务,这样的情况会使用者来说比较难以接受。又如,每10分钟检查一次新邮件的到来,也适合于使用相对时间法。
Timer timer = new Timer();
TimerTask task = new TimerTask ()
public void run()
displayCursor();
;
timer.schedule (task, 1000L, 1000L); 每秒闪烁一次游标
作为对比,我们来考虑一种绝对时间法的应用场景——倒数任务,比如,要求在10秒内做倒数计时,每秒做一次doworkPerSecond操作,10秒结束时做一次doworkEnd操作,然后结束任务。
Timer timer = new Timer();
TimerTask task = new TimerTask ()
private int count=10;
public void run()
if(count>0)
doWorkPerSecond();
count--;
else
doWorkEnd();
cancel();
;
timer. scheduleAtFixedRate (task, 1000L, 1000L);
Timer及相关类的内部实现
- Timer的内部会启动一个执行绪TimerThread。即使有多个任务被加入这个Timer,它始终只有一个执行绪来管理这些任务。
- TimerThread是Thread的子类。加入Timer的所有任务都会被最终放入TimerThread所管理的TaskQueue中。TimerThread会不断检视TaskQueue中的任务,取出当前时刻应该被执行的任务执行之,并且会重新计算该任务的下一次执行时间,重新放入TaskQueue。直到所有任务执行完毕(单次任务)或者被cancel(重复执行的任务),该执行绪才会结束。
- TaskQueue,由阵列实现的二叉堆,堆的排序是以任务的下一次执行时间为依据的。二叉堆的使用使得TimerThread以简洁高效的方式快速找到当前时刻需要执行的TimerTask,因为,堆排序的特性是保证最小(或者最大)值位于堆叠顶端,在这里,queue[1]始终是下次执行时间(nextExecutionTime)最小的,即应该最先被执行的任务
比如,同一个timer管理两个任务task1和task2
timer.schedule (task1, 4000L, 10000L);
timer. scheduleAtFixedRate (task2, 2000L, 15000L);
则,TaskQueue中会有两个任务:task1和task2。task2会排在头部queue[1],当task2执行时间到,task2被执行,同时修改其nextExecutionTime =当前的nextExecutionTime +15000L(绝对时间法)并重新在二叉堆中排序。排序后,task1被放到头部。当task1执行时间到,task1被执行,并修改其nextExecutionTime =当前时间+10000L,然后重新在二叉堆中对其排序………
一个例子
当收到客户端请求时,服务端生成一个Response物件。服务端希望客户端访问该物件的间隔时间不能超过20秒,否则,服务端认为客户端已经异常关闭或者网路异常,此时销毁掉该物件并列印错误日志。每次访问都会重新开始计时。
class Response
private TimerTask timeout;
public void init()
………
Timer timer = new Timer();
timeout = new TimeOutTask();
timer.schedule (timeout, 20000L);
public void invoke()
timeout.cancel();取消当前的timeout任务
….
timeout = new TimeOutTask();
timer.schedule (timeout, 20000L);重新开始计时
void destroy()
……..
class TimeOutTask extends TimerTask
public void run()
TraceTool.error(“Time out, destroy the Response object.”);
destroy();
因为Timer不支援对任务重置计时,所以此处采取了先cancel当前的任务再重新加入新任务来达到重置计时的目的。注意,对一个已经cancel的任务,不能通过schedule重新加入Timer中执行。TimerTask的状态机如下:
一个新生成的TimerTask其状态为VIRGIN,Timer只接受状态为VIRGIN的任务,否则会有IllegalStateException异常丢掷。
呼叫任务的cancel方法,该任务就转入CANCELLED状态,并很快从TaskQueue中删除。对单次执行的任务,一旦执行结束,该任务也会从中删除。这意味着TimerTask将不再被timer所执行了。
如何正确使用 CBVs
在程式设计中mixin是指为继承它的class提供额外的功能, 但它自身却不能单独使用的类. 在具有多继承能力的程式语言中, mixin可以为类增加额外功能或方法. 在Django中, 我们可以使用mixin为CBVs提供更多的扩充套件性, 当然在类继承过程中, 我们推荐以下原则: Django自身提供的View永远在最右边 mixin依次在以上view的左边 mixin永远继承自Python的object型别
在程式设计中mixin是指为继承它的class提供额外的功能, 但它自身却不能单独使用的类. 在具有多继承能力的程式语言中, mixin可以为类增加额外功能或方法. 在Django中, 我们可以使用mixin为CBVs提供更多的扩充套件性, 当然在类继承过程中, 我们推荐以下原则: Django自身提供的View永远在最右边 mixin依次在以上view的左边 mixin永远继承自Python的object型别
如何正确使用makeup
这个要根据句子的意思来使用的,同为make up,它在不同的句子里面意思是不一样的
如何正确使用AVplayer
楼主可以直接使用itune就可以了。只要插上iphone后,然后在itune里点你的iphone的应用程式选项,然后将滚动条拉到最下面。你会发现一个应用程式的框框,单击你的avplayer的图示,右侧就会出现”avplayer“的文件,再点新增,找到你要放进去的媒体档案就可以了。这样你就可以在iphone上的avplayer里看你的影片了……(感觉最后这句话有点怪怪的,大家懂的= =)
洛谷1231 教辅的组成
洛谷1231 教辅的组成
https://www.luogu.org/problem/show?pid=1231
题目背景
滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西。
题目描述
蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题。然而出现在他眼前的书多得数不胜数,其中有书,有答案,有练习册。已知一个完整的书册均应该包含且仅包含一本书、一本练习册和一份答案,然而现在全都乱做了一团。许多书上面的字迹都已经模糊了,然而HansBug还是可以大致判断这是一本书还是练习册或答案,并且能够大致知道一本书和答案以及一本书和练习册的对应关系(即仅仅知道某书和某答案、某书和某练习册有可能相对应,除此以外的均不可能对应)。既然如此,HansBug想知道在这样的情况下,最多可能同时组合成多少个完整的书册。
输入输出格式
输入格式:
第一行包含三个正整数N1、N2、N3,分别表示书的个数、练习册的个数和答案的个数。
第二行包含一个正整数M1,表示书和练习册可能的对应关系个数。
接下来M1行每行包含两个正整数x、y,表示第x本书和第y本练习册可能对应。(1<=x<=N1,1<=y<=N2)
第M1+3行包含一个正整数M2,表述书和答案可能的对应关系个数。
接下来M2行每行包含两个正整数x、y,表示第x本书和第y本答案可能对应。(1<=x<=N1,1<=y<=N3)
输出格式:
输出包含一个正整数,表示最多可能组成完整书册的数目。
输入输出样例
5 3 4 5 4 3 2 2 5 2 5 1 5 3 5 1 3 3 1 2 2 3 3 4 3
2
说明
样例说明:
如题,N1=5,N2=3,N3=4,表示书有5本、练习册有3本、答案有4本。
M1=5,表示书和练习册共有5个可能的对应关系,分别为:书4和练习册3、书2和练习册2、书5和练习册2、书5和练习册1以及书5和练习册3。
M2=5,表示数和答案共有5个可能的对应关系,分别为:书1和答案3、书3和答案1、书2和答案2、书3和答案3以及书4和答案3。
所以,以上情况的话最多可以同时配成两个书册,分别为:书2+练习册2+答案2、书4+练习册3+答案3。
数据规模:
对于数据点1, 2, 3,M1,M2<= 20
对于数据点4~10,M1,M2 <= 20000
拆点+最大流
为什么要拆点?
以为一般的最大流可一个点经过多次,而本题一个点只能经过1次,所以要拆成一个流量为1的边
#include<cstdio> #include<cstring> #include<algorithm> #define N 10000 #define M 20001 using namespace std; int n1,n2,n3,m1,m2,tot=1,src,dec,ans,cur[N*5],lev[N*5],head,tail,que[4*5*N],tmp; int front[N*5]; struct node { int to,next,cap; }e[M*10]; inline void add(int u,int v) { e[++tot].to=v;e[tot].next=front[u];e[tot].cap=1;front[u]=tot; e[++tot].to=u;e[tot].next=front[v];e[tot].cap=0;front[v]=tot; } inline bool bfs() { for(int i=0;i<=N*5;i++) {lev[i]=-1;cur[i]=front[i];} head=tail=0; que[tail++]=src;lev[src]=0; while(head<tail) { int now=que[head]; for(int i=front[now];i;i=e[i].next) { int to=e[i].to; if(e[i].cap>0&&lev[to]==-1) { lev[to]=lev[now]+1; que[tail++]=to; if(to==dec) return true; } } head++; } return false; } inline int dinic(int now,int flow) { if(now==dec) return flow; int res=0,delta; for(int & i=cur[now];i;i=e[i].next) { int to=e[i].to; if(e[i].cap>0&&lev[to]>lev[now]) { delta=dinic(to,min(e[i].cap,flow-res)); if(delta) { e[i].cap-=delta;e[i^1].cap+=delta; res+=delta;if(res==flow) break; } } } if(res!=flow) lev[now]=-1; return res; } int main() { scanf("%d%d%d",&n1,&n2,&n3); src=0;dec=4*N+1; for(int i=1;i<=n3;i++) add(src,i); for(int i=1;i<=n1;i++) add(N+i,N*2+i); for(int i=1;i<=n2;i++) add(i+3*N,dec); int x,y; scanf("%d",&m1); for(int i=1;i<=m1;i++) { scanf("%d%d",&x,&y); add(x+2*N,y+3*N); } scanf("%d",&m2); for(int i=1;i<=m2;i++) { scanf("%d%d",&x,&y); add(y,x+N); } while(bfs()) ans+=dinic(src,n3); printf("%d",ans); }
bfs中去掉if(to==des) reurn true
改为在最后return钱加一个 if(lev[dec]!=-1) return true;
前者比后者快。
原因:因为是bfs
以上是关于如何正确使用教辅书的主要内容,如果未能解决你的问题,请参考以下文章