Algorytmy arytmetyczne

  W tym dziale przedstawię przykłady algorytmów arytmetycznych, które mogą mieć zastosowanie w programach. Jednak moim celem przy tworzeniu tego działu jest pokazanie jak można za pomocą języka C++ zapisywać proste i złożone operacje matematyczne, dlatego nie będę tutej pokazywał praktycznych przykładów zastosowania algorytmów. Przedmiotem moich dociekań będą konkretne implementacje podstawowych typów podejść stosowanych do danych strukturalnych.

Menu



Określanie odległości między dwoma punktami na płaszczyżnie.

  Załóżmy że mamy na płaszczyźnie dwa punkty oddalone od siebie o x pikseli. Jak obliczyć odległość między nimi? Na początek należy ustalić co już wiemy. Więc wiemy że na płaśzczyźnie każdy punkt ma dwie współżedne X i Y. Jak to obliczyć? Tak więc trzeba najpierw odjąć od siebie współrzędne X obydwu punktów a następnie postąpić tak samo ze współrzędnymi Y, następnie należy obydwa wyniki podnieść do kwadratu i dodać do siebie a następnie wyciągnąć z nich pierwiastek kwadratowy.
  Ufffff... To dla mnie zbyt skomplikowane dlatego zamiast podstawiać to do wzorów i liczyć z kalkulatorem w ręku napiszę prosty program który wyliczy to za mnie. W tym celu stworzę strukturę punkt i funkcję dystans. Struktura będzie reprezentowała punkty na płaszczyźnie, a funkcja wyliczy odległość między nimi.
  Więc do dzieła! Tworzymy nowy projekt, zapisujemy go pod dowolną nazwą i przechodzimy do pliku źródłowego (np. Unit1.cpp). W sekcji include importujemy plik math.h, który zawiera funkcję biblioteczną aqrt wyznaczającą pierwiastek kwadratowy.
Przykład:


// Plik źródłowy np. Unit1.cpp
//--------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <math.h>
//importowany plik
//--------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------


Teraz tworzymy strukturę punkt która będzie zawierała dwie zmienne typu float do reprezentacji współrzędnych X i Y.
Przykład:

// Plik źródłowy np. Unit1.cpp
//--------------------------------
struct punkt
{
   float X;
   float Y;
};
//--------------------------------


Pozostało nam już tylko stworzenie funkcji która obliczy odległość między punktami reprezentowanymi przez strukturę.
Przykład:

// Plik źródłowy np. Unit1.cpp
//--------------------------------
float dystans(punkt a, punkt b)
{
   float dx = a.X - b.X;
   float dy = a.Y - b.Y;

   return sqrt(dx*dx + dy*dy);
}
//--------------------------------


W funkcji dystans struktura punkt została przekazana jako argument funkcji. Identyfikatory punkt a i punkt b oznaczają inicjację struktury i przekazują argumenty do funkcji. Jednak sama struktura nie zawiera żadnych wartości liczbowych, żeby cokolwiek wyliczyć trzeba przekazać funkcji (poprzez strukturę) jakieś wartości.
Przyjmijmy, że mamy na płaszczyźnie dwa punkty A i B o współrzędnych:
A.X = 1.0, A.Y = 1.0
B.X = 2.0, B.Y = 2.0
Jak zainicjować i wyliczyć odległość między tymi punktami? W tym celu umieszczamy na formularzu komponent 'Button1' i 'Label1'. W zdarzeniu przycisku 'Button1' - 'OnClick' inicjujemy wyliczenie odległości, a wynik zostanie przedstawiony na etykiecie 'Label1'.
Przykład:

// Plik źródłowy np. Unit1.cpp
//--------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
punkt A;
A.X = 1.0;
A.Y = 1.0;

punkt B;
B.X = 2.0;
B.Y = 2.0;

float q = dystans(A, B);

Label1->Caption = FloatToStrF(q, ffNumber, 12, 2);  // tutej następuje konwersja i formatowanie zmiennej typu float na zmienną typu String.
//--------------------------------

plik tekstowy


...powrót do menu.