FUNKCJE MATEMATYCZNE, np. atan2(y,x);
/* az_tan2a.c - obliczenie azymutu - funkcja atan2(y,x); instrukcja do…while */
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define PI 3.14159265
int main ()
{
double x1, y1, x2, y2, x, y, result, az, d;
int kont=1;
puts("Obliczenie azymutu na podstawie funkcji atan2(dy,dx)");
puts("tan(Az)=DY/DX");
do
{
printf("\nWprowadz X1 Y1 "); scanf("%lf %lf", &x1, &y1);
printf("\nWprowadz X2 Y2 "); scanf("%lf %lf", &x2, &y2);
x=x2-x1; y=y2-y1;
printf("Dx=%f Dy=%f\n",x,y);
result = atan2 (y,x) * 200.0 / PI;
az=result;
if (result <0) az=result+400.0;
d=sqrt(x*x+y*y);
printf("\nPI=%lf M_PI=%lf",PI, M_PI);
printf ("\natan2 dla (DX=%lf, DY=%lf) = %lf[grad]\n", x, y, result);
printf ("\nDX=%.3f DY=%.3f Az = %.4f[grad] Dl=%.3f\n", x, y, az, d );
printf("\n 1- obliczenia, 0 - koniec ");
scanf("%d",&kont);
} while (kont != 0);
return 0;
}
TABLICE
// tabl1.cpp - Srednia z liczb - tablica, petla for
#include <iostream>
using namespace std;
int main()
{
int rozmiar;
cout <<"podaj ilosc liczb: ";
cin >>rozmiar;
cin.ignore();
float tablica[rozmiar];
float suma = 0;
for (unsigned int i = 0; i < rozmiar; ++i) //pobieranie liczb...
{ // for
cout <<"Podaj liczbe nr "<<(i+1)<<" : ";
cin >>tablica[i];
cin.ignore();
suma += tablica[i]; //sumowanie elementów...
} // for
cout <<"\nsrednia wynosi: "<< (suma / rozmiar)<<endl;
cin.get();
return 0;
}
/* ============================================================================ */
// tabldyn.cpp - Tablica dynamiczna
#include <iostream>
#include <cstdlib>
using namespace std;
int* Tablica; //Wskaźnik na dynamicznie przydzieloną tablicę
int ile; //Rozmiar tablicy
int main()
{
cout << "Tablica dynamiczna \n";
cout << "Jak duza ma byc tablica? => "; cin >> ile;
Tablica = new int[ile];
for (int n=0; n<ile; n++) {
cout << "Podaj element numer " << n << " => " ;
cin >> Tablica[n];
}
cin.ignore();
cout << endl << "Zawartosc tablicy:\n";
for (int n=0; n<ile; n++)
cout << n << " => " << Tablica[n] << endl;
delete [] Tablica;
cin.get();
// system("pause");
return 0;
}
/* ============================================================================ */
WSKAŹNIKI
// zamianaW.cpp - zmiana wartości parametrów aktualnych przez wskaźnik
#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;
void ZmienWsk (int *a, int *b)
{
int pom;
cout << "2) Funkcja - przed zamiana: a=x=" << *a << " b=y=" << *b << endl;
pom =*b;
*b=*a;
*a=pom;
cout << "3) Funkcja po zamianie a= " << *a << " b=" << *b << endl;
}
int main()
{
int x=10, y=30;
cout << "Zmiana wartosci zmiennych przez wskaznik" << endl;
cout << "1) Funkcja glowna przed zamiana: x=" << x << " y=" << y << endl;
ZmienWsk (&x,&y);
cout << "4) Funkcja glowna: po zamianie: x=" << x << " y=" << y << endl;
getch();
}
/* ============================================================================ */
// zamianaR.cpp - zamiana wartości parametrów aktualnych przez referencje
#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;
void ZmienRef (int &a, int &b)
{
int pom;
cout << "\n2) Funkcja - przed zamiana: a=x=" << a << " b=y=" << b << endl;
pom =b;
b=a;
a=pom;
cout << "\n3) Funkcja po zamianie a= " << a << " b=" << b << endl;
}
int main()
{
int x=10, y=30;
cout << "Zmiana wartosci zmiennych przez referencje" << endl;
cout << "Podaj wartosc calkowita x "; cin >> x;
cout << "Podaj wartosc calkowita y "; cin >> y;
cout << "\n1) Funkcja glowna przed zamiana: x=" << x << " y=" << y << endl;
ZmienRef (x,y);
cout << "\n4) Funkcja glowna: po zamianie: x=" << x << " y=" << y << endl;
getch();
}
/* ============================================================================ */
TABLICE
// pp_forT.cpp – Obliczenie
pola prostokąta. for,
system, cout.precision
#include <iostream>
#include <cstdlib>
#define MAX 50
#define SW 15
#define WYDR cout.fill(' '); cout.width(10);
using namespace std;
int main() // Program glowny. Najwazniejsza czesc programu
{
double a, b, p; // zmienne rzeczywiste podwojnej precyzji 8 bajtow, 15 cyfr
znaczacych
int i=0, m=0, n=0; // zmienna petli, ilosc faktyczna obl, ilosc
zadeklarowana obliczen
int d; // dokladnosc wydruku po kropce dziesietnej
double ta[MAX], tb[MAX], tp[MAX];
// pocz:
system("cls"); // kasowanie ekranu
cout << "Program pp_forT.cpp\n";
cout << "Petla for, tablica" << endl;
cout << "\nOblicznie pola prostokata o danych bokach a i b
\n(zmienne double - 15 cyfr znaczacych)" << endl;
cout<<"\nWprowadz ilosc obliczen < " << MAX <<
" : " ; ; // ilosc obliczen
do {
cin>> n; // Wprowadzenie a
cin.ignore(); // Odrzuca Enter
} while (n > MAX);
// if (n==0) return 1;
// Ustalenie dokladnosci wydruku
cout.width(20); // minimalna ilosc znakow wypisywanej liczby
cout.setf(ios::fixed); // zapewnia ze precision() odnosi
sie do miejsc po kropce
cout << "\nDokladnosc wydruku ? " ; cin >> d;
cout.precision(d); // precyzja (patrz wyzej o ios::fixed)
for (i=1; i<=n; i++)
{ // for - poczatek
cout << "\nObliczenie: " << i << endl;
cout<<"\Wprowadz a (ujemne - pominiete) lub 0 koniec programu:
"; // bok a
cin>> a; // Wprowadzenie a
cin.ignore(); // Odrzuca Enter
m=i;
if (a < 0) { i--; continue; }
if (a == 0) { m = --i; break;}
cout<<"Wprowadz b : "; // Pyta o b
cin>> b; cin.ignore(); // Wprowadzenie b; Odrzuca Enter
p=a*b;
cout<<"Pole prostokata o bokach a = " << a <<
" i b = " << b ;
cout << " wynosi ";
cout << p << endl; // Wyswietla wyniki
ta[i]=a; tb[i]=b; tp[i]=p;
} // for - koniec
if (m>0) cout << "\nWyniki obliczen - wydruk elemntow tablicy w
petli for" << endl;
for (i=1; i<=m; i++)
{
cout << "Obliczanie: " << i;
cout << " a = "; WYDR; cout << ta[i];
cout << " b = "; WYDR; cout << tb[i];
cout << " Pole = "; WYDR; cout << tp[i] << endl;
}
// goto pocz;
cout << endl << "Koniec obliczen " << endl;
system("PAUSE");
return 0;
}
/* ============================================================================ */
TABLICE, STRUKTURY, ZAPIS DO PLIKU
/* pp_forST.c - Pola działek prostokątnych. Pętla for, struktura, system, plik */
#include <stdio.h>
#include <conio.h>
#define MAX 50
#define NL putchar('\n')
#define WYN "pprostT.txt"
struct dzialka
{
int nr; char nazwa[10]; float a, b, p;
}t[MAX];
int main()
{
float a, b, pole; int i=0, j=0, n=0;
char flaga = 'T';
FILE *fp; /* zmienna plikowa */
fp = fopen(WYN, "w");
system("cls");
puts("Obliczenie pol dzialek prostokatnych"); NL;
do
{
printf("Podaj dane dzialki %d \n",i+1);
printf("Podaj nr dzialki (liczba calkowita) : ");
scanf("%d",&t[i].nr); fflush(stdin);
printf("Podaj nazwe dzialki : ");
gets(t[i].nazwa); fflush(stdin);
printf("Podaj dlugosc a: ");
scanf("%f",&t[i].a); fflush(stdin);
printf("Podaj dlugosc b: "); scanf("%f",&t[i].b); fflush(stdin);
pole=t[i].a*t[i].b; printf("\nPole = %f\n",pole);
t[i].p=pole;
i++;
if (i<MAX)
{
printf("\nCzy wprowadzasz nastepne dane? T lub N: ");
flaga=getchar(); putchar('\n'); fflush(stdin);
}
} while (i<MAX && (flaga == 'T' || flaga == 't') );
n=i;
puts("\nZestawienie obliczen pol dzialek\n");
fprintf(fp,"\n Zestawienie obliczen pol dzialek\n");
printf("Lp Nr dz. Nazwa a b pole \n");
fprintf(fp, "Lp Nr dz. Nazwa a b pole \n");
for (j=0; j<n; j++)
{
printf("%3d %5d %6s %7.2f %7.2f %8.2f\n", j+1, t[j].nr, t[j].nazwa, t[j].a, t[j].b, t[j].p );
fprintf(fp,"%3d %5d %6s %7.2f %7.2f %8.2f\n", j+1, t[j].nr, t[j].nazwa, t[j].a, t[j].b, t[j].p );
}
fclose(fp); // zamkniecie pliku
printf("\nWyniki w pliku %s", WYN);
getch();
return 0;
}
/* ============================================================================ */
// pp_forST1.cpp - Pola działek prostokątnych. Pętla for, struktura, system, tablica, plik
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <cstdlib>
#define MAX 50
#define NL putchar('\n')
/* plik wynikow */
#define WYN "pprostT.txt"
using namespace std;
struct dzialka
{ int nr; char nazwa[10]; float a, b, p; };
int main() // Program glowny. Najwazniejsza czesc programu
{
dzialka t[MAX];
float a, b, pole; int i, j=0, n=0; char flaga = 'T';
FILE *fp; /* zmienna plikowa */
fp = fopen(WYN, "w");
system("cls");
puts("Obliczenie pol dzialek prostokatnych"); NL;
i=0;
do
{
printf("Podaj dane dzialki %d \n",i+1);
cout << "Podaj nr dzialki (liczba calkowita) : ";
cin >> t[i].nr; cin.ignore();
printf("Podaj nazwe dzialki : ");
gets(t[i].nazwa); fflush(stdin);
cout << "Podaj dlugosc a: "; cin >> t[i].a; cin.ignore();
cout << "Podaj dlugosc b: "; cin >>t[i].b; cin.ignore();
pole=t[i].a*t[i].b; cout << pole << endl;
t[i].p=pole; i++;
if (i<MAX)
{
cout << "\nCzy wprowadzasz nastepne dane? T lub N: ";
flaga=getchar(); putchar('\n'); cin.ignore();
}
} while (i<MAX && (flaga == 'T' || flaga == 't') );
n=i;
puts("\nZestawienie obliczen pol dzialek\n");
fprintf(fp," Zestawienie obliczen pol dzialek\n");
cout << "Lp Nr dz. Nazwa a b pole \n";
fprintf(fp, "Lp Nr dz. Nazwa a b pole \n");
for (j=0; j<n; j++)
{
printf("%3d %5d %6s %7.2f %7.2f %8.2f\n", j+1, t[j].nr, t[j].nazwa, t[j].a, t[j].b, t[j].p );
fprintf(fp,"%3d %5d %6s %7.2f %7.2f %8.2f\n", j+1, t[j].nr, t[j].nazwa, t[j].a, t[j].b, t[j].p );
}
fclose(fp); // zamkniecie pliku
cout << "Wyniki w pliku " << WYN << endl;
cin.get();
return 0;
}
/* ============================================================================ */
/* az_tabF.cpp Azymuty i dlugosci - tablica struktur, funkcje, zapis wynikow do pliku */
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#define WYN "w_azdl.txt"
struct pkty { long int nr1, nr2; double x1, y1, x2, y2, azy, azy2, dlug; };
// Deklaracje funkcji
double az2(double x1, double y1, double x2, double y2);
double azymgr(double x1, double y1, double x2, double y2);
double odl(double x1, double y1, double x2, double y2);
// Definicje funkcji
void czytaj (pkty c[],int i)
{ int j ;
puts("Wprowadzenie danych: \n");
for(j=0; j<i; j++)
{
printf ("\nLp: %d \n",j+1);
printf("NrP Xp Yp => "); fflush(stdin);
scanf("%ld %lf %lf",&c[j].nr1, &c[j].x1, &c[j].y1);
printf("\nNrK Xk Yk => "); fflush(stdin);
scanf("%ld %lf %lf",&c[j].nr2, &c[j].x2, &c[j].y2);
c[j].azy=az2(c[j].x1, c[j].y1, c[j].x2, c[j].y2);
c[j].azy2=az2(c[j].x1, c[j].y1, c[j].x2, c[j].y2);
c[j].dlug=odl(c[j].x1, c[j].y1, c[j].x2, c[j].y2);
}
fflush(stdin);
}
void wyswietl (pkty d[],int i)
{
int j;
FILE *fp; /* zmienna plikowa */
fp = fopen(WYN, "w");
system("cls"); puts("\nWykaz wynikow ");
fprintf(fp,"\n Zestawienie obliczenia azymutow \n");
fprintf(fp, "Lp NrP NrK Xp Yp xk Yk Az[grad] Dlug \n");
for(j=0; j<i; j++)
{
printf ("\nLp: %d ",j+1);
printf("\nNrP=%5.ld Xp=%.3lf Yp=%.3lf", d[j].nr1, d[j].x1, d[j].y1);
printf("\nNrK=%5.ld Xk=%.3lf Yk=%.3lf", d[j].nr2, d[j].x2, d[j].y2);
printf("\nAzymut(%d-%d) = %.4lf %.4lf", d[j].nr1, d[j].nr2, d[j].azy, d[j].azy2);
printf("\nDlugosc(%d-%d) = %.4lf \n", d[j].nr1, d[j].nr2, d[j].dlug);
fprintf(fp,"\n%2d %4d %4d %7.3lf %7.3lf %7.3lff %7.3lff %8.4lf %8.3lf\n", \
j+1, d[j].nr1, d[j].nr2, d[j].x1, d[j].y1, d[j].x2, d[j].y2, d[j].azy, d[j].dlug );
}
printf("\n");
fclose(fp); // zamkniecie pliku
printf("\nWyniki w pliku %s", WYN);
}
int main() // Funkcja glowna
{
int MAX=50; int n; pkty t[MAX];
system("cls");
puts("Program az_tabl.cpp - wersja jezyka C\n");
puts("Obliczenie azymutow i dlugosci ze wspolrzednych - tablica struktur, petla for\n");
puts("Numery punktow calkowite typu long int - do 2147483648\n");
printf("Wprowadz ilosc bokow: "); scanf("%d",&n); fflush(stdin);
czytaj (t,n);
wyswietl (t,n);
getch();
return 0;
}
// Definicje funkcji
double az2(double x1, double y1, double x2, double y2)
{
double dx, dy, result; double PI=M_PI;
dx=x2-x1; dy=y2-y1;
result = atan2(dy,dx) * 200.0/M_PI;
if (result <0) result+=400.0;
printf("Azymut w az2 = %lf\n", result);
return result;
}
double azymgr(double x1, double y1, double x2, double y2)
{
double pi, rg, rs, dx, dy, d, a, az ;
pi = 4.0 * atan(1.0); rg = 200.0 / pi; rs = 180.0 / pi;
dx=x2-x1; dy=y2-y1;
if (dx==0)
{
if (dy>0) a = pi / 2; else a = 1.5 * pi;
} // END IF dx==0
else // if (dx != 0)
{
a = atan(dy / dx);
if (dx < 0) a = a + pi;
else
{ if (dy < 0) a = a + 2 * pi; }
}
az = a * rg; // obliczenie azymutu w gradach
printf ("azg = %10.4lf [grad]\n", az);
return az;
}
double odl(double x1, double y1, double x2, double y2)
{
double dx, dy, result;
dx=x2-x1; dy=y2-y1; result = sqrt(dx*dx+dy*dy);
printf("Dlugosc = %lf\n", result);
return result;
}
/* ============================================================================ */
// PolaDzXY.cpp - pole działek ze współrzędnych - tablica
#include <iostream>
#include <stdio.h>
#define TAB "\t"
using namespace std;
int main()
{
int n, rozmiar;
char dz[20];
cout << "Obliczenie pol dzialek ze wspolrzednych" << endl;
cout << "2P=Suma(X[i]*(Y[i=1]-Y[i-1] -2P=Suma(Y[i]*(X[i=1]-X[i-1] " << endl;
do
{
cout <<"\nPodaj ilosc punktow 0 - koniec: ";
cin >>n;
if (n==0) break;
rozmiar=n+2;
cin.ignore();
long tabN[rozmiar];
float tabX[rozmiar], tabY[rozmiar];
float s1=0, s2=0;
int suma = 0;
cout << "Podaj nazwe dzialki " ;
gets(dz);
cout << endl;
// fflush(stdin);
// cin.ignore();
for (unsigned int i = 1; i <= n; ++i) //pobieranie liczb...
{
cout <<"Podaj NR punktu "<< i <<" : ";
cin >>tabN[i];
cout << "Podaj X Y : ";
cin >>tabX[i] >> tabY[i];
cin.ignore();
}
tabN[0]=tabN[n];
tabX[0]=tabX[n]; tabY[0]=tabY[n];
tabN[n+1]=tabN[1]; tabX[n+1]=tabX[1]; tabY[n+1]=tabY[1];
cout << "Wykaz punktow: Nr X Y " << endl;
cout << "Lp Nr X Y " << endl;
for(int i=1; i<=n+1; i++ )
{
if (i<=n)
cout << i << TAB << tabN[i] << TAB << tabX[i] << TAB << tabY[i] << endl;
s1+=tabX[i]*(tabY[i+1]-tabY[i-1]);
s2+=tabY[i]*(tabX[i+1]-tabX[i-1]);
}
s2=-s2;
cout << endl;
cout << "2P= " << s1 << " -2P=" << -s2 << endl;
cout << "Dzialka " << dz << TAB << "Pole = " << 0.25*(s1+s2) << endl;
} while (n >0);
cin.get();
return 0;
}
/* ================================================================================= */
// PDXYplik.cpp - pole
dzialek ze wspolrzednych - zapis wynikow do pliku PolaWyn.txt"
// rozmiar tablicy ustalony po uruchomieniu programu podaniu danych
#include <iostream>
#include <stdio.h>
#include <fstream>
#define TAB "\t"
#define WYN "PolaWyn.txt"
using namespace std;
int main()
{
int n, rozmiar;
char dz[20];
cout << "Obliczenie pol dzialek ze wspolrzednych" <<
endl;
cout << "2P=Suma(X[i]*(Y[i=1]-Y[i-1] -2P=Suma(Y[i]*(X[i=1]-X[i-1]
" << endl;
ofstream fw(WYN);
do
{
cout <<"\nPodaj ilosc punktow, 0 - koniec: ";
cin >>n;
if (n==0) break;
rozmiar=n+2;
cin.ignore();
long tabN[rozmiar];
float tabX[rozmiar], tabY[rozmiar];
float s1=0, s2=0;
int suma = 0;
cout << "Podaj nazwe dzialki " ;
gets(dz);
cout << endl;
// fflush(stdin); // cin.ignore();
for (unsigned int i = 1; i <= n; ++i) //pobieranie liczb...
{
cout <<"Podaj NR punktu "<< i <<" : ";
cin >>tabN[i];
cout << "Podaj X Y : ";
cin >>tabX[i] >> tabY[i];
cin.ignore();
}
tabN[0]=tabN[n];
tabX[0]=tabX[n]; tabY[0]=tabY[n];
tabN[n+1]=tabN[1]; tabX[n+1]=tabX[1]; tabY[n+1]=tabY[1];
cout << "Wykaz punktow: Nr X Y " << endl;
cout << "Lp Nr X Y " << endl;
for(int i=1; i<=n+1; i++ )
{
if (i<=n)
cout << i << TAB << tabN[i] << TAB << tabX[i]
<< TAB << tabY[i] << endl;
s1+=tabX[i]*(tabY[i+1]-tabY[i-1]);
s2+=tabY[i]*(tabX[i+1]-tabX[i-1]);
}
s2=-s2;
cout << endl;
cout << "2P= " << s1 << " -2P=" <<
-s2 << endl;
cout << "Dzialka: " << dz << TAB <<
"Pole = " << 0.25*(s1+s2) << endl;
fw << "Dzialka: " << dz << TAB << "Pole
= " << 0.25*(s1+s2) << endl;
} while (n >0);
fw.close();
cout << "Nacisnij cos ";
cin.get();
return 0;
}