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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2010, 18:04   #1
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию [C++] Массивы

Код:
//Вычислить сумму членов ряда 1 / (n*n-1) для всех вводимых диапазонов значений n.

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//вычисляет размер
int FillArray( int &iFrom, int &iTo, int* range ) 
{
	int   iSize = 0, i;
 
	for ( i = iFrom; i <= iTo; i++ )
	{
		range[iSize++] = i;
	}

	return iSize;
}

//вывод диапазона
void PrintRange( char* czTitle, int* x, int n, int m ) 
{
	int i;
 
    if ( czTitle != NULL )
		printf( "%s\n", czTitle );
 
	for ( i = 0; i < n*m; i++ ) 
    {
		printf( "%d ", x[i] );

		if ( (i+1) % m == 0 )
			printf( "\n" );
    }
}

//вычисляю один элемент
inline float elem(const int n)
{
	return 1.0 / (n*n-1) ;
}

//вычисляю сумму элементов во введённом диапазоне
float Summa( int *range, int nRange )
{
	float fSumma = 0;
	
	for( int i = 0; i < nRange; i++ )
	{
		fSumma += elem( range[i] );
	}

	return fSumma;
}

int main(void)
{
	int iFrom, iTo;
	int nRange;
	int *range;
	int iIndex = 0;
	float fSumma = 0;
	int NextRange;


//вычисление суммы ряда 1/(n*n-1) в введённом диапазоне
	printf( "Enter Range: " );
	scanf( "%d - %d", &iFrom, &iTo );//ввод диапазона

	range = ( int* )malloc( ( iTo - iFrom + 1 ) * sizeof( int ) );
    nRange = FillArray( iFrom, iTo, range );
    PrintRange( "The Range:", range, 1, nRange );

	fSumma += Summa( range, nRange );//вычисляю сумму
	printf( "Summa: %f", fSumma );

//вопрос, будем ли вводить ещё диапазон?
	printf( "\nEnter Next Range? 1 - yes, 0 - no \n" );
	scanf( "%d", &NextRange );
	

//если мы хотим ещё ввести один диапазон то выполняются все действия для первого диапазона.
	while( NextRange == 1 )
	{
		printf( "Enter Range: " );
		scanf( "%d - %d", &iFrom, &iTo );
		range = ( int* )malloc( ( iTo - iFrom + 1 ) * sizeof( int ) );
		nRange = FillArray( iFrom, iTo, range );
		PrintRange( "The Range:", range, 1, nRange );
		fSumma += Summa( range, nRange );
		printf( "Summa: %f", fSumma );
		printf( "\nEnter Next Range? 1 - yes, 0 - no \n" );
		scanf( "%d", &NextRange );
		
		if( NextRange == 0 )
			break;
	}

	free( range );	
	printf( "Result: Summa = %f", fSumma );
	_getch();
	return 0;
}
по заданию нужно чтобы был статический и динамический массив, динамический есть, а вот статический куда вставить я ума не приложу. Может кто подскажет куда можно было бы его засунуть?
AquaticSoul вне форума Ответить с цитированием
Старый 05.04.2010, 20:13   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
range = ( int* )malloc( ( iTo - iFrom + 1 ) * sizeof( int ) );
Вбиваем свои "статические" iTo и iFrom значения, а дальше объявляем выше int main(...
Код:
int range_stat[( iTo - iFrom + 1 )];
BOBAH13 вне форума Ответить с цитированием
Старый 06.04.2010, 15:30   #3
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию

что-то не понял. Можно поподробнее? мне то надо чтобы динамический массив тоже остался
AquaticSoul вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
Массивы StudentPolitech Общие вопросы C/C++ 2 02.12.2009 14:28
Массивы Света2125 Помощь студентам 2 29.10.2009 16:41
Массивы. Limon34 Помощь студентам 6 26.11.2008 13:05