Написать функцию, которая принимает в качестве параметров два указателя на массивы.
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Помогите пожалуйста с написанием программы на языке си:Написать функцию, которая принимает в качестве параметров два указателя на массивы и возвращает указатель на массив, удовлетворяющий условию:
Среднее арифметическое массива должно быть наиболее приближенным к нулю.Заранее спасибо)
Среднее арифметическое массива должно быть наиболее приближенным к нулю.Заранее спасибо)
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Непонятно каким образом должны участвовать в вычислениях входные массивы, и зачем они вообще передаются, если внутри функции они не нужны.
Ещё неясно, что такое "наиболее приближенным к нулю". Если мы заполняем выходной массив самостоятельно, то нам ничего не мешает сделать среднее арифметическое равным нулю без всяких "приближений".
Сам-то ты понимаешь, как должна работать программа? Может преподаватель выдал какие-то устные уточнения, которые ты здесь не привёл?
И ещё, скажу сразу, что код программы я полностью писать не готов в педагогических целях. Могу помочь советом по синтаксису или по идее алгоритма, но не более того. Студент должен учиться и набивать шишки сам, иначе толка в учёбе нет.
Ещё неясно, что такое "наиболее приближенным к нулю". Если мы заполняем выходной массив самостоятельно, то нам ничего не мешает сделать среднее арифметическое равным нулю без всяких "приближений".
Сам-то ты понимаешь, как должна работать программа? Может преподаватель выдал какие-то устные уточнения, которые ты здесь не привёл?
И ещё, скажу сразу, что код программы я полностью писать не готов в педагогических целях. Могу помочь советом по синтаксису или по идее алгоритма, но не более того. Студент должен учиться и набивать шишки сам, иначе толка в учёбе нет.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Вероятно, функция должна сравнивать среднее арифметическое значений массивов, переданных по ссылке и возвращать ссылку на тот массив, у которого оно наиболее приближено к нулю. Массивы должны заполнятся рандомно.
(Декодирую условия задач по информатике! Недорого!)
(Декодирую условия задач по информатике! Недорого!)

It's a long way to the top if you wanna rock'n'roll
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Спасибо, somewhere. А мог бы и сам догадаться, чёрт побери 
Pahom, тогда алгоритм весьма прост.
1. Считаем среднее арифметическое первого массива (складываем элементы в цикле и делим на количество элементов).
2. Считаем среднее арифметическое второго массива.
3. Сравниваем первое и второе число по модулю (модуль вычисляется с помощью функции fabs).
4. Если результат сравнения меньше, то возвращаем указатель на первый массив, иначе - указатель на второй массив.

Pahom, тогда алгоритм весьма прост.
1. Считаем среднее арифметическое первого массива (складываем элементы в цикле и делим на количество элементов).
2. Считаем среднее арифметическое второго массива.
3. Сравниваем первое и второе число по модулю (модуль вычисляется с помощью функции fabs).
4. Если результат сравнения меньше, то возвращаем указатель на первый массив, иначе - указатель на второй массив.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ну как же не нужны, если в условии использованы их средние арифметические?Romeo писал(а):Непонятно каким образом должны участвовать в вычислениях входные массивы, и зачем они вообще передаются, если внутри функции они не нужны.
Код: Выделить всё
double Compare(double *x, size_t XCount, double *y, size_t YCount)
{
double *p;
double *e;
double sx;
double sy;
for (p=x, e=p+XCount-1, sx=0.0; p<=e; ++p)
{
sx+=*p;
}
sx/=XCount;
if (sx<0.0)
{
sx=-sx;
}
for (p=y, e=p+YCount-1, sy=0.0; p<=e; ++p)
{
sy+=*p;
}
sy/=YCount;
if (sy<0.0)
{
sy=-sy;
}
if (sx<sy)
{
return x;
}
return y;
}
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Подбор входных данных не имеет ни какого отношения к решению задачи. Массивы даны, требуется выбрать из них тот, чьё среднее арифметическое имеет меньший модуль.Romeo писал(а):Если мы заполняем выходной массив самостоятельно, то нам ничего не мешает сделать среднее арифметическое равным нулю без всяких "приближений".
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Она здесь нафиг не нужна.Romeo писал(а):3. Сравниваем первое и второе число по модулю (модуль вычисляется с помощью функции fabs).
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Собственно, как обычно. А слабо было прочитать всё сразу и увидеть, что проблема непонимания условия уже решена? Нет, я отлично осознаю, что не барское это занятие прочесть всё сразу. Куда правильнее читать по одному посту и отвечать на каждый, даже если посты уже не актуальны. Но ты всё-таки как-то держи себя в руках 
А по поводу того, что fabs не нужна, это уж твоя проблема, что любишь велосипед изобретать. Ты не задумывался над тем, что если бы эта функция была бы не нужна, то её бы и не было в библиотеке? В чём её преимущество перед твоим ручным условием и ручной сменой знака внутри, мне нужно объяснять? Или слова об очистке конвейера команд и MMX оптимизации слишком сложны будут для понимания?

А по поводу того, что fabs не нужна, это уж твоя проблема, что любишь велосипед изобретать. Ты не задумывался над тем, что если бы эта функция была бы не нужна, то её бы и не было в библиотеке? В чём её преимущество перед твоим ручным условием и ручной сменой знака внутри, мне нужно объяснять? Или слова об очистке конвейера команд и MMX оптимизации слишком сложны будут для понимания?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Она не нужна здесь. Да, в библиотеке можно сделать побитовое И с маской, сбрасывающей знаковый бит, а в зависимости от реализации менять маску, а в приладе это - путь к непереносимости. Но задача оптимизации не стоит. При этом само значение модуля нафиг не нужно, можно иRomeo писал(а):А по поводу того, что fabs не нужна, это уж твоя проблема, что любишь велосипед изобретать. Ты не задумывался над тем, что если бы эта функция была бы не нужна, то её бы и не было в библиотеке?
Код: Выделить всё
if (((sx<0.0)&&(sy<0.0)&&(sx>sy))||((sx>=0.0)&&(sy<0.0)&&(sx<-sy))||((sx<0.0)&&(sy>=0.0)&&(sy>-sx))
{
return x;
}
return y;
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ога. Конвейер уже алгоритмы портит. Не смешно.Romeo писал(а):Или слова об очистке конвейера команд
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.