嵌入式方向实践实验一

实践一_ 利用大模型将python程序转换成C++程序 实验报告

实验任务

请大家将认领到的程序, 尝试借助大语言模型将本文件夹中的 Python 代码转换为 C++ 的代码。应该提 交: 1.原始python代码, 2.大模型输出的C++代码 (标注由哪个模型输出, 以及驱动大模型的prompt), 3.以 及手动修正后的C++代码(需要通过编译, 且可执行, 执行结果正确.)

输入的 Python 代码均由两部分组成,主要功能函数(函数名不确定,函数中含有功能说明注释)与测 试函数( check(candidate) 函数); 手动修正后的 C++ 代码由三部分组成,由主要功能函数(函数名 不确定,请手动将功能说明注释同样补充在其中, 粘贴过去即可)与主函数( main 函数,用于调用主 要功能函数来进行测试,不需要包含原有 check(candidate) 中的所有用例)。

可以自行设计与大语言模型交互的 prompt ,这里给出一些建议, 例如:

1
2
请将下列python代码改成语义上等价的C++代码 (Please transfer the following python code 
into semantically equivalent C++ code):

或者针对注释中的说明来构建prompt, 以 000_has_close_elements.py 为例:

1
2
3
4
5
6
7
8
9
10
请按照以下要求来构造C++代码 (Please write the C++ code that following the 
descriptions below):
""" For a given list of integers, return a tuple consisting of a sum and a
product of all the integers in a list.
Empty sum should be equal to 0 and empty product should be equal to 1.
>>> sum_product([])
(0, 1)
>>> sum_product([1, 2, 3, 4])
(10, 24)
""

以上prompt仅供参考, 同学们如果有好的prompt可以尽情发挥, 如果prompt不好, 那么后面修正C++代 码的工作量就会比较大, 最坏情况下这个C++的转换就全部是手工完成的. 即使如此, 只要最终手动修正的 C++代码完全正确, 这部分实验就会给分

实验过程

压缩包中包含python代码,模型给出的代码(该代码文件名包含后缀_unmodified),以及手工修改后的代码;

使用的python代码编号为121-125,如下:

image-20231015001256489

使用的模型为chatgpt3.5

驱动大模型的prompt为:

1
2
3
4
请将以下python代码改成语义上相等的C++代码,原来的python代码包含一个功能函数和一个测试函数(check),新的C++代码请包含功能函数和主函数(main函数,调用功能函数进行测试)(注意代码中含有注释,可以用来帮助理解,但新的代码不需要携带这些注释):
"""
python code
"""

模型给出的cpp代码基本可用,除了以下两个问题:

  1. 未包含头文件 <assert.h> 导致无法识别`assert`

  2. c++中 `assert` 宏只接受一个条件表达式,不能直接比较复杂的数据结构,因此模型给出的以下类似代码会报错:

    1
    assert(result1 == std::vector<std::string>{"Hello", "world!"});

手工给出的修改方案为:

  1. 增添头文件<assert.h>
  2. 使用if语句替代assert来比较复杂的数据结构

在修改这两个错误后,代码可以编译运行,并无报错。