O co chodzi w tym zadaniu?

0

Cześć.

Czy możecie mi powiedzieć o co autorowi chodziło w tym zadaniu? :)
Zadeklarować typ tablicowy

typedef double tx[N][2].

Opracować funkcję, która wyznacza wartości funkcji

double f(double)

w przedziale [min, max] dla N punktów postaci

xi = min + i*d

gdzie

d=(max-min) / (N-1)

oraz

i=0,1,...,N-1(N – stała)

.

Obliczone elementy

xi, f(xi)

powinny być zapamiętane w tablicy T typu tx w sposób następujący:

T[i][0] = xi

oraz T[i][1] = f(xi)


Prototyp funkcji:
```c
void oblicz(double min, double max,int n, tx T, wskaźnik_funkcji)

W programie głównym wykonać obliczenia dla funkcji sin w przedziale [-pi/2, pi/2].

O co pyta podmiot liryczny? :)

Zadanie to jest ćwiczeniem ze wskaźników do funkcji, które same w sobie są bardzo proste. Popełniłem coś takiego:

#include <stdio.h>
#include <math.h>

// Użyłem makra gdyż dla zwykłej stałej w postaci const int N=20; kompilator wyrzuca błąd.
#define N 20

// Zmienna jest globalna żeby funkcja oblicz znała typ 'tx'.
typedef double tx[N][2];

double oblicz(double min, double max, int n, tx T, double (*wsk)(double)){
    int i;
    double xi,d=max-min;
    for(i=0;i<n;i++){
        xi=(min+i*d)/(n-1);
        T[i][0]=xi;
        T[i][1]=wsk(xi);
    }
    return 0;
}


int main(void){
    tx tab;
    oblicz(-3.14/2,3.14/2,N,tab,sin);
    int i;
    for(i=0;i<N;i++){
        if(i%2) printf("\t");
        else printf("\n");
        printf("[%3.2lf][%3.2lf] ",tab[i][0],tab[i][1]);
    }

    printf("\n");
}

Pozdrawiam
Grzesiek

0

Ma być: xi=min+i*d/(n-1);
A jakie jest właściwie pytanie?

0

Pytanie brzmi czy to jest dobrze zrobione?

Rzeczywiście w pętli powinno być:

xi=min+i*d;

natomiast:

d=(max-min)/(N-1)

Tutaj się machnąłem, ponieważ niedokładnie przepisałem wzory z treści zadania.

Treść jest dość zagmatwana i stąd powyższe pytanie. Czy w ogóle to jest prawidłowe rozwiązanie?

1

Samo zadanie jest niezbyt poprawnie wymyślone (int n nie powinno być przekazywane do funkcji ponieważ rozmiar tablicy masz N).
Rozwiązanie całkiem poprawne jeżeli nie liczyć WTF przy wyświetleniu:

        if(i%2) printf("\t");
        else printf("\n");

1 użytkowników online, w tym zalogowanych: 0, gości: 1