[C++] Obrót punktów


(Sebikom) #1

Witam próbuje napisać program na poniższe zadanie ale system sprawdzający cos go nie przyjmuje.

Napisz program który wczyta współrzędne punktów na płaszczyźnie a następnie wypisze współrzędne tych punktów obróconych o kat α względem środka układu współrzędnych.

Dane wejściowe składają się z n+1 wierszy. Zawierąjacych po dwie liczby całkowite oddzielone spacją. W pierwszym wierszu znajduje się liczba punktów i kat α podany w stopniach. W kolejnych wierszach zpisane są współrzędne punktów.

Przyklad:

3 180

0 1

1 1

2 10

Wynik:

0 -1

-1 -1

-2 -10

Oto mój kod

#include 

#include 


int main()

{

    int n,i;

    double k,r1,r2;

    double x[100];

    double y[100];

    scanf("%d %lf",&n ,&k);


    r1=sin (k*M_PI/180);

    r2=cos (k*M_PI/180);


    for(i=0;i
    {

        scanf("%lf %lf",&x[i],&y[i]);

        x[i]=(x[i]*r2)-(y[i]*r1);

        y[i]=(x[i]*r1)+(y[i]*r2);

    }



    for(i=0;i
    {

        printf ("%lf %lf \n", x[i], y[i]);

    }

}

(pebal) #2

Zakładam, że na końcu funkcji main, brakuje

return 0;

Bardzo częsty błąd obliczeń, na pierwszy rzut oka niewidoczny.

Zwróć uwagę, że modyfikujesz wartość x i już zmodyfikowaną wykorzystujesz w obliczeniu y__.


(Sebikom) #3

Faktycznie, ten bład powstał przy kombinowaniu, lecz po poprawieniu tego dalej jest coś źle.

Za ten program dostaje 1 na 2 pkt.

-- Dodane 13.12.2009 (N) 0:02 --

Dobra mam , temat można zamknąć. Program świrował na double, a na int działa poprawnie i daje maxa

#include 

#include 


int main()

{

    int n,i,k,r1,r2;

    int x[100];

    int y[100];

    int x2[100];

    int y2[100];

    scanf("%d %d",&n,&k);


    r1=sin (k*M_PI/180);

    r2=cos (k*M_PI/180);


    for(i=0;i
    {

        scanf("%d %d",&x[i],&y[i]);

        x2[i]=(x[i]*r2)-(y[i]*r1);

        y2[i]=(x[i]*r1)+(y[i]*r2);

    }


    for(i=0;i
    {

        printf("%d %d\n",x2[i],y2[i]);

    }

}