草庐IT

【编程】中小学GoC编程示例

zhyuzh3d 2023-10-11 原文

欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
更多相关文章请点击2019年7月专题

小孩子能学编程吗?我说的编程不是Scratch那种,而是真正的写代码,C++代码。


驯兽师网站截图

关于GoC编程

GoC是C语言的扩展,是专门针对小学和初中学生开发的趣味编程入门语言。

GoC由从事中小学信息学教学30多年的江涛老师开发,他也是国内最著名的奥林匹克信息学教练之一。

GoC的特点就是简单易上手,并且保留了C/C++的全部语法结构。

关于GoC编程,可以淘宝购买江涛老师撰写的《魔法学院的奇幻之旅》一书,内容有趣易学。

关于实验舱X平台(原驯兽师学院已迁移到X平台)

实验舱X平台 x.shiyancang.cn

驯兽师学院

这是基于江涛老师GoC语言Web版开发的在线学习平台,功能简单,专注于让小孩子能够快速上手GoC编程,接触到真正的代码概念。

使用流程:

  • 注册登录,然后马上开始。
  • 代码管理,新建文件。
  • 打开文件,编写代码。
  • 点击运行,查看执行效果。
在线编写代码并运行

点击保存按钮保存当前代码,或者点击查看命令浏览常用命令。

学习编程的目的是驯服计算机,控制计算机,掌握计算机,利用计算机这个强大的工具增强青少年的学习能力、认知能力、逻辑能力。

下面是一些简单的入门案例,如果您和孩子都没有正式的编程基础,建议参考《魔法学院的奇幻之旅》进行学习和练习。

目前驯兽师学院网站的视频教程正在制作中,很快就会上线了,而且是全免费开放。

多边形外角和是360度

int main() {
    p.moveTo(-150,0);
    for(int i=0;i<10;i++){
        p.fd(300).bk(250);//修改250查看变化
        p.rt(360/10);
    }
}

绘制五角星

int main() {
    p.moveTo(-200,200);
    p.rt(90);
    for(int i;i<5;i++){
        p.fd(500);
        p.rt(360/5*2);
    }
    return 0;
 }

绘制多角星

int main() {
    int n=17;//角数
    int len=150;//每条线长度
    int jiao=15;//角a    
    p.moveTo(0,len);
    
    for(int i=0;i<n;i++){
       p.rt(jiao).fd(len).rt(180-jiao*2).fd(len).lt(180-jiao);
       p.rt(360.0/n); 
    }
    
    return 0;
 }

绘制内连多角星

int main() {
    int len1=300;
    int len2=150;
    int n=6;    
    for(int i=0;i<n;i++){
        double banjiao=180.0/n;
        p.lt(banjiao).fd(len2);
        double px1=p.getX();
        double py1=p.getY();
        p.bk(len2).rt(banjiao).fd(len1);
        double px2=p.getX();
        double py2=p.getY();
        p.lineTo(px1,py1).lineTo(px2,py2).bk(len1);
        p.rt(banjiao).fd(len2);
        double px3=p.getX();
        double py3=p.getY();
        p.lineTo(px2,py2).lineTo(px3,py3).bk(len2).rt(banjiao); 
    }
    return 0;
 }

彩色方块阵列

int gezi(int size,int n){
    int offset=size*n/2-size/2;
    for(int col=0;col<n;col++){
        for(int row=0;row<n;row++){
            int px=row*size+1-offset;
            int py=offset-col*size+1;
            p.moveTo(px,py);
            p.c(rand()%15);
            p.rr(size-2,size-2);
        }
    }
}
int main() {
    p.speed(9);
    gezi(100,5);
    return 0;
 }

数点计算圆周率

int main()
{
    p.hide();
    p.rr(200*2, 200*2, 8); //在这里简书400是敏感词,所以改为200*2
    for(int i=0;i<200;i++){
        p.moveTo(rand()%400-200,rand()%400-200);
        p.oo(10,5);
    }
    p.moveTo(0,0).o(200,12); 
}

数格子计算圆周率

int main()
{
    p.rr(200*2,200*2,8);
    p.oo(200,12);   
    int gezi=20; //每个格子的边长大小
    int huafen=400/gezi; //横向、竖向划分多少格子
    for(int x=0;x<huafen;x++){
        for(int y=0;y<huafen;y++){
            p.moveTo(-200+gezi/2+x*gezi,200-gezi/2-y*gezi);
            p.r(gezi,gezi,0);
            p.oo(2,1);
        }
    }
}

多边形边长计算圆周率

int main(){
 double px=-300;
 double py=0;
 p.moveTo(px,py);
 int n=10;//修改这个边数提高计算精度
 int len=80;
 p.rt(90.00/n);
 for(int a=0;a<n;a++){    
    p.fd(len); 
     p.rt(180.00/n);
 }
 double zhijing=p.getX()-px;
 double zhouchang=n*len*2;
 p.text(zhouchang/zhijing);    
}

树枝

int aa(double len){
    if(len>10){
        double len2=len*0.7; //简书中7和five在一起是敏感词,所以这里用7
        double dis=len*0.25;
        p.fd(len).bk(dis);
        p.rt(30).fd(len2).o(dis);
        p.bk(len2);
        p.lt(60).fd(len2).o(dis);
        p.bk(len2);
        p.rt(30).fd(dis).rt(10);
        aa(len2);
    }
}

int main() {
    p.moveTo(0,-300);
    p.speed(10);
    p.hide();
    aa(200);    
    return 0;
 }

分形树

int aa(double len){
    if(len>20){
        double a=25*(0.5+rand()%100/100.0*0.5);
        double len2=len*(0.7+rand()%100/100.0*0.1);
        p.fd(len);
        p.rt(a).fd(len2);
        aa(len2);
        p.bk(len2);
        p.lt(a*2).fd(len2);
        aa(len2);
        p.bk(len2);
        p.rt(a);
        p.bk(len);//一定要回到原点
    }
}

int main() {
    p.speed(1000);
    p.moveTo(0,-300);
    aa(120);    
    return 0;
 }

谢尔宾斯基三角

int sierp(double len){
    for(int n=0;n<3;n++){
        p.fd(len).rt(120);   
    }
    if(len>30){
        double len2=len/2.0;
        sierp(len2);//左下三角形
        p.fd(len2);
        sierp(len2);//左上三角形
        p.rt(120).fd(len2).lt(120);
        sierp(len2);//右侧三角形
        p.lt(120).fd(len2).rt(120);//回到原点
    }
}
int main() {
    p.speed(9);
    p.moveTo(-200,-200);
    sierp(500);
    return 0;
 }

科赫雪花

int koch(double len){
    if(len>30){
        double len2=len/3.0;
        koch(len2);
        p.lt(60);
        koch(len2);
        p.rt(120);
        koch(len2);
        p.lt(60);
        koch(len2);
    }else{
        p.fd(len);
    }
}
int main() {
    p.speed(6);
    p.moveTo(-200,100).rt(90);
    for(int n=0;n<3;n++){
        koch(400);
        p.rt(120);
    }
    return 0;
 }

更多文章可以观看我的小文集青少年编程


欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
更多相关文章请点击2019年7月专题


每个人的智能新时代

如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~


END

有关【编程】中小学GoC编程示例的更多相关文章

  1. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  2. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  3. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  4. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  5. Ruby-vips 图像处理库。有什么好的使用示例吗? - 2

    我对图像处理完全陌生。我对JPEG内部是什么以及它是如何工作一无所知。我想知道,是否可以在某处找到执行以下简单操作的ruby​​代码:打开jpeg文件。遍历每个像素并将其颜色设置为fx绿色。将结果写入另一个文件。我对如何使用ruby​​-vips库实现这一点特别感兴趣https://github.com/ender672/ruby-vips我的目标-学习如何使用ruby​​-vips执行基本的图像处理操作(Gamma校正、亮度、色调……)任何指向比“helloworld”更复杂的工作示例的链接——比如ruby​​-vips的github页面上的链接,我们将不胜感激!如果有ruby​​-

  6. ruby - 如何以编程方式删除实例上的 "singleton information"以使其编码(marshal)? - 2

    我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。

  7. Ruby 元编程问题 - 2

    我正在查看Ruby日志记录库Logging.logger方法并从sourceatgithub提出问题与这段代码有关:logger=::Logging::Logger.new(name)logger.add_appendersappenderlogger.additive=falseclass我知道类 最佳答案 这实际上删除了方法(当它实际被执行时)。这是确保close不会被调用两次的保障措施。看起来好像有嵌套的“class 关于Ruby元编程问题,我们在StackOverflow上找到一

  8. ruby - Paperclip:以编程方式分配图像并设置其名称 - 2

    使用Paperclip,我想从这样的URL抓取图像:require'open-uri'user.photo=open(url)问题是我最后得到一个像“open-uri20110915-4852-1o7k5uw”这样的文件名。有什么方法可以更改user.photo上的文件名?作为一个额外的变化,Paperclip将我的文件存储在S3上,所以如果我可以在初始分配中设置我想要的文件名就更好了,这样图像就会上传到正确的S3key。像这样:user.photo=open(url),:filename=>URI.parse(url).path 最佳答案

  9. ruby - 如何以编程方式检查证书是否已被吊销? - 2

    我正在开发一个xcode自动构建系统。在执行一些预构建验证时,我想检查指定的证书文件是否已被撤销。我了解securityverify-cert验证其他证书属性但不验证吊销。我如何检查撤销?我正在用Ruby编写构建系统,但我对任何语言的想法都持开放态度。我阅读了这个答案(Openssl-Howtocheckifacertificateisrevokedornot),但指向底部的链接(DoesOpenSSLautomaticallyhandleCRLs(CertificateRevocationLists)now?)进入的Material对我的目的来说有点过于复杂(用户上传已撤销的证书是一

  10. arrays - 如何在下面的示例中将两个值数组分组为 n 个值数组? - 2

    我已经有很多两个值数组,例如下面的例子ary=[[1,2],[2,3],[1,3],[4,5],[5,6],[4,7],[7,8],[4,8]]我想把它们分组到[1,2,3],[4,5],[5,6],[4,7,8]因为意思是1和2有关系,2和3有关系,1和3有关系,所以1,2,3都有关系我如何通过ruby​​库或任何算法来做到这一点? 最佳答案 这是基本Bron–Kerboschalgorithm的Ruby实现:classGraphdefinitialize(edges)@edges=edgesenddeffind_maximum_

随机推荐