Найти произведение (ненулевых) элементов массива, находящихся на позициях, кратных числу 3 - C (СИ)

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

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

Программа запускается но выводит не то, что нужно. Задание: Дан массив из 18 вещественных чисел, все элементы которого различны. 1) Найти произведение (ненулевых) элементов массива, находящихся на позициях, кратных числу 3. 2) Найти квадраты всех чисел, расположенных между минимальным и максимальным значениями. 3) Упорядочить по возрастанию элементы, находящиеся на местах, не кратных числу 3.
#include <stdio.h>
#define SIZE 18
 
void search(int [], int);
void MaxMin(int [], int);
void increase(int [], int);
 
int main()
{
int arr[SIZE] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
 
search(arr, SIZE);
MaxMin(arr, SIZE);
increase(arr, SIZE);
 
return 0;
}
 
void search(int a[], int size) //произведение на позициях кратных трем
{
int f1 = 1;
int i;
for (i = 0; i < size; i++)
{
if (i % 3 == 0)
{
f1 *= a[i];
}
}
 for(i = 0; i < size; i++)
    printf("% d", a[i]);
}
 
void MaxMin(int a[], int size) //нахождение квадратов
{
int max = a[0], min = a[0];
int A[size]; //в этом массиве будут храниться все квадраты нужных нам чисел
int i;
 
for (i = 0; i < size; i++)
{
if (max < a[i])
{
max = i;
}
if (min > a[i])
{
min = i;
}
}
 
int begin = min < max ? min : max;
int end = min > max ? min : max;
 
for (i = 0; begin <= end; begin++)
{
A[i] = a[begin] * a[begin];
i++;
}
for(i = 0; i < size; i++)
    printf("% d", A[i]);
}
void increase(int a[], int size) //сортировка по возрастанию всех элементов не кратных трем
{
int hold;
int i, j;
 
for (i = 0; i < size; i++)
 
for (j = 0; j < size; j++)
if (i % 3 != 0 && a[i] > a[i + 1])
{
hold = a[i];
a[i] = a[i + 1];
a[i + 1] = hold;
}
for( i = 0; i < size; i++)
printf("% d", a[i]);
}

Решение задачи: «Найти произведение (ненулевых) элементов массива, находящихся на позициях, кратных числу 3»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 18
 
void MaxMin(float[], int);
void increase(float[], int);
float mul(float a[], int size);
void print(float a[], int size) {
    int i = 0;
    for (i = 0; i < size; ++i)
        printf("%6.0f", a[i]);
 
}
void swap(float *a, float *b) {
    float t = *a;
    *a = *b;
    *b = t;
}
 
void swap_i(int *a, int *b) {
    int t = *a;
    *a = *b;
    *b = t;
}
void seed_arr(float *a, int sz){
        srand(time(0));
        int i = 0;
        for (i = 0; i < SIZE; ++i)
            swap(&a[i], &a[rand() % 18]);
}
 
int main() {
    float arr[SIZE] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
            16, 17 };
    seed_arr(arr, SIZE);
    puts("Massiv:");
    print(arr, SIZE);
    MaxMin(arr, SIZE);
    increase(arr, SIZE);
    printf("\nAfter mul %6.0f\n", mul(arr, SIZE));
 
    return 0;
}
// Найти произведение (ненулевых) элементов массива,
// находящихся на позициях, кратных числу 3.
float mul(float a[], int size) //произведение на позициях кратных трем
{
    float f1 = 1;
    int i;
    for (i = 0; i < size; i++) {
        if (i != 0 && (i % 3 == 0 && a[i] > 0)) {
            //printf("%4.0f ", a[i]);
            f1 *= a[i];
        }
    }
    return f1;
}
// Найти квадраты всех чисел, расположенных между минимальным и
// максимальным значениями.
void MaxMin(float a[], int size) //нахождение квадратов
{
    int max = 0, min = 0;
    int i;
 
    for (i = 1; i < size; i++) {
        if (a[max] < a[i])
            max = i;
        if (a[min] > a[i])
            min = i;
    }
    if (min > max)
        swap_i(&min, &max);
 
    printf("\nmin=%d max=%d\n", min, max);
 
    puts("\nKvadraty");
    for (i = 0; i < size; i++)
        if (i > min && i < max)
            printf("% 6.0f", a[i] * a[i]);
        else
            printf("% 6.0f", a[i]);
    puts("");
}
 
//сортировка по возрастанию всех элементов на местах, не кратных числу 3.
void increase(float a[], int size) {
    float hold;
    int i, j;
 
    for (i = 0; i < size - 1; ++i) // i - номер прохода
            {
        for (j = 0; j < size - 1; ++j) // внутренний цикл прохода
                {
            int k = j + 1;
            if (j != 0 && (j % 3 == 0))
                continue;
            if (k % 3 == 0)
                k = k + 1;
            if ((a[j]> a[k])) {
 
                swap(&a[j], &a[k]);
            }
        }
    }
    puts("After sort");
    print(a, SIZE);
    puts("");
}

Объяснение кода листинга программы

Код выполняет следующие действия:

  1. Задает размер массива 18 и инициализирует его нулями.
  2. Выводит на экран начальное значение массива.
  3. Находит минимальное и максимальное значение в массиве и выводит их на экран.
  4. Вычисляет произведение ненулевых элементов, находящихся на позициях, кратных 3.
  5. Выполняет сортировку по возрастанию всех элементов на местах, не кратных числу 3.
  6. Выводит на экран отсортированный массив. Список действий:
  7. Задать размер массива и инициализировать его нулями.
  8. Вывести на экран начальное значение массива.
  9. Найти минимальное и максимальное значение в массиве и вывести их на экран.
  10. Вычислить произведение ненулевых элементов, находящихся на позициях, кратных 3.
  11. Выполнить сортировку по возрастанию всех элементов на местах, не кратных числу 3.
  12. Вывести на экран отсортированный массив. Пояснение к коду:
    • Функция MaxMin находит минимальное и максимальное значение в массиве и выводит их на экран.
    • Функция increase выполняет сортировку по возрастанию всех элементов на местах, не кратных числу 3.
    • Функция mul вычисляет произведение ненулевых элементов, находящихся на позициях, кратных 3.
    • Функция print выводит на экран значения массива в заданном формате.
    • Функция swap меняет местами значения двух переменных.
    • Функция swap_i меняет местами значения двух переменных, используя указатели.
    • Функция seed_arr случайным образом меняет значения элементов массива.
    • В функции main создается массив, инициализируется значениями от 0 до 17, затем в него вносятся случайные изменения.
    • После этого на экран выводится текущее значение массива, затем находятся минимальное и максимальное значение, вычисляется произведение ненулевых элементов на позициях, кратных 3, и выполняется сортировка по возрастанию всех элементов на местах, не кратных числу 3.
    • Наконец, на экран выводится отсортированный массив.

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


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

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

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