Найти произведение членов ряда - C (СИ) (74607)
Формулировка задачи:
Даны натуральные числа А1;А2;А3;.... .
Признак конца последовательности 0.
Определить:
(А2-А1)*(А3-А2)*...*(Аn-A(n-1))
Помогите пожалйста
Из C++ в C
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main ( )
{
std :: vector < int > vec ( ( std :: istream_iterator < int > ( std :: cin ) ) , std :: istream_iterator <int> ( ) ) ;
int x;
do
{
cin>>x;
vec.push_back(x);
}while (x);
int result = 1 ;
if ( vec.size ( ) > 1 )
{
for ( int i = 1 ; vec[i]; ++i )
result *= vec[i]-vec[i-1] ;
}
std :: cout << "\n" << result << std :: endl ;
system("pause");
}Решение задачи: «Найти произведение членов ряда»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
//-----------------------------------------------------------------------------
unsigned GetArray(int* array[])
{
static unsigned i = 0;
unsigned size;
int val;
if ((scanf("%d", &val) == 1) && (val != 0))
{
++i;
size = GetArray(array);
(*array)[--i] = val;
}
else
{
size = i;
*array = malloc(sizeof(int) * size);
}
return size;
}
//-----------------------------------------------------------------------------
int Func(int array[], unsigned size)
{
int result = 1;
unsigned i;
size = size / 2 * 2; // Отсееваем остаток в случае нечётности
for (i = 0; i < size; i += 2)
{
result *= array[i + 1] - array[i];
}
return size ? result : 0;
}
//-----------------------------------------------------------------------------
int main()
{
int* array;
unsigned size = GetArray(&array);
printf("result = %d\n", Func(array, size));
free(array);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- В функции
GetArrayмы создаем динамический массив, который заполняется числами, вводимыми пользователем. - В функции
Funcмы вычисляем произведение элементов массива. - В функции
mainмы вызываемGetArrayдля получения размера массива, а затем вызываемFuncдля вычисления произведения. - Наконец, мы освобождаем память, выделенную под массив, и возвращаем 0, чтобы указать, что программа успешно завершилась.