C/C++

Здравствуйте, можете написать на языке Си, пожалуйста

В одномерном массиве, состоящем из n целых элементов, вычислить:
А) сумму положительных элементов массива, стоящих на четных по-зициях;
Б) произведение индексов максимального и минимального элементов;
В) поменять местами первый положительный элемент с последним отрицательным.
ЮК
Юги Кун
100
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
size_t size(const char* msg) {
size_t value = 0;
if (!value) {
printf(msg);
scanf_s("%u", &value);
while (getchar() != '\n');
}
return value;
}
int* create_and_fill(int* box, size_t n, short l, short r) {
if (!n || r < l) return NULL;
box = (int*)malloc(n * sizeof(int));
if (box != NULL) {
size_t i;
srand((unsigned)time(NULL));
for (i = 0; i < n; ++i) {
box[i] = l + rand() % (r - l);
}
}
return box;
}
void show(int* box, size_t n, unsigned w) {
size_t i;
for (i = 0; i < n; ++i) {
printf("%*i", w, box[i]);
}
puts("");
}
long long sum_pos_even(int* box, size_t n) {
size_t i;
long long sum = 0;
for (i = 1; i < n; i += 2) {
if (box[i] > 0) {
sum += box[i];
}
}
return sum;
}
size_t max_index(int* box, size_t n) {
int index = 0;
int max = box[index];
size_t i;
for (i = 0; i < n; ++i) {
if (box[i] > max) {
max = box[i];
index = i;
}
}
return index;
}
size_t min_index(int* box, size_t n) {
int index = 0;
int min = box[index];
size_t i;
for (i = 0; i < n; ++i) {
if (box[i] < min) {
min = box[i];
index = i;
}
}
return index;
}
int* find_first_positive(int* box, size_t n) {
int* begin = box;
int* end = box + n;
do if (*begin > 0) break; while (++begin != end);
return begin != end? begin : NULL;
}
int* find_last_negative(int* box, size_t n) {
int* begin = box + n - 1;
int* end = box - 1;
do if (*begin < 0) break; while (--begin != end);
return begin != end? begin : NULL;
}
void swap(int* a, int* b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(void) {
int* box = NULL;
size_t n = size(" Input n: ");
int l = -99;
int r = 100;
box = create_and_fill(box, n, l, r);
if (box) {
unsigned w = 5;
long long spe;
size_t imax;
size_t imin;
int* fp = NULL;
int* ln = NULL;
show(box, n, w);
spe = sum_pos_even(box, n);
imax = max_index(box, n);
imin = min_index(box, n);
fp = find_first_positive(box, n);
ln = find_last_negative(box, n);
printf(" Sum: %lli\n Product: %zu\n", spe, imax * imin);
if (fp && ln) {
swap(fp, ln);
show(box, n, w);
} else {
puts("The array does not meet the exchange conditions!");
}
}
system("pause > nul");
return 0;
}
Дмитрий Мельник
Дмитрий Мельник
76 762
Лучший ответ
Юги Кун Большое спасибо! Я попробую сама решить и сверюсь с Вашим ответом!
https://prog-cpp.ru/c-alloc/ - вот тут про динамические массивы - вводишь n и создаешь массив из n элементов. К сожалению обычно си не умеет создавать массивы int[n]
Заполнишь его элементами путем ввода, а дальше думаю догадаешься
Если что, индекс - это номер элемента в массиве (В Си элементы считаются с 0)
Ну и про В, загугли как делать перестановку или swap по английски
Юги Кун Большое Вам спасибо! Вы действительно выручили
чёт не понял, кому понадобилось написать на языке си в пол12го ночи в субботу))

а почему ты сама не можешь это сделать??
до этого что ваньку на занятиях валяла??
Виктор Афанасенко Схалявить хочет, лень разбираться. А ведь проблема, что пишут тут. Обязательно кто-нибудь напишет код с ответом.
Я могу ей кинуть ссылку на массивы в си, но не хочется КПД снижать
Юги Кун Здравствуйте, простите, я хочу изучать другой язык, но тк я поступила на заочно и это язык учить требует вуз, я читаю учебные пособия, которые выдали, но материалов маловато. Я бы оплатила за работу, но к сожалению не проживаю в России и у нас нет электронных кошельков. А в посёлке найти репетитора программиста невозможно.