Spellejk Temat założony przez niniejszego użytkownika |
Tablica typu float » 2017-11-30 10:50:28 Witam. Otóż mam dość irytujący problem. Mam do zrobienia takie o to zadanie: "Napisać program tablicujący funkcję y=A*x^2+B w przedziale od 0.0 do 1.0 co 0.1 dla podanych przez użytkownika wartości parametrów A i B." Oczywiście jest to robione na Linux. Tutaj kod, który zrobiłem ale nie działa jedna rzecz. Gdy chce wpisać wartości obliczonego "y" do tablicy wyskakuje błąd: "array subscript is not an integer tablica =y;"
#include <stdio> #include <math.h>
int main() { float A, B, y, x; float tablica[ 10 ]; printf( "Podaj wartosci A i B:\n" ); scanf( "%f%f", & A, & B ); for( float i = 0.0; i <= 1.0; i += 0.1 ) { y = A * pow( i, 2 ) + B; tablica[ i ] = y; } for( int i = 0; i < 10; i++ ) printf( "Tablica zawiera %f \n", tablica[ i ] ); return 0; } Kompletnie nie mam już żadnego pomysłu jak to zrobić. |
|
maly7 |
» 2017-11-30 11:42:42 Przy odwoływaniu do elementu tablicy musisz podać liczbę całkowitą, ty natomiast podajesz float: for( float i = 0.0; i <= 1.0; i += 0.1 ) ... tablica[ i ] = y; |
|
YooSy |
» 2017-11-30 11:43:10 Indeks tablicy musi być liczbą całkowitą. Ż względu na przybliżone wartości przechowywanych liczb zmiennoprzecinkowch w pamięci takie porównanie może nie być precyzyjne i pętla może zrobić jeszcze jeden obrót. http://eduinf.waw.pl/inf/utils/001_2008/0119.php |
|
Spellejk Temat założony przez niniejszego użytkownika |
» 2017-11-30 11:48:26 Tak zgadza się ale jak "y" musi być typu float czyli pętla float to jak to zrobić żeby tablica była zliczana jako int? |
|
YooSy |
» 2017-11-30 11:56:07 Dodaj drugi licznik pętli reprezentujący indeks tablicy. |
|
maly7 |
» 2017-11-30 13:03:18 Możesz też zrobić coś takiego: tablica[( int )( i * 10 ) ] = y; Albo odwrotnie, w pętli int, a we wzorze i/10. |
|
Spellejk Temat założony przez niniejszego użytkownika |
» 2017-11-30 13:28:12 @maly7 niestety to nie działa tak jak trzeba ale błędu nie ma chociaż. @YooSy próbowałem też na 2 pętle ale coś mi nie wyszchodziło: for( float i = 0.0; i <= 1.0; i += 0.1 ) { y = A * pow( i, 2 ) + B; for( int j = 0; j < 10; j++ ) tablica[ j ] = y; } Ale to nie działa. :( Wyswietla tylko ostatnia wartosc tego obliczonego "y" wszedzie. |
|
Anim |
» 2017-11-30 13:42:54 Mam wrażenie, że nikt nie odpowiedział koledze ^^ pętla for z floatem jest nienajlepszym rozwiązaniem ze względów, o których wspomniał @YoSoo w drugiej wiadomości :) Zauważ, że zdefiniowanie tablicy: powołuje do życia tablicę 10 elementową, w której każdy element będzie floatem... i tutaj dochodzimy do meritum: liczba 10 jest indeksem, jak odliczasz 'przedmioty', to odliczasz 0, 1, 2, 3, 4...i tak dalej... a to, że to co jest w środku pod danym indeksem (adresem) jest typu float, to inna sprawa... dlatego Twoja pętla powinna wyglądać tak: for( int i = 0; i < 10; i++ ) { tablica[ i ] = y; }
a jeśli chcesz podnosić do potęgi floatowej, to rozwiązanie jest takie: float zmienna = 0.0;
for( int i = 0; i < 10; i++ ) { y = A * pow( zmienna, 2 ) + B; tablica[ i ] = y; zmienna += 0.1; }
|
|
« 1 » 2 |