Program w C nie działa, prosze o pomoc z kodem.

0

Generalnie program musi generować kolejne wartości funkcji sinus w zależności danych podanych na początku.
Do programu podajemy takie wartości jak Amplituda, częstotliwość, kąt przesunięcia, czas początkowy i czas końcowy. Program musi wziąć częstotliwość, pomnozyć ją razy 2, następnie wyciąga z niej czas i na tej podstawie liczy zmienną p, czyli ilość pomiarow czasu. Generalnei chodzi o to, że program nawet nie działa. Może ktoś mi pomoże?

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


void tab2(double A, double f, double fi, double tp, double tk)
{
    int i;
    double fo, m, cz, p;
    double t[256];
    double sin1[256];
    fo = 2 * f;
    m = 1 / fo;
    cz = tk - tp;
    p = cz / m;
    for (i = 0; i <= p; i++)
        t[i] = tp + i * m;
    t[i] = tk;
    for (i = 0; i <= p; i++)
        sin1[i] = A * sin(2 * 3.14 * f + fi);
    for (i = 0; i <= p; i++)
    {
        printf("%lf", sin1[i]);
        puts("");
    }
}

int main()
{
    puts("uzupelnij dane: A, f, fi, tb, tk ");
    double tab[5];
    int i;
    for (i = 0; i < 5; i++)
        scanf("%lf", &tab[i]);
    tab2(tab[1], tab[2], tab[3], tab[4], tab[5]);
    return 0;
}
5
 tab2(tab[1], tab[2], tab[3], tab[4], tab[5]); 

Indeksowanie zaczyna się od 0, więc pierwszy element to tab[0] a ostatni tab[4]. Czyli UB.

0

Super, coś ruszyło, ale teraz za każdym razem wypluwa taką samą wartość dla sinusa.

1

Rety ponazywaj te zmienne jakoś po ludzku, bo tak to analizować to f, fo, m itp, to masakra jakaś a ja w pracy jestem, więc nie mogę ci poświęcić maksimum uwagi

0
void tab2(double A, double f, double fi, double tp, double tk) // A- amplituda, f-częstotliwość, fi- kąt przesunięcia, tp- czas poczatkowy, tk - czas końcowy. // 
{
    int i;
    double fo, m, cz, p; 
    double t[256];
    double sin1[256];
    fo = 2 * f; 
    m = 1 / fo;
    cz = tk - tp;
    p = cz / m; // ilość pomiarów czasu( w sensie ile pomiarów znajdzie się w tabicy z czasem)
    for (i = 0; i <= p; i++)
        t[i] = tp + i * m;
    t[i] = tk;
    for (i = 0; i <= p; i++)
        sin1[i] = A * sin(2 * 3.14 /t[i] + fi);
    for (i = 0; i <= p; i++)
    {
        printf("%lf", sin1[i]);
        puts("");
    }
}
 
int main()
{
    puts("uzupelnij dane: A, f, fi, tb, tk ");
    double tab[5];
    int i;
    for (i = 0; i < 5; i++)
        scanf("%lf", &tab[i]);
    tab2(tab[1], tab[2], tab[3], tab[4], tab[5]);
    return 0;
}
2

Rozpisz sobie na kartce, bo wzór:

A * sin(2 * 3.14 /t[i] + fi);

jest watpliwy.

Wieki nie miałam trygonometrii ale oczekiwałabym, że to będzie na zasadzie

A * sin(t[i] % 2 * 3.14 + fi);

(nie wnikałam czy t[i] jest poprawne).

3

Przecież nie naprawiłaś/łeś błędu związanego z tab[5], o którym wspomniała @szarotka

I nazywaj zmienne po ludzku nie znaczy dodanie komentarzy, ale zmiana nazw zmiennych tak, by komentarze nie były potrzebne. Funkcja o nazwie tab2 to już mistrzostwo świata.

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