|
|
|
| Здраствуйте, я добавил функцию удаления копий максимальных элементов, подскажите пожалуйста, как вызвать ее в главной функции? Т.к у меня считает среднее арифметическое всех элементов, включая и простые копии максильных элементов, а мне нужно удалить копии максимальных элементов:
#include <iostream>
#include <math.h>
using namespace std;
int max(int *x, int n)
{
int max=x[0];
int Nmax=0, i=0;
for(i = 0; i<n; i++)
{
if(max<x[i])
{
max=x[i];
Nmax=i;
}
}
return Nmax;
}
bool prostoe(int n)
{
int i=0;
bool pr;
if(n<=2) return 0;
for(i=2; i<n/2; i++)
{
if(n%i==0) return pr;
}
}
// Удаляем копии максимальных элементов
void udal(int*x, int Nmax, int*n)
{
int i;
for(i=0; i<*n-1; i++)
{
if (x[i]==x[i-1])
{
do
{
Nmax=i;
x[Nmax-1]=x[Nmax];
Nmax++;
}while(Nmax<*n);
x[*n-1]=0;
i--;
realloc((int *)x,*n*sizeof(int));
}
}
}
int sr_arifm(int *x, int n)
{
int s;
int k, i;
for(s=0, i=0, k=0; i<n; s+=x[i], i++)
{
if(x[i]>0)
k++;
}
if(k) return s/k;
else return 0;
}
int main ()
{
int *x, Nmax, n,i;
double sr;
cout<<"n=";
cin>>n;
x=(int *)calloc(n,sizeof(int));
cout<<"vvedite massiv X=";
for(i=0; i<n; i++)
cin>>*(x+i);
Nmax=max(x,n);
if(prostoe(*(x+i)))
udal(x, i, &n);
else i++;
sr=sr_arifm(x, n);
cout<<"sr="<<sr<<"\n";
free(x);
system("pause");
return 0;
} |
| |
|
|
|
|
|
|
|
для: Cena
(02.01.2012 в 21:59)
| | Правильно ли я понимаю, что речь идет о функции void udal(int*x, int Nmax, int*n)? Тогда вам нужно просто подставить значения в неё после Nmax=max(x,n);, x и Nmax можно передать как есть, а в случае n придется передать адрес &n (не понятно, почему решили n сделать указателем, а не обычным числом)
| |
|
|
|
|
|
|
|
для: cheops
(03.01.2012 в 11:17)
| | Здраствуйте, да, речь идет о функции void udal(int*x, int Nmax, int*n), я исправил udal(x, Nmax, n), после этого ввел массив, состоящий из 3 элементов, к примеру, 13, 13, 1, тоесть 13-число простое и оно максимальное среди данных чисел, также имеются копия максимального числа, среднее арифметическое должно быть(13+1)/2=7, а у меня результат 5, тоесть у меня некорректно считает среднее арифметическое, вроде, элементы повторяющиеся удаляются, где-то ошибся.
#include <iostream>
#include <malloc.h>
using namespace std;
int max(int *x, int n)
{int max=x[0];
int Nmax=0, i=0;
for(i = 0; i<n; i++)
{
if(max<x[i])
{max=x[i];
Nmax=i;}}
return Nmax;
}
bool prostoe(int n)
{
int i=0;
bool pr;
if(n<=2) return 0;
for(i=2; i<n/2; i++)
{
if(n%i==0) return pr;
}
}
// Удаляем копии максимальных элементов
int udal(int *x, int Nmax, int n) // функция, определяющая элементы массива в единственном экземпляре
{
for (int i= 0; i<n; i++)
{
for (int j = i + 1; j < n ; j++)
{
if ( x[i] == x[j] ) // если найден одинаковый элемент
{
for (int j=Nmax; Nmax<n -1; Nmax++)
{
// выполнить сдвиг всех остальных элементов массива на -1, начиная со следующего элемента, после найденного дубля
x[Nmax] = x[Nmax+1];
}
n-=1; // уменьшить размер массива на 1
if (x[i] == x[j]) // если следующий элемент - дубль
{
j--; // выполнить переход на предыдущий элемент
}
}
}
}
return n;
}
int sr_arifm(int *x, int n)
{
int s;
int k, i;
for(s=0, i=0, k=0; i<n; s+=x[i], i++)
{
if(x[i]>0)
k++;
}
if(k) return s/k;
}
int main ()
{
int *x, Nmax, n,i;
double sr;
cout<<"n=";
cin>>n;
x=new int[n];
cout<<"vvedite massiv X=";
for(i=0; i<n; i++)
cin>>*(x+i);
Nmax=max(x,n);
if(prostoe(*(x))+i)
udal(x,Nmax,n);
sr=sr_arifm(x,n);
cout<<"sr="<<sr<<"\n";
free(x);
system("pause");
}
А в функции поиска максимального элемента, правильно ли я возвращаю номер максимального элемета return Nmax; или я должен вернуть n? | |
|
|
|
|