JianGuanTHU / UOJ_Offline

Offline test system for THUOOP
7 stars 0 forks source link

Proposal(第一次作业,程序改错&简易网络学堂) #1

Closed UNIDY2002 closed 2 years ago

UNIDY2002 commented 4 years ago

如下。

UNIDY2002 commented 4 years ago

题目描述

(本题是代码改错,目测难度不会大)

小明学习了oop的课程后,跃跃欲试,打算亲手实践一下。

小明希望实现的功能有:

……(见后面的main.cpp

然而,小明遇到了一些bug,怎么都de不掉。于是,他请你来帮他完善他的程序……

Code

main.cpp

(小明希望实现的大致长这样)

#include "my_lib.h"

using namespace std;

int main() {
    string hello = "Hello, world!";
    print(hello);
    print();
    print(2333);
    print(233 > 666);
    print("================");

    auto s = input();
    print(s);
    for (auto c:s) print(c);
    print("================");

    Array a;
    a.add(4);
    a.add(2);
    a.add(7);
    a.cut();
    a.add(5);
    print(a.getSize());
    print(a);
    return 0;
}

my_lib.h

(这道题暂时不想分离出my_lib.cpp……)

解题者可以修改的部分是my_lib.h

会设置一些错误:

emm目前先想到这么些问题。

考察点

UNIDY2002 commented 4 years ago

题目描述

Json是一种……的语言,它广泛运用于……

学习了oop的基本知识后,请你也试着做一个 (简化版的) Json解析工具。

任务要求

从输入得到一个Json字符串,解析得到相应的Json类后,会进一步进行一些查询,例如:

问题简化与约定

作为一次课后作业,必然无法要求真正地解析Json,而且才学了一点点类的知识 (况且重复造轮子也毫无意义) 。因此,对问题进行如下简化:

输入样例

Json

{
    "animals" : {
        "dog" : [
            {
                "name" : "Rufus" ,
                "age" : "15"
            } ,
            {
                "name" : "Marty" ,
                "age" : "12"
            }
        ]
    }
}

main.cpp(部分)

Json o = getJson();  // Read from stdin

cout << o.getType() << endl;
assert(o.getType() == "object" && o.contains("animals"));

Json p = o.getObject("animals");
cout << p.getType() << endl;
assert(p.getType() == "object" && p.contains("dog"));

Json q = p.getObject("dog");
cout << q.getType() << endl;
cout << q.getLength() << endl;
assert(q.getType() == "array" && q.getLength() > 1);

Json r = q.getArray(1);
cout << r.getType() << endl;
assert(r.getType() == "object" && r.contains("age"));

Json s = r.getObject("age");
cout << s.getType() << endl;
assert(s.getType() == "string");

cout << s.getString() << endl;

考察点

liangrz15 commented 4 years ago

第一题不错,后期需要明确题目中的考点。 第二题有一定的算法难度,会导致同学们关注于算法的设计而非OOP的基础知识。建议更换这一道题,可参考第一次作业电子签到统计系统的难度。 如果能合理修改或更换第二道题,可以替代作业。

UNIDY2002 commented 4 years ago

(我后来也发现Json那题有点问题……[捂脸])

题目描述

网络学堂在清华信息化进程中扮演着重要的角色,任何一位清华学子都离不开网络学堂。

学习了OOP的基础知识后,请你也设计一个简易的网络学堂,能够添加事项,并进行查找和输出等操作。

任务要求

众所周知,网络学堂由多门课程组成,每门课又有作业、公告、文件、讨论和答疑等模块。

为简化问题,在本题中,你只需实现作业和文件两个模块

我们认为,一个文件最关键的要素是名称和文件类型,而一项作业最关键的要素则就是名称和ddl。在本题中,我们用一个正整数来代替ddl

(此处略去对需求的描述,可见后面的main.cpp。)

约定

输入样例

main.cpp(部分)

Course oop;
oop.addHomework("hw1", 2);
oop.addFile("week1", "pptx");
oop.addHomework("hw2", 4);
cout << oop.findHomework("hw1") << endl;
oop.printHomework();

Course physics;
physics.addFile("syllabus", "pdf");

Learn learn;
learn.addCourse(oop);
learn.addCourse(physics);
learn.print();

输出格式

(此处略)

考察点

liangrz15 commented 4 years ago

修改后的两道题都不错,可以替代一次作业。 第一题最好能尽量地覆盖重要的知识点。 之后需要完成题面、数据、标答和judger。