要求
通过键盘输入二维数组的行和列,动态创建二维数组。实现下列函数功能。
1)动态创建二维数组。
unsigned char** new_array2d(unsigned int row, unsigned int column);
2)释放二维数组。
void delete_array2d(unsigned char** array2d, unsigned int row);
3)为二维数组随机赋值,每一个元素的值范围为0~255。
void set_array2d(unsigned char** array2d, unsigned int row, unsigned int column);
4)统计数组中的值分别为0255的个数,也就是0255这256个数每一个出现的个数。
unsigned int* histgram(unsigned char** array2d, unsigned int row, unsigned int column);//返回unsigned int[256]数组表示统计结果
5)打印数组。
void print_array1d(unsigned int array[],unsigned int n);//打印一维数组
void print_array2d(unsigned char** array2d, unsigned int row, unsigned int column);//打印二维数组
6)根据给定的数组的左上角坐标、高、宽,取出子数组,如图1所示
unsigned char** get_sub_array(unsigned char** array2d, unsigned int row_index, unsigned int column_index, unsigned int height, unsigned int width);
图1 子数组示意图

7)从所创建的二维数组中,按任意取出3x3的子数组(例如从位置(1,1)取3x3子数组),并将子数组的值转换为0-1值,即大于等于128的为1,小于128为0。
void gray_to_binary(unsigned char** array2d, unsigned int row, unsigned int column);
8)对(7)所获得的3x3的二维数组(如图2所示),设每一个元素按顺时针顺序标注为a0,a1,a2,a3,a4,a5,a6,a7,a8共9个元素。现作如下处理:
a)数组四周元素与中间元素作异或运算(两个元素值相同为0,不同为1),即
a0 = a0 ^ a8; a1 = a1 ^ a8;……;a7 = a7 ^ a8;

b)四周元素与中间元素异或运算后,组成下列四种排列
a0,a1,a2,a3,a4,a5,a6,a7
a2,a3,a4,a5,a6,a7,a0,a1
a4,a5,a6,a7,a0,a1,a2,a3
a6,a7,a0,a1,a2,a3,a4,a5
将上面四种排列转换为十进制数,求这个四个十进制数的最小值。
unsigned int find_min_value(unsigned char** array2d);
代码
#include <iostream>
#include <time.h>
#include <algorithm>
using namespace std;
unsigned char** new_array2d(unsigned int row, unsigned int column)
{
unsigned char** p = new unsigned char* [row];
for (int i = 0; i < column; i++) {
p[i] = new unsigned char[column];
}
return p;
// to do list
}
void delete_array2d(unsigned char** array2d, unsigned int row)
{
for (int i = 0; i < row; i++) {
delete[] array2d[i];
}
delete[] array2d;
// to do list
}
void set_array2d(unsigned char** array2d, unsigned int row, unsigned int column)
{
srand((unsigned)time(NULL));
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
array2d[i][j] = rand();
}
}
// to do list
}
unsigned int* histgram(unsigned char** array2d, unsigned int row, unsigned int column)
{
unsigned int* cb = new unsigned int [300];
memset(cb, 0, sizeof(unsigned int) * 256);
for (int i = 0; i < row; i++) {
for (int j =

这篇博客详细介绍了如何使用C++编写一系列二维数组操作函数,包括动态创建、释放、随机赋值、统计值分布、打印、获取子数组、灰度转二值以及寻找3x3子数组的最小值。示例代码展示了如何应用这些函数,并在最后给出了一个完整的程序实例,演示了整个流程。

2139

被折叠的 条评论
为什么被折叠?



