Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > произведение последних элементов в массиве


Автор: dissable1 22.12.2014, 14:28
Задание такое:
Задав одномерный массив целочисленных данных А в одном из заданных форматов, реализовать обработку массива, как указа-но в варианте. Длина статического массива N<=20. Значение N ввести с клавиатуры с проверкой на допустимые значения. Предусмотреть возможность ввода значений элементов массива пользователем и с помощью датчика случайных чисел.

Найти произведение последних L элементов в массиве A={a[i]}.
Я всё сделал ,до произведения.Дальше тупик..
Код

#include <iostream>
#include <windows.h>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    SetConsoleOutputCP(1251);
    const short N = 20;
    short n, mas[N],L,proizv;
    while (true)
    {
        cout << "Введите n-->";
        cin >> n;
        if (n > 0 && n <= N) break;
        cout << "Неправильное значение,повторите попытку" << endl;
    }
    int choise;
    do
    {
        cout << "1 - заполнение массива вручную" <<endl
            << "2 - заполнение случайными числами" <<endl;
        cin >> choise;
        switch (choise)
        {
        case 1:
            cout << "понял,заполняйте сами!" << endl;
            for (int i = 0; i < n; ++i)
            cin >> mas[i];
            break;
            case 2:
            srand((unsigned)time(NULL));
            for (int i = 0; i < n; ++i)
                mas[i] = rand();
            break;
        default:cout << "Неправильное значение!" <<endl;
        }
    } while ((choise < 1 || choise > 2));
    cout << "Массив-->";
    for (int i = 0; i < n; ++i)
        cout << mas[i] << ' ' << endl;
    cout << "введите L-->";
    cin >> L;


Мне сказали что нужно дальше запускать цикл 
for (int i = n-1; i => L; --i) и умножать всё
Но мозг не варит,помогите пожалуйста дописать

Автор: baldina 22.12.2014, 18:10
Код

if (L > n) L=n;
int product=1;
for (int i = n-1; i >= n-L; --i)
  product *= mas[i];


Автор: feodorv 22.12.2014, 19:18
Цитата(dissable1 @  22.12.2014,  14:28 Найти цитируемый пост)
    short proizv;

Для short'а уж очень велика вероятность напороться на переполнение при перемножении последних элементов. Да и зачем так скромно, когда есть int?

Цитата(baldina @  22.12.2014,  18:10 Найти цитируемый пост)
int product=1;

Вот это другое дело  smile 

Автор: dissable1 22.12.2014, 19:24
А,я забыл написать,что в моём варианте тип short,и нужно сделать проверку на допустимые значения)

Автор: dissable1 22.12.2014, 20:08
помогите пожалуйста ещё с проверкой.Мне нужно чтобы тип результата был short,и чтобы числа ,которые ввожу в массив,были не больше SHRT_MAX и меньше SHRT_MIN.

Автор: baldina 22.12.2014, 20:23
Цитата(dissable1 @  22.12.2014,  14:28 Найти цитируемый пост)
Я всё сделал ,до произведения.

сомнительно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)