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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2013, 20:32   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Динамический массив (Си)

Код:
float **A;
//Ввод размерности матрицы. При неверном вводе - повторны ввод.
	printf("Введите размерность матрицы:\n");
	do
	{
	if(!scanf("%d", &n))
	{
		system("cls");
		printf("Неверный ввод!\n");
		fflush(stdin);
		fl=1;
	}
	else 
	{
		fl=0;
	
		if(n<1 || n>100)
			{
				system("cls");
				printf("Неверно указана размерность матрицы. Повторите ввод\n");
			}
	}
	}while(n<1 || n>100);
//==================================================================
	A=(float**)malloc(n * sizeof(float *));
	if(A==NULL)
	{
		printf("Динамический массив не создан!");
		return 0;
	}
//==================================================================
// Ввод верхнетреугольной матрицы
	printf("Введите элементы верхней треугольной матрицы");
	for(i=0;i<n;i++)
	{
		A[i]=(float *)malloc(n * sizeof(float));
		if(A[i]==NULL)
			{
				printf("Динамический массив не создан!");
				return 0;
			}
		for(j=i;j<n;j++)
		{	
			do
			{
			printf("\nA[%d][%d] = ", i+1, j+1);
			if(!scanf("%f", &A[i][j]))
			{
				system("cls");
				printf("Неверный ввод!\n");
				fflush(stdin);
				fl=1;
			}
			else
			{
				fl=0;
				if(A[i][j]==0)
					{
						printf("В матрице не должно быть нулей!:\n");
						fflush(stdin);
						j-=1;
					}
			}
			}while(fl==1);
	}
	}
//==================================================================
//============================
// Заполнение элементов ниже гл. даигонали нулями.
	for(i=1;i<n;i++)
	{
		A[i]=(float *)malloc(n * sizeof(float));
		if(A[i]==NULL)
			{
				printf("Динамический массив не создан!");
				return 0;
			}
		for(j=0;j<i;j++)
		{
			A[i][j]=0;
		}
	}
//==================================================================
//==================================================================
//Вывод исходной матрицы с точностью 3 на экран
	printf("Ваша текущая матрица имеет вид:\n\n");
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{

			printf("%10.3f ", A[i][j]);
		}
		printf("\n");
	}
Данный код работает не корректно. Заполняет только первую строку. Что не так?
Praud вне форума Ответить с цитированием
Старый 05.12.2013, 00:05   #2
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

ап, никто не знает?
Praud вне форума Ответить с цитированием
Старый 05.12.2013, 00:19   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
sizeof(float *)
Это чего такое? Може sizeof(float) ? А то получается что ты хочешь получить размер указателя а не самого float. ИМХО.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.12.2013, 00:30   #4
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Не, не помогает. Вот скрин

Praud вне форума Ответить с цитированием
Старый 05.12.2013, 14:41   #5
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

и никто не знает...
Praud вне форума Ответить с цитированием
Старый 05.12.2013, 14:56   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,341
По умолчанию

Уберите блок "// Заполнение элементов ниже гл. диагонали нулями." и перенесите цикл заполнения нулями в блок "// Ввод верхнетреугольной матрицы" или воспользуйтесь calloc, который сам инициализирует выделенную область нулями.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 05.12.2013, 15:08   #7
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

куда этот цикл вставить? Во вложенный цикл ввода? Не понимаю
Praud вне форума Ответить с цитированием
Старый 05.12.2013, 15:26   #8
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Разобрался с calloc. Но все равно интересно, как сделать это с помощью malloc
Praud вне форума Ответить с цитированием
Старый 05.12.2013, 16:01   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,341
По умолчанию

Код:
// Ввод верхнетреугольной матрицы
	printf("Введите элементы верхней треугольной матрицы");
	for(i=0;i<n;i++)
	{
		A[i]=(float *)malloc(n * sizeof(float));
		if(A[i]==NULL)
			{
				printf("Динамический массив не создан!");
				return 0;
			}
		for(j=0;j<i;j++)
		{
			A[i][j]=0;
		}
		for(j=i;j<n;j++)
		{	
			do
			{
			printf("\nA[%d][%d] = ", i+1, j+1);
			if(!scanf("%f", &A[i][j]))
			{
				system("cls");
				printf("Неверный ввод!\n");
				fflush(stdin);
				fl=1;
			}
			else
			{
				fl=0;
				if(A[i][j]==0)
					{
						printf("В матрице не должно быть нулей!:\n");
						fflush(stdin);
						j-=1;
					}
			}
			}while(fl==1);
	}
	}
//====================================
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамический массив. геннадий522 Общие вопросы C/C++ 3 12.03.2012 17:10
Динамический массив, массив указателей alexalisa Паскаль, Turbo Pascal, PascalABC.NET 4 22.04.2011 21:33
Динамический массив - или всё таки не динамический? vedro-compota Общие вопросы C/C++ 30 10.12.2010 23:22
динамический массив!!!! zarinka0992 Помощь студентам 1 11.02.2010 09:06
Динамический массив Lemo Помощь студентам 5 16.09.2009 06:26