Obliczenie azymutu ze współrzędnych wersja C++ Builder



Podobne dokumenty
Obliczenie azymutów ze współrzędnych punktów tablica struktur punktów, tablica struktur azymutów

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Niniejszy ebook jest własnością prywatną. Został zakupiony legalnie w serwisie Netpress.pl, będącym oficjalnym Partnerem Wydawcy.

Obliczenie azymutów ze współrzędnych punktów Azymuty i długości - tablica struktur, funkcje, zapis wyników do pliku

PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ

Programowanie w środowisku graficznym. Ćwiczenia 01 Wprowadzenie do C++Builder VCL

Wprowadzenie do systemu Delphi

Pole trójkąta ze współrzędnych punktów : P1(x1,y1), P2(x2,y2), P3(x3,y3)

Programowanie w środowiskach RAD Język C++ w środowiskach RAD

// Funkcja glowna int main() { // zmienne int kont='t'; double x1, y1, x2, y2, x3, y3, a, b, c, p1, p2, p3, pole, ha, hb, hc;

Darmowa publikacja dostarczona przez

Po uruchomieniu Lazarusa należy wybrać z paska górnego opcję Projekt i następnie Nowy Projekt. Pokaże się okno:

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Wprowadzenie 5 Rozdział 1. Środowisko programisty IDE C++Builder

Obliczenie ciągów poligonowych otwartych, obustronnie nawiązanych

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Obliczenie pola wieloboku na podstawie współrzędnych wierzchołków

Programowanie Wizualno Obiektowe - zajęcia 5 (PWO_BCPP_5_1) 1 Tworzenie plików pomocy Programowanie Wizualno Obiektowe Zajęcia 5, część 1

5.9 Modyfikacja gry Kółko i krzyżyk

Ćwiczenie 6 Proste aplikacje - podstawowe komponenty.

Darmowa publikacja dostarczona przez

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Literatura: do wykładu - dowolny podręcznik do języka C++ na laboratoriach - Borland C++ Builder

Język ludzki kod maszynowy

Nazwa implementacji: Kółko i krzyżyk w Lazarusie. Autor: Piotr Fiorek Andrzej Stefaniuk

Wcięcie kątowe wstecz

STWORZENIE PRZYKŁADOWEJ

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Zasady Programowania (Projektowanie) C++ - część 6 1/9 Programowanie Wizualno Obiektowe (3)

Programowanie obiektowe

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Wstęp do Programowania, laboratorium 02

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Ćwiczenie 4 Aktualizacja tabel. 1. Skopiuj aplikację przygotowaną na poprzednich zajęciach w katalogu SKOKI1 do nowego katalogu SKOKI2.

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

IFiZR Laboratorium 5 Info

Wykład :37 PP2_W9

Wykład 7: Lazarus GUI

TEMAT : KLASY POLIMORFIZM

Programowanie 3 - Funkcje, pliki i klasy

Projektowanie algorytmów rekurencyjnych

Język C++ wykład VIII

Zadanie 1. Napisz, skompiluj i uruchom program, który wyświetla komunikat: "Mam na imie...".

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Zad. 5: Układ równań liniowych liczb zespolonych

Instrukcja 5 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwy integracji z bazą danych: Wzorzec DAO Technologia ORM

Delphi podstawy programowania. Środowisko Delphi

STWORZENIE MOBILNEJ APLIKACJI,

Co nie powinno być umieszczane w plikach nagłówkowych:

Języki i metody programowania Java Lab2 podejście obiektowe

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wyjątki (exceptions)

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Funkcja (podprogram) void

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Programowanie strukturalne i obiektowe

Podstawy programowania w C++

Zofia Kruczkiewicz, ETE8305_2 1

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Języki programowania - podstawy

Laboratorium 10 - Web Services

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Wykład 5 Okna MDI i SDI, dziedziczenie

Wykład 4: Klasy i Metody

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Budowa aplikacji wielowarstwowych. Zastosowanie technologii Ajax

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 13. Karol Tarnowski A-1 p.

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Multimedia JAVA. Historia

Prosta książka telefoniczna z wykorzystaniem zapisu do pliku

Wskaźniki do funkcji i metod

1 Podstawy c++ w pigułce.

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Aplikacje geodezyjne

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }


Języki i metody programowania Java INF302W Wykład 3 (część 1)

Programowanie Obiektowe Ćwiczenie 4

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Programowanie - wykład 4

Zaawansowane aplikacje WWW - laboratorium

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

1 Podstawy c++ w pigułce.

Najnowsza wersja dokumentu dostępna pod adresem

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Programowanie obiektowe zastosowanie języka Java SE

Instrukcja laboratoryjna cz.3

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Transkrypt:

Obliczenie azymutu ze współrzędnych wersja C++ Builder Specyfikacja problemu algorytmicznego Problem algorytmiczny: Obliczenie azymutów i długości, gdy dana jest tablica współrzędnych punktów (Nr X Y). Dane wejściowe: Tablica numerów i współrzędnych punktów (numery liczby całkowite, współrzędne X, Y typu double) Dane wyjściowe: długości boków, azymuty wektorów Pi-Pi+1 - w gradach, stopniach (liczba jako dziesiętne stopnia), stopnie całkowite, minuty i sekundy oraz azymut odwrotny wektora Pi+1-P1 wyświetlone na ekranie formularza obliczeniowego (wersja obiektowa C++ Builder). Szkic do obliczeń azymutu: Wzory: Odległość: d=sqrt(dx*dx+dy*dy); Tradycyjnie obliczenia ręczne - dodatkowo liczy się: d=dx/cos(az); d=dy/sin(az); Azymut Zastosowano w programie funkcję atan2(dy,dx), gdzie dx, dy przyrosty współrzednych az2 = atan2(dy, Dx) funkcja biblioteczna języka C Opis programu Program napisano i skompilowano w z wykorzystaniem aplikacji Borland C++ Builder 6 Personal. 1. Formularz programu zawiera blok DANE komponent StringGrid - tabela do wprowadzenia numerów współrzędnych punktów, suwak do wprowadzenia ilości wierszy - komponent ScrollBar, komponent Edit wyświetla ilość wierszy, komponenty Label etykiet opisowe (napisy) oraz przyciski: do wypełnienia tabeli zerami, do uruchomienia obliczeń: i przycisk wyjścia z programu. 2. Po uruchomieniu programu pojawia się Formularz, na nim 2 wiersze do wprowadzenia ilości wierszy (punktów). Ilość te można zmienić przy pomocy suwaka. Naciśnięcie klawisza KONIEC powoduje wyjście z programu. 2. W pola Nr X Y należy wpisać odpowiednie dane. Naciśnięcie przycisku Wypelnij lub Oblicz wypełnia puste pola zerami. 3. Po naciśnięciu przycisku Oblicze obliczane są azymuty i długości oraz wyświetlane na ekranie. 4. Azymuty są obliczane przy pomocy funkcji atan2(dy,dx) i zamieniane na grady oraz miarę stopniową. Przykład obliczeń kopia ekranu

Funkcje obliczeniowe wykorzystywane w programie: // Funkcje - deklaracje double odl(double x1, double y1, double x2, double y2); // odległość ze współrzędnych double az2(double x1, double y1, double x2, double y2); // azymut z funkcji atan2 Schematy blokowe funkcji obliczenia azymutów Funkcja az2(x1, y1, x2, y2) zastosowanie atan2(dy,dx)

Listingi programu Plik azdlcb1.h // Obliczenie azymutu i długości ze współrzędnych - Borland C++ Builder 6 // Plik azdlcb1.h // 02.2012 // K. R. // definicja maks ilosc wierszy #define NMAX 20 #include <math.h> #include <Classes.hpp> #include <Controls.hpp> #include <ExtCtrls.hpp> #include <Grids.hpp> #include <StdCtrls.hpp> #ifndef azdlcb1h #define azdlcb1h #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> // Deklaracja funkcji double dl(double dx, double dy); // obl. dlugosci // Komponenty formularza class TForm1 : public TForm published: // IDE-managed Components TPanel *Panel1; TButton *Koniec; TStringGrid *Dane; TScrollBar *Wiersze; TEdit *IloscWierszy; TButton *Oblicz; TLabel *Label1; TLabel *Label2; TLabel *Label3; TLabel *Label4; TLabel *Label5; TLabel *Label6; TLabel *Label7; TLabel *Label8; TLabel *Label9; TLabel *Label10; TLabel *Label11; TLabel *Label12; TButton *Wypelnij; TLabel *Label13; TLabel *Label14; TLabel *Label15; TLabel *Label16; TLabel *Label17; TLabel *Label18; void fastcall KoniecClick(TObject *Sender); void fastcall WierszeChange(TObject *Sender); void fastcall ObliczClick(TObject *Sender);

void fastcall FormCreate(TObject *Sender); void fastcall WypelnijClick(TObject *Sender); // sekcja private - deklaracje uzytkownika private: // User declarations int m, n; int tn[nmax]; double tx[nmax], ty[nmax], tdx[nmax], tdy[nmax], td[nmax], ta[nmax]; // Sekcja public public: // User declarations fastcall TForm1(TComponent* Owner); // Definicja funkcji dl() - obliczenie dlugosci z przyrostow dx, dy double dl(double dx, double dy) return sqrt(dx*dx+dy*dy); ; extern PACKAGE TForm1 *Form1; #endif plik P_AzDCB1.cpp //Projekt - plik P_AzDCB1.cpp // azymut i długość ze współrzędnych - wersja C++ Builder // Program główny #include <vcl.h> #pragma hdrstop USEFORM("azdlCB1.cpp", Form1); WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) try Application->Initialize(); Application->CreateForm( classid(tform1), &Form1); Application->Run(); catch (Exception &exception) Application->ShowException(&exception); catch (...) try throw Exception(""); catch (Exception &exception) Application->ShowException(&exception); return 0;

Plik azdlcb1.cpp // Plik azdlcb1.cpp // Obliczenie azymutu i długości ze współrzędnych // Borland C++ Builder 6 #include <vcl.h> #pragma hdrstop #include "azdlcb1.h" // Deklaracje funkcji // double dl(double dx, double dy); - jest w azdlcb1.h double az2(double dx, double dy); int grad2dg(double gr); int grad2min(double gr); float grad2sek(double gr); #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) void fastcall TForm1::KoniecClick(TObject *Sender) Close(); void fastcall TForm1::WierszeChange(TObject *Sender) // Zmiana wierszy - komponent ScrollBar - listwa przewijania Dane->RowCount=Wiersze->Position; n=wiersze->position; IloscWierszy->Text=n; void fastcall TForm1::ObliczClick(TObject *Sender) // Obliczenie double dx, dy, d, azg1, azg2, degree; int stop, min, sek; // wypelnienie tabeli zerami // wypelnij for (int i=0; i<=n; i++) for (int j=0; j<=2; j++) if (Dane->Cells[j][i]=="") Dane->Cells[j][i]=0; // wypelnij // Obliczenia // wprowadzenie danych do tabel z komponentu StringGrid - tabela na ekranie for (int i=0; i<n; i++)

tn[i]= StrToInt (Dane->Cells[0][i]); tx[i]= StrToFloat(Dane->Cells[1][i]); ty[i]= StrToFloat(Dane->Cells[2][i]); for (int i=0; i<n-1; i++) // przyrosty tdx[i]= StrToFloat(Dane->Cells[1][i+1])- StrToFloat(Dane->Cells[1][i]); tdy[i]= StrToFloat(Dane->Cells[2][i+1])- StrToFloat(Dane->Cells[2][i]) ; d=dl(tdx[i],tdy[i]); // dlugosc azg1=az2(tdx[i], tdy[i]); // azymut w grad td[i]=d; // dlugosc do tabeli ta[i]=azg1; degree=azg1*0.9; // azymut w stopniach i dzies. stopnia azg2=az2(-tdx[i], -tdy[i]); // azymut odwrotny w [grad] // wypelnienie tabeli na ekranie Dane->Cells[3][i]=tDX[i]; Dane->Cells[4][i]=tDY[i]; Dane->Cells[5][i]=d; Dane->Cells[6][i]=azg1; Dane->Cells[7][i]=degree; Dane->Cells[8][i]=grad2dg(azg1); Dane->Cells[9][i]=grad2min(azg1); Dane->Cells[10][i]=grad2sek(azg1); Dane->Cells[11][i]=azg2; // W ostatniej linii wypelnienie pustymi elemantami for (int j=0; j<=11; j++) Dane->Cells[j][n]=""; // for // po utworzeniu formularza void fastcall TForm1::FormCreate(TObject *Sender) int const NK=12; Dane->ColCount=NK; Dane->RowCount=2; n=2; m=12; // wypełnienie danymi tabeli ekranowej void fastcall TForm1::WypelnijClick(TObject *Sender) for (int i=0; i<=n; i++) for (int j=0; j<=2; j++) Dane->Cells[j][i]=0; // Funkcje - definicje // obliczenie azymutu z atan2(dy,dx) double az2(double dx, double dy)

double a; if (dx==0 && dy==0) return 0; a = atan2(dy,dx) * 200.0/M_PI; if (a <0) a += 400.0; return a; // zamiana gradów na stopnie całkowite - zwraca tylko stopnie int grad2dg(double gr) double st, mi; int sc; st=gr*0.9; // stopnie sc= int(st); // stopnie calkowite return sc; // zamiana gradów na stopnie - zwraca tylko minuty całkowite int grad2min(double gr) double st, mi; int sc, mc; st=gr*0.9; // stopnie sc= int(st); // stopnie calkowite mi=(st-sc)*60.0; // minuty mc=int(mi); // minuty calkowite // se=(mi-mc)*60.0; // sekundy return mc; // zamiana gradów na stopnie - zwraca stopnie - zwraca tylko sekundy, liczba rzeczywista float grad2sek(double gr) double st, mi, se; int sc, mc; st=gr*0.9; // stopnie sc= int(st); // stopnie calkowite mi=(st-sc)*60.0; // minuty mc=int(mi); // minuty calkowite se=(mi-mc)*60.0; // sekundy return se; // zwraca sekundy