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

Tablica typu float

Ostatnio zmodyfikowano 2017-11-30 14:02
Autor Wiadomość
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;"

C/C++
#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ć.
P-167412
maly7
» 2017-11-30 11:42:42
Przy odwoływaniu do elementu tablicy musisz podać liczbę całkowitą, ty natomiast podajesz float:
C/C++
for( float i = 0.0; i <= 1.0; i += 0.1 )
...
     tablica[ i ] = y;
P-167414
YooSy
» 2017-11-30 11:43:10
Indeks tablicy musi być liczbą całkowitą.

i <= 1.0
Ż 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
P-167415
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?
P-167416
YooSy
» 2017-11-30 11:56:07
Dodaj drugi licznik pętli reprezentujący indeks tablicy.
P-167417
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.
P-167419
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:
C/C++
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.
P-167420
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:

C/C++
float tablica[ 10 ];

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:

C/C++
for( int i = 0; i < 10; i++ )
{
    tablica[ i ] = y;
}

a jeśli chcesz podnosić do potęgi floatowej, to rozwiązanie jest takie:

C/C++
float zmienna = 0.0;

for( int i = 0; i < 10; i++ )
{
    y = A * pow( zmienna, 2 ) + B;
    tablica[ i ] = y;
   
    zmienna += 0.1; // tutaj zwiększasz liczbę float :)
}
P-167421
« 1 » 2
  Strona 1 z 2 Następna strona