数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 156|回复: 17

技术悬赏【封贴】

[复制链接]
发表于 4 小时前 | 显示全部楼层 |阅读模式
本帖最后由 bh4qix 于 2025-9-18 11:11 编辑

把图中 指针运算部分,翻译成 数组下标,函数体内不再有指针运算,函数整体逻辑不变


1. 半小时之内完成者 奖励 300 元
2. 一小时之内完成者 奖励 100 元
3. 两小时之内完成者 奖励 50 元

第一位答案完全正确者 得奖 并封贴。


2025-09-18  9:10 开始计时
谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
发表于 4 小时前 | 显示全部楼层
我 我 我 我我
我第一个放弃
回复 支持 反对

使用道具 举报

发表于 4 小时前 | 显示全部楼层
我 我 我 我我
我第二个放弃
回复 支持 反对

使用道具 举报

发表于 4 小时前 | 显示全部楼层
我 我 我 我我
我第三个放弃
回复 支持 反对

使用道具 举报

发表于 4 小时前 | 显示全部楼层
专业性太强,一般人不懂这些;我只学过模拟电子技术和数字电子技术,我小学都没毕业,所以没有拿到毕业证书和学位证书;看来要充充电,活到老,学到老。
回复 支持 反对

使用道具 举报

发表于 4 小时前 | 显示全部楼层
我是来看热闹的
回复 支持 反对

使用道具 举报

发表于 4 小时前 | 显示全部楼层
你这就是来找茬的,哪是悬赏。
回复 支持 反对

使用道具 举报

发表于 4 小时前 | 显示全部楼层
#include <stdio.h>  // 添加标准输入输出库以支持打印

void test(float *in, float *out, int in_len, float *coef) {
    int i, j;
    int coef_len2, acc_length;
    float acc;
    int fir_length = 35;
    int coef_start_idx = 0;
    int in_ptr_idx;
    int in_end_idx = in_len - 1;

    coef_len2 = (fir_length + 1) / 2;
    in_ptr_idx = coef_len2 - 1;
    acc_length = coef_len2;

    for (i = 0; i < in_len; i++) {
        acc = coef[coef_start_idx] * in[in_ptr_idx];
        for (j = 1; j < acc_length; j++) {
            acc += coef[coef_start_idx + j] * in[in_ptr_idx - j];
        }

        out[i] = acc;

        if (in_ptr_idx == in_end_idx) {
            acc_length--;
            coef_start_idx++;
        } else if (acc_length < fir_length) {
            acc_length++;
        }

        in_ptr_idx++;
    }
}

// 添加main函数作为程序入口
int main() {
    // 定义测试用的数组(长度适中以便演示)
    float in[50] = {0};       // 输入数组,初始化为0
    float out[50] = {0};      // 输出数组,初始化为0
    float coef[35] = {0};     // 系数数组,初始化为0
   
    // 为测试数组赋值(简单的测试数据)
    for (int i = 0; i < 50; i++) {
        in[i] = (float)i;     // 输入数组赋值为0,1,2,...,49
    }
    coef[0] = 1.0f;           // 简单设置一个系数值
   
    // 调用测试函数
    test(in, out, 50, coef);
   
    // 打印部分结果以验证程序运行
    printf("测试结果(前10个输出):\n");
    for (int i = 0; i < 10; i++) {
        printf("out[%d] = %.2f\n", i, out[i]);
    }
   
    return 0;
}
回复 支持 反对

使用道具 举报

发表于 4 小时前 | 显示全部楼层
  1. void test(float in[], float out[], int in_len, float coef[])
  2. {
  3.     int i, j, coef_len2, acc_length;
  4.     float acc;
  5.     int in_ptr_idx, data_ptr_idx, coef_start_idx;
  6.     int fir_length = 35;

  7.     coef_start_idx = 0;
  8.     coef_len2 = (fir_length + 1) / 2;

  9.     int in_end_idx = in_len - 1;
  10.     in_ptr_idx = coef_len2 - 1;

  11.     acc_length = coef_len2;

  12.     for (i = 0; i < in_len; i++) {
  13.         data_ptr_idx = in_ptr_idx;
  14.         int current_coef_idx = coef_start_idx;

  15.         acc = coef[current_coef_idx++] * in[data_ptr_idx--];
  16.         for (j = 1; j < acc_length; j++) {
  17.             acc += coef[current_coef_idx++] * in[data_ptr_idx--];
  18.         }

  19.         out[i] = acc;

  20.         if (in_ptr_idx == in_end_idx) {
  21.             acc_length--;
  22.             coef_start_idx++;
  23.         } else {
  24.             if (acc_length < fir_length) {
  25.                 acc_length++;
  26.             }
  27.             in_ptr_idx++;
  28.         }
  29.     }
  30. }
复制代码
试下,对了不要奖励,错了不要找我
回复 支持 反对

使用道具 举报

发表于 4 小时前 | 显示全部楼层
看看是怎么样划算
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层
隔行如隔山
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层
我就是来看热闹的。
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层
不知道那些所谓的AI能否算出来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 3 小时前 | 显示全部楼层
桂江鱼鹰 发表于 2025-9-18 09:40
#include   // 添加标准输入输出库以支持打印

void test(float *in, float *out, int in_len, float *coef ...

谢谢老师,编译运行没有问题,结果不正确。多谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层
百度AI解题过程‌
要将给定函数中的指针运算转换为数组下标运算,关键是明确各指针的功能及对应的数组索引关系。原函数是一个FIR滤波器实现,通过滑动窗口与系数卷积计算输出。以下是转换步骤:

1. 明确变量含义及指针与数组下标的对应关系
in为输入数组,out为输出数组,coef为滤波器系数数组。
in_ptr是输入数组的当前起始指针,对应数组下标in_idx。
coef_ptr是系数数组的当前起始指针,对应数组下标coef_idx。
data_ptr是输入数组的滑动窗口指针,对应数组下标data_idx。
2. 初始化关键变量的数组下标
coef_len2为系数长度的一半((35 + 1)/2 = 18),对应系数数组的起始偏移。
in_end是输入数组的末尾指针,转换为数组下标in_end_idx = in_len - 1。
in_ptr初始指向in + coef_len2 - 1,对应数组下标in_idx = coef_len2 - 1。
3. 循环中的指针运算转换
外层循环‌:遍历输入数组,每次计算一个输出值。
数据指针data_ptr‌:原data_ptr = in_ptr转换为data_idx = in_idx(当前输入窗口起始下标)。
系数指针coef_ptr‌:原coef_ptr = coef_start转换为coef_idx = coef_start_idx(当前系数起始下标)。
卷积计算‌:原(*coef_ptr++) * (*data_ptr--)转换为coef[coef_idx++] * in[data_idx--],通过数组下标自增/自减实现滑动。
4. 边界条件处理
当in_ptr到达in_end(即in_idx == in_end_idx)时,窗口长度acc_length减小,系数起始下标coef_start_idx增大。
否则,窗口长度acc_length增大,输入起始下标in_idx增大(窗口右移)。
5. 验证逻辑一致性
确保转换后的数组下标运算与原指针运算的访问顺序完全一致,特别是滑动窗口的起始位置和系数的偏移,保证卷积结果不变。

最终答案‌

c
Copy Code
void test(float in[], float out[], int in_len, float coef[]) {
    int i, j, coef_len2, acc_length;
    float acc;
    int in_idx, data_idx, coef_idx, coef_start_idx, in_end_idx;
    int fir_length = 35;

    coef_start_idx = 0;  // coef_start 对应系数数组起始下标
    coef_len2 = (fir_length + 1) / 2;
    in_end_idx = in_len - 1;  // in_end 对应输入数组末尾下标
    in_idx = coef_len2 - 1;   // in_ptr 对应输入数组起始下标
    acc_length = coef_len2;

    for (i = 0; i < in_len; i++) {
        data_idx = in_idx;       // data_ptr 对应输入数组当前窗口起始下标
        coef_idx = coef_start_idx; // coef_ptr 对应系数数组当前起始下标
        acc = coef[coef_idx++] * in[data_idx--];  // 首项乘积

        // 累加剩余项(j从1到acc_length-1)
        for (j = 1; j < acc_length; j++) {
            acc += coef[coef_idx++] * in[data_idx--];
        }

        out[i] = acc;  // 保存输出结果

        // 更新窗口参数(与原指针逻辑一致)
        if (in_idx == in_end_idx) {
            acc_length--;
            coef_start_idx++;
        } else {
            if (acc_length < fir_length) {
                acc_length++;
            }
            in_idx++;
        }
    }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2 小时前 | 显示全部楼层
本帖最后由 bh4qix 于 2025-9-18 11:44 编辑
飞向狙沙 发表于 2025-9-18 09:48
试下,对了不要奖励,错了不要找我

谢谢老师,结果完全正确。站内消息联系!

封贴!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2 小时前 | 显示全部楼层
adsnet 发表于 2025-9-18 10:50
百度AI解题过程‌
要将给定函数中的指针运算转换为数组下标运算,关键是明确各指针的功能及对应的数组索引 ...

朋友测试了,这个结果,没有问题。

追加一个 鼓励奖,20 元, 感谢参与!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-9-18 13:53 , Processed in 0.124800 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表