Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[ANSI C] Funkcja skaluj

Ostatnio zmodyfikowano 2017-01-29 21:57
Autor Wiadomość
selveee
Temat założony przez niniejszego użytkownika
[ANSI C] Funkcja skaluj
» 2017-01-19 23:02:01
Witam, mam do zrobienia zadanie:

Napisz funkcję void Skaluj (float t[N], int n) która przeskaluje elementy tablicy n liczb rzeczywistych danej jako parametr do przedziału [0;1] w ten sposób, że najiększa liczba w tablicy zamieniana jest na liczbę 1 a najmniejsza na 0, pozostałe zaś - odpowiednio. n to wymiar tablicy (definiuję go #define N 5 a potem przy wołaniu funkcji Skaluj (t, N) ale to mało ważne)

Problem w tym, że  niebardzo rozumiem treść zadania, nie wiem co miałbym tu zrobić, ktoś przysłuży mi odrobinką pomocy? :)

//edit

Dobra dobrnąłem do tego o co chodzi ale:

C/C++
void Skaluj( int t[ N ], int n )
{
    int maks, min, temp, i;
    float s;
    for( i = 0; i < N; i++ )
    {
        t[ i ] = rand() % 6;
        printf( "%d ", t[ i ] );
    }
    maks = t[ 0 ];
    min = t[ 0 ];
   
    for( i = 0; i < N; i++ )
    {
        if( t[ i ] > maks )
             maks = t[ i ];
       
        if( t[ i ] < min )
             min = t[ i ];
       
    }
    s = min / maks;
    printf( "Skala %f", s );
}

Po użyciu (sprawdzam póki co) nie wyświetla mi skali -tzn. wyświetla ale = 0, co jest tu nie tak :[
P-156693
karambaHZP
» 2017-01-19 23:45:13
Przykład:
tablica ma elementy 3 5 7 9 12
a ma być tablica przeskalowane na 0 . . . 1
więc zapamiętujesz:
C/C++
float min = 3;
float max = 12;
float max_scale = /*maksymalny element tablicy przeskalowanej, tutaj równy 1*/;
float distance = max - min; // 9

float current_diff = /*aktualny element tablicy*/ - min;
float scaling =( current_diff * max_scale ) / distance; // wyliczony aktualny przeskalowany element tablicy

edit:
s = min / maks;
Jeśli mniejszy
int
 podzielisz przez większy
int
,
wynikiem jest liczba
C/C++
0.// i część ułamkowa
.
Liczby typu całkowitego nie mają części ułamkowej, więc zostaje ci
0
.
Rozwiązaniem jest zmiana typu na zmiennoprzecinkowy, lub rzutowanie przynajmniej jednego z operandów na typ zmiennoprzecinkowy.
P-156696
selveee
Temat założony przez niniejszego użytkownika
» 2017-01-22 11:11:56
Czyli jest trochę inaczej niż myślałem na początku - koncepcja wyglądała całkiem inaczej i musiałem elementy tablicy zamieniać ręcznie na 0 i 1 a resztę skalować dzieląc min/maks :P

Dzięki za kilka rad i informacji, dam znać czy wszytko bangla i kod wstawię jeżeli to potrzebne :) (anuż komuś się przyda)
P-156773
selveee
Temat założony przez niniejszego użytkownika
» 2017-01-29 21:57:11
Przepraszam, że aż tak długo ale zapomniałem :P

C/C++
#include <stdio.h>
#define N 5

void Skaluj( int t[ N ], int n )
{
    int temp, i;
    float skala[ N ];
   
    float maks = t[ 0 ];
    float min = t[ 0 ];
   
    for( i = 0; i < N; i++ )
    {
        if( t[ i ] > maks )
             maks = t[ i ];
       
        if( t[ i ] < min )
             min = t[ i ];
       
    }
   
    for( i = 0; i < N; i++ )
    {
        skala[ i ] =( t[ i ] - min ) /( maks - min );
        printf( "%.2f ", skala[ i ] );
    }
}

main()
{
    srand( time( NULL ) );
    int i, t[ N ];
    for( i = 0; i < N; i++ )
    {
        t[ i ] = rand() % 10;
        printf( "%d ", t[ i ] );
    }
    printf( "\n\nELEMENTY PRZESKALOWANE\n" );
    Skaluj( t, N );
}
P-157112
« 1 »
  Strona 1 z 1