C/C++
Помогите решить задачу, пожалуйста. (Язык Си)
Найдите сумму элементов массива между двумя первыми нулями. Если двух нулей нет в массиве, то выведите ноль.
#include <stdlib.h>
#include <stdio.h>
#define N 13
int sum(int* box, int n) {
int* beg = NULL;
int* end = NULL;
int* start = NULL;
int s = 0;
if (!box || !n) return s;
beg = box;
end = box + n;
do if (!*beg++) break; while (beg != end);
if (beg == end) return s;
start = beg;
if (!*start) return s;
do if (!*beg) break; while (++beg != end);
if (beg == end) return s;
end = beg;
do s += *start; while (++start != end);
return s;
}
void show(int* box, int n) {
int i;
if (!box || !n) return;
for (i = 0; i < n; ++i) printf("%i ", box[i]);
puts("");
}
int main(void) {
int a[N] = { 1, 8, 0, 3, 6, 7, 0, 6, 9, 8, 0, 5, 3 };
int b[N] = { 2, 8, 0, 3, 6, 7, 1, 6, 9, 8, 4, 5, 3 };
int c[N] = { 3, 8, 0, 0, 6, 7, 1, 6, 9, 8, 4, 5, 3 };
int d[N] = { 4, 8, 5, 3, 6, 7, 1, 6, 9, 8, 4, 5, 3 };
int sum_a, sum_b, sum_c, sum_d;
show(a, N);
sum_a = sum(a, N);
printf("Sum a: %i\n", sum_a);
show(b, N);
sum_b = sum(b, N);
printf("Sum b: %i\n", sum_b);
show(c, N);
sum_c = sum(c, N);
printf("Sum c: %i\n", sum_c);
show(d, N);
sum_d = sum(d, N);
printf("Sum d: %i\n", sum_d);
system("pause > nul");
return 0;
}
#include <stdio.h>
#define N 13
int sum(int* box, int n) {
int* beg = NULL;
int* end = NULL;
int* start = NULL;
int s = 0;
if (!box || !n) return s;
beg = box;
end = box + n;
do if (!*beg++) break; while (beg != end);
if (beg == end) return s;
start = beg;
if (!*start) return s;
do if (!*beg) break; while (++beg != end);
if (beg == end) return s;
end = beg;
do s += *start; while (++start != end);
return s;
}
void show(int* box, int n) {
int i;
if (!box || !n) return;
for (i = 0; i < n; ++i) printf("%i ", box[i]);
puts("");
}
int main(void) {
int a[N] = { 1, 8, 0, 3, 6, 7, 0, 6, 9, 8, 0, 5, 3 };
int b[N] = { 2, 8, 0, 3, 6, 7, 1, 6, 9, 8, 4, 5, 3 };
int c[N] = { 3, 8, 0, 0, 6, 7, 1, 6, 9, 8, 4, 5, 3 };
int d[N] = { 4, 8, 5, 3, 6, 7, 1, 6, 9, 8, 4, 5, 3 };
int sum_a, sum_b, sum_c, sum_d;
show(a, N);
sum_a = sum(a, N);
printf("Sum a: %i\n", sum_a);
show(b, N);
sum_b = sum(b, N);
printf("Sum b: %i\n", sum_b);
show(c, N);
sum_c = sum(c, N);
printf("Sum c: %i\n", sum_c);
show(d, N);
sum_d = sum(d, N);
printf("Sum d: %i\n", sum_d);
system("pause > nul");
return 0;
}
Грысенко Артем
Спасибо!
Без табуляции это будет выглядеть очень не очень, поэтому вот ссылка на код: https://onlinegdb.com/rJHgPeuPO
P.S. Стричь исключения под одну гребёнку со возвратным значением функции не очень красиво, поэтому лучше воспользоваться какой-нибудь альтернативой, хотя бы "assert.h", который просто поругается, если не будет найдено двух "0"
P.S. Стричь исключения под одну гребёнку со возвратным значением функции не очень красиво, поэтому лучше воспользоваться какой-нибудь альтернативой, хотя бы "assert.h", который просто поругается, если не будет найдено двух "0"
Грысенко Артем
Спасибо!
Похожие вопросы
- Решить задачу на языке СИ
- Помогите с задачей на языке СИ
- Помогите пожалуйста решить задачу на языке СИ или С# !!!
- Помогите решить задачу, пожалуйста. Сам не понимаю. (Язык Си)
- Помогите решить задачу на языке программирования Си, пожалуйста
- Помогите решить задачу пожалуйста, в C++
- Помогите решить задачу на языке программирования С++
- Помогите решить задачу пожалуйста С++
- Помогите с решением задачи на языке СИ
- Помогите пожалуйста решить задачу на языке С#.