Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет.DOC
Скачиваний:
15
Добавлен:
02.06.2015
Размер:
1.48 Mб
Скачать

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();

}