详细介绍2020winter cs106b Assignment1 + 作业提交

前言

1.cs106b的主页会随着学期的改变更新,目前的主页为cs106b。如果想要访问过去的学期网站,只能通过输入对应网页的URL来实现 (最新学期的作业好像对斯坦福外的学生不开放)
2.我做的实验是2020winter学期的实验,不同的学期实验内容不尽相同。选择这个学期的另外一个原因是本人太菜了,遇到不会的还可以去github上查找代码
3.学习国外课程的时候,我的习惯是直接阅读课程pdf文档。不仅效率高,而且多数课程视频都是放在youtube上的,需要科学上网。如果需要看视频,可以去b站找有无其他up搬运。
4.完成作业的时候需要使用到qt,qt的安装在这里就不赘述了,网上的教程一大把。
5.这里附上参考的gitnub仓库原则上还是自己独立完成比较好
6.我的建议是大家先自己独立完成作业,遇到问题再来看本篇博客,本篇博客作业的解答尽量简单一点:) 所以如果你不先做作业可能不知道下面的解答在讲什么。
在这里插入图片描述


英语课程看不懂怎么办

当然,最重要的是要提高英语水平。所以我选择使用翻译软件:)

方案一:去官网下载有道词典,打开软件后,开启左下角的划词功能
在这里插入图片描述
这样,当你鼠标选中一段内容时,就能翻译了。在这里插入图片描述

方案二: 使用quicker+沙拉查词
使用这个方案,你可以实现点击鼠标中键打开工具箱,进行截图翻译,在阅读整个英文pdf文档时效率显著提高。而且你还可以对比不同翻译网站的翻译结果,提高翻译
在这里插入图片描述
具体配置方法请看这个视频


作业提交方式

2020winter学期的

1.打开这个网址,往下滑,如下图
在这里插入图片描述
2、如果你还不会相关知识,建议把课程pdf先浏览一遍,再开始做作业。
3、做作业时,要打开对应的pdf文件,作业要求会放在那里。
4、点击Starter Files,开始下载作业文件,将下载好的文件解压到你想存放的目录,下图是我放的位置。
在这里插入图片描述点开.pro文件,进入Source/src/Tesing,开始编辑.cpp文件
5.当你要检查自己的代码是否正确时,操作步骤如下。
在这里插入图片描述
出现All tests in this section passed!就说明通过了所有的样例。

最新学期的

新版本的作业我没写过,不过去官网看了看,好像作业对斯坦福外的学生是不开放的…
如果你是是斯坦福的学生,那么你应该不需要看本篇博客

如何调试

去看Assignment 0: Welcome to CS106B! 下的Debugger Tutorial文件

c++标准库

当学习时遇到了不会的c++语法,可以去以下网址查找。
cppreference
Reference


好了,可以开始做作业了。

在这里插入图片描述


Assginment1

Problem One: Stack Overflows

这个模块很直观地展现了栈溢出的原因,你的任务就是利用在Assginment0学会的调试技巧,观察递归调用的参数,以确定循环的周期。

Problem Two: Only Connect

要求使用递归函数删去字符串中的元音字符,并且把整个字符串变为大写。(不能有循环语句)
整体流程如下:
请添加图片描述
这是代码片段

string onlyConnectize(string phrase) {
    string res = "";
    if(phrase.size()==1)  //这是递归的临界条件,防止递归无限进行下去
    {
         char x = phrase[0];
         if(isalpha(x))
         {
             if(x=='a'|| x=='A'|| x=='E'||x=='e'||x=='I'||x=='i'||x=='o'||x=='O'||x=='u'||x=='U')
             {
                 return "";
             }else
             {
                 phrase[0]= toupper(phrase[0]);
                 return phrase;
             }

         }else
         {
             return "";
         }
    }

    res = onlyConnectize(phrase.substr(0,phrase.size()-1))+ onlyConnectize(phrase.substr(phrase.size()-1));
    return res;
}

Problem Three: Playing Fair

观察后不难发现,A序列和B序列满足下列公式
A − s e q u e n c e ( n ) = A − s e q u e n c e ( n − 1 ) + B − s e q u e n c e ( n − 1 ) B − s e q u e n c e ( n ) = B − s e q u e n c e ( n − 1 ) + A − s e q u e n c e ( n − 1 ) A-sequence(n) = A-sequence(n-1) + B-sequence(n-1) \\ B-sequence(n) = B-sequence(n-1) + A-sequence(n-1) Asequence(n)=Asequence(n1)+Bsequence(n1)Bsequence(n)=Bsequence(n1)+Asequence(n1)

所以代码就很简单了

string aSequenceOfOrder(int n) {
    /* TODO: Delete this line and the next two lines, then implement this function. */
    if(n<0)
    {
        error("a string containing your error message");
    }else
    {
        if(n==0)
        {
            return "A";
        }else
        {
            return aSequenceOfOrder(n-1) + bSequenceOfOrder(n-1);
        }

    }
}

string bSequenceOfOrder(int n) {
    /* TODO: Delete this line and the next two lines, then implement this function. */
    if(n<0)
    {
        error("a string containing your error message");
    }else
    {
        if(n==0)
        {
            return "B";
        }else
        {
            return bSequenceOfOrder(n-1) + aSequenceOfOrder(n-1);
        }
    }
}

Problem Four: Sandpile

在这里插入图片描述
哈哈,你也想流沙吗

题目意思是:当一个格子中的沙子>=4时,这个格子中的沙子数就会-1.并且同时该格子相邻的上下左右格子的沙子都会+1,直到所有格子的沙子数都<=3,流动才会停止。
pdf里面也有强调要注意临界条件的判断,除此之外没什么好说的:)

void dropSandOn(Grid<int>& world, int row, int col) {
    /* TODO: Delete this line and the three after it, then implement this function. */
    int rows = world.numRows();
    int cols = world.numCols();
    if(row >rows || row <0 || col>cols || col <0)
    {
        return;
    }
    world[row][col]+= 1;
    if(world[row][col]>3)
    {
        world[row][col] =0;
        dropSandOn(world, row +1, col);
        dropSandOn(world, row-1 , col);
        dropSandOn(world , row, col +1 );
        dropSandOn(world , row , col -1 );
    }

}


Problem Five: Plotter

刚开始做的时候没读懂题意,其实就是让你模拟一下画笔的移动而已。

这个istream& input 表示的是 程序会将一些内容放在缓存区,名字叫做input
使用 input>>变量 可以将input中的内容流向变量

void runPlotterScript(istream& input) {

   PenStyle style = {2.71828, "orange"};
   string op;
   bool flag = false;
   double x1=0,x2 = 0,y1 = 0 , y2 =0;
   while(input>>op)
   {
       if(op.empty())
       {
           break;
       }
       if(op=="PenDown" )
       {
           flag = true;
       }else if(op =="PenUp")
       {
           flag = false;
       }else if(op == "MoveAbs")
       {
           input>>x2>> y2;
           if(flag)
           {
               drawLine(x1,y1,x2,y2,style);
           }
           x1 = x2;
           y1 = y2;
       }else if(op == "MoveRel")
       {
           input >> x2 >> y2;
           if(flag)
           {
               drawLine(x1,y1,x1+x2, y1 + y2 , style);
           }
           x1 += x2;
           y1 += y2;
       }else if(op == "PenColor")
       {
           input>>style.color;
       }else if(op == "PenWidth")
       {
           input >> style.width;
       }
   }
}

作业pdf推荐的写法如下,这样写可以读取input内的所有行

for(string line; getline(input);){
}

Assignment 1 完成

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
您好!对于 CS106B 的环境搭建,您可以按照以下步骤进行操作: 1. 首先,确保您的计算机上已经安装了 C++ 的编译器。推荐使用 g++ 或者 clang++,您可以在终端中输入 `g++ --version` 或者 `clang++ --version` 来检查是否已经安装。 2. 接下来,您需要下载并安装 Stanford 的 C++ 标准库。您可以在 Stanford 的官方网站上找到这个库的下载链接。下载完成后,将其解压到您自定义的目录中。 3. 现在,您可以下载 CS106B 的课程代码。您可以在 Stanford 的官方网站上找到这些代码的下载链接。下载完成后,将其解压到您自定义的目录中。 4. 打开您喜欢的集成开发环境(IDE),例如 Visual Studio Code、Xcode 或者 Eclipse。创建一个新的项目,并将 CS106B 的课程代码添加到该项目中。 5. 配置项目的编译选项,确保编译器能够找到 Stanford 的 C++ 标准库。具体操作方式取决于您使用的 IDE。通常情况下,您需要添加标准库的路径和头文件的路径。 6. 现在,您可以开始编写和运行 CS106B 的代码了!根据课程要求,您可以选择运行命令行程序或者图形化界面程序。 请注意,这些步骤可能会因为您使用的操作系统和开发工具而略有不同。如果您遇到任何问题,建议您查阅课程文档或者向您的教师或同学寻求帮助。祝您在 CS106B 中取得好成绩!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值