Напечатать в обратном порядке наибольший элемент последовательности и его номер в массиве - C (СИ) (74896)

Узнай цену своей работы

Формулировка задачи:

Всем добра) Ребята как выполнить эти задания? Дан массив из N целых чисел, где N<=16, каждое число в диапазоне от –32000 до 32000. Массив для каждой задачи должен задаваться в секции объявлений глобальных переменных, например:
int A[16] = {85,-3,13,94,72,169,-21,43,57,46,9,12,83,101,49,28};
 
int B[16] = {18,21,563,-412,84,-17,520,321,121,954,7,19,883,10,17,1};
Примечание: · Массив перед обработкой и после обработки распечатать в виде строки чисел. · Массив должен задаваться в секции объявлений. · В программе необходимо использовать функции с передаваемыми параметрами. · Рекомендуется использовать операции целочисленной арифметики. Если в массиве отсутствует искомый элемент, то об этом следует вывести сообщение. Задание. Определение характеристик массива.Две задачи решаются в рамках одной программы.

Напечатать в обратном порядке наибольший элемент последовательности и его номер в массиве. Пример: 1 5 16 234 587 14; результат: R=785, i=5.

Найти сумму всех элементов, состоящих только из разных цифр. Пример: 32 122 343 166 -2 521; результат: 32+521+(-2)=551.

Решение задачи: «Напечатать в обратном порядке наибольший элемент последовательности и его номер в массиве»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
 
//-----------------------------------------------------------------------------
void Print(const int array[], unsigned size) {
    unsigned i;
 
    for (i = 0; i < size; ++i) {
        printf("%d ", array[i]);
    }
    printf("\n");
}
//-----------------------------------------------------------------------------
unsigned GetMax(const int array[], unsigned size) {
    unsigned i;
    unsigned max = 0;
 
    for (i = 1; i < size; ++i) {
        if (array[max] < array[i]) {
            max = i;
        }
    }
 
    return max;
}
//-----------------------------------------------------------------------------
unsigned NumberToDigits(unsigned number, unsigned digit[]) {
    if (number == 0) {
        return 0;
    }
 
    *digit = number % 10;
    return 1 + NumberToDigits(number / 10, digit + 1);
}
//-----------------------------------------------------------------------------
bool IsUnique(int number) {
    unsigned digits[10];
 
    unsigned len = NumberToDigits(abs(number), digits);
    bool isUnique = true;
    unsigned i, j;
    for (i = 0; (i < len - 1) && isUnique; ++i) {
        for (j = i + 1; (j < len) && isUnique; ++j) {
            isUnique = (digits[i] != digits[j]);
        }
    }
 
    return isUnique;
}
//-----------------------------------------------------------------------------
int Sum(const int array[], unsigned size, bool (*Func)(int)) {
    unsigned i;
    int sum = 0;
 
    for (i = 0; i < size; ++i) {
        if (Func(array[i])) {
            sum += array[i];
        }
    }
 
    return sum;
}
//-----------------------------------------------------------------------------
 
int main() {
    int A[] = {32, 122, 343, 166, -2, 521};
    unsigned size = sizeof(A) / sizeof(*A);
 
    unsigned max = GetMax(A, size);
 
    Print(A, size);
    printf("max[%u] = %d\n", max + 1, A[max]);
 
    printf("sum = %d\n", Sum(A, size, IsUnique));
 
    return 0;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы