PRZYKŁADY PROGRAMÓW obliczeń pól

PODEJMOWANIE DECYZJI, PĘTLE,  FUNKCJE, TABLICE

PODEJMOWANIE DECYZJI W PROGRAMIE

Instrukcja if ... else

wariant tylko z if:  if (warunek) instrukcja;  lub  if (warunek) {lista_instrukcji_na_tak);
wariant if…else:   if (warunek) instrukcja_na_tak; else instrukja_na_nie;
lub                        if (warunek) {lista_instrukcji_na_tak} else {lista_instrukji_na_nie};



Instrukcje if i goto


// pp_if.cpp - Pole prostokata, if, system, goto
#include <iostream>   
// #include <cstdio>
#include <cstdlib>  // do system
using namespace std;
       
int main()     // Program glowny. Najwazniejsza czesc programu
{
  double  a, b, p;  // zmienne rzeczywiste podwojnej precyzji 8 bajtow, 15 cyfr znaczacych
  int d;
  system("cls");
  cout << "Data: ";  system("date/T");
  cout << "Godz: ";  system("time/T");
  cout << "\nOblicznie pola prostokata o danych bokach a i b" << endl;
  cout << endl;       
  cout << "Wymiar zmiennej double = " <<  sizeof(double) << " Bajtow" << endl;
 
  pocz:  // etykieta
       
  cout<<"\nWprowadz a lub 0 koniec programu: ";    // Pyta o bok a
  cin>> a;                  // Wprowadzenie a
  cin.ignore();             // Odrzuca Enter
  if ( a ==0 ) return 1;
 
  cout<<"Wprowadz b : ";    // Pyta o b
  cin>> b;   cin.ignore();  // Wprowadzenie b; Odrzuca Enter
  p=a*b;
 
  // Ustalenie dokladnosci wydruku
 // cout.width(10); // minimalna ilosc znakow wypisywanej liczby
  cout.setf(ios::fixed);  // zapewnia ze precision() odnosi sie do miejsc po kropce
  cout << "Dokladnosc wydruku ?  " ; cin >> d;
  cout.precision(d); // precyzja (patrz wyzej o ios::fixed)
 
  cout<<"Pole prostokata o bokach a = " << a <<  "  i  b = " << b  ;
  cout << " wynosi " << p << endl; // Wyswietla wyniki
  cout << endl;
 
  goto pocz;  // skok do etykiety poczatek
  
  cin.get();
  // getchar(); - potrzebna biblioteka cstdio
  return 0;
}



// pp_if1.cpp - if...else
#include <iostream>   
using namespace std;
       
int main()     // Program glowny. Najwazniejsza czesc programu
{
  double  a, b, p;  // zmienne rzeczywiste podwojnej precyzji 8 bajtow, 15 cyfr znaczacych
  cout << "Oblicznie pola prostokata o danych bokach a i b (zmienne double)" << endl;
  cout << "Wymiar zmiennej double = " <<  sizeof(double) << " Bajtow" << endl;
  cout << endl;       
  cout<<"Wprowadz a : ";    // Pyta o bok a
  cin>> a;                  // Wprowadzenie a
  cin.ignore();             // Odrzuca Enter
  cout<<"Wprowadz b : ";    // Pyta o b
  cin>> b;   cin.ignore();  // Wprowadzenie b; Odrzuca Enter

  if (( a>0 ) && (b >0))
   {   //  Jesli a>0 i b>0
      p=a*b;
      cout<<"Pole prostokata o bokach a = " << a <<  "  i  b = " << b  ;
      cout << " wynosi " << p << endl; // Wyswietla wyniki
   }
   else cout << "Oba boki maja byc > 0";
    
   cout << endl;
      
  cin.get(); // chwilowe wstrzymanie klawiatury
  return 0;
}


Instrukcja switch
Podejmowanie decyzji w programie: instrukcja wyboru switch – sytuacje wielowariantowe, gdy istnieje wiele możliwych dróg wyboru
switch
(wyrażenie)
{
case etykieta1: instrukcja1; break;
case etykieta2: instrukcja2; break;
....
default: instrukcja; break;
}


// switch1.cpp  Pola figur
#
include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{   float x, y, pole;
    int decyzja;
    cout << "Pole jakiej figury chcesz obliczyć? Podaj numer figury." << endl;
    cout << "1 - prostokat" << endl << "2 - trojkat" << endl << "3 - kolo" << endl;
    cin >> decyzja;
      switch (decyzja)
        {

           case 1:
                cout << "Podaj dlugosci bokow: "; cin >> x >> y;
                pole = x * y;                  break;
           case 2:
                cout << "Podaj dlugosc podstawy i wysokosci: ";
                cin >> x >> y;      pole = 0.5 * x * y;        break;
           case 3:
                cout << "Podaj promien: ";        cin >> x;
                pole = 3.14 * x * x;              break;
           default:
                cout << "Zly wybor. Koniec programu" << endl;;
                pole = 0;
       }

    cout << "Pole figury wynosi " << pole << endl;

    cout << endl << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
    }




Pętle

Pętla do while
Pętla do …  while
Składnia:
do treść while (warunek)
 

// pp_do.cpp - do...while, if...else
#include <iostream>   
#include <cstdlib>
using namespace std;
       
int main()     // Program glowny. Najwazniejsza czesc programu
{
  double  a, b, p;  // zmienne rzeczywiste podwojnej precyzji 8 bajtow, 15 cyfr znaczacych
  system("cls");
  cout << "Oblicznie pola prostokata o danych bokach a i b" << endl;
  do
  {
  cout << endl;       
  cout<<"Wprowadz a lub -1 koniec programu: ";    // Pyta o bok a
  cin>> a;                  // Wprowadzenie a
  cin.ignore();             // Odrzuca Enter
   if (a == - 1) break;
   // lub  if (a == - 1) return 0;
  cout<<"Wprowadz b : ";    // Pyta o b
  cin>> b;   cin.ignore();  // Wprowadzenie b; Odrzuca Enter
  if (( a>0 ) && (b >0))
   {   //  Jesli a>0 i b>0
      p=a*b;
      cout<<"Pole prostokata o bokach a = " << a <<  "  i  b = " << b  ;
      cout << " wynosi " << p << endl; // Wyswietla wyniki
   }
   else cout << "Oba boki maja byc > 0";
 } while (a !=-1);
   
  return 0;
}





Pętla while

Pętla while
 Składnia pętli while:
while (warunek) instrukcja;

Najpierw program wyznacza wartość wyrażenia warunek ujętego w nawiasy.

// pp_while -  while, system, cout.precision
#include <iostream>   
#include <cstdlib>
using namespace std;
       
int main()     // Program glowny. Najwazniejsza czesc programu
{
  double  a, b, p;  // zmienne rzeczywiste podwojnej precyzji 8 bajtow, 15 cyfr znaczacych
  int d; // dokladnosc wydruku po kropce dziesietnej
  system("cls"); // kasowanie ekranu
  cout << "Program pp_while.cpp\n";
  cout << "Oblicznie pola prostokata o danych bokach a i b \n(zmienne double - 15 cyfr znaczacych)" << endl;
  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)
 
  cout<<"\nWprowadz a lub 0 koniec programu: "; // Pyta pierwszy raz o bok a
  cin>> a;                  // Wprowadzenie a
  cin.ignore();             // Odrzuca Enter
 
  while (a !=0 ) // dopoki a <> 0
  { // while - poczatek
   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 " << p << endl; // Wyswietla wyniki
  
   cout<<"\nWprowadz a lub 0 koniec programu: ";    // Pyta ponownie o bok a
   cin>> a;                  // Wprowadzenie a
   cin.ignore();             // Odrzuca Enter
  } // while - koniec
  
  system("PAUSE");
  return 0;
}




Pętla for

Składnia:
for (wyrażenie1;wyrażenie2; wyrazenie3 instrukcja; 
Inaczej:
for (inicjacja; warunek; aktualizacja) instrukcja;
Instrukcja ta jest równoważna instrukcji
inicjalizacja; while (warunek) { instrukcja, aktualizacja; }


// pp_for.cpp -  for, system, cout.precision
#include <iostream>   
#include <cstdlib>
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, n; // ilosc obliczen
  int d; // dokladnosc wydruku po kropce dziesietnej
  system("cls"); // kasowanie ekranu
  cout << "Program pp_for.cpp\n";
  cout << "Oblicznie pola prostokata o danych bokach a i b \n(zmienne double - 15 cyfr znaczacych)" << endl;
  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)
 
  cout<<"\nWprowadz ilosc obliczen: "; // ilosc obliczen
  cin>> n;                  // Wprowadzenie a
  cin.ignore();             // Odrzuca Enter
 
  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
   if (a < 0) continue;
   if (a == 0) 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 " << p << endl; // Wyswietla wyniki
  } // for - koniec
 
  cout << endl << "Koniec obliczen " << endl;
  system("PAUSE");
  return 0;
}


FUNKCJE
  Funkcja to blok instrukcji realizujących określony cel. Są funkcje biblioteczne i własne.
Deklaracja funkcji: typ_funkcji    nazwa_funkcji   (lista_parametrów_formalnych);  np.  int suma2(int a, int b);
Jeżeli funkcja nie zwraca wartości, typ funkcji zastępowany jest słowem kluczowym void.
Definicja funkcji: Typ_funkcji  NazwaFunkcji (lista_parametrów_formalnych) {Instrukcje}  
Wywołanie funkcji:  wywołać daną funkcję, należy podać jej nazwę oraz w nawiasach listę parametrów aktualnych.

zmienna = nazwa_funkcji lista_parametrów_aktualnych);, np. n=10; wynik = sumaKwadratow(n);
nazwa_funkcji (lista_parametrów_aktualnych); Np. funkcja_a();  funkcja_b(10);
char *argv[ ] - wskaźnik do tablicy ciągów znakowych, zawierających argumenty z wiersza poleceń;

Funkcje matematyczne: potęgowanie: pow(x, y);  sqrt(x); exp(x);  log(x); log10(x);

Przykład:

// polafig.cpp  Obliczenie pol figurm do, switch, funkcje
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
#include <iostream>
#include <math.h>
#define WYS1 puts("\n")
using namespace std;

// Deklaracje funkcji
void poleprost();
void poletrojk();
void poletrapez();
double polekola();

int main(int argc, char *argv[])
{
 char wybor;
 float p;
 do
 {
    system("cls");
    cout << "Program do obliczenia pol figur" << endl;
    cout << "0. Koniec programu" << endl;
    cout << "1. Pole prostokata" << endl;
    cout << "2. Pole trojkata" << endl;
    cout << "3. Pole trapezu" << endl;
    cout << "4. Pole kola" << endl;
    cout << "5. Zakoncz program" << endl;
    cin >> wybor;
    switch (wybor)
    {
        case '1': WYS1; poleprost(); WYS1; fflush(stdin);  break;
        case '2': WYS1; poletrojk(); WYS1; fflush(stdin);  break;
        case '3': WYS1; poletrapez(); WYS1; fflush(stdin); break;
        case '4': WYS1; p=polekola();
        printf("Pole kola = %lf", p); WYS1; fflush(stdin); break;
        case '5': case '0':  break;
        default: cout << "Niepoprawny wybor, powtorz\n";
          }
 } while ( (wybor != '5') && (wybor != '0'));
  // getch();
   return 0;
}

// Definicje funkcji
void poleprost()
{
 float a, b, p;
 cout << "Obliczenie pola prostokata";
 cout << "Podaj dlugosci bokow: a i b => "; scanf("%f %f", &a, &b);
 p=a*b;
 cout << "Pole prostokata o bokach " << a << "  " << b << " = "  << p << endl;
 fflush(stdin);
 getch();
}

void poletrojk()
{
 float a, h, p;
 cout << "Obliczenie pola trojkata" << endl;
 cout << "Podaj dlugosci: a i h => "; scanf("%f %f", &a, &h);
 p=a*h/2.0;
 cout << "Pole trojkata o boku " << a << "  i wysokosci  " << h << " = "  << p << endl;
 getch();
 }

void poletrapez()
{
 float a, b, h, p;
 cout << "Obliczenie pola trapezu" << endl;
 cout << "Podaj dlugosci: a i b oraz h => "; scanf("%f %f %f", &a, &b, &h);
 p=0.5*(a+b)*h;
 cout << "Pole trapezu o podstawach  " << a << "  " << b << "  i wysokoci " << h << " = "  << p << endl;
 getch();
 }

double polekola() // zwraca watosc
{
 double r, p, p1;
 double PI=4.0*atan(1.0),  pi = 4.0 * atan(1.0);
 cout << "Obliczenie pola kola\n";
 cout << "M_PI = " << M_PI << " PI= " << PI << " pi = " <<  pi << endl;
 cout << "\nPodaj promien r  => ";
 scanf("%lf", &r);
 p=M_PI*r*r;
 p1=PI*r*r;
 cout << "\nPole kola o promieniu " <<  r << "  = M_PI*r*r= " << p << endl;
 cout << "\nPole kola o promieniu " <<  r << "  = PI*r*r= " << p1 << endl;
  cout << "\n";
 getch();
 return(p);
}





Parametry funkcji głównej

Uruchamiamy program parametr1 parametr2
Tu: pp_main a b

// pp_main.cpp -  parametry main

#include <iostream>   
#include <cstdlib>
using namespace std;
       
int main (int argc, char *argv[])
{
  double  a=0, b=0, p=0;  // zmienne rzeczywiste podwojnej precyzji 8 bajtow, 15 cyfr znaczacych
  int i, d; // dokladnosc wydruku po kropce dziesietnej
  system("cls"); // kasowanie ekranu
  cout << "Program pp_while.cpp\n";
  cout << "Oblicznie pola prostokata o danych bokach a i b \n(zmienne double - 15 cyfr znaczacych)" << endl;
  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)
  /*
  cout << "argc=" << argc << endl;
  for (int i = 0; i<argc; ++i)
  {    cout << i << "  " <<  argv[i] << endl;   }
  */
  // cout << argv[1] << "  " << argv[2] << endl;;
 
  // cout << "Argumenty main(): " << argv[0] << "  " <<  argv[1] << "  "  << argv[2] << endl;
  if (argv[1] != 0 )
  {
        a = strtod(argv[1], NULL);
        cout << " a = " << a << endl;   
  }       
  else  { cout << "Podaj a  => ";     cin >> a ;    };
 
  if (argv[2] != 0 )
  {
        b = strtod(argv[2], NULL);
        cout << " b = " << b << endl;   
  }       
  else  { cout << "Podaj b  => ";     cin >> b ;    };

 
 
  p=a*b;
  cout << "Pole o bokach " << a << "  i b =  " << b << " = " << p << endl;
 
  system("PAUSE");
  return 0;
}





TABLICE

// pp_forT.cpp -  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 << "Oblicznie: " << 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;
}


STRUKTURY, TABLICE

// pp_forST.cpp -  petla for, struktura, system
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
#define MAX 50
#define NL  putchar('\n')
#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);
  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;
}




POLA WIEOBOKU ZAMKNIETEGO ZE WSPÓŁRZĘDNYCH

// PolaDzXY.cpp - pole dzialek ze wspolrzednych - instrukcja for, tablice  - wersja Dev C++
// rozmiar tablicy ustalony  po uruchomieniu programu podaniu danych
#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;
}



// PDXYpl2.cpp - pole dzialek ze wspolrzednych - CBuilder, zapis wyników do pliku PolaWyn.txt
// Wymiar tablicy stały - w #define
#include <iostream>
#include <stdio.h>
#include <fstream>

#define TAB "\t"
#define WYN "PolaWyn.txt"
#define rozmiar 100
using namespace std;

 
int main()
{
  int n;
//  int 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;
}



// 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;
}