Другие языки программирования и технологии

Массивы на Си! задача!

В одномерном массиве, состоящем из п вещественных элементов, вычислить сумму элементов массива, расположенных до последнего положительного элемента.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>

void main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");
srand((unsigned)time(NULL));
int N;

printf("\n Введите размер массива: ");
scanf("%d", &N);
printf("\n---------------------------------\n");

float *a = (float*) malloc(N * sizeof(float));
float summa = 0;
int flag = 0;

for (int n = 0; n < N; n++)
{
a[n] = (float)(rand() % 11 - 5) / 1.33333;

printf(" %.2f ", a[n]);
}

printf("\n---------------------------------\n");

for (int n = N - 1; n >= 0; n--)
{
if (n == 0 && flag == 0)
{
printf("\n\n Массив не удовлетворяет условию задания! \a");
getch();
return;
}

if (a[n] < 0 && flag == 0) continue;
else if (a[n] >= 0 && flag < 1)
{
flag++;
n--;
}

summa += a[n];
}

printf("\n Сумма = %.2f", summa);

getch();
}
FF
Fes Fesov
80 771
Лучший ответ
#include<iostream>
#include<time.h>
using namespace std;
int main()
{
int s=0,j,N,k=-1;
srand(time(0));
cout << "Размер массива: "; cin >> N;
int* t=new int [N];
cout << "Случайная последовательность: \n";
for(j=0;j < N;t[j]=100-rand() % 201,cout << "m[" << j << "]=" << t[j] << ' ',t[j]>0?k=j++:j++) ;
if(k<0) { cerr << "В массиве нет положительных элементов! \n"; return 1; }
for(j=0;j < k;s+=t[j++]);
cout << "Сумма до элемента m[" << k << "]=" << t[k] << " равна: " << s << endl;
delete [] t;
return 0;
}
1) Двигаясь с конца массива к началу ищешь первое вхождение положительного элемента, как найдешь положительный - запоминаешь его индекс в какую-нибудь переменную (Допустим в переменную N)
Num - количество элементов массива.
for (int i = Num-1 ; i >= 0 ; i-- )
{
if ( A [ i ] > 0 ) { N = i; break; }
}
Таким образом найдем последний положит. элемент

2) Объявляем переменную sum, запоминаем в нее значение [0]-го элемента массива: sum=A[0];

3) выполняем цикл for (int i = 1 ; i < N ; i++) { sum = sum + A [ i ] ; }

Можно так же добавить условие после 1-го шага: if (N<=0) return 0; Т. е. если в массиве только один положительный элемент, и он находится в самом начале, либо положительных вообще нет - складывать нечего - завершить программу (что бы это условие работало, в самом начале надо присвоить переменной N какое-нибудь отрицательное число, например int N=-1; )
Дима Степакин
Дима Степакин
1 709