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

Требуется помощь с программа на СИ

Дано три массива x[5], y[10], z [15]. Для каждого
массива требуется определить, каких элементов в
массиве больше: четных или нечетных, – а затем
вычислить сумму тех, которых оказалось больше.
Код программы должен содержать три
пользовательские функции, обеспечивающие:
1. ввод элементов массива;
2. определение, каких элементов в массиве больше:
четных или нечетных;
3. вычисление суммы требуемых элементов массива:
четных или нечетных.
Программа на СИ.
#include
#include
#include
#include
#include
int i,chet,nechet;
int h,m,sum,sum1;
void array_vvod( int a[], int n)
{
for (i=1; i<=n; i++)
{
printf(" a[%d]=",i);
scanf("%d", &a[i]);
}
}
int array_c (int a[], int n)
{

for (i=1; i<=n; i++)
{

if (((a[i]%2)==0) || (a[i]==0))
{
chet++;
return chet;
}

else
{
nechet ++;
return nechet;
}
}

}
int array_f( int a[], int n)
{
int sum=0, sum1=0;
for (i=1; i<=n; i++)
{
if (chet > nechet)
{
if ((a[i]%2)==0)
sum+=a[i];
else continue;
}
else
{
if ((a[i]%2!=0))
sum+=a[i];
else continue;
}

}
return sum;
}
int main (int argc, char * argv[])
{
int x[5],y[10],z[15];
array_vvod(x,5);
array_c(x,5);
printf("summa x[5]= %d\n", array_f(x,5));
array_vvod(y,10);
array_c(y,10);
printf("summa y[10] = %d\n", array_f(y,10));
array_vvod(z,15);
array_c(z,15);
printf("summa z[15] = %d\n", array_f(z,15));

system ("pause");
return 0;
}
Некорректно работает, в чем может быть причина?
™Ruslan Mamedov™
™Ruslan Mamedov™
101
Первое, что сразу же, взглянув, можно обнаружить:
1) Везде for (i = 1; i <= n; i++). В Си индексы начинаются с нуля, поэтому происходит выход за границы массива. Должно быть i = 0 и i < n;
2) В array_c происходит только одна итерация, так как хоть для четного, хоть для нечетного числа вы сразу же возвращаете счетчик чисел, то есть единицу;
3) array_c возвращает результат, но нигде его не использует. Лучше тогда указать тип void, так как это, фактически, процедура;
4) a[i]==0 излишне, так как 0 тоже без остатка на 2 делится;
5) Чтобы не путаться, лучше по возможности вместо глобальных переменных использовать локальные. Например, индексы прям в цикле объявлять: for (int i = 0; i < n; i++). И т. д.

P.S. Еще в самой задаче не сказали, что делать, если четных и нечетных элементов в массиве одинаковое количество
Илья Александров
Илья Александров
20 861
Лучший ответ
™Ruslan Mamedov™ Программа заработала, спасибо большое за помощь!
#include < stdio.h >
#include < stdbool.h >

void input(int a[], int n, char c) {
int i;
for (i = 0; i < n; i++) { printf("%c[%d] = ", c, i); scanf("%d", &a[i]); }
}

bool check(int a[], int n) {
int i, c = 0;
for (i = 0; i < n; i++) c += a[i] & 1;
return c > (n - c);
}

void sum(int a[], int n, bool odd) {
int i, s = 0, m = (int)odd;
for (i = 0; i < n; i++) if (a[i] & 1 == m) s += a[i];
printf("sum = %d\n", s);
}

int main(void) {
int x[5], y[10], z[15];
input(x, 5, 'x');
sum(x, 5, check(x, 5));
input(y, 10, 'y');
sum(y, 10, check(y, 10));
input(z, 15, 'z');
sum(z, 15, check(z, 15));
system("pause");
return 0;
}