Не считается произведение - C (СИ)
Формулировка задачи:
Не считает произведение где ошибка? И если не сложно напишите вывод отсортированного массива.
#include <stdio.h> #include <math.h> int main(void) { const int N = 5; double arr[N]; for(int i = 0; i < N; i++) { printf("Vvedite znachenia massiva %d=>",i); scanf("%lf", &arr[i]); } int min = abs(arr[0]); int max = abs(arr[0]); int nomin = 0 ; int nomax = 0 ; int pr = 1; for(int i = 1; i < N; i++){ if (abs( arr[N]) > max) { max = abs (arr[N]); nomax = i; } if (abs( arr[N]) < min) { min = abs (arr[N]); nomin = i; } } if (nomin < nomax && nomin != nomax && nomax != nomin-1 && nomax != nomin+1){ for(int i = nomin+1; i < nomax;i++) pr *= arr[N]; } printf("pr= %lf",pr); int j; for (int i=0; i<N;i++) { for (int i = 0; j < N-i-1; j++) { if (arr[j]<arr[j+1]) { int buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } return 0; }
Решение задачи: «Не считается произведение»
textual
Листинг программы
#include <stdio.h> #include <math.h> #include <stdlib.h> int main(void) { const int N = 5; int arr[N]; //int int i; for(i = 0; i < N; i++) { printf("Vvedite znachenia massiva %d=>",i); scanf("%d", &arr[i]); } int min = abs(arr[0]); int max = abs(arr[0]); int nomin = 0 ; int nomax = 0 ; int pr = 1; int buf; for(i = 1; i < N; i++) { if (abs( arr[i]) > max) { max = abs (arr[i]); nomax = i; } if (abs( arr[i]) < min) { min = abs (arr[i]); nomin = i; } } //замена nomin nomax if(nomin > nomax) { buf=nomin; nomin=nomax; nomax=buf; } if (nomin < nomax && nomin != nomax && nomax != nomin-1 && nomax != nomin+1) { for(i = nomin+1; i < nomax;i++) { pr*=arr[i]; } } printf("pr= %d\n\n",pr); int j; for (i=0; i<N;i++) { for (j = 0; j < N-i-1; j++) //j { if (arr[j]<arr[j+1]) { buf = arr[j]; arr[j] = arr[j+1]; arr[j+1] = buf; } } } for(i=0;i<N;i++) { printf("%d ",arr[i]); } return 0; }
Объяснение кода листинга программы
- В начале программы объявляются переменные:
const int N = 5;
- N - количество элементов в массивеint arr[N];
- массив arr для хранения чиселint i;
- счетчик для циклаint min = abs(arr[0]);
- начальное значение минимального числаint max = abs(arr[0]);
- начальное значение максимального числаint nomin = 0;
- номер минимального числаint nomax = 0;
- номер максимального числаint pr = 1;
- произведение чиселint buf;
- временная переменная для обмена значениями
- Затем происходит заполнение массива arr числами, которые вводятся с клавиатуры. Для этого используется цикл
for
и функцияscanf()
. - Далее идет поиск минимального и максимального чисел в массиве с помощью цикла
for
и условных операторовif
. - Если найдено новое минимальное или максимальное число, то значения переменных
min
,max
,nomin
,nomax
обновляются. - Если найденные минимальное и максимальное числа удовлетворяют условию (меньше или равно текущему значению
pr
), то выполняется циклfor
, который перемножает все числа, начиная с индексаnomin
и заканчиваяnomax-1
. - В конце программы происходит сортировка массива arr по возрастанию с помощью алгоритма сортировки пузырьком.
- Выводится отсортированный массив arr через пробел.
- В конце программы возвращается 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д