Найти произведение (ненулевых) элементов массива, находящихся на позициях, кратных числу 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("");
- }
Объяснение кода листинга программы
Код выполняет следующие действия:
- Задает размер массива 18 и инициализирует его нулями.
- Выводит на экран начальное значение массива.
- Находит минимальное и максимальное значение в массиве и выводит их на экран.
- Вычисляет произведение ненулевых элементов, находящихся на позициях, кратных 3.
- Выполняет сортировку по возрастанию всех элементов на местах, не кратных числу 3.
- Выводит на экран отсортированный массив. Список действий:
- Задать размер массива и инициализировать его нулями.
- Вывести на экран начальное значение массива.
- Найти минимальное и максимальное значение в массиве и вывести их на экран.
- Вычислить произведение ненулевых элементов, находящихся на позициях, кратных 3.
- Выполнить сортировку по возрастанию всех элементов на местах, не кратных числу 3.
- Вывести на экран отсортированный массив.
Пояснение к коду:
- Функция
MaxMin
находит минимальное и максимальное значение в массиве и выводит их на экран. - Функция
increase
выполняет сортировку по возрастанию всех элементов на местах, не кратных числу 3. - Функция
mul
вычисляет произведение ненулевых элементов, находящихся на позициях, кратных 3. - Функция
print
выводит на экран значения массива в заданном формате. - Функция
swap
меняет местами значения двух переменных. - Функция
swap_i
меняет местами значения двух переменных, используя указатели. - Функция
seed_arr
случайным образом меняет значения элементов массива. - В функции
main
создается массив, инициализируется значениями от 0 до 17, затем в него вносятся случайные изменения. - После этого на экран выводится текущее значение массива, затем находятся минимальное и максимальное значение, вычисляется произведение ненулевых элементов на позициях, кратных 3, и выполняется сортировка по возрастанию всех элементов на местах, не кратных числу 3.
- Наконец, на экран выводится отсортированный массив.
- Функция
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д