Еще один способ итерации матрицы с помощью указателя и извлечения определенных значений

0

То, что я пытался сделать с этим кодом, состояло в том, чтобы перебрать симметричную матрицу и подсчитать, сколько отрицательных чисел выше главной диагонали. Выход представляет собой случайную бесконечную серию чисел. Может кто-нибудь, пожалуйста, скажите мне другой способ итерации матрицы с помощью указателя или где я сделал неправильно в этом?

#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)<<" ";
        }
    }
}
  • 3
    void main - первая неправильная вещь, которую я заметил. должен быть int main для переносимого кода. это тоже короче.
  • 0
    Также, пожалуйста, исправьте отступ . Прямо сейчас это дополнительная работа для всех читателей, чтобы расшифровать код. вместо этого вы должны вложить некоторую работу, чтобы привести в порядок это. примечание: вы можете использовать бесплатную программу AStyle, чтобы исправить отступы.
Показать ещё 3 комментария
Теги:
matrix

2 ответа

0
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 по ссылке или массив как массив и проиндексируйте их в функции, например, в обычных массивах.

  • 0
    Я этого не заметил. Спасибо!
-2

  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; }

  • 0
    Вы сделали точку там. Спасибо!
  • 0
    Вы не должны писать такие комментарии, если кто-то помогал просто проголосовать за него, говорить «спасибо» не нужно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню