PRZYKŁADY PROGRAMÓW

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


Przykład:

// if_els1.cpp - if...else
#include <iostream>   
using namespace std;
       
int main()                            // Najwazniejsza czesc programu
{
  int age;                            // zmienna
 
  cout<<"Wprowadz swoj wiek: ";    // Pyta o wiek
  cin>> age;                          // Wprowadzenie wieku
  cin.ignore();                       // Odrzuca Enter
  if ( age < 100 ) {                  // Jesli wiek > 100
     cout<<"Jestes jeszcze mlody!\n"; // Wyswietla 1 komunikat
  }
  else if ( age == 100 ) {            // Jesli wiek rowna sie  100
     cout<<"Jestes stary\n";           // Wyswietla 2 komunikat
  }
  else {
    cout<<"Jestes rzeczywiscie stary\n";     // W przeciwnym przypadku - wiek ponad 100
  }
  cin.get();
}

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

// Program switch1.cpp - funkcje trygonometryczne podanego kąta w radianach
#include <iostream>
#include <math.h>
using namespace std;

int main()
{
double x;
char wybor;
cout << "Program oblicza funkcje trygonometryczne podanej liczby" << endl;
cout << "Podaj x: ";
cin >> x;
cout << "Wybierz co chcesz obliczyc:" << endl;
cout << "S - sinus, C - cosinus, T - tangens " << endl;
cin >> wybor;
cout.precision(2);
switch (wybor)
{
case 'S':
case 's':
     cout << "sin(" << x << ")=" << sin(x);
     break;
case 'C':
case 'c':
     cout << "cos(" << x << ")=" << cos(x);
     break;    
case 'T':
case 't':
     cout << "tan(" << x << ")=" << sin(x);
     break;     
default:
     cout << "niezdefiniowana operacja" << wybor;
     break;
};

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




// Program switch_2.cpp - obliczenie funkcji trygonometrycznych podanego kąta w grad lub stopniach - zamiana na radiany

#include <iostream>

#include <math.h>
using namespace std;

int main()
{
double rs=57.29578;
double  rg=63.661978;
double x;
int sg;
char wybor;
cout << "Program oblicza funkcje trygonometryczne podanej liczby" << endl;
cout <<"1 - stopnie, 2 - grady "; cin >> sg;
cout << "\nPodaj kat: ";
cin >> x;
if (sg==1) x=x/rs; else x=x/rg;
cout <<"\nKat " << x;

cout << "Wybierz co chcesz obliczyc:" << endl;
cout << "S - sinus, C - cosinus, T - tangens " << endl;
cin >> wybor;
cout.precision(4);
switch (wybor)
{
case 'S':
case 's':
     cout << "sin(" << x << ")=" << sin(x);
     break;
case 'C':
case 'c':
     cout << "cos(" << x << ")=" << cos(x);
     break;    
case 'T':
case 't':
     cout << "tan(" << x << ")=" << sin(x)/cos(x);
     break;     
default:
     cout << "niezdefiniowana operacja" << wybor;
     break;
};

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




Pętle

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

// dowhile1.cpp - do ... while
#include <iostream>
using namespace std;
int main()
{
  int x=0;
  do {
    // "Hello, world!" wyswietla sie przynajmniej raz  nawet jesli warunek jest falszywy
    cout<<"Hello, world!\n";
  } while ( x != 0 );
  cin.get();
}



// Program dowhile2.cpp - do ... while
#include <iostream>
using namespace std;

int main()
{
  int x=0;

  do
  {
    cout<< x <<endl;
    x++;             // zwieksza x o 1
  } while ( x < 10 );
  cin.get();
}

Wynik
0
1
2
3
4
5
6
7
8
9




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.

// while_1.cpp Petla while
#include <iostream>
using namespace std; // By uzyc cout i endl;
int main()
{
  int x = 0;  // Deklaracja i inicjacja
 
  while ( x < 10 ) { // Dopoki x mniejsze od 10
    cout<< x <<endl;
    x++;             // Zwieksza x o 1
  }
  cin.get(); // czeka na Enter
}



Pętla for
// Program for_1.cpp - pętla for
#include <iostream>
using namespace std; // Do funkcji  cout and endl

int main()
{
  // Pętla przebiega podczas gdy x < 10 i x zwiększa się w każdej pętli
  for ( int x = 0; x < 10; x++ )
  {
    // Keep in mind that the loop condition checks  /  the conditional statement before it loops again. /  consequently, when x equals 10 the loop breaks.
    // x is updated before the condition is checked.   
    // Pętla sprawdza warunek przed przebiegiem pętli , a gdy x osiagnie 10 zatrzymuje się;  x jest modyfikowane przed sprawdzaniem warunku
    cout<< x <<endl;
  }
  cin.get();
}



FUNKCJE

Funkcje matematyczne

Obliczenie azymutu


/* azatan2a.c - obliczenie azymutu - while, atan2 */
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define PI 3.14159265

int main ()
{
  double x, y, result, az, d;
  int kont=1;
  puts("Obliczenie azymutu na podstawie funkcji atan2(dy,dx)");
  puts("tan(Az)=DY/DX");
  printf("\nWprowadz DX (999 - koniec) =>  ");
  scanf("%lf", &x);
  while (x != 999)
  {
   printf("Wprowadz DY  ");
  scanf("%lf", &y);
  printf("x=%f  y=%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 ("atan2 dla (DX=%lf, DY=%lf) = %lf[grad]\n", x, y, result);
  printf ("DX=%.3f DY=%.3f  Az = %.4f[grad]  Dl=%.3f\n", x, y, az, d  );
  printf("\nWprowadz DX (999 - koniec) => ");
  scanf("%lf", &x);
  } // while
 
  return 0;
}


/* azatan2b.c - obliczenie azymutu , do while, atan2   */
#include <stdio.h>
#include <math.h>
#include <conio.h>

#define PI 3.14159265

int main ()
{
  double 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 DX  ");
  scanf("%lf", &x);
  printf("Wprowadz DY  ");
  scanf("%lf", &y);
  printf("x=%f  y=%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 ("atan2 dla (DX=%lf, DY=%lf) = %lf[grad]\n", x, y, result);
  printf ("DX=%.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;
}



FUNKCJE -przykład


// Program funkcja1.cpp  - funkcja mult(c,y) - mnzozenie 2 liczb
#include <iostream>
using namespace std;

int mult ( int x, int y );  // deklaracja

int main()
{
  int x, y;
 
  cout<<"Wprowadz 2 liczby calkowite, ktore maja byc przemnozone: ";
  cin>> x >> y;
  cin.ignore();
  cout<<"Iloczyn liczb wynosi  "<< mult ( x, y ) <<"\n";
  cin.get();
}

int mult ( int x, int y )  // definicja
{
  return x * y;
}




Tablice

// Program tabl1.cpp
#include <iostream>

using namespace std;
 
int main()
{
    int rozmiar;
    cout <<"podaj ilosc liczb: ";
    cin >>rozmiar;
    cin.ignore();
 
    int tablica[rozmiar];
    int suma = 0;
    for (unsigned int i = 0; i < rozmiar; ++i)  //pobieranie liczb...
    {
        cout <<"Podaj liczbe nr "<<(i+1)<<" : ";
        cin >> tablica[i];
        cin.ignore();
        suma += tablica[i];     //sumowanie elementów...
    }
    cout <<"\nsrednia wynosi: "<<(suma / rozmiar)<<endl;
    cin.get();

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