Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2018, 01:43   #1
gatherclouds
Пользователь
 
Регистрация: 01.10.2018
Сообщений: 12
Печаль Динамические матрицы - программа прекращает работу (С)

Суть задачи - из заданной матрицы А вещественных чисел размера NxN (N <= 20) нужно построить новую матрицу В того же размера, элемент b [i][j] которой будет равен максимуму всех тех элементов матрицы А, которые расположены в некоторой ее области (область показана на прикрепленном файле).
Код программы:
Код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
	int *b, *a, **A, **B, i, j, n, max;
	setlocale(LC_ALL, "Rus");

	printf("Введите размер матрицы (от 1 до 20): \n");
	if ((scanf("%d", &n)) > 20 || n < 1)
	{
		printf("Ошибка: Введено не число или размер выходит за пределы допустимых значений");
		return 0;
	}
	a = (int*)malloc(n*n * sizeof(int));
	A = (int **)malloc(n * sizeof(int*));
	for (i = 0; i < n; i++)
		A[i] = a + i * n;
	max = A[0][0];
	b = (int*)malloc(n*n * sizeof(int));
	B = (int **)malloc(n*n * sizeof(int*));
	for (i = 0; i < n; i++)
		B[i] = a + i * n;

	for (i = 0; i < n; i++) 
	{
		for (j = 0; j < n; j++)
		{
			printf("Введите элементы матрицы: \n");
			scanf("%d", &A[i][j]);
		}
	}

	for (i = 0; i < 7; i++)
	{
		for (j = 0; j < 4; j++)
		{
			if (A[i][j] > max)
				A[i][j] = max;
			B[i][j] = A[i][j];
		}
	}
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			printf("%d", &A[i][j]);
			printf("%d", &B[i][j]);
		}
		printf("\n");
	}
	return 0;
}
Программа прекращает работу на строке if (A[i][j] > max), в чем может быть проблема? я честно не имею понятия
Изображения
Тип файла: jpg 33URBKOyFcM.jpg (80.9 Кб, 138 просмотров)
gatherclouds вне форума Ответить с цитированием
Старый 24.10.2018, 08:51   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

В том, что вместо выделения памяти написан бред.

Код:
        a = (int*)malloc(n*n * sizeof(int));
	A = (int **)malloc(n * sizeof(int*));
	for (i = 0; i < n; i++)
		A[i] = a + i * n;
На что должен указывать A[i]? На указатель. Фактически указывает на один int (который вы вводите), а еще бегать по нему пытаетесь.
p51x вне форума Ответить с цитированием
Старый 24.10.2018, 09:14   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию

Задание не понял - какой должна быть матрица B, и как определяются i, j. В нижеприведенном коде i соответствует it, j соответствует jt, и они вводятся.

Ваши ошибки:
1. вы инициализируется max из матрицы до того, как заполняете матрицу, т.е. значение неопределено
2. 7, 4 у вас жестко определены в соответствии с рисунком, действительно ли i, j константны, а не определяются вручную?
3. 7,4 выходят за границы матрицы, если N < 6
4. Вместо A[i][j] = max;, наверное, наоборот max = A[i][j]
5. Не все элементы матрицы B определены. Перед заполнением неопределены все элементы
6. Матрицы выводятся по раздельности

Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
	int *b, *a, **A, **B, i, j, it, jt, n, max, br;
	setlocale(LC_ALL, "Rus");
    scanf("%d", &it);
    scanf("%d", &jt);
	printf("Введите размер матрицы (от 1 до 20): \n");
	if ((scanf("%d", &n)) > 20 || n < 1)
	{
		printf("Ошибка: Введено не число или размер выходит за пределы допустимых значений");
		return 0;
	}
	a = (int*)malloc(n*n * sizeof(int));
	A = (int **)malloc(n * sizeof(int*));
	for (i = 0; i < n; i++)
		A[i] = a + i * n;

	b = (int*)malloc(n*n * sizeof(int));
	B = (int **)malloc(n*n * sizeof(int*));
	for (i = 0; i < n; i++)
		B[i] = b + i * n;

	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
		    B[i][j] = 0;
			printf("Введите элементы матрицы: \n");
			scanf("%d", &A[i][j]);
		}
	}

	max = A[0][0];
	printf("max %d\n", max);
	printf("A[0][0] %d\n", A[0][0]);

	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			printf("%d ", A[i][j]);
		}
		printf("\n");
	}
	printf("\n");


    //scanf("%d", &br);


	for (i = 0; i < it; i++)
	{
		for (j = 0; j < jt; j++)
		{
		    //printf("%d %d %d %d\n", i, j, A[i][j], max);
 			if (A[i][j] > max)
                max = A[i][j];
		}
	}


	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
		    B[i][j] = max;
		}
	}

    for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			printf("%d ", B[i][j]);
		}
		printf("\n");
	}
	printf("\n");

    //printf("\nmax: %d", max);
    scanf("%d", &br);
	//fgetc(stdin);
	return 0;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 24.10.2018, 09:15   #4
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
В том, что вместо выделения памяти написан бред.
Неправда. Он выделяет память под одномерный массив правильно.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа без причин прекращает работу Astradam Windows 0 13.02.2017 14:23
Пк часто прекращает работу при запуске Microsoft Access(Версия Access 2010) coffinsoul Microsoft Office Access 5 21.02.2016 00:12
Awesomium WebView Dispose() Медиа не прекращает работать JunkieBeat C# (си шарп) 0 24.05.2014 00:01
Класс и динамические двумерные матрицы Rekky Общие вопросы C/C++ 10 23.08.2011 13:55
динамические матрицы и списки(паскаль) андреич Помощь студентам 1 08.05.2010 21:48