Программа неправильно выполняет одну из функций

у меня получается сделать умножение а с суммой не могу справится, помогите пожалуйста
задача:
в одномерном массиве, состоящем из n целых элементов вычислить:
-произведение элементов массива с четными номерами;
-сумму элементов, расположенных между первым и последним нулевыми элементами. Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом-все отрицательные (элементы равные 0, считать положительными)

Код C++

#include <iostream>
#include <locale>
#include <time.h> // декларация библиотечных ф-ий для генератора псевдослуч.чисел

using namespace std;

int main(int argc, char* argv[])
{
    time_t srand(time(0)); // Задали зерно ( это для генератора псевдослуч. чисел )
    int n=10, pr=1, s=0, a[10];

    setlocale(LC_CTYPE, "Rus");

    for(int i=0; i<n; i++){
        a[i]= rand()%11; // Интервал выдаваемых значений 0..10
    }

    for(int i=0; i<n; ++i) 
    cout <<a[i]<<" ";       // отладка будет проходить в 3 раза быстрее

    cout << endl << endl;   // перенос каретки на след.строку

    for(int i=1; i<n;i+=2){
        pr*=a[i];
        cout<<"Произведение="<<pr<<endl;
    }

    cout << endl;

    for(int i=2; i<n-1; ++i) {
    s+=a[i];
    cout<<"Сумма="<<s<<endl;
    }

    system("pause");
    return 0;
}

visual studio 2010 professional
программа выводит сумму неправильно, ошибок нету, в чем может быть ошибка ?

Хе! На счет произведение элементов массива с четными номерами: интересно, а какие элементы массива нужно считать «четными»? В зависимости от того, как нумеровать элементы с 0 или с 1, начальный элемент массива может иметь четный или нечетный номер. Задай этот вопрос препу.

-сумму элементов, расположенных между первым и последним нулевыми элементами.

  1. Надо завести 2 переменные типа int для сохранения индексов первого и последнего нулевого элемента.
  2. Сделать поиск нулевого элемента от начала массива к концу и запомнить индекс первого найденного 0.
  3. Если нуль вообще не найден — слать всех лесом ))
  4. Сделать поиск нулевого элемента от конца массива к началу и запомнить индекс первого найденного 0. Это будет последний нулевой элемент, т.к. ищем от конца.
  5. Теперь можно считать сумму от первого индекса до второго.

Еще совет. У тебя программа написана опасно в смысле ошибок.

Если у тебя массив не динамический (как это сейчас написано), то размер массива лучше определять через константу (или, на крайний случай через #define). А у тебя сейчас определено литералом 10 и, что самое плохое, сравнение с границей массива происходит через переменную, инициализированную тоже литералом. При редактировании кода можно легко получить вылет за границу массива. Вот так будет надежнее:

const int N = 10;     // объявили константу

int main(int argc, char* argv[])
{
    int pr=1, s=0, a[N];    // размер массива объявлен через константу.

    for (int i = 0; i < N; i++)    // переменная цикла сравнивается с той же константой, которая определяет размер массива
    {
       // ...
    }

Запускаю из программы — всё работает.Открываю exe — открывается и сразу закрывается.что делать подскажите?программа Dev-C++.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.