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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2011, 23:29   #1
KING_t.r.b.e.
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 10
По умолчанию Редактирование массива из функции

Имеется массив и две переменные: a и b. Написать программу для:
1) нахождения номера максимального элемента массива
2) сумму элементов массива, расположенных после первого положительного элемента
3) Преобразовать массив таким образом, чтобы сначала распалогались все элементы, целая часть которых лежит в интервале [a;b], а потом все остальные.
С первыми двумя пунктами все хорошо, а вот с третим ни как не могу разобраться, точнее понять, как нужно передавать массив функции, чтоб его можно было редактировать....
Вот мой код:
Код:
#include <stdio.h>
#include <locale.h>
int nmax (double [], int);
double summa (double [], int);
double preobr (double [], int, int, int, double []);
void main ()
{
	setlocale(LC_ALL,"Russian");
	const int n=16;
	double mas [n]= {1.2, -1.8, -4.5, 8.5, -0.1, -0.9, 9.7, -9.8, 0.2, 3.5, 5.7, -3.8, -6.0, 4.2, 4.3, -5.1};
	double pmas [n];
	int a=0, b=3, i;
	printf ("Номер максимального элемента: %d\n", nmax ( mas, n ));
	printf ("Сумма элементов массива, расположенных после первого положительного элемента: %lf\n", summa ( mas, n ));
	preobr (mas, n, a, b, pmas);
	printf ("Преобразованный массив: ");
	for (i=0; i<n; i++)
		printf ("%lf ", pmas[i]);
}
int nmax ( double* mas, int n )
{
	double max = mas [0];
	int i, imax = 0;
	for (i=1; i<n; i++)
		if (max<mas[i])
		{
			max = mas[i];
			imax = i;
		}
	return imax;
}
double summa ( double* mas, int n, double* pmas )
{
	double sum=0;
	int i;
	for (i=0; i<n; i++)
		if (mas[i]>0)
			break;
	for (i++; i<n; i++)
		sum+=mas[i];
	return sum;
}
double preobr ( double* mas, int n, int a, int b, double* pmas )
{
	int i, j;
	for (i=0; i<n; i++)
		if (mas[i]>=a && mas[i]<b+1)
			for (j; j<n; j++)
				pmas[j]=mas[i];
	for (i=0; i<n; i++)
		if (mas[i]<a && mas[i]>=b+1)
			for (j; j<n; j++)
				pmas[j]=mas[i];
	return 1;
}
KING_t.r.b.e. вне форума Ответить с цитированием
Старый 27.02.2011, 23:37   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

В функцию массив всегда передается по указателю, а не по значению. Если ты будешь изменять элементы массива в функции - будет изменятся первоначальный массив.
profi вне форума Ответить с цитированием
Старый 27.02.2011, 23:42   #3
KING_t.r.b.e.
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от profi Посмотреть сообщение
В функцию массив всегда передается по указателю, а не по значению. Если ты будешь изменять элементы массива в функции - будет изменятся первоначальный массив.
А можете показать пример, как передать массив по указателю, желательно на моей последней функции?
KING_t.r.b.e. вне форума Ответить с цитированием
Старый 27.02.2011, 23:48   #4
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Эм... у тебя в коде вообще то это есть.
profi вне форума Ответить с цитированием
Старый 27.02.2011, 23:54   #5
KING_t.r.b.e.
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 10
По умолчанию

в чем тогда ошибка?
вот что студия пишит:
Код:
Предупреждение	1	warning C4700: использована неинициализированная локальная переменная "j"	c:\users\владелец\documents\visual studio 2010\projects\2laba2\2laba2\2laba2.cpp	48
Ошибка	2	error LNK2019: ссылка на неразрешенный внешний символ "double __cdecl summa(double * const,int)" (?summa@@YANQANH@Z) в функции _main	c:\Users\владелец\documents\visual studio 2010\Projects\2laba2\2laba2\2laba2.obj
Ошибка	3	error LNK1120: 1 неразрешенных внешних элементов	c:\users\владелец\documents\visual studio 2010\Projects\2laba2\Debug\2laba2.exe	1
гуглёж ничем не помог...
первые две функции работают, а вот третья нет, думал в ней надо как то похитрому массив передавать....
KING_t.r.b.e. вне форума Ответить с цитированием
Старый 27.02.2011, 23:57   #6
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

ваш прототип
double summa (double [], int);
ваша функция
double summa ( double* mas, int n, double* pmas )
onewho вне форума Ответить с цитированием
Старый 28.02.2011, 00:01   #7
KING_t.r.b.e.
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от onewho Посмотреть сообщение
ваш прототип
double summa (double [], int);
ваша функция
double summa ( double* mas, int n, double* pmas )
втф...
надо идти спать, уже не вижу что куда пишу
KING_t.r.b.e. вне форума Ответить с цитированием
Старый 28.02.2011, 00:04   #8
KING_t.r.b.e.
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 10
По умолчанию

Всё исправил, работает:
Код:
#include <stdio.h>
#include <locale.h>
int nmax (double [], int);
double summa (double [], int);
double preobr (double [], int, int, int, double []);
void main ()
{
	setlocale(LC_ALL,"Russian");
	const int n=16;
	double mas [n]= {1.2, -1.8, -4.5, 8.5, -0.1, -0.9, 9.7, -9.8, 0.2, 3.5, 5.7, -3.8, -6.0, 4.2, 4.3, -5.1};
	double pmas [n];
	int a=0, b=3, i;
	printf ("Номер максимального элемента: %d\n", nmax ( mas, n ));
	printf ("Сумма элементов массива, расположенных после первого положительного элемента: %lf\n", summa ( mas, n ));
	preobr (mas, n, a, b, pmas);
	printf ("Преобразованный массив: ");
	for (i=0; i<n; i++)
		printf ("%lf ", pmas[i]);
}
int nmax ( double* mas, int n )
{
	double max = mas [0];
	int i, imax = 0;
	for (i=1; i<n; i++)
		if (max<mas[i])
		{
			max = mas[i];
			imax = i;
		}
	return imax;
}
double summa ( double* mas, int n )
{
	double sum=0;
	int i;
	for (i=0; i<n; i++)
		if (mas[i]>0)
			break;
	for (i++; i<n; i++)
		sum+=mas[i];
	return sum;
}
double preobr ( double* mas, int n, int a, int b, double* pmas )
{
	int i, j=0;
	for (i=0; i<n; i++)
		if (mas[i]>=a && mas[i]<b+1)
		{
			while (j<n)
			{
				pmas[j]=mas[i];
				j++;
				break;
			}
		}
	for (i=0; i<n; i++)
		if (mas[i]<a || mas[i]>=b+1)
			while (j<n)
			{
				pmas[j]=mas[i];
				j++;
				break;
			}
	return 1;
Спасибо, что открыли глаза!

Последний раз редактировалось KING_t.r.b.e.; 28.02.2011 в 00:31.
KING_t.r.b.e. вне форума Ответить с цитированием
Старый 28.02.2011, 00:06   #9
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

P.S. За такое void main () по рукам бить нужно .
profi вне форума Ответить с цитированием
Старый 28.02.2011, 00:09   #10
KING_t.r.b.e.
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от profi Посмотреть сообщение
P.S. За такое void main () по рукам бить нужно .
А что собственно не устраивет?

Последний раз редактировалось KING_t.r.b.e.; 28.02.2011 в 00:31.
KING_t.r.b.e. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции в си. Вывод двумерного массива из функции. Evgen51 Общие вопросы C/C++ 9 13.05.2010 03:59
Вычисление массива значений функции(С++) mathe Помощь студентам 1 22.04.2009 15:11
Вычисление массива значений функции mathe Общие вопросы C/C++ 0 22.04.2009 10:27
Функции. Передача массива в качестве параметра функции. Wia Помощь студентам 2 17.03.2009 14:57
Вывод массива из функции LeoN PHP 2 13.11.2008 13:57