diff --git a/APCSA_algs4_demo.ipynb b/APCSA_algs4_demo.ipynb new file mode 100644 index 0000000..7311c8a --- /dev/null +++ b/APCSA_algs4_demo.ipynb @@ -0,0 +1,194 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# AP CSA Demo — 普林斯顿 algs4 库(JAVA)\n", + "\n", + "这是 MVP 示例:教你如何用 **jjava (Java kernel)** 加载普林斯顿 `algs4.jar`,实现 **科学绘图 (StdDraw)** 和 **音频 (StdAudio)**。\n", + "\n", + "> algs4.jar 官方地址:https://algs4.cs.princeton.edu/code/algs4.jar" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 第 1 步:加载 algs4.jar(每个 notebook 首格执行一次)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%classpath add /opt/tljh/user/share/java/algs4.jar\n", + "\n", + "import edu.princeton.cs.algs4.StdOut;\n", + "import edu.princeton.cs.algs4.StdDraw;\n", + "import edu.princeton.cs.algs4.StdAudio;\n", + "\n", + "StdOut.println(\"algs4 加载成功!\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 第 2 步:科学绘图 — StdDraw 画一个函数曲线\n", + "\n", + "服务器无显示器 (headless),所以我们**离屏渲染后保存为 PNG**,再用 Markdown 显示。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "// 离屏绘图:sin 曲线\n", + "int n = 100;\n", + "StdDraw.setCanvasSize(600, 400);\n", + "StdDraw.setXscale(0, n);\n", + "StdDraw.setYscale(-1.5, 1.5);\n", + "StdDraw.setPenColor(StdDraw.BLUE);\n", + "for (int i = 0; i < n; i++) {\n", + " double x0 = i, y0 = Math.sin(i * 0.1);\n", + " double x1 = i + 1, y1 = Math.sin((i + 1) * 0.1);\n", + " StdDraw.line(x0, y0, x1, y1);\n", + "}\n", + "StdDraw.setPenColor(StdDraw.RED);\n", + "StdDraw.text(n / 2.0, 1.2, \"y = sin(x)\");\n", + "\n", + "StdDraw.save(\"sin_plot.png\"); // 保存到当前目录\n", + "StdOut.println(\"已保存 sin_plot.png\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 显示绘图结果" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![sin曲线](sin_plot.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 第 3 步:音频 — StdAudio 合成一段旋律(八音盒)\n", + "\n", + "服务器无声卡,所以**合成样本保存为 WAV**,学生用浏览器 `