Найти сумму элементов одномерного массива, расположенных после последнего элемента, равного нулю

Задачи для программиста. Массив создается в динамической области памяти функцией new. При обращении к элементам массива воспользоваться взаимосвязью массивов

Массив создается в динамической области памяти функцией new. При обращении к элементам массива воспользоваться взаимосвязью массивов с указателями (косвенная адресация). Предусмотреть реакцию программы на ситуации, при которых задача не имеет решения. В одномерном массиве, состоящем из n вводимых с клавиатуры элементов, вычислить:

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

Код C

#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <locale.h>
#include <string.h>

void vvod	(char*, int*);
void vivod	(char*, int*);
int sum	(char*, int*);
int i, n, nul, position=0;
 
void main()	{setlocale(LC_CTYPE, "Russian");
system("cls");
fflush(stdin);
char *A, sumA;
 
//Заполняем массив
puts ("Введите размерность массива:");
scanf_s("%d", &n);
A=new char [n];
puts("Введите значения массива:");
vvod(A, &n);
 
//Ищем наш ноль
nul=0;
for (i=0; i<n; i++)
{if(!(*(A+i)))	{
nul = i; 
position=i;
}
 
}
 
//Выводим на экран
printf("\n\nВот наш полный массив:"); vivod(A, &n);
printf("\n\nЗначения, расположенные после последнего нуля:"); for	(i=position+1; i<n; i++)
{printf_s(" %d ", *(A+i));}
sumA=sum(A, &n);
printf("\n\nCумма этих значений: %d", sumA);
 
_getch();	}
 
//Ф-я для ввода значений массива
void vvod(char*A, int*n)
{
for (i=0; i<*n; i++)
{printf("\nЗначение[%d]=",i);
scanf_s("%d", A+i);}
}
 
//Ф-я для вывода значений массива
void vivod(char*A, int*n)
{
for(i=0; i<*n; i++)
{printf(" %d ",*(A+i));}
}
 
//Считаем сумму значений после найденного последнего нуля
int sum(char*A, int *n)
{
int sum=0;
for (i=position; i<*n; i++)
{sum+=*(A+i);}
return sum;
}

Массив

Этот материал впервые был опубликован 18 апреля 2017 года. Актуальность информации подтверждена 16 января 2024 году.