Для каждого вектора найти разницу между модулями сумм положительных и отрицательных элементов. - C (СИ)
Формулировка задачи:
Здравствуйте!Прошу Вашей помощи,написал программу,все работает,но надо ее переделать как на скрине,т.е элементы задаются сразу,без цикла.У самого не получается переделать=(
Сама задача заключается в том,что дано три вектора A,B,C.Для каждого найти разницу между абсолютными значениями суммы положительных и абсолютными значениями суммы отрицательных элементов.
Вот,собственно,моя программа,котрую надо изменить:
#include "stdafx.h"
#include <locale.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
void vvod(int *x, int n, char name)
{
printf("\nВектор %c:\n\n", name);
for (int i = 0; i<n; i++)
{
printf("Введите элемент вектора № %d: ", i);
scanf_s("%d", &x[i]);
}
}
void raznica(int *x, int n, char name)
{
int pol = 0;
int otr = 0;
int razn;
for (int i = 0; i<n; i++)
{
if (x[i] > 0 ) {pol += x[i];}
else {otr += x[i];}
}
razn = (abs(pol))-(abs(otr));
printf("Сумма положительных элементов %c: %d\n", name, pol );
printf("Сумма отрицательных элементов %c: %d\n", name, otr );
printf("Разница %d\n",abs(razn));
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Russian");
const int q = 3, w = 3, e = 3;
int A[q], B[w], C[e];
vvod(A, q, 'A');
vvod(B, w, 'B');
vvod(C, e, 'C');
raznica (A, q, 'A');
raznica (B, w, 'B');
raznica (C, e, 'C');
_getch();
return 0;
}Решение задачи: «Для каждого вектора найти разницу между модулями сумм положительных и отрицательных элементов.»
textual
Листинг программы
#include "stdafx.h"
#include <locale.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#define N 3 //размер массива
void raznica(int *x, int n, char name)
{
int pol = 0;
int otr = 0;
int razn;
for (int i = 0; i<n; i++)
{
if (x[i] > 0 ) {pol += x[i];}
else {otr += x[i];}
}
razn = (abs(pol))-(abs(otr));
printf("Сумма положительных элементов %c: %d\n", name, pol );
printf("Сумма отрицательных элементов %c: %d\n", name, otr );
printf("Разница %d\n",abs(razn));
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Russian");
int A[N]={15,16,17},
B[N]={1,2,3},
C[N]={21,22,23};
raznica (A, N, 'A');
raznica (B, N, 'B');
raznica (C, N, 'C');
_getch();
return 0;
}
Объяснение кода листинга программы
- include директивы для подключаемых файлов
- Определение размера массива в 3 элемента
- Функция
raznicaпринимает три аргумента: указатель на массив, его размер и имя массива (для вывода результатов) - Внутри функции инициализируются переменные
polиotrдля хранения суммы положительных и отрицательных элементов соответственно - В цикле проходится по всем элементам массива
- Если элемент больше нуля, то он прибавляется к
pol, иначе кotr - После прохода по всем элементам, в
raznзаписывается разница между абсолютными значениямиpolиotr - Вызывается функция
printfдля вывода результатов на экран - В функции _tmain создаются три массива: A, B, C, каждый из которых содержит три элемента
- Функция
raznicaвызывается три раза: для массива A, B и C, передавая в качестве аргументов указатель на массив, его размер и имя массива - В конце программы вызывается функция _getch для приостановки выполнения программы до нажатия клавиши
- Возвращаемое значение 0 от функции _tmain означает успешный конец работы программы