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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2011, 11:53   #1
narcot
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 11
По умолчанию Динамический массив С

задаю кол-во строк(M). создаётся массив размерностью на 1 меньше(M-1). потом добавляется нулевая строка(размерность уже M). но почему после
main_diagonal(m);
side_diagonal(m);
массив печатается размерностью M-1. Почему?

Цитата:
Создать массив. После строки с наибольшим элементом добавить нулевую строку. Потом отразить относительно главной и побочной диагонали.

Код:
// 3.2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "conio.h"
#include "stdlib.h"

int **a;

void array(int m);
void value (int m);
int search(int m);
void paste(int m);
void print_first(int m);
void main_diagonal(int m);
void print_new(int m);
void side_diagonal(int m);

int main(int argc, char* argv[])
{
	int m, n, k;
	printf("Enter number of collums : ");		
		scanf("%d", &m);
	array(m);
	value(m);
		printf("\nYour array : \n");
			print_first(m);
	paste(m);
		printf("\nYour array with zeroes : \n"); 
			print_new(m);
	main_diagonal(m);
		printf("\nYour array reflected in the main diagonal: \n");
			print_first(m);
	side_diagonal(m);
		printf("\nYour array reflected in the side diagonal: \n");
			print_first(m);
	free(a);
	getch();
	return 0;
}

void array(int m)
{
	a = (int **) malloc (m*sizeof(int*));
	for (int i = 0; i < m; i++)
	{
		a[i] = (int *) malloc (m*sizeof(int));
	}
}

void value (int m)
{
	for (int i = 0; i < m - 1; i++)
	{
		for (int j = 0; j < m; j++)
		{
			a[i][j] = rand() % 40 + 10;
		}
	}
}

int search(int m)
{
	int max = a[0][0], row = 0;
	for (int i = 0; i < m - 1; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (max < a[i][j])
			{
				max = a[i][j];
				row = i;
			}
		}
	}
	return row;
}

void paste(int m)                           //вставка нулевой строки
{
	int row = search(m);
	if (m - 2 != row)
	{
		for (int i = m - 1; i > row + 1; i--)
		{
			for (int j = 0; j < m; j++)
			{
				a[i][j] = a[i - 1][j];
			}
		} 
		for (int j = 0; j < m; j++)
		{
			a[search(m) + 1][j] = 0;
		}
	}
	else
	{
		for (int j = 0; j < m; j++)
		{
			a[search(m) + 1][j] = 0;
		}
	}
}
												//отражение относительно главной
void main_diagonal(int m)             
{
	int element, row = m, coll = 1;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < coll; j++)
		{
			element = a[i][j];
			a[i][j] = a[j][i];
			a[j][i] = element;
		}
		coll++;
	}
}
										//относительно побочной
void side_diagonal(int m)
{
	int element, row = m, coll = 1;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < coll; j++)
		{
			element = a[j][i];
			a[j][i] = a[m -1 - j][m -1 - i];
			a[m -1 - j][m -1 - i] = element;
		}
		coll++;
	}
}

void print_first(int m)
{
	for (int i = 0; i < m - 1; i++)
	{
		for (int j = 0; j < m; j++)
		{
			printf("%d	", a[i][j]);
		}
		printf("\n");
	}
}

void print_new(int m)
{
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < m; j++)
		{
			printf("%d	", a[i][j]);
		}
		printf("\n");
	}
}



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 04.04.2011 в 14:19.
narcot вне форума Ответить с цитированием
Старый 04.04.2011, 17:36   #2
narcot
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 11
По умолчанию

удаляйте тему. я нашёл баг.

Код:
// 3.2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "conio.h"
#include "stdlib.h"

int **a;

void array(int m);
void value (int m);
int search(int m);
void paste(int m);
void print(int m);
void main_diagonal(int m);
void side_diagonal(int m);

int main(int argc, char* argv[])
{
	int m, n, k;
	printf("Enter number of collums : ");		
		scanf("%d", &m);
	array(m);
	value(m);
		printf("\nYour array : \n");
			print(m - 1);
	paste(m);
		printf("\nYour array with zeroes : \n"); 
			print(m);
	main_diagonal(m);
		printf("\nYour array reflected in the main diagonal: \n");
			print(m);
	side_diagonal(m);
		printf("\nYour array reflected in the side diagonal: \n");
			print(m);
	free(a);
	getch();
	return 0;
}

void array(int m)
{
	a = (int **) malloc (m*sizeof(int*));
	for (int i = 0; i < m; i++)
	{
		a[i] = (int *) malloc (m*sizeof(int));
	}
}

void value (int m)
{
	for (int i = 0; i < m - 1; i++)
	{
		for (int j = 0; j < m; j++)
		{
			a[i][j] = rand() % 40 + 10;
		}
	}
}

int search(int m)
{
	int max = a[0][0], row = 0;
	for (int i = 0; i < m - 1; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (max < a[i][j])
			{
				max = a[i][j];
				row = i;
			}
		}
	}
	return row;
}

void paste(int m)                           //вставка нулевой строки
{
	int row = search(m);
	if (m - 2 != row)
	{
		for (int i = m - 1; i > row + 1; i--)
		{
			for (int j = 0; j < m; j++)
			{
				a[i][j] = a[i - 1][j];
			}
		} 
		for (int j = 0; j < m; j++)
		{
			a[search(m) + 1][j] = 0;
		}
	}
	else
	{
		for (int j = 0; j < m; j++)
		{
			a[search(m) + 1][j] = 0;
		}
	}
}
										//отражение относительно главной
void main_diagonal(int m)             
{
	int element, row = m, coll = 1;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < coll; j++)
		{
			element = a[i][j];
			a[i][j] = a[j][i];
			a[j][i] = element;
		}
		coll++;
	}
}
										//относительно побочной
void side_diagonal(int m)
{
	int element, row = m, coll = 1;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < coll; j++)
		{
			element = a[j][i];
			a[j][i] = a[m -1 - j][m -1 - i];
			a[m -1 - j][m -1 - i] = element;
		}
		coll++;
	}
}

void print(int m)
{
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < m; j++)
		{
			printf("%d	", a[i][j]);
		}
		printf("\n");
	}
}
narcot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++. динамический массив kira_truelove Помощь студентам 1 19.12.2010 11:59
Динамический массив - или всё таки не динамический? vedro-compota Общие вопросы C/C++ 30 10.12.2010 23:22
Динамический массив Porsche Общие вопросы C/C++ 5 26.05.2010 08:04
Динамический массив Ueshua Общие вопросы C/C++ 3 19.12.2009 22:12
Динамический массив Lemo Помощь студентам 5 16.09.2009 06:26