Отнормировать вещественный масиив
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
-
- Сообщения: 6
- Зарегистрирован: 10 дек 2015, 22:04
В вещественном массиве отнормировать все числа по максимальному элементу.Как это реализовать? заранее спасибо
-
- Сообщения: 6
- Зарегистрирован: 10 дек 2015, 22:04
Да так) А можете ygbcfnm код пожалуйста.Absurd писал(а):Найти максимальный по модулю элемент, потом поделить все элементы массива на него, или нет?
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
А что именно у тебя не получается в написании этого кода? Цикл написать не можешь? Или не понимаешь, как найти максимальное по модулю значение элемента?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 6
- Зарегистрирован: 10 дек 2015, 22:04
Romeo писал(а):А что именно у тебя не получается в написании этого кода? Цикл написать не можешь? Или не понимаешь, как найти максимальное по модулю значение элемента?
И цикл и max по модулю значение. Помогите пожалуйста
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Ну если всё так запущено, то моя помощь лишь повредит. Приложи хоть немного усилий сам. Воспользуйся гуглом в конце концов. Вот, например, по циклам тебе запрос.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Так не годится. Сначала напиши код который не работает, а мы поправим. А не то и так ракеты уже не летают в нашей стране. В США студенты процессоры сами делают. Русуют схематику на VHDL и несут их в лабораторию литографию делать.И цикл и max по модулю значение. Помогите пожалуйста
2B OR NOT(2B) = FF
Absurd Да кому это нужно, все же мечтают стать менеджером, что бы это не значило..
[syntax=Delphi] [/syntax]
Нет не так. Надо найти минимальный и максимальный элементы. Новое значение каждого элемента равно отношению разности его старого значения и старого минимума массива к разности старых максимума и минимума массива.desember12 писал(а):Да так) А можете ygbcfnm код пожалуйста.
Код: Выделить всё
template <typename Type> void Norm(Type *Data, size_t Count)//Значение Count и валидность указателя не проверяются
{
size_t i;
Type Min;
Type Max;
for (i=1, Min=Data[0], Max=Data[0]; i<Count; ++i)
{
if (Min>Data[i])
{
Min=Data[i];
}
if (Max<Data[i])
{
Max=Data[i];
}
}
for (i=0; i<Count; ++i)
{
Data[i]=(Data[i]-Min)/(Max-Min);
}
}
Код: Выделить всё
template <typename Type> void Norm(Type *Data, size_t Count)//Значение Count и валидность указателя не проверяются
{
size_t i;
Type Min;
Type Max;
Type Range;
for (i=1, Min=Data[0], Max=Data[0]; i<Count; ++i)
{
if (Min>Data[i])
{
Min=Data[i];
}
if (Max<Data[i])
{
Max=Data[i];
}
}
Range=Max-Min;
for (i=0; i<Count; ++i)
{
Data[i]=(Data[i]-Min)/Range;
}
}
Код: Выделить всё
template <typename Type> void Norm(Type *Data, size_t Count)//Значение Count и валидность указателя не проверяются
{
size_t i;
Type Min;
Type Max;
Type Range;
for (i=Count, Min=Data[0], Max=Data[0]; i>0; --i)
{
if (Min>Data[i])
{
Min=Data[i];
}
if (Max<Data[i])
{
Max=Data[i];
}
}
Range=Max-Min;
for (i=Count-1; i>=0; --i)
{
Data[i]=(Data[i]-Min)/Range;
}
}
Код: Выделить всё
template <typename Type> void Norm(Type *Data, size_t Count)//Значение Count и валидность указателя не проверяются
{
Type *Item;
Type Min;
Type *Max;
Type Range;
for (Item=Data+Count-1, Min=*Data, Max=Data; Item>Data; --Item)
{
if (Min>(*Item))
{
Min=(*Item);
}
if ((*Max)<(*Item))
{
Max=Item;
}
}
Range=(*Max)-Min;
for (Item=Data+Count-1; Item>=Data; --Item)
{
(*Item)=((*Item)-Min)/Range;
}
}
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Во-первых это не нормирование, т.к если в массиве числа в диапазоне [0.2 .. 1.0], то после такого нормирования они будут замаплены на диапазон [0..1], что неверно. Это похоже на какое-то автовыравнивание уровней в Фотошопе, когда самый темный серый превращается строго в черный, а самый светлый серый превращается в белый, но это не нормирование. Норма нуля по определению это 0, так как с точки зрения математики норма это расстояние точки от нуля в метрическом пространстве. Поэтому в результате нормирования ноль должен быть отображен на ноль, поскольку ноль это инвариант у операции "норма". Во-вторых для массива единичной длины Max - Min тождественно равно 0, и в результате массив из одного элемента вроде {1.2} превращается в {-nan(ind)} в результате вычисления (1.2-1.2)/(1.2-1.2). Кстати, то же самое будет если все элементы в массиве равны. Ну и в третьих оно всегда читает первый элемент, даже у массива нулевой длины, что неверно. Если массив нулевой длины, то первого элемента не существует физически.
Ну и по стилю: непонятно зачем делать тип элемента шаблонным параметром, когда можно сделать таковым тип самой последовательности, чтобы передавать туда std::vector<double>, например. Стиль передачи параметров указатель + длина характерен для Си не соответствует тому что принят в STL и современном С++ вообще (пара итераторов).
Ну и по стилю: непонятно зачем делать тип элемента шаблонным параметром, когда можно сделать таковым тип самой последовательности, чтобы передавать туда std::vector<double>, например. Стиль передачи параметров указатель + длина характерен для Си не соответствует тому что принят в STL и современном С++ вообще (пара итераторов).
2B OR NOT(2B) = FF