3. Текст программы
Текст программы из файла исходного кода приведён ниже.
#include "stdafx.h"
#include "locale.h"
#include "conio.h"
#include "stdlib.h"
#include "time.h"
#include "Egork.h"
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian");
int **A, N, M, m;
bool flag=0;
do{
system("cls");
printf("\nМЕНЮ"
"\n1 - Ввод данных в прграмму"
"\n2 - Решение"
"\n3 - О программе"
"\n4 - Выход из программы"
"\n Введите номер пункта меню: ");
scanf("%i", &m);
switch(m)
{
case 1:
M=input('M',&M);
N=input('N',&N);
A=memory(M,M);
input_elements(A,M,N);
output(A,M,N);
_getch();
flag=1;
break;
case 2:if(flag==0)
{
printf ("Введите исходные данные в пункте 1\n");
}
else
{
output(A,M,N);
task_1(A, M, N);
task_2(A,M,N);
_getch();
break;
}
case 3:
text();
_getch();
break;
case 4: break;
default: printf ("\nТакого пункта в меню нет"); _getch(); break;
}
}while(m!=4);
return 0;
}
с заголовочным файлом "Egork.h"
void text(void)
{
printf("\nАвтор программы:Лобастов Егор. Группа ИНБ-11.\n\n");
printf("*******************************************************************\n");
printf("*******************************************************************\n");
printf("** **\n");
printf("** ПРОГРАММА \"ДВУМЕРНЫЙ МАССИВ\" **\n");
printf("** **\n");
printf("*******************************************************************\n");
printf("*******************************************************************\n");
printf("Вариант №12\n\n"
"Дана целочисленная прямоугольная матрица.\n"
"1.) Уплотнить заданную матрицу, удаляя из нее строки и столбцы, заполненные нулями;\n"
"2.) Найти номер первой из строк, содержащих положительный элемент.\n\n");
}
int input(char c, int *a)
{
do{
printf("Введите количество %c (1<%c<=100): ", c, c);
scanf("%d", a);
}while((*a>100)||(*a<2));
return *a;
}
int **memory(int M, int N)
{
int **A, i;
A=(int **)calloc(M, sizeof(int *));
for(i=0; i<M; i++)
A[i]=(int *)calloc(N, sizeof(int));
return A;
}
int rnd( int range_min, int range_max )
{
return (double)rand() / (RAND_MAX + 1) * (range_max - range_min) + range_min;
}
void input_elements(int **A, int M, int N)
{
int t, i, j;
do{
printf("Заполнение массива: \n"
" 1 - ввод с клавиатуры\n"
" 2 - заполнение случайными числами\n"
" Ваш выбор : ");
scanf("%d", &t);
switch(m){
case 1:
for(i=0; i<M; i++)
for(j=0; j<N; j++)
{
printf("Введите A[%d][%d]",i,j);
scanf("%d", &A[i][j]);
}
break;
case 2:
for(i=0; i<M; i++)
for(j=0; j<N; j++)
{
A[i][j]=rnd(-10, 10 );
}
break;
default: printf("\nТакого действия нет"); break;
}
}while((t!=1)&&(t!=2));
}
void output(int **A, int M, int N)
{
int i, j;
for(i=0; i<M; i++)
{
for(j=0; j<N; j++) printf("%5d ",A[i][j]);
printf("\n");
}
}
void task_1(int **A, int M, int N)
{
int i,j,flag,k;
for(i=0; i<M; i++)
{
flag=1;
for(j=0; j<N; j++)
if (A[i][j] != 0){
flag=0; break;
}
if(flag){
for( k = i; k < (M-1); k++)
for( j = 0; j < N; j++)
A[k][j] = A[k+1][j];
--i;
--M;}
}
for( j = 0; j < N; j++)
{
flag= 1;
for(i = 0; i < M; i++)
if(A[i][j] != 0){
flag = 0;break;
}
if(flag){
for( k = j; k < (N-1); k++)
for( i = 0; i < M; i++)
A[i][k] = A[i][k+1];
--j;
--N;}
}
printf("\nПреобразованная матрица:\n");
for(i=0; i<M; i++)
{
for(j=0; j<N; j++) printf("%5d ",A[i][j]);
printf("\n");
}
}
void task_2(int **A, int M, int N)
{
int i,j,tmp;
for (j=0; j<N; j++)
for (i=0; i<M; i++)
{
if (A[i][j]>=0)
{
tmp=i+1;
break;
}
}
printf( "Первый положительный элемент находится ");
printf("%d",tmp);
printf( " строке");
}