人工智慧導航系統檔案數據的識別

2020-08-08 19:40:27

#include iostream
#include fstream//即寫入、讀出的時候要用到這個標頭檔案
#include string
#include <stdlib.h>//標準庫標頭檔案
#define num 128//網格數據大小
using namespace std;

bool isPeak(int grid[num][num],int r, int c);
void extremes(int grid[num][num], int nrows, int ncols);

int main (void){
int nrows,ncols;//行,列
int map[num][num];
string filename;//檔名
ifstream file;//建立一個檔案流物件

cout<<"請輸入檔名:\n";
cin>>filename;
//c_str是string類的一個函數,可以把string型別變數轉換成char*變數open()要求的是一個char*字串
file.open(filename.c_str());
/*EOF是baiEnd Of File 的縮寫,表示「檔案結束」。
從輸入流讀取數據,如果到達檔案末尾(遇到檔案結束符),eof函數值爲非零值(表示真),如果未到檔案結尾則爲0(表示假)。
eof 函數用來判斷是否到達檔案結尾;
fail()用來判斷一個流是否「壞」掉了。如果failbit、badbit中任意一種或兩種被設定,則fail()返回true,否則返回false;
呼叫方式cin.fail();*/
if(file.fail()){
	cout<<"開啓檔案出錯.\n";
	exit(1);


}

file>>nrows>>ncols;

if(nrows > num || ncols > num ){
	cout<<"網格太大,調整程式.\n";
	exit(1);

}
//從數據檔案讀數據到陣列
for(int i=0; i<nrows; i++){
	for(int j=0; j<ncols; j++){
		file>>map[i][j];
	}

}
//判斷並列印峯值位置
for(int i=1; i<nrows-1; i++){
	for(int j=1; j<ncols-1; j++){
		if(isPeak(map,i,j)){
			cout<<"峯點出現在行:"<< i << "列" << j << endl;

			
		}
	}
}

extremes(map, nrows, ncols);

//關閉檔案
file.close();

system("pause");


return	0;

}
//grid 網格
bool isPeak(int grid[num][num],int r, int c){
//八個位置峯點的判斷
if((grid[r][c] > grid[r-1][c])&&(grid[r][c] > grid[r - 1][c-1])&&
(grid[r][c] > grid[r+1][c])&& (grid[r][c] > grid[r - 1][c+1])&&
(grid[r][c] > grid[r][c-1])&& (grid[r][c] > grid[r + 1][c + 1]) &&
(grid[r][c] > grid[r][c+1])&& (grid[r][c] > grid[r + 1][c -1])){
return true;
}else{
return false;
}

}

void extremes(int grid[num][num], int row, int column){
int max = grid[0][0];
int min = grid[0][0];
for (int r = 0; r < row; r++)
{
printf("\n");
for (int c = 0; c < column; c++)
{
printf("%d", grid[r][c]);//列印每一個元素

		if (max <grid[r][c])
		{
			max = grid[r][c]; 				
		}
	
		if (min >grid[r][c])
		{
			min = grid[r][c];
		}
	}	
}
cout << endl <<"海拔的最大值" << max << endl << "海拔的最小值" << min ;

}