我无法让我的代码获得 7 的步幅以正常工作 C++
I am unable to get my code to get the stride of 7 to work properly C++
我要解决的问题如下:
编写一个函数,遍历(并打印)stride = 7 的数组元素。为此,循环中的更新部分将是 i= (i+7) % n,其中 n 是数组大小。
这个函数会访问数组的所有元素吗?尝试不同的数组大小来检查何时无法遍历所有元素。
即使 i 的值正确,我在下面编写的代码也不会在数组中打印正确的值。
谁能帮忙,我将不胜感激。
#include <fstream>
#include <stdlib.h>
using namespace std;
int* CreateArray(int n);
void StrideArray(int arr[], int n);
int main()
{
int* arr = new int[3];
arr = CreateArray(3);
cout << "The Elements In The Array Are: " << endl;
for (int i = 0; i < 3; i++)
{
cout << arr[i] << " ";
}
cout << endl;
StrideArray(arr, 3);
cout << "The Elements In The Array Stride 7 Are: " << endl;
for (int i = 0; i < 3; i++)
{
cout << arr[i] << " ";
}
delete[] arr;
return 0;
}
int* CreateArray(int n)
{
int* arr = new int[n];
for (int i = 0; i < n; i++)
{
arr[i] = (rand() % 100);
}
return arr;
}
void StrideArray(int arr[], int n)
{
int i = 0;
for (int j = 0; j < n; j++)
{
i = (i + 7) % n;
arr[j] = arr[i];
}
}
问题是在 StrideArray 中你读回了 arr 的修改值。
void StrideArray(int arr[], int n)
{
int i = 0;
int puffer=new int[n];
for (int j = 0; j < n; j++)
{
i = (i + 7) % n;
puffer[j] = arr[i];
}
for (int j = 0; j < n; j++){
puffer[j] = arr[j];
}
debete[] puffer;
}
是写函数的好方法。
此外,只有当 n 不能被 7 整除时,它才会访问所有元素。所以如果 n 不是 7,14,21,...
要使用 cout,您还必须 #include <iostream>
您的 StrideArray 函数需要修复;您正在迭代 j 但使用 i 进行索引,它保持不变;并且您正在将一个索引的值重新分配给另一个您应该打印它的地方:
void StrideArray(int arr[], int n)
{
int i = 0;
for (int j = 0; j < n; j=j+7)
{
cout << arr[j] << endl;
}
}
我为演示修改了您的其余代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
int* CreateArray(int n);
void StrideArray(int arr[], int n);
int main()
{
int* arr = new int[3];
arr = CreateArray(21);
cout << "The Elements In The Array Are: " << endl;
for (int i = 0; i < 21; i++)
{
cout << arr[i] << " ";
}
cout << endl;
StrideArray(arr, 21);
delete[] arr;
return 0;
}
int* CreateArray(int n)
{
int* arr = new int[n];
for (int i = 0; i < n; i++)
{
arr[i] = (rand() % 100);
}
return arr;
}
我要解决的问题如下:
编写一个函数,遍历(并打印)stride = 7 的数组元素。为此,循环中的更新部分将是 i= (i+7) % n,其中 n 是数组大小。 这个函数会访问数组的所有元素吗?尝试不同的数组大小来检查何时无法遍历所有元素。
即使 i 的值正确,我在下面编写的代码也不会在数组中打印正确的值。
谁能帮忙,我将不胜感激。
#include <fstream>
#include <stdlib.h>
using namespace std;
int* CreateArray(int n);
void StrideArray(int arr[], int n);
int main()
{
int* arr = new int[3];
arr = CreateArray(3);
cout << "The Elements In The Array Are: " << endl;
for (int i = 0; i < 3; i++)
{
cout << arr[i] << " ";
}
cout << endl;
StrideArray(arr, 3);
cout << "The Elements In The Array Stride 7 Are: " << endl;
for (int i = 0; i < 3; i++)
{
cout << arr[i] << " ";
}
delete[] arr;
return 0;
}
int* CreateArray(int n)
{
int* arr = new int[n];
for (int i = 0; i < n; i++)
{
arr[i] = (rand() % 100);
}
return arr;
}
void StrideArray(int arr[], int n)
{
int i = 0;
for (int j = 0; j < n; j++)
{
i = (i + 7) % n;
arr[j] = arr[i];
}
}
问题是在 StrideArray 中你读回了 arr 的修改值。
void StrideArray(int arr[], int n)
{
int i = 0;
int puffer=new int[n];
for (int j = 0; j < n; j++)
{
i = (i + 7) % n;
puffer[j] = arr[i];
}
for (int j = 0; j < n; j++){
puffer[j] = arr[j];
}
debete[] puffer;
}
是写函数的好方法。
此外,只有当 n 不能被 7 整除时,它才会访问所有元素。所以如果 n 不是 7,14,21,...
要使用 cout,您还必须 #include <iostream>
您的 StrideArray 函数需要修复;您正在迭代 j 但使用 i 进行索引,它保持不变;并且您正在将一个索引的值重新分配给另一个您应该打印它的地方:
void StrideArray(int arr[], int n)
{
int i = 0;
for (int j = 0; j < n; j=j+7)
{
cout << arr[j] << endl;
}
}
我为演示修改了您的其余代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
int* CreateArray(int n);
void StrideArray(int arr[], int n);
int main()
{
int* arr = new int[3];
arr = CreateArray(21);
cout << "The Elements In The Array Are: " << endl;
for (int i = 0; i < 21; i++)
{
cout << arr[i] << " ";
}
cout << endl;
StrideArray(arr, 21);
delete[] arr;
return 0;
}
int* CreateArray(int n)
{
int* arr = new int[n];
for (int i = 0; i < n; i++)
{
arr[i] = (rand() % 100);
}
return arr;
}