Есть программа. Нужно сделать так, чтобы размерность матрицы можно было считать из файла и чтобы готовую или исходную матрицу можно было записать в файл! Вот код программы:
Код:
#include "stdafx.h"
#include "stdio.h"
#include "locale.h"
#include "conio.h"
#include "stdlib.h"
#include "time.h"
void writemenu()
{
system("cls");
printf("МЕНЮ:\n");
printf("1) - Ввод данных\n");
printf("2) - Решение\n");
printf("3) - Вывод результата\n");
printf("4) - О программе\n");
printf("5) - Помощь\n");
printf("6) - Выход\n");
}
void resoutput(int *solved, char **B, int *N)
{
int i,j;
if (*solved){
for (i=0; i<*N; i++)
{
for(j=0;j<*N;j++)
{printf("%d ", B[i+1][j+1]);}
printf("\n");
}
printf("Нажмите любую клавишу.\n"); _getch();}
else
{printf("Сначала выполните пункт 2\n"); _getch();}
}
void output(int *N, double **A)
{
int i,j;
for (i=0; i<*N; i++)
{
for(j=0;j<*N;j++)
{printf("%.2lf ", A[i+1][j+1]);}
printf("\n");
}
}
void input(int *N, double **A, int *inputed)
{
int i,j,k;
char c;
double d;
system("cls");
do{
printf("Введите размер матрицы (1..10):\n");
scanf_s("%d", N); fflush(stdin);
}while((*N>10) || (*N<1));
do{
printf("N=%d\nСлучайная матрица (1) или ручной ввод (2)?\n", *N);
scanf_s("%d", &k); fflush(stdin);
}while((k!=1) && (k!=2));
if (k==1)
{
for(i=0;i<*N;i++)
for(j=0;j<*N;j++) {A[i+1][j+1] = static_cast<double>( rand() ) * 100 / (RAND_MAX + 1);}
}
if (k==2)
{
printf("Вводите %d чисел по одному:\n", (*N)*(*N));
for(i=0;i<*N;i++)
for(j=0;j<*N;j++)
{
printf("A[%d][%d]=", i,j);
d=0.089;
scanf_s("%lf", &d); fflush(stdin);
if (d==0.089) {printf("Введите число\n"); fflush(stdin); j--; continue;}
if ((d>32999) || (d<-32999)) {printf("Числа должны быть из диапазона -32999..32999\n"); j--; continue;}
A[i+1][j+1] = d;
}
}
printf("Вот она:\n", *N);
for (i=0; i<(*N); i++)
{
for(j=0;j<(*N);j++)
{printf("%.2lf ", A[i+1][j+1]);}
printf("\n");
}
*inputed = true;
printf("Нажмите любую клавишу");
_getch();
}
void solve(int *N, double **A, char **B, int *inputed, int *solved)
{
int i,j;
char c;
do{
output(N, A);
printf("Принять эти данные? (y/n)\n");
c=' ';
do {c=_getch();} while ((c!='y')&&(c!='n'));
if (c=='y') {*inputed = true;}
}while(!(*inputed));
for (i=1;i<=*N;i++)
for(j=1; j<=*N; j++)
{
B[i][j] = (A[i-1][j-1]==0)&&(A[i-1][j]==0)&&(A[i-1][j+1]==0)&& //проверка на то, нулевой ли A[i][j] и его соседи
(A[i][j-1]==0)&&(A[i][j]==0)&&(A[i][j+1]==0)&&
(A[i+1][j-1]==0)&&(A[i+1][j]==0)&&(A[i+1][j+1]==0);
}
*solved=true;
}
void about()
{
printf("\nАвтор программы: Климкин Алексей. Группа ИНБс-11.\n\n");
printf("*******************************************************************\n");
printf("*******************************************************************\n");
printf("** **\n");
printf("** ПРОГРАММА \"ДВУМЕРНЫЙ МАССИВ\" **\n");
printf("** **\n");
printf("*******************************************************************\n");
printf("*******************************************************************\n");
_getch();
}
void help()
{
printf("Вариант №411 б \n\n"
"Будем называть соседями элемента с индексами ij некоторой матрицы такие\n элементы этой матрицы, соответсвующие индексы которых отличаются \n от i и j не более чем на 1. Для данной целочисленной матрицы [Aij] \n размером mxn найти матрицу из 0 и 1 [Bij], элемент которой b[ij] \n равен 1, когда все соседи a[ij] и само a[ij] равны нулю.");
_getch();
}
int main()
{
int i,j;
double **A=new double*[12];
char **B=new char*[12];
int *N=new int;
for(i=0;i<12;i++) {A[i] = new double[12]; B[i] = new char[12];}
for (i=0; i<12; i++)
{
for(j=0;j<12;j++) {A[i][j]=0; B[i][j]=0;}
}
int *inputed = new int; //истинна, когда значения элементов матрицы определены
int *solved = new int; //истинна, когда решение получено
*inputed=false;
*solved=false;
setlocale(LC_ALL, "Russian");
do{
writemenu();
scanf_s("%d", &i);
switch(i)
{
case 1: {input(N,A,inputed); i=0; break;}
case 2: {
if (*inputed) {solve(N,A,B,inputed,solved); i=0; break;}
else {printf("Сначала введите значения\n"); _getch(); break;}
}
case 3: {resoutput(solved, B, N); break;}
case 4: {about(); i=0; break;}
case 5: {help(); break;}
case 6: {delete N; delete []A; delete []B; return 0;}
}
}while (true);
}