Вычислить сумму положительных и отрицательных элементов массива - C (СИ)
Формулировка задачи:
Вычислить Z=(S1+S2)/2, где S1 – сумма положительных элементов массива X(50), а S2 – сумма отрицательных элементов массива А(60). Суммы вычислять в одной подпрограмме.
написал прогу но начал тестить,и сумму она считает неверно.Помогите пожалуйста.#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define N 3
#define M 4
void input(int*, int);
void output(int*, int);
int pol(int*, int );
int otr(int*, int);
int main()
{
int X[N],A[M];
srand(time(0));
printf("1 ucxodnii massiv:\n\n");
input(&X[0], N);
output(&X[0], N);
printf("2 ucxodnii massiv:\n\n");
input(&A[0], M);
output(&A[0], M);
printf("\n\n\nSumma=%d",( pol(&X[0], N)+ otr(&A[0], M))/2);
getch();
}
void input(int* m, int n)
{
int i;
for(i=0; i<n; i++)
*(m+i) =-5+rand()%10;
}
void output(int* m, int n)
{
int i;
for(i=0; i<n; i++)
printf("%5d", *(m+i)) ;
printf("\n\n\n");
}
int pol(int *m,int n)
{
int i,sum=0;
for(i=0;i<n;i++)
{
if(*m+i>0)
sum=sum+(*m+i);
}
return sum;
}
int otr(int *m,int n)
{
int i,sum=0;
for(i=0;i<n;i++)
{
if(*m+i<0)
sum=sum+(*m+i);
}
return sum;
}
Нашел ошибку:Он находит и S1 и S2 во втором массиве,а должен S1(сумму положительных) в первом искать,а S2(сумму отрицательных) во втором.
А вот как исправить незнаю.
Решение задачи: «Вычислить сумму положительных и отрицательных элементов массива»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define N 3
#define M 4
void input(int*, int);
void output(int*, int);
double pol(int*, int );
double otr(int*, int);
int main()
{
int X[N],A[M];
srand(time(0));
printf("1 ucxodnii massiv:\n\n");
input(&X[0], N);
output(&X[0], N);
printf("2 ucxodnii massiv:\n\n");
input(&A[0], M);
output(&A[0], M);
printf("\n\n\nSumma=%lf",( pol(&X[0], N)+ otr(&A[0], M))/2); //место %d(целые числа) поменять на %lf
getch();
}
void input(int* m, int n)
{
int i;
for(i=0; i<n; i++)
*(m+i) =-5+rand()%10;
}
void output(int* m, int n)
{
int i;
for(i=0; i<n; i++)
printf("%5d", *(m+i)) ;
printf("\n\n\n");
}
double pol(int *m,int n) //тип функции был int , почему нпоменять на double? потому что 5/2=2,5, а у вас 2,0 потому что тип целых чисел
{
int i,sum=0;
for(i=0;i<n;i++)
{
if(*(m+i)>0) //было *m+i >> *m=-5 ещё + i т.е. -5+і = -5+2 = -3
sum=sum+(*(m+i)); //и тут так же
}
return sum;
}
double otr(int *m,int n)//было int тип функции
{
int i,sum=0;
for(i=0;i<n;i++)
{
if(*(m+i)<0) // и тут
sum=sum+(*(m+i)); //и тут
}
return sum;
}
Объяснение кода листинга программы
Код представляет собой программу на языке C, которая вычисляет сумму положительных и отрицательных элементов двух массивов. Список действий:
- Включаемые заголовочные файлы: В начале кода подключаются необходимые заголовочные файлы: stdio.h, stdlib.h, conio.h и time.h.
- Определение констант: Определяются константы N и M, которые представляют собой размеры массивов.
- Функции ввода и вывода: В программе определены две функции: input и output. Функция input используется для заполнения массива случайными числами, а функция output - для вывода содержимого массива на экран.
- Главная функция: В функции main создаются два массива: X и A, которые будут заполняться числами. Затем эти массивы заполняются случайными числами с помощью функции input. После этого содержимое массивов выводится на экран с помощью функции output.
- Функция pol: Эта функция принимает два аргумента: указатель на начало массива и размер этого массива. Внутри функции происходит итерация по всем элементам массива. Если элемент больше нуля, его значение прибавляется к общей сумме.
- Функция otr: Эта функция выполняет аналогичные действия, но проверяет, является ли элемент отрицательным.
- Вычисление суммы: В конце программы находится сумма положительных и отрицательных элементов двух массивов с помощью функций pol и otr, и выводится на экран.
- Завершение программы: В конце программы вызывается функция getch, которая ожидает нажатия клавиши для завершения работы программы. Таким образом, программа заполняет два массива случайными числами, затем вычисляет сумму положительных и отрицательных элементов каждого массива и выводит результат на экран.