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++) до максимального элемента,где ошибка?
#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++) до максимального элемента,где ошибка?