Как исправить ошибку - индификатор p неопределен - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Что нужно вписать чтобы он был определен
// вап.cpp: определяет точку входа для консольного приложения.
//
 
#include <stdio.h>
#include "stdafx.h"
#include <iostream>
 
double ** Input(int rows, int cols) {
    double **p;
    p = (double**)malloc(rows * sizeof(double*));
    for (int i = 0; i<rows; i++) {
        p[i] = (double*)malloc(cols * sizeof(double));
        for (int j = 0; j < cols; j++)
        {
            printf("A[%d][%d]= ", i, j);
            scanf("%lf", &p[i][j]);
        }
    }
    return p;
}
double ** max(int m) 
{
    double max;
    double **p;
    max = p[0][m - 1]; //указывает что здесь ошибка 
    for (int i = 0; ((m - 1) / 2) < i < m; i++)
    {
        for (int j = i; j < m; j++)
        {
            if (p[i][j] > max) { max = p[i][j]; }
        }
    }
    for (int j = 0; ((m - 1) / 2) < j < m; j++)
    {
        for (int i = m - 1 - j; i >= 0; i--)
        {
            if (p[i][j] > max) { max = p[i][j]; }
        }
    }
    printf("%8.4lf ", max);
    return p;
}
 
int main() {
    int m;
    double **f;
    double **mas;
    system("chcp 1251");
    system("cls");
    printf("Введите размерность квадратной матрицы: ");
    scanf("%d", &m);
    printf("Ввод матрицы А\n");
    mas = Input(m, m);
    printf("максимальное значение \n");
    f = max(m);
    getchar(); getchar();
}

Решение задачи: «Как исправить ошибку - индификатор p неопределен»

textual
Листинг программы
double max(double **p, int m)
{
    double max = 0.0;
 
    max = p[0][m - 1]; //указывает что здесь ошибка
    for (int i = 0; ((m - 1) / 2) < i && i < m; i++)
    {
        for (int j = i; j < m; j++)
        {
            if (p[i][j] > max) { max = p[i][j]; }
        }
    }
    for (int j = 0; ((m - 1) / 2) < j && j < m; j++)
    {
        for (int i = m - 1 - j; i >= 0; i--)
        {
            if (p[i][j] > max) { max = p[i][j]; }
        }
    }
    return max;
}
 
int main() {
    int m;
    //double **f;
    double **mas;
    system("chcp 1251");
    system("cls");
    printf("Введите размерность квадратной матрицы: ");
    scanf("%d", &m);
    printf("Ввод матрицы А\n");
    mas = Input(m, m);
    printf("максимальное значение \n");
    //f = max(m);
    printf("%8.4lf ", max(mas, m));
    getchar(); getchar();
}

Объяснение кода листинга программы

  1. p - указатель на массив указателей на double.
  2. m - целочисленная переменная, размерность матрицы.
  3. max - переменная типа double, инициализирована значением 0.0.
  4. p[0][m-1] - обращение к элементу матрицы по индексам, где m-1 - последний индекс строки.
  5. for (int i = 0; ((m-1) / 2) < i && i < m; i++) - цикл по индексам первой строки.
  6. for (int j = i; j < m; j++) - цикл по индексам столбцов.
  7. if (p[i][j] > max) { max = p[i][j]; } - сравнение текущего элемента с максимальным значением и обновление max при необходимости.
  8. for (int j = 0; ((m-1) / 2) < j && j < m; j++) - цикл по индексам последней строки.
  9. for (int i = m-1-j; i >= 0; i--) - цикл по индексам первой строки, начиная с последнего элемента.
  10. if (p[i][j] > max) { max = p[i][j]; } - сравнение текущего элемента с максимальным значением и обновление max при необходимости.
  11. printf(%8.4lf, max(mas, m)); - вывод максимального значения.
  12. getchar(); getchar(); - пропуск двух символов новой строки после вывода.
  13. mas = Input(m, m) - вызов функции для ввода матрицы.
  14. printf(максимальное значение \n); - вывод заголовка.
  15. main() - точка входа в программу.
  16. scanf(%d, &m) - ввод размерности матрицы.
  17. printf(Ввод матрицы А\n); - вывод приглашения для ввода матрицы.
  18. system(chcp 1251); - установка кодировки консоли.
  19. system(cls); - очистка консоли.
  20. getchar(); getchar(); - пропуск двух символов новой строки после вывода.

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы