Сумма элементов массива, расположенных после максимального элемента с вызовом функции
Извиняюсь за большое количество вопросов последнее время.
Напишите программу, выделив каждую подзадачу в отдельную функцию.
Реализуйте программу, на вход которой подается одно из значений 0, 1, 2, 3 и массив целых чисел размера не больше 100. Числа разделены пробелами. Строка заканчивается символом перевода строки.
В зависимости от значения, функция должна выводить следующее:
0 : максимальное по модулю число в массиве. 1 : минимальное по модулю число в массиве. 2 : разницу между максимальным по модулю и минимальным по модулю элементом. 3 : сумму элементов массива, расположенных после максимального по модулю элемента (включая этот элемент). (sum) иначе необходимо вывести строку "Данные некорректны".
#include <stdio.h>
int max_number(int arr[])
{
int max, n_max;
for (int i=0; i<5; i++)
{
if (arr[i] > max)
max = arr[i];
n_max=i;
}
return max;
}
int min_number(int arr[])
{
int min;
for (int i=0; i<5; i++)
{
if (arr[i] < min)
min = arr[i];
}
return min;
}
int main()
{
int arr[5];
int i,a;
scanf("%d", &a);
for (i=0; i<5; i++)
{
scanf("%d", &arr[i]);
if (arr[i]<0)
arr[i]*=-1;
}
int max=arr[0];
int min=arr[0];
int n_max=0;
max = max_number(arr);
min=min_number(arr);
switch (a)
{
case 0:
printf("%d",max);
case 1:
printf("%d",min);
case 2:
printf("%d", max-min);
case 3:
for (i=n_max; i<10; i++)
{
sum+=arr[i];
}
printf("%d", sum);
}
return 0;
}
Такой получился код, но не могу понять, как перенести case 3 в отдельную функцию.
Ответы (1 шт):
#include <stdio.h>
int min_index(int* arr, unsigned int size) {
int idx = 0, min = abs(arr[0]);
for (unsigned int i = 1; i < size; i++)
if (abs(arr[i]) < min) {
min = abs(arr[i]);
idx = i;
}
return idx;
}
int max_index(int* arr, unsigned int size) {
int idx = 0, max = abs(arr[0]);
for (unsigned int i = 1; i < size; i++)
if (abs(arr[i]) > max) {
max = abs(arr[i]);
idx = i;
}
return idx;
}
void task(int what, int* arr, unsigned int size) {
switch (what) {
case 0:
printf("Max = %d\n", arr[max_index(arr, size)]);
return;
case 1:
printf("Min = %d\n", arr[min_index(arr, size)]);
return;
case 2:
printf("Max-min = %d\n",
arr[max_index(arr, size)] - arr[min_index(arr, size)]);
return;
case 3:
int sum = 0;
for (unsigned int i = max_index(arr, size); i < size;
++i) sum += arr[i];
printf("Sum = %d\n", sum);
return;
default:
puts("Incorrect data");
}
}
int main() {
int n, arr[100];
printf("Number of elements: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("arr[%d] = ", i);
scanf("%d", &arr[i]);
}
for (int q;;) {
printf("Action (-1 for quit): ");
scanf("%d", &q);
if (q == -1) break;
task(q, arr, n);
}
}
Теперь, когда все сделано за вас, вы довольны?