Ошибка при запуске программы. Массив
Пишет, что pfunc не инициализирована в строке output(arrayX(a, x, pfunc), a);
Код программы:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#define n 5
using namespace std;
void input_kl(int a[n][n])
{
printf("Введите элементы матрицы A:\n");
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
scanf("%d", &a[i][j]);
}
void input_f(int a[n][n])
{
int i, j, k;
FILE* fp;
fp = fopen("C:\\Users\\Admin\\Desktop\\inp.txt", "r");
k = 0;
for (i = 0; i < n && !feof(fp); i++)
{
for (j = 0; j < n && !feof(fp); j++)
{
fscanf(fp, "%d", &a[i][j]);
k++;
}
}
fclose(fp);
if (k < n * n)
{
printf("Матрица неполная, введите элементы \n");
for (i = k; i < n; i++)
for (j = j; j < n; j++)
scanf("%d", &a[i][j]);
}
}
//
// пример обработки матрицы
//
int* arrayX(int(*a)[n], int* x, void (*pfunc)(int[n][n]))
{
pfunc(a);
for (int i = 0; i < n; ++i)
{
x[i] = 0;
for (int j = 0; j < n; ++j)
{
if (a[i][j] < 0) // Исправление только здесь
{ // Исправление только здесь
x[i] = a[i][j]; // Исправление только здесь
break; // Исправление только здесь
} // Исправление только здесь
}
}
return x;
}
void recY(int* array, int arraySize, int& y, int position = 0)
{
if (position == arraySize) {
y = -1;
return;
}
if (*(array + position) < 0) {
y = *(array + position);
return;
}
recY(array, arraySize, y, ++position);
}
void output(int x[], int a[][n])
{
FILE* fp;
fp = fopen("C:\\Users\\Admin\\Desktop\\inp.txt", "w");
fprintf(fp, "Матрица A:\n");
printf("Mатрица A:\n");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d ", a[i][j]);
fprintf(fp, "%d ", a[i][j]);
}
printf("\n");
fprintf(fp, "\n");
}
fprintf(fp, "Massiv X:\n");
printf("Massiv X:\n");
for (int i = 0; i < n; i++)
{
fprintf(fp, "%d ", x[i]);
printf("%d ", x[i]);
}
fclose(fp);
}
int main()
{
setlocale( LC_ALL, "Rus" );
int a[n][n], x[n], c;
void (*pfunc)(int[n][n]);
do
{
printf("Vvod matrici A:\n1-s klaviaturi\n2-iz faila\n");
scanf("%d",&c);
}
while (c != 1 && c != 2);
// Присваивание указателю адреса одной их функций:
switch (c)
{
case 1: input_kl(a);
break;
case 2: input_f(a);
break;
}
output(arrayX(a, x, pfunc), a);
int y;
recY(x, 5, y);
std::cout << "Y : " << y << '\n';
return 0;
}
Ответы (1 шт):
Автор решения: nano
→ Ссылка
Судя по комментарию // Присваивание указателю адреса одной их функций:
Код должен выглядеть так:
switch (c)
{
case 1:
pfunc = input_kl;
break;
case 2:
pfunc = input_f;
break;
}