3 Текст программы
// Задание 1. Вариант 10. "Указатели и пользовательские функции"
// Выполнила Окишева Надя, группа ИНБ-11
#include "stdafx.h"
#include "stdlib.h" // для rand
#include"stdio.h"//для ввода, вывода
#include"locale.h"//использование русского языка в консольном окне
#include"time.h"//для генерации при каждом запуске программы новой последовательности элементов в матрице
#include"conio.h"//для вывода консольного окна
#include"math.h"//для включения в программу математических функций
#include "my.h"
void text(void);
void menu(void);
int razmer_matrici(char *stroka, char c);
int rnd(int rang_min, int rang_max);
void input_elem(int **a,int n,int m);
int **memory(int n, int m);
void output(int **a,int n,int m);
void z_1(int **a,int n, int m);
void z_2(int **a, int n, int m);
void end(void);
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Russian");
int **a, n, m, t;
bool flag=0;
srand(time(NULL));
do
{
system("cls");
menu();
scanf("%i",&t);
switch(t)
{
case 1:
system("cls");
n=razmer_matrici("строк",'n');
m=razmer_matrici("столбцов",'m');
a=memory(n,m);
input_elem(a,n,m);
output(a,n,m);
end();
flag=1;
break;
case 2:
system("cls");
if(flag==1)
{
output(a,n,m);
z_1(a,n,m);
z_2(a,n,m);
end();
break;
}
else
printf("\nНет данных для решения! Введите данные в пункте 1.");
end();
break;
case 3:
system("cls");
text();
end();
break;
case 4:
break;
default: system("cls");
printf("\nТакого пункта в меню нет! Попробуйте ещё раз ");
end();
}
}
while(t!=4);
return0;
}
voidtext(void)
{
printf("\n\n\t\t\tВыполнила Окишева Надя, группа ИНБ-11\n");
printf("\n\t\t\t\tЗадание:\n\n\t1. Элемент матрицы называется локальным минимумом, если он строго\n\t меньше всех имеющихся у него соседей."
"Подсчитать количество локальных\n\t минимумов заданной матрицы размером 10 на 10.\n"
"\n\t2. Найти сумму модулей элементов, расположенных выше главной диагонали.\n");
}
void menu(void)
{
printf("\nМеню"
"\n1-Ввод данных"
"\n2-Решение"
"\n3-О программе"
"\n4-Выход"
"\nВведите номер пункта меню:\n");
}
int razmer_matrici(char *stroka, char c)
{
int A;
do
{
printf("\nВведите количество %s %c (2<%c<100): ",stroka,c,c);
scanf("%d",&A);
}
while((A<=2)||(A>=100));
returnA;
}
intrnd(intrang_min,intrang_max)// функция для генерации чисел без ввода их с клавиатуры
{
return (double)rand()/(RAND_MAX+1)*(rang_max-rang_min)+rang_min;
}
void input_elem(int **a,int n,int m)
{
inti, j, v;
do
{
printf("\n\tКак вы желаете заполнить матрицу:\n"
"\t\t1-автоматически\n"
"\t\t2-с клавиатуры\n"
"\tНажмите цифру, соответствующую вашему выбору.\n\t");
scanf("%d",&v);
switch(v)
{
case1:
for(i=0; i<n; i++)// цикл для генерации элементов массива-матрицы
for(j=0; j<m; j++)
a[i][j]=rnd(-5, 5);
break;
case 2:
for(i=0; i<n; i++)
for(j=0; j<m; j++)
{
printf("\nВведите a[%d][%d]",i,j);
scanf("%d", &a[i][j]);
};
break;
default: printf("\n\nЦифра должна быть 1 или 2\n\n");
break;
}
}
while((v!=1)&&(v!=2));
}
int **memory(int n, int m)
{
int **a, i;
a=(int**)calloc(n,sizeof(int*));
for(i=0; i<n; i++)
a[i]=(int*)calloc(m,sizeof(int));
return a;
}
void output(int **a,int n,int m)
{
int i, j;
printf("\nМатрица\n");
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
printf("%5d", a[i][j]);// вывод элементов в виде матрицы
printf("\n");
};
printf("\n\n");
}
void z_1(int **a,int n, int m)
{
intk=0, i, j;
for(i=0; i<n; i++)// цикл нахождения количества локальных минимумов
for(j=0; j<m; j++)
if((a[i][j]<a[i][abs(j-1)])&&(a[i][j]<a[i][((j+1)==n?(j- 1):(j+1))])&&(a[i][j]<a[((i+1)==n?(i-1):(i+1))][j])&&(a[i][j]<a[abs(i-1)][j])&&
(a[i][j]<a[(i+1)==n?(i-1):(i+1)][(j+1)==n?(j-1):(j+1)])&&(a[i][j]<a[(i- 1)<0?(i+1):(i-1)][(j-1)<0?(j+1):(j-1)])&&
(a[i][j]<a[(i-1)<0?(i+1):(i-1)][(j+1)==n?(j- 1):(j+1)])&&(a[i][j]<a[(i+1)==n?(i-1):(i+1)][(j-1)<0?(j+1):(j-1)]))
{
k++;
printf("a[%d][%d]=%d\t",i, j, a[i][j]);
};
printf("\n\n1. Количество локальных минимумов\tk=%d\n",k);
}
void z_2(int **a, int n, int m)
{
intp=0, i, j, h;
for(i=0, h=1; i<n, h<n; i++, h++)// цикл для нахождения суммы модулей элементов, расположенных выше главной диагонали
for(j=h ; j<m; j++)
{
p+=abs(a[i][j]);
};
printf("\n\n2. Сумма модулей элементов выше главной диагонали\tsumma =%d\n",p);
}
voidend(void)
{
printf("\nДля перехода в меню нажмите любую клавишу.");
_getch();
}