Отнормировать вещественный масиив
Добавлено: 10 дек 2015, 22:05
В вещественном массиве отнормировать все числа по максимальному элементу.Как это реализовать? заранее спасибо
Да так) А можете ygbcfnm код пожалуйста.Absurd писал(а):Найти максимальный по модулю элемент, потом поделить все элементы массива на него, или нет?
Romeo писал(а):А что именно у тебя не получается в написании этого кода? Цикл написать не можешь? Или не понимаешь, как найти максимальное по модулю значение элемента?
Так не годится. Сначала напиши код который не работает, а мы поправим. А не то и так ракеты уже не летают в нашей стране. В США студенты процессоры сами делают. Русуют схематику на VHDL и несут их в лабораторию литографию делать.И цикл и max по модулю значение. Помогите пожалуйста
Нет не так. Надо найти минимальный и максимальный элементы. Новое значение каждого элемента равно отношению разности его старого значения и старого минимума массива к разности старых максимума и минимума массива.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;
}
}