Найти произведение (ненулевых) элементов массива, находящихся на позициях, кратных числу 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.
- Наконец, на экран выводится отсортированный массив.
- Функция
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д