01.06.2010, 15:07
общий
это ответ
Здравствуйте, Колотин Валерий Анатолиевич.
В Вашей программе много ошибок. Во-первых, Вы постоянно пытаетесь использовать какие-то загадочные переменные, которые даже не объявлены. Если Вы передаёте в функцию размерность массива size, то и в цикле использовать надо именно эту переменную. В функции вычисления среднего у Вас все действия в цикле, который только один раз и выполнится, учитывая, что Вы в него return вложили. Удаление элемента из массива происходит путём сдвига элементов, которые расположены после него, на одну позицию назад. Например, удалим 3 из массива 1 3 4 5. Для этого поместим 4 на место 3, а 5 на место 4, в результате получится массив 1 4 5, а размерность его надо уменьшить на 1. Через delete удалять будем уже весь массив в конце программы, чтобы освободить память. Разумеется, можно уменьшить размер выделенной памяти во время удаления элемента: для этого надо выделить память под массив N-1, переписать туда все элементы прежнего массива, кроме удаляемого, а потом удалить старый массив.
Первый вариант и Ваша исправленная програма в приложении.
Удачи!
Приложение:
#include <iostream.h>
void Array (double[], int);
double srAr (double[],int);
void DelAi (double[],int&,double); //удаление: массив, размерность, среднее
void main()
{
int N;
cout<<"Vvedite el N\n";
cin>>N;
double *x = new double[N];
Array(x,N);
DelAi (x, N, srAr(x, N));
cout << "Result: ";
for (int i=0; i<N; i++) //вывод результата
cout << x[i] << " ";
delete [] x; //освобождение памяти
}
void Array(double a[],int size)
{
cout<<"Vv el\n";
for (int i=0; i<size; i++) //надо использовать переменную size, а не какое-то неизвестное n
{
cin>>a[i];
cout<<endl;
}
}
double srAr(double a[], int size) //сюда надо передавать размер, а не какое-то загадочное k
{
double S=0;
for (int i=0; i<size; i++)
{
S=S+a[i]; //в цикле надо производить только суммирование
}
double k = S/size;
return k;
}
void DelAi (double a[], int &size, double sr) //функция удаления
{
for (int i=0; i<size; i++) { //идём по массиву
if (a[i]==sr) { //если попадается элемент, равный среднему
for (int j=i; j<size-1; j++) //удаляем
a[j]=a[j+1];
i--; //возвращаемся к элементу
size--; //уменьшаем количество
}
}
}