用c++写一个程序并写注释,要求如下:打开文件"dem1.txt",依次读取文件里的ncols,nrows,xllcorner,yllcorner,cellsize参数, 随后读取所有的坐标高度存入数组。编写函数实现挖方面积、挖方体积、填方面积、填方体积的计算。 最后将挖方面积、挖方体积、填方面积、填方体积结果输出在屏幕上。
时间: 2023-07-10 21:13:14 浏览: 90
以下是使用C++语言编写的程序,请您参考:
```
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
// 定义读取文件中的参数结构体
struct FileParams {
int ncols; // 列数
int nrows; // 行数
double xllcorner; // 左下角x坐标
double yllcorner; // 左下角y坐标
double cellsize; // 格子大小
};
// 读取文件中的参数
FileParams readFileParams(string fileName) {
FileParams params;
ifstream inFile(fileName);
if (inFile.is_open()) {
inFile >> params.ncols >> params.nrows >> params.xllcorner >> params.yllcorner >> params.cellsize;
inFile.close();
}
return params;
}
// 读取文件中的坐标高度
vector<vector<double>> readData(string fileName, int ncols, int nrows) {
vector<vector<double>> data(nrows, vector<double>(ncols, 0));
ifstream inFile(fileName);
if (inFile.is_open()) {
string line;
getline(inFile, line); // 读取第一行
for (int i = 0; i < nrows; i++) {
for (int j = 0; j < ncols; j++) {
inFile >> data[i][j];
}
}
inFile.close();
}
return data;
}
// 计算挖方面积
double calcCutArea(vector<vector<double>> data, double cellsize) {
double area = 0;
for (int i = 0; i < data.size(); i++) {
for (int j = 0; j < data[i].size(); j++) {
if (data[i][j] < 0) {
area += cellsize * cellsize;
}
}
}
return area;
}
// 计算挖方体积
double calcCutVolume(vector<vector<double>> data, double cellsize) {
double volume = 0;
for (int i = 0; i < data.size(); i++) {
for (int j = 0; j < data[i].size(); j++) {
if (data[i][j] < 0) {
volume += -data[i][j] * cellsize * cellsize;
}
}
}
return volume;
}
// 计算填方面积
double calcFillArea(vector<vector<double>> data, double cellsize) {
double area = 0;
for (int i = 0; i < data.size(); i++) {
for (int j = 0; j < data[i].size(); j++) {
if (data[i][j] > 0) {
area += cellsize * cellsize;
}
}
}
return area;
}
// 计算填方体积
double calcFillVolume(vector<vector<double>> data, double cellsize) {
double volume = 0;
for (int i = 0; i < data.size(); i++) {
for (int j = 0; j < data[i].size(); j++) {
if (data[i][j] > 0) {
volume += data[i][j] * cellsize * cellsize;
}
}
}
return volume;
}
int main() {
string fileName = "dem1.txt";
FileParams params = readFileParams(fileName);
int ncols = params.ncols;
int nrows = params.nrows;
double xllcorner = params.xllcorner;
double yllcorner = params.yllcorner;
double cellsize = params.cellsize;
vector<vector<double>> data = readData(fileName, ncols, nrows);
double cutArea = calcCutArea(data, cellsize);
double cutVolume = calcCutVolume(data, cellsize);
double fillArea = calcFillArea(data, cellsize);
double fillVolume = calcFillVolume(data, cellsize);
cout << "挖方面积: " << cutArea << endl;
cout << "挖方体积: " << cutVolume << endl;
cout << "填方面积: " << fillArea << endl;
cout << "填方体积: " << fillVolume << endl;
return 0;
}
```
以上程序通过读取文件中的参数和坐标高度,计算出挖方面积、挖方体积、填方面积和填方体积,并将计算结果输出在屏幕上。程序中的函数都有注释说明,希望能帮助您理解程序的实现。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)