То, что я пытался сделать с этим кодом, состояло в том, чтобы перебрать симметричную матрицу и подсчитать, сколько отрицательных чисел выше главной диагонали. Выход представляет собой случайную бесконечную серию чисел. Может кто-нибудь, пожалуйста, скажите мне другой способ итерации матрицы с помощью указателя или где я сделал неправильно в этом?
#include <iostream>
#include <conio.h>
using namespace std;
void read_array(int *p,int n);
int neg(int *p,int n);
void display(int *p,int n);
void main(){
int a[20][20],n,*p=&a[0][0];
cout<<"How many rown and columns would you like to have?"<<endl;
cin>>n;
cout<<"Insert the numbers in the array"<<endl;
read_array(p,n);
display(p,n);
cout<<"The number of negative numbers above the main diagonal"<<endl;
neg(p,n);
}
void read_array(int *p,int n){
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>*(p+i*n+j);
}
}
}
int neg(int *p,int n){
int count=0;
for (int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(*(p+i*n+j)<0){
count++;
}
}
}
return count;
}
void display(int *p,int n){
for(int i=0;i<n;i++){
for(int j=0;i<n;j++){
cout<< *(p+i*n+j)<<" ";
}
}
}
void display(int *p,int n){
for(int i=0;i<n;i++){
for(int j=0;i<n;j++){
cout<< *(p+i*n+j)<<" ";
}
}
}
Существует опечатка, она должна быть j<n
in for(int j=0;i<n;j++){
.
Также ваш код точно не делает то, что вы объяснили в вопросе. Матрица не симметрична, и вы считаете всю не только верхнюю половину.
Ваш код будет недействительным для входов n > 20
. Вместо этого вы должны использовать std::vector<int>
, который вы можете динамически настроить для ввода. Указатели тоже не нужны. Просто передайте vector
по ссылке или массив как массив и проиндексируйте их в функции, например, в обычных массивах.
int neg(int * p, int n) { int count = 0; for(int я = 0; я < n; i++) for(int j = я + 1; j < n; j++) if(*(p + я * n + j) < 0) count++; return count; }
void main
- первая неправильная вещь, которую я заметил. должен бытьint main
для переносимого кода. это тоже короче.