ROZWIĄZANIA  PRZYKŁADOWYCH  ZADAŃ
ilustrujących zastosowanie funkcji oraz przekazywania argumentów

ZADANIE_1    Napisz funkcję CZY_SEPARATOR, której argumentem jest jedna dana typu char.
Funkcja powinna sprawdzić przekazany znak jest separatorem tekstowym:
tzn. spacją, średnikiem, przecinkiem, tabulatorem lub znakiem przejścia do nowej liniii.
Rezultatem funkcji powinna być wartość logiczna: true lub false  (typu bool)

ZADANIE_2    Napisz funkcję JAKIE_UPORZADKOWANE,
której argumentami wejściowymi są trzy liczby typu long,
sprawdzającą czy wartości tych parametrów są uporządkowane rosnąco lub malejąco.
W przypadku uporządkowania rosnącego funkcja powinna zwrócić wartość „1” ,
w przypadku uporządkowania malejącego „-1” a w pozostałych przypadkach „0”.

ZADANIE_3    Napisz funkcję LITERY_CZY_CYFRY, której argumentami są cztery dane typu char.
Funkcja powinna sprawdzić przekazane znaki i zwrócić informację, czy zawierają one
więcej kodów liter (wówczas zwracana jest wartość „+1”),
czy cyfr (wówczas zwracana jest wartość „-1”)
oraz zwracającą „0” w przypadku równej ilości.

ZADANIE_4    Napisz funkcję WYSWIETL_ROSNACO, której argumentami wejściowymi
są 3 liczby rzeczywiste float i której działanie polega na wyświetleniu tych liczb
uporządkowanych od najmniejszej do największej wartości.


  1. Napisz funkcję CZY_SEPARATOR, której argumentem jest jedna dana typu char.
    Funkcja powinna sprawdzić przekazany znak jest separatorem tekstowym:
    tzn. spacją, średnikiem, przecinkiem, tabulatorem lub znakiem przejścia do nowej linii.
    Rezultatem funkcji powinna być wartość logiczna: true lub false  (typu bool)

 

bool CZY_SEPARATOR( char z )

{

  if( z==' ' || z==';' || z==',' || z=='\t' || z=='\n'  )

    return true;

  else

    return false;

}

 

 

#include <iostream>
using namespace std;

void main()         //przykładowe wywołanie w/w funkcji

{

  char znak = ';' ;

  if( CZY_SEPARATOR(znak) == true )
    cout << "To jest separator" << endl;

  else

    cout << "To jest jakiś inny znak (nie separator)" << endl;

}

 

  1. Napisz funkcję JAKIE_UPORZADKOWANE, której argumentami wejściowymi są trzy liczby long,
    sprawdzającą czy wartości tych parametrów są uporządkowane rosnąco lub malejąco.
    W przypadku uporządkowania rosnącego funkcja powinna zwrócić wartość „1” ,
    w przypadku uporządkowania malejącego „-1” a w pozostałych przypadkach „0”..


int JAKIE_UPOPRZADKOWANIE( long L1, long L2, long L3 )
{

  if( L1<L2 && L2<L3 )
    return +1;

  if( L1>L2 && L2>L3 )

    return -1;

  return 0;

}

 

 

#include <iostream>
using namespace std;

void main()  //przykładowe wywołanie w/w funkcji

{

  int wynik = CZY_UPOPRZADKOWANE( 40, 12, -6);

  if( wynik>0 )

    cout << "liczby były uporządkowane rosnąco" << endl;

  else if( wynik<0 )

    cout << "liczby były uporządkowane malejąco" << endl;

  else

    cout << "liczby nie były uporządkowane" << endl;

}

 

  1. Napisz funkcję LITERY_CZY_CYFRY, której argumentami są cztery dane typu char.
    Funkcja powinna sprawdzić przekazane znaki i zwrócić informację, czy zawierają one więcej kodów
    liter (wówczas zwracana jest wartość „+1”), czy cyfr (wówczas zwracana jest wartość „-1”)
    oraz zwracającą „0” w przypadku równej ilości.

// wersja A - najprostsza -> same instrukcje "if"

#include <ctype.h>

 

int LITERY_CZY_CYFRY( char z1, char z2, char z3, char z4 )

{

  //zamiana wszystkich liter na małe, aby łatwiej sprawdzać warunki

  z1 = tolower(z1);

  z2 = tolower(z2);

  z3 = tolower(z3);

  z4 = tolower(z4);

 

  //obliczanie ilosci cyfr

  int ilosc_cyfr=0;

  if( z1>='0' && z1<='9' )

    ilosc_cyfr++;

  if( z2>='0' && z2<='9' )

    ilosc_cyfr++;

  if( z3>='0' && z3<='9' )

    ilosc_cyfr++;

  if( z4>='0' && z4<='9' )

    ilosc_cyfr++;

 

  //obliczanie ilości liter

  int ilosc_liter=0;

  if( z1>='a' && z1<='z' )

    ilosc_liter++;

  if( z2>='a' && z2<='z' )

    ilosc_liter++;

  if( z3>='a' && z3<='z' )

    ilosc_liter++;

  if( z4>='a' && z4<='z' )

    ilosc_liter++;

 

  //wyznaczenie zwracanej wartości

  if( ilosc_liter>ilosc_cyfr )

    return +1;

  if( ilosc_liter<ilosc_cyfr )

    return -1;

  return 0;

}

 

 

void main()         //przykładowe wywołanie w/w funkcji

{

 int wynik = LITERY_CZY_CYFRY( 'a', 'B', 's', '2' );

}

 

 

//wersja B - z wykorzystaniem pętli i cyklicznego przesuwania znaków)

 

int LITERY_CZY_CYFRY( char z1, char z2, char z3, char z4 )

{

  //inicjalizacja liczników

  int ilosc_cyfr=0;

  int ilosc_liter=0;

 

  //pętla powtarzająca te same operacje dla kolejnych zmiennych

  for(int i=0; i<4; i++)

    {

      //obliczanie ilości cyfr

      if( z1>='0' && z1<='9' )

        ilosc_cyfr++;

 

      //obliczanie ilości liter

      if( z1>='a' && z1<='z' || z1>='A' && z1<='Z')

        ilosc_liter++;

 

      //cykliczne przesuniecie znaków "o jedną pozycję"

      char buf = z1;

      z1 = z2;

      z2 = z3;

      z3 = z4;

      z4 = buf;

    }

 

  //wyznaczenie zwracanej wartości

  if( ilosc_liter>ilosc_cyfr )

    return +1;

  if( ilosc_liter<ilosc_cyfr )

    return -1;

 

  return 0;

}

 

void main()       //przykładowe wywołanie w/w funkcji

{

  int wynik = LITERY_CZY_CYFRY( 'a', 'B', 's', '2' );

}

 

 

// wersja C - z przekazywaniem parametrów za pomocą tablicy

#include <ctype.h>

 

int LITERY_CZY_CYFRY( char znaki[4] )

{

  //inicjalizacja liczników

  int ilosc_cyfr=0;

  int ilosc_liter=0;

 

  //pętla powtarzająca te same operacje dla kolejnych zmiennych

  for(int i=0; i<4; i++)

    {

      //obliczanie ilości cyfr

      if( znaki[i]>='0' && znaki[i]<='9' )

        ilosc_cyfr++;

 

      //obliczanie ilości liter

      if( tolower(znaki[i])>='a' && tolower(znaki[i])<='z')

        ilosc_liter++;

    }

 

  //wyznaczenie zwracanej wartości

  if( ilosc_liter>ilosc_cyfr )

    return +1;

  if( ilosc_liter<ilosc_cyfr )

    return -1;

 

  return 0;

}

 

void main()       //przykładowe wywołanie w/w funkcji

{

  char tab[4]={'a', 'B', 's', '2'};

  int wynik = LITERY_CZY_CYFRY( tab );

}

 

  1. Napisz funkcję WYSWIETL_ROSNACO, której argumentami wejściowymi są 3 liczby rzeczywiste
    i której działanie polega na wyświetleniu tych liczb uporządkowanych od najmniejsze
    do największej wartości.

// wersja A - bez przestawiania liczb

 

#include <iostream>
using namespace std;

void WYSWIETL_ROSNACO( float L1, float L2, float L3 )

{

 //trzy liczby mogą by ustawione na 6 różnych sposobów

 if( L1<=L2 && L2<=L3 )

   cout<< "Liczby rosnaco: " <<L1<< ' ' <<L2<< ' ' <<L3<< endl;
 else if(( L1<=L3 && L3<=L2 )
   cout<< "Liczby rosnaco: " <<L1<< ' ' <<L3<< ' ' <<L2<< endl;

 else if(( L2<=L1 && L1<=L3 )

   cout<< "Liczby rosnaco: " <<L2<< ' ' <<L1<< ' ' <<L3<< endl;

 else if(( L2<=L3 && L3<=L1 )

   cout<< "Liczby rosnaco: " <<L2<< ' ' <<L3<< ' ' <<L1<< endl;

 else if(( L3<=L1 && L1<=L2 )

   cout<< "Liczby rosnaco: " <<L3<< ' ' <<L1<< ' ' <<L2<< endl;

 else if(( L3<=L2 && L2<=L1 )

   cout<< "Liczby rosnaco: " <<L3<< ' ' <<L2<< ' ' <<L1<< endl;

}

 

 

void main()     //przykładowe wywołanie w/w funkcji

{

  WYSWIETL_ROSNACO( 34, -4, 12 );

}

// wersja B - z fizycznym posortowaniem/poprzestawianiem liczb

#include <iostream>
using namespace std;

 

void WYSWIETL_ROSNACO( float L1, float L2, float L3 )

{

  for(int i=0; i<2; i++)

    {

      if( L1>L2 )

        {

          float buf = L1;   //przestawianie pierwszej pary

          L1 = L2;

          L2 = buf;

        }

      if( L2>L3 )

        {

          float buf = L2;   //przestawianie pierwszej pary

          L2 = L3;

          L3 = buf;

        }

    }

  //wyswietlenie posortowanych liczb

  cout << "Liczby rosnaco: " << L1 << ' ' << L2 << ' ' << L3 << endl; }

 

 

void main()     //przykładowe wywołanie w/w funkcji

{

  WYSWIETL_ROSNACO( 34, -4, 12 );

}