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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2009, 10:20   #1
Бредли Тревор
Новичок
Джуниор
 
Регистрация: 14.10.2009
Сообщений: 5
По умолчанию Помогите пожалуйста разобраться с функциями в С++

Добрый день! немного лирики, учусь я на заочном обучении и дали нам решать задачу... помогите найти решение.
Условие:
Напишите программу ввода двумерного динамического массива, "уплотнению" каждой строки массива смещением нулевых элементов в конец строки, сортировки строк массива по возрастанию значения суммы элементов строки и вывода его элементов на экран. Массив должен печататься на экране построчно.
пример:
вход:
размер массива:
3 4
элементы массива:
3 0 7 0
9 0 8 5
0 1 2 0

выход после уплотнения:
3 7 0 0
9 8 5 0
1 2 0 0

выход после уплотнения и сортировки:
1 2 0 0
3 7 0 0
9 8 5 0

Решение:

для решения необходимо воспользоваться функциями:
int* Input (int N) - выделение памяти и ввод элементов одномерного массива размером N. Функция возвращает указатель на выделенный массив.

Void Sort (int** A, int M, int, N) - сортировка М одномерных массивов размера N, указатели на которые находятся в массиве А по возрастанию значения суммы элементов.

int sum (int* A, int N) - подсчет суммы элементов одномерного массива А размером N.

void Comp (int* A, int N) - уплотнение элементов одномерного массива А размером N.

void print (int* A, int N) - печать на экран одномерного массива А размером N.

Двумерный динамический массив с вводом размеров
Код:
#include <stdio.h>
 int** input (int &m, int &n)
{
	scanf(“%d%d”, &m, &n);
	int **a = new int* [m];
	for (int i = 0; i < m; i++)
	{
		a[i] = new int [n];
		for (int j = 0; j < n; j++)
			scanf(“%d”, a[i]+j);
	}
	return a;
}
 void main()
{
	int M, N;
	int **mas = input (M, N);
}

Последний раз редактировалось Бредли Тревор; 14.10.2009 в 10:47.
Бредли Тревор вне форума Ответить с цитированием
Старый 14.10.2009, 10:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
для решения необходимо воспользоваться функциями:
Которые нужно еще написать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2009, 10:30   #3
Бредли Тревор
Новичок
Джуниор
 
Регистрация: 14.10.2009
Сообщений: 5
По умолчанию

по сути используемые функции используют одномерный динамический массив

Код:
int sum (int n, int *a)
{
	int s = 0;
	for (int i = 0; i < n; i++)
		s += a[i];
	return s;
}
 
void main()
{
	int *mas = new int [5];
	// Ввод массива mas
	int b = sum(5, mas);
}

Последний раз редактировалось Stilet; 14.10.2009 в 10:34.
Бредли Тревор вне форума Ответить с цитированием
Старый 14.10.2009, 10:34   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так а проблема то в чем?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2009, 10:37   #5
Бредли Тревор
Новичок
Джуниор
 
Регистрация: 14.10.2009
Сообщений: 5
По умолчанию

вот не доходит до меня как все это собрать в кучу
Бредли Тревор вне форума Ответить с цитированием
Старый 14.10.2009, 10:48   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну не проверял но примерно так:
Код:
#include <stdio.h>
 int** input (int &m, int &n)
{
	scanf(“%d%d”, &m, &n);
	int **a = new int* [m];
	for (int i = 0; i < m; i++)
	{
		a[i] = new int [n];
		for (int j = 0; j < n; j++)
			scanf(“%d”, a[i]+j);
	}
	return a;
}

int sum (int n, int *a)
{
	int s = 0;
	for (int i = 0; i < n; i++)
		s += a[i];
	return s;
}

 void main()
{
	int M, N;
	int **mas = input (M, N);
        sum(n,*mas)
}
Только я не понял зачем ты двойной указатель используешь...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2009, 11:03   #7
Бредли Тревор
Новичок
Джуниор
 
Регистрация: 14.10.2009
Сообщений: 5
По умолчанию

и то верно, чтоб не было путаниц можно и так:
int sum (int* B, int N) - подсчет суммы элементов одномерного массива B размером N.

void Comp (int* B, int N) - уплотнение элементов одномерного массива B размером N.

void print (int* B, int N) - печать на экран одномерного массива B размером N.

Последний раз редактировалось Бредли Тревор; 14.10.2009 в 12:18.
Бредли Тревор вне форума Ответить с цитированием
Старый 15.10.2009, 22:05   #8
Бредли Тревор
Новичок
Джуниор
 
Регистрация: 14.10.2009
Сообщений: 5
По умолчанию

итого
код от Stilet

Код:
#include <stdio.h>
 int** input (int &m, int &n)
{
	scanf(“%d%d”, &m, &n);
	int **a = new int* [m];
	for (int i = 0; i < m; i++)
	{
		a[i] = new int [n];
		for (int j = 0; j < n; j++)
			scanf(“%d”, a[i]+j);
	}
	return a;
}

int sum (int n, int *a)
{
	int s = 0;
	for (int i = 0; i < n; i++)
		s += a[i];
	return s;
}

 void main()
{
	int M, N;
	int **mas = input (M, N);
        sum(n,*mas)
}
вот еще, уже сам......
Код:
void Print(int *B, int N)   //функция вывода строки массива на экран
{
	for(int i=0; i<N; i++)
	{
		printf("%d ", B[i]);
	}
	printf("\n");
}

void Comp(int *B, int N)   //смещение нулей в конец строки за один проход по массиву
{
	int i, j, buf;
	i=N-1;
	j=N-1;

	for(;;)
	{
		if(i<0)
			break;

		if(B[i]==0)    //если находим ноль
		{
			if(i!=j)   //то меняем его с последним не нулевым элементом строки
			{
				buf=B[i];
				B[i]=B[j];
				B[j]=buf;
			}else
			{
				j--;
			}
		}

		i--;
	}
}
Помогите все в кучу собрать пожалуйста
Бредли Тревор вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с функциями fgets (), fputs() Volchara Общие вопросы C/C++ 6 05.04.2009 22:09
Помогите пожалуйста разобраться в С++. radikayupov1710 Общие вопросы C/C++ 0 30.01.2009 21:16
Помогите разобраться с процедурами и функциями. leedhas Паскаль, Turbo Pascal, PascalABC.NET 3 14.01.2009 14:23
Помогите разобраться с функциями! Rembo Общие вопросы C/C++ 4 08.02.2008 21:24