[ANSI C] Funkcja skaluj
Ostatnio zmodyfikowano 2017-01-29 21:57
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: 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 :[ |
|
karambaHZP |
» 2017-01-19 23:45:13 Przykład: tablica ma elementy 3 5 7 9 12a ma być tablica przeskalowane na 0 . . . 1więc zapamiętujesz: float min = 3; float max = 12; float max_scale = ; float distance = max - min;
float current_diff = - min; float scaling =( current_diff * max_scale ) / distance;
edit: Jeśli mniejszy int podzielisz przez większy int , wynikiem jest liczba . 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. |
|
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) |
|
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 #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 ); }
|
|
« 1 » |