云课五分钟-05一段代码修改-AI修改C++

news2025/1/19 23:06:26

前篇:

云课五分钟-04一段代码学习-大模型分析C++

在前一节,使用大模型工具文心一言等可以帮助分析代码,加快理解。

信息时代→智能时代,系统学习转为碎片学习。

发散思维的能力在智能时代尤为重要。 

同样我们也可以借助智能化工具修改代码,提出自己的需求。

所有的云课五分钟,不仅演示可行案例,也同样重视在尝试过程中的失败,并且也会全部展示出来。

一次又一次在失败中站起来,这也许就是人区别于机器人所具有的独特成长历程,弥足珍贵。

视频与文字并非对应关系,类似互补关系,同时又相互独立。


视频:

云课五分钟-05一段代码修改-AI修改C++


文字:

usleep(30000); 实现什么功能

usleep(30000); 实现的功能是使程序暂停30000微秒(也就是0.03秒或30毫秒)。

在这段代码中,usleep函数用于在每次循环迭代之间添加一个小的延迟。这样做有几个目的:

  1. 可视化效果:使得用户能够观察到图形的动态变化。如果没有这个延迟,图形变化会过快,可能难以观察。
  2. 减轻CPU负担:减少程序的运行频率,从而降低CPU的使用率。这对于轻量级和不需要高频率更新的应用是有益的。
  3. 节奏控制:对于动态系统或者动画来说,usleep可以用于控制系统的更新速度或者动画的帧率。

简单来说,usleep(30000);就是用来在每次循环迭代中创建一个小的延迟,以提供更好的用户体验并降低CPU的使用率。

#include <stdio.h>
#include <math.h>
#include <cstring>
#include <unistd.h>
 
int main() {
    float A = 0, B = 0;
    float i, j;
    int k;
    float z[1760];
    char b[1760];
    printf("\x1b[2J");
    for (;;) {
        memset(b, 32, 1760);
        memset(z, 0, 7040);
        for (j = 0; j < 6.28; j += 0.07) {
            for (i = 0; i < 6.28; i += 0.02) {
                float c = sin(i);
                float d = cos(j);
                float e = sin(A);
                float f = sin(j);
                float g = cos(A);
                float h = d + 2;
                float D = 1 / (c * h * e + f * g + 5);
                float l = cos(i);
                float m = cos(B);
                float n = sin(B);
                float t = c * h * g - f * e;
                int x = 40 + 30 * D * (l * h * m - t * n);
                int y = 12 + 15 * D * (l * h * n + t * m);
                int o = x + 80 * y;
                int N = 8 * ((f * e - c * d * g) * m - c * d * e - f * g - l * d * n);
                if (22 > y && y > 0 && x > 0 && 80 > x && D > z[o]) {
                    z[o] = D;
                    b[o] = ".,-~:;=!*#$@"[N > 0 ? N : 0];
                }
            }
        }
        printf("\x1b[H");
        for (k = 0; k < 1761; k++) {
            putchar(k % 80 ? b[k] : 10);
            A += 0.00004;
            B += 0.00002;
        }
        usleep(30000);
    }
    return 0;
}  

修改如上代码,使得动态效果变慢一倍。

如果你想让动态效果变慢一倍,你可以简单地将 usleep(30000); 这行代码修改为 usleep(60000);。这将使得程序在每次循环迭代后暂停60000微秒(也就是0.06秒或60毫秒),是原来的两倍时间。

所以修改后的代码如下:

#include <stdio.h>  
#include <math.h>  
#include <cstring>  
#include <unistd.h>  
   
int main() {  
    float A = 0, B = 0;  
    float i, j;  
    int k;  
    float z[1760];  
    char b[1760];  
    printf("\x1b[2J");  
    for (;;) {  
        memset(b, 32, 1760);  
        memset(z, 0, 7040);  
        for (j = 0; j < 6.28; j += 0.07) {  
            for (i = 0; i < 6.28; i += 0.02) {  
                // ... (unchanged code)  
            }  
        }  
        printf("\x1b[H");  
        for (k = 0; k < 1761; k++) {  
            putchar(k % 80 ? b[k] : 10);  
            A += 0.00004;  
            B += 0.00002;  
        }  
        usleep(60000);  // Changed from usleep(30000)  
    }  
    return 0;  
}

这样做将使得动态图形的更新速度变慢,使得其变化更加易于观察。

对于简单的修改要求,AI基本都能完成。


但是,要求多了,需要细节描述好,同时,也有概率出现无法解决的情况。 


能否修改如上代码,显示彩色的动态效果。

在终端中显示彩色文本通常需要用到ANSI转义码。你可以通过修改b[o]的赋值部分来实现彩色效果。

首先,你需要定义一个颜色数组,这个数组包含你想要用的ANSI颜色码。然后,你可以像之前一样使用".,-~:;=!*#$@"数组来选择颜色。

以下是一个简单的修改版本,这里我仅展示了如何将b[o]修改为彩色,我使用了10种不同的颜色来循环:

#include <stdio.h>  
#include <math.h>  
#include <cstring>  
#include <unistd.h>  
  
// ANSI color codes for the colors  
const char* colors[] = {  
    "\x1b[31m", // Red  
    "\x1b[32m", // Green  
    "\x1b[33m", // Yellow  
    "\x1b[34m", // Blue  
    "\x1b[35m", // Magenta  
    "\x1b[36m", // Cyan  
    "\x1b[31;1m", // Bold Red  
    "\x1b[32;1m", // Bold Green  
    "\x1b[33;1m", // Bold Yellow  
    "\x1b[37m"  // White  
};  
  
int main() {  
    float A = 0, B = 0;  
    float i, j;  
    int k;  
    float z[1760];  
    char b[1760];  
    printf("\x1b[2J");  
    for (;;) {  
        memset(b, 32, 1760);  
        memset(z, 0, 7040);  
        for (j = 0; j < 6.28; j += 0.07) {  
            for (i = 0; i < 6.28; i += 0.02) {  
                // ... (unchanged code)  
                int color_index = N > 0 ? N % 10 : 0;  // Cycle colors if there are more points than colors  
                b[o] = colors[color_index];  // Set the color for this point  
                // You might want to append the actual character here like: b[o] = colors[color_index] + ".";  
                // It depends on what visual effect you're aiming for.  
            }  
        }  
        printf("\x1b[H");  
        for (k = 0; k < 1761; k++) {  
            putchar(k % 80 ? b[k] : 10);  
            A += 0.00004;  
            B += 0.00002;  
        }  
        usleep(60000);  
    }  
    return 0;  
}

注意: 上述代码片段假定N的值是变化的,并且可以提供足够的颜色变化。如果N的变化不足以提供所有颜色的变化,你可能需要找到另一种方式来映射点到颜色。同时,要记住在最后的putchar之后重置颜色,可以使用\x1b[0m来重置到默认颜色。如果字符和颜色是分开的(即使用了注释中的append方法),你可能需要在字符后面添加这个重置码。 

在编译如上代码时,出现报错,错误如下:code03.cpp: In function ‘int main()’: code03.cpp:52:42: error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive] b[o] = colors[color_index]; // Set the color for this point ^ code03.cpp:66:1: error: expected ‘}’ at end of input }

这里有两个问题:

  1. 类型不匹配b[o]被定义为char,但你试图将const char*(字符串)赋给它,这就是第一个错误的原因
  2. 缺少结束大括号:你的代码结构可能没有正确地关闭,这会导致第二个错误

解决方案

  1. 对于类型不匹配问题

如果你想存储ANSI颜色代码,你应该将b数组的类型从char改为const char*,这样可以存储字符串而不是单个字符但是,这样做的话你需要确保其他部分的代码与这个类型兼容

代码修改如下:

cpp

const char* b[1760];
// ...
b[o] = colors[color_index];
  1. 对于缺少结束大括号问题

确保所有的代码块都有正确的结束大括号}你需要在报错的位置检查前面的代码块,确保每个开始的{都有对应的结束}

根据提供的代码片段,这两个修改应该能够解决你的问题但是,如果这些修改后仍然存在问题,请提供更多的代码上下文,以便我能更全面地理解和解决问题


这段代码看起来像是一个基于终端的动画,使用 ASCII 字符来显示一种动态模式。它已经在做一些相当复杂的数学计算来生成这个动画。这段代码使用了正弦和余弦函数来生成形状,并使用了循环来持续更新画面。

你可以尝试以下几种方式来让这段代码变得更有趣:

  1. 交互性:目前,这个动画是预设的,且无法与用户交互。你可以考虑通过读取键盘输入来改变动画的某些参数,使之能够与用户交互。例如,可以让用户通过按键来改变颜色、形状、动画速度等。
  2. 颜色:目前这个动画只使用了 ASCII 字符,你可以考虑引入颜色来增加视觉效果。需要注意的是,终端中输出颜色需要特殊的控制序列,你可以查找 ANSI escape code 来了解如何在终端中输出颜色。
  3. 音效:虽然这是一个视觉动画,但如果你增加一些音效可能会更有趣。例如,当特定的形状或模式出现时,可以播放特定的声音。需要注意的是,这可能需要引入一些音频库来实现。
  4. 更复杂的模式:你可以尝试引入更复杂的数学函数来生成更复杂的模式。例如,你可以尝试使用分形或者其他复杂的数学函数。
  5. 保存/分享动画:允许用户保存或分享他们创建的动画。这可能需要将动画转换为视频或者 GIF 格式。

在修改和增加功能的过程中,需要注意的是保持代码的清晰和可读性。同时,因为这段代码涉及到大量的数学运算,所以在增加功能的同时也要考虑性能的影响。

 

当然!以下是一个修改后的示例,增加了颜色和交互性。请注意,这个示例需要终端支持ANSI escape codes来显示颜色。 

#include <stdio.h>  
#include <math.h>  
#include <cstring>  
#include <unistd.h>  
  
// 定义ANSI escape codes  
#define COLOR_RESET "\033[0m"  
#define COLOR_RED "\033[31m"  
#define COLOR_GREEN "\033[32m"  
#define COLOR_YELLOW "\033[33m"  
#define COLOR_BLUE "\033[34m"  
  
int main() {  
    float A = 0, B = 0;  
    float i, j;  
    int k;  
    float z[1760];  
    char b[1760];  
  
    printf("\x1b[2J"); // 清屏  
  
    bool running = true;  
    int colorIndex = 0;  
  
    while (running) {  
        memset(b, 32, 1760);  
        memset(z, 0, 7040);  
  
        for (j = 0; j < 6.28; j += 0.07) {  
            for (i = 0; i < 6.28; i += 0.02) {  
                // ... (保持不变的部分)  
                float c = cos(i);
                float d = sin(j);
                float e = cos(A);
                float f = cos(j);
                float g = sin(A);
                float h = d + 2;
                float D = 1 / (c * h * e + f * g + 5);
                float l = sin(i);
                float m = sin(B);
                float n = cos(B);
                float t = c * h * g - f * e;
                int x = 40 + 30 * D * (l * h * m - t * n);
                int y = 12 + 15 * D * (l * h * n + t * m);
                int o = x + 80 * y;
                int N = 8 * ((f * e - c * d * g) * m - c * d * e - f * g - l * d * n);  
                // 在这里增加颜色  
                const char* colorCode;  
                switch (colorIndex) {  
                    case 0:  
                        colorCode = COLOR_RED;  
                        break;  
                    case 1:  
                        colorCode = COLOR_GREEN;  
                        break;  
                    case 2:  
                        colorCode = COLOR_YELLOW;  
                        break;  
                    case 3:  
                        colorCode = COLOR_BLUE;  
                        break;  
                    default:  
                        colorCode = COLOR_RESET;  
                        break;  
                }  
  
                if (22 > y && y > 0 && x > 0 && 80 > x && D > z[o]) {  
                    z[o] = D;  
                    b[o] = colorCode[0]; // 使用颜色代码作为字符的前缀  
                    b[o + 1] = ".,-~:;=!*#$@"[N > 0 ? N : 0];  
                }  
            }  
        }  
  
        printf("\x1b[H"); // 移动光标到屏幕左上角  
  
        for (k = 0; k < 1761; k++) {  
            putchar(k % 80 ? b[k] : 10); // 输出字符或换行  
            A += 0.00004;  
            B += 0.00002;  
        }  
  
        // 增加交互性:根据用户输入改变颜色  
        char input;  
        if (scanf(" %c", &input) == 1) {  
            if (input == 'r') { // 'r' 键重置颜色索引  
                colorIndex = 0;  
            } else if (input >= '1' && input <= '4') { // 数字键1-4更改颜色索引  
                colorIndex = input - '1';  
            } else if (input == 'q') { // 'q' 键退出程序  
                running = false;  
            }  
        }  
  
        usleep(30000); // 暂停一段时间,控制动画速度  
    }  
    return 0;
 }    

这个警告是因为你试图将一个字符串常量(这里是COLOR_RED)赋值给一个非const的char*(这里是colorCode)。在C++中,字符串常量被视为const char类型,因此它们不能被赋值给一个非const的char*。

为了解决这个问题,你应该将colorCode声明为const char*。如果你的代码里的其它地方需要修改colorCode指向的内容,那你就需要重新考虑你的设计。一般来说,字符串常量(比如这里的颜色代码)应该是只读的。

所以你应该修改你的代码,使得colorCode被声明为const char*。例如:

const char* colorCode;  
switch (colorIndex) {  
    case 0:  
        colorCode = COLOR_RED;  
        break;  
    case 1:  
        colorCode = COLOR_GREEN;  
        break;  
    case 2:  
        colorCode = COLOR_YELLOW;  
        break;  
    case 3:  
        colorCode = COLOR_BLUE;  
        break;  
    default:  
        colorCode = COLOR_RESET;  
        break;  
}

cpp

const char* colorCode;
switch (colorIndex) {
case 0:
colorCode = COLOR_RED;
break;
case 1:
colorCode = COLOR_GREEN;
break;
case 2:
colorCode = COLOR_YELLOW;
break;
case 3:
colorCode = COLOR_BLUE;
break;
default:
colorCode = COLOR_RESET;
break;
}

然后,在你的代码中使用colorCode时,如果之前的代码试图修改它指向的字符串内容(比如通过strcpy或者[]操作符),那么你需要修复那些代码,使其不再试图修改字符串常量。如果这些代码需要修改字符串,那么他们应该使用堆或者栈上分配的(非const)字符串,而不是字符串常量。

 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1215376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爬虫基础之爬虫的基本介绍

一、爬虫概述 爬虫又称网络蜘蛛、网络机器人&#xff0c;网络爬虫按照系统结构和实现技术&#xff0c;大致可以分为以下几种类型&#xff1a; 通用网络爬虫&#xff08;Scalable Web Crawler&#xff09;&#xff1a;抓取互联网上所有数据&#xff0c;爬取对象从一些种子 URL…

开源大模型部署及推理所需显卡成本必读之二

在前面的文章中&#xff0c;我们介绍了大模型占用显卡空间的一些分析情况&#xff0c;这次我们继续来看看具体量化角度上的结论。 因此&#xff0c;本文来来介绍一个偏具体数值量化的工作。 随着各厂商相继发布大型模型&#xff0c;排行榜变化频繁&#xff0c;新旧交替&#xf…

[云原生2.] Kurbernetes资源管理 ---- (陈述式资源管理方式)

文章目录 1. K8s管理资源的方法类别1.1 陈述式资源管理方式1.2 声明式资源管理方式1.3 GUI式资源管理方法 2. 陈述式资源管理方式2.1 命令行工具 ---- Kubelet2.1.1 简介2.1.2 特性2.1.3 kubelet拓展命令2.1.4 kubectl基本语法2.1.5 Kubectl工具的自动补全 2.2 k8s Service 的类…

外汇天眼:失败的投资者经常陷入两个误区!

一、价格与价值的混淆 在金融领域&#xff0c;价格和价值往往被错误视为同义词。然而&#xff0c;审视市场时&#xff0c;我们会逐渐发现一个“安全差”的重要概念&#xff0c;这是由巴菲特的导师本杰明格雷厄姆提出的。 安全差是指股票的内在价值与市场价格之间的差异。内在…

sklearn笔记:neighbors.NearestNeighbors

1 最近邻 class sklearn.neighbors.NearestNeighbors(*, n_neighbors5, radius1.0, algorithmauto, leaf_size30, metricminkowski, p2, metric_paramsNone, n_jobsNone)邻居搜索算法的选择通过关键字 algorithm 控制&#xff0c;它必须是 [auto, ball_tree, kd_tree, brute] …

分类预测 | Matlab实现PSO-LSTM-Attention粒子群算法优化长短期记忆神经网络融合注意力机制多特征分类预测

分类预测 | Matlab实现PSO-LSTM-Attention粒子群算法优化长短期记忆神经网络融合注意力机制多特征分类预测 目录 分类预测 | Matlab实现PSO-LSTM-Attention粒子群算法优化长短期记忆神经网络融合注意力机制多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1…

块设备 I/O 请求送达到外部设备

对于 ext4 文件系统&#xff0c;最后调用的是 ext4_file_write_iter&#xff0c;它将 I/O 的调用分成两种情况&#xff1a; 第一是直接 I/O。最终我们调用的是 generic_file_direct_write&#xff0c;这里调用的是 mapping->a_ops->direct_IO&#xff0c;实际调用的是 e…

[nlp] 损失缩放(Loss Scaling)loss sacle

在深度学习中,由于浮点数的精度限制,当模型参数非常大时,会出现数值溢出的问题,这可能会导致模型训练不稳定。为了解决这个问题,损失缩放(Loss Scaling)技术被引入,它通过缩放损失值来解决这个问题。 在深度学习中,损失缩放技术通常是通过将梯度进行缩放来实现的。具…

太激动了!摄像头终于有画面了!

有了放弃的想法 摄像头APP在我这里好好的&#xff0c;到了老外那里就不能 用。反复试了几套源码&#xff0c;都没有画面。后来干脆把老外说通用的APK反编译后&#xff0c;新做了个APP&#xff0c;结果还是没画面。到了这个时候&#xff0c;我是真的有点沮丧&#xff0c;准备放弃…

局部指令和全局指令的注册和使用

全局指令 先写一个js文件 import store from /store const directivePlugin {install(Vue) {Vue.directive(checkBtn, {inserted(el, binding) {// el: 指令绑定的那个元素对象 dom// binding.value: 指令等于号后面绑定的表达式的值 v-if"xxx"// 拿到el 拿到v…

Git目录不对,即当前文件夹不对应git仓库

报错信息是&#xff1a; fatal: not a git repository (or any of the parent directories): .git 如&#xff1a; 是当前文件夹不对应git仓库&#xff0c;一般在git clone之后&#xff0c;需要进入下一级文件夹才对应仓库。 在文件夹看&#xff0c;本层中没有.git文件夹&…

AGV|RGV小车RFID传感读卡器CK-G06A开发与用户手册技术说明

AGV|RGV小车RFID传感读卡器CK-G06A是一款基于射频识别技术的低频 RFID 标签传感器&#xff0c;传感器工作频率为 125KHZ&#xff0c;同时支持对 EMID&#xff0c;FDX-B 两种格式标签的读取。传感器内部集成了射频部分通 信协议&#xff0c;用户只需通过 RS485 通信接口接收数据…

spring学习笔记-IOC,AOP,事务管理

目录 概述 什么是spring 侵入式的概念 spring的核心 spring的优势 注意 IOC控制反转 概述 核心 容器 DI&#xff0c;dependency injection依赖注入 概念 注入方式 循环依赖 spring如何解决循环依赖 spring生成Bean的方式 Bean属性注入&#xff08;Bean属性赋值…

使用requests库下载文件的技术解析

目录 一、引言 二、使用requests库下载文件的基本流程 三、请求设置和响应处理 1、请求头部设置 2、跟随重定向 3、处理HTTP认证 4、响应状态码检查 5、响应头处理 6、响应体处理 四、异常处理 1、网络连接问题 2、HTTP请求错误 3、文件写入错误 总结 一、引言 …

CDP体系化建设1-CDP综述

前言 从CRM到DMP&#xff0c;再到CDP的横空出世&#xff0c;数据产品领域推陈出新的速度也挺快的。 而了解CDP的人可能会说&#xff0c;CDP和BI一样&#xff0c;糅杂了太多东西&#xff0c;都不知道如何概括。 在我看来&#xff0c;CDP也是一个看似简单&#xff0c;但是需要借助…

2024有哪些免费的mac苹果电脑内存清理工具?

在我们日常使用苹果电脑的过程中&#xff0c;随着时间的推移&#xff0c;可能会发现设备的速度变慢了&#xff0c;甚至出现卡顿的现象。其中一个常见的原因就是程序占用内存过多&#xff0c;导致系统无法高效地运行。那么&#xff0c;苹果电脑内存怎么清理呢&#xff1f;本文将…

媒体行业的3D建模:在影视中创造特效纹理

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 在本文中&#xff0c;我们将探讨 3D 建模在媒体行业中的作用&#xff0c;特别是它在影视特效创作…

做外贸站群效果怎么样?独立站站群是什么?

外贸站群管理系统的作用&#xff1f;海洋建站和站群的区别&#xff1f; 外贸站群&#xff0c;顾名思义&#xff0c;是指针对外贸业务而建立的多个网站或平台&#xff0c;因此建立有效的外贸站群对于企业来说是一种非常重要的策略。那么&#xff0c;做外贸站群效果怎么样呢&…

当当狸带屏智能显微镜M2来了!显微镜里的顶流

还记得当年上初中生物实验课的时候&#xff0c;第一次用显微镜观察到洋葱表皮细胞时候的感觉吗&#xff1f;那是一种独属于少年的、初次探索这个世界的巨大喜悦。 微观世界&#xff0c;总有我们肉眼无法察觉的奇妙&#xff0c;基本上所有的孩子都天生对微观世界有着极强的好奇心…

YOLO 施工安全帽目标检测模型

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 头盔自动检测基本上是一个物体检测问题&#xff0c;可以使用深度学习和基于计算机视觉的方法来…