1

Тема: масив

В одномірному масиві, що складається з N дійсних елементів, обчислити:

  • суму елементів масиву з непарними індексами;

  • суму елементів масиву, які розташовані між першим і останнім від'ємними елементами.

в мене рахує суму тільки міх першим і другим від'ємними елементами

2

Re: масив

%2

3

Re: масив

#include <iostream>
#define p 10 
using namespace std;

int main()
{
    int sum, suma1,o=0, M;
    int N[p] = { 1, 0, 5, 7, 3, -3, 8, 7, -18, -28 };
    sum = 0;
    for (int i = 0; i <= p; i++) {
        if ((i % 2) == 1)
            sum += N[i];
    }
    cout << sum << "SUM" << endl;
    suma1 = 0;
    while (N[o++] >= 0);
    while (N[o] >= 0) {
        suma1 += N[o++];
    }
    cout << suma1 << endl;
}

4

Re: масив

Мені здається що у вас

    while (N[o++] >= 0);
    while (N[o] >= 0) {
        suma1 += N[o++];
    }

шукає  суму не між першим і останнім від'ємним елементом а між першим і наступним від'ємним елементами.

5

Re: масив

pluszz написав:

Мені здається що у вас

    while (N[o++] >= 0);
    while (N[o] >= 0) {
        suma1 += N[o++];
    }

шукає  суму не між першим і останнім від'ємним елементом а між першим і наступним від'ємним елементами.

я це написав в умові що шукає між першим і наступним

6 Востаннє редагувалося pluszz (29.11.2019 22:16:02)

Re: масив

olehov написав:
pluszz написав:

Мені здається що у вас

    while (N[o++] >= 0);
    while (N[o] >= 0) {
        suma1 += N[o++];
    }

шукає  суму не між першим і останнім від'ємним елементом а між першим і наступним від'ємним елементами.

я це написав в умові що шукає між першим і наступним

сорі зле зрозумів

using namespace std;

int main()
{
    int sum, suma1,o=0, M;
    int N[p] = { 1, 0, 5, 7, 3, -3, 8, 7, -18, -28 };
    sum = 0;
    for (int i = 0; i <= p; i++) {
        if ((i % 2) == 1)
            sum += N[i];
        if N[i]<0{
            M=i;
        }
    }
    cout << sum << "SUM" << endl;
    suma1 = 0;
    while (N[o++] >= 0);
    while (o<M) {
        suma1 += N[o++];
    }
    cout << suma1 << endl;
}
Подякували: olehov1

7

Re: масив

int main()
{
    const int empty = -1;

    int sumOfElementsWithOddIndices = 0;
    int firstNegativeElementIndex = empty;
    int lastNegativeElementIndex = empty;
    int sumOfElementsFromFirstNegativeToCurrentElementIncludingCurrentElement = 0;
    int sumOfElementsBetweenFirstNegativeAndLastFoundNegative = 0;

    int arr[10] = { 1, 0, 5, 7, 3, -3, 8, 7, -18, -28 };


    for (size_t i = 0; i < 10; i++)
    {
        int currentElement = arr[i];

        bool elementHasOddIndex = i % 2 != 0;
        if (elementHasOddIndex)
        {
            sumOfElementsWithOddIndices += currentElement;
        }

        bool elementIsNegative = currentElement < 0;

        if (elementIsNegative)
        {
            bool elementIsFirstNegativeElement = lastNegativeElementIndex == empty;
            if (elementIsFirstNegativeElement)
            {
                lastNegativeElementIndex = i;

                // we want to process element that are next to first negative, not the first negative element itself
                continue;
            }
            else
            {
                lastNegativeElementIndex = i;
            }
        }

        // if we don't have negative elements yet, skip this part.
        if (lastNegativeElementIndex != empty)
        {
            sumOfElementsFromFirstNegativeToCurrentElementIncludingCurrentElement += currentElement;

            if (i == lastNegativeElementIndex)
            {
                sumOfElementsBetweenFirstNegativeAndLastFoundNegative = 
                    sumOfElementsFromFirstNegativeToCurrentElementIncludingCurrentElement - currentElement;
            }
        }
    }

    cout << "sum of elements with odd indices: " << sumOfElementsWithOddIndices << endl;
    cout << "sum of elements between first and last negative elements: " << sumOfElementsBetweenFirstNegativeAndLastFoundNegative << endl;
}
Подякували: olehov1