PDA

Показать полную графическую версию : Найти произведение между минимальным и максимальным элементом массива


artyomartemyev96
09-11-2014, 10:36
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<locale.h>
void main ()
{
setlocale(LC_ALL,"rus");
int i,n,min_index,max_index,k;
float *ptr,sum=0,p=1,max,min;
printf("Пожалуйста,введите размерность массива\n");
scanf("%d",&n);
ptr=(float*)malloc(n*sizeof(float));
if(ptr==NULL)
{
printf("Не хватает свободной памяти");
return;
}
for(i=0;i<n;i++)
{
printf("Введите элемент массива[%d]\n",i+1);
scanf("%f",ptr+i);
}
for(i=0;i<n;i++)
{ if(*(ptr+i)<0) sum+=*(ptr+i);
}
printf("Сумма отрицательных элементов массива = %.2f\n",sum);
max=*(ptr+i);
k=0;
for(i=0;i<n;i++)
{
if (*(ptr+i)>max)
{
max=*(ptr+i);
k=i;
}
}
max_index=k+1;
printf("Индекс максимального %d\n",max_index);
i=0;
min=*(ptr+i);
min_index=i;
for(i=0;i<n;i++)
if (*(ptr+i)<min)
{
min=*(ptr+i);
min_index=i;
}
printf("Индекс минимального %d\n",min_index+1);
if (min_index>max_index)
{
p=max_index;
max_index=min_index;
min_index=p;
}
p=1;
if (min_index+1==max_index) p=0; else
for (i=min_index;i<max_index;i++)
{
p*=*(ptr+i);
}
printf("Произведение элементов массива между минимальным и максимальным элементом равна = %.2f\n",p);
free(ptr);
ptr=0;
}
Почему при подсчете моего произведения программа находит произведение всего массива, ведь у меня цикл for (i=min_index;i<max_index;i++) до максимального элемента,где ошибка?

Drongo
15-11-2014, 03:41
Можете написать значения при которых происходит ошибка?

Два раза вводил значения в массив на 5 "мест" всё отработало нормально, индексы показало верные, произведение тоже.

Пара замечаний, код "причешите", не экономьте отступами\пробелами.

Лучше выводить значения, например: 2 * 6 * 8 * 9 = столько-то
Произведение элементов массива между минимальным и максимальным элементом равна
= 1728,00Ну и с массивом немножко визуальнее легче воспринималось бы вот так
Введите элемент массива[1] = 4
Введите элемент массива[2] = 2
Введите элемент массива[3] = 2
...
Кстати, а если рядом два одинаковых минимальных или максимальных, как быть?
Текущая кодовая страница: 1251
Пожалуйста,введите размерность массива
8
Введите элемент массива[1]
4
Введите элемент массива[2]
2
Введите элемент массива[3]
2
Введите элемент массива[4]
6
Введите элемент массива[5]
8
Введите элемент массива[6]
9
Введите элемент массива[7]
5
Введите элемент массива[8]
7
Сумма отрицательных элементов массива = 0,00
Индекс максимального 6
Индекс минимального 2
Произведение элементов массива между минимальным и максимальным элементом равна
= 1728,00
Пожалуйста,введите размерность массива




© OSzone.net 2001-2012