Задачи со функции

Funkcii_Zadaci_Predavanja

Мatematicki funkcii     

VEZBI - zadaci so potprogrami 

Вежби - задачи со функции

Програма со која се пресметува плоштина и периметар на квадрат


//Se presmetuva plostina i perimetar na kvadrat
#include<iostream>
using namespace std;
main()
{
      float a,perimetar,plostina;
      cout<<"Vnesete ja stranata na kvadratot a=";
      cin>>a;
      perimetar=4*a;
      plostina=a*a;
      cout<<"Perimetarot na kvadratot e L="<<perimetar<<endl;
      cout<<"Plostinata na kvadratot e P="<<plostina<<endl;  

system("pause");
return 0;
}

Програма со потпрограма:

//p-11 R Kvadrat
//Se presmetuva plostina i perimetar na kvadrat
//so primena na funkcija
#include<iostream>
using namespace std;
float perimetar(float a)
{
      float L;
      L=4*a;
      return L;
}


float plostina(float a)
{
      float P;
      P=a*a;
      return P;
}

main()
{
      float a;
      cout<<"Vnesete ja stranata na kvadratot a=";
      cin>>a;
      cout<<"Perimetarot na kvadratot e L="<<perimetar(a)<<endl;
      cout<<"Plostinata na kvadratot e P="<<plostina(a)<<endl; 
system("pause");
return 0;

}

Програма со која се пресметува збирот на броевите од 1 до n.

//Programa so koja se sobiraat broevite od 1 do n
#include<iostream>
using namespace std;
int main()
{

    int n,broj,zbir; 
    cout<<”Vnesi go n=”;
    cin>>n;

    
broj=1;
    zbir=0;
    while (
broj<=n)
   
{
          zbir=zbir+
broj;  //zbir+=broj;
          
broj=broj+1;  //broj+=1;
    }
cout<<"Zbirot na broevite od 1 do 
“<<n<<” e: “<<zbir<<endl;
return 0;
}

Програма со потпрограма:

//Programa so koja se sobiraat broevite od 1 do n
//so primena na funkcija
#include<iostream>
using namespace std;
int zbir(int n)
{
     int s=0;
     int broj=1;
     while(broj<=n)
     {
          s=s+broj;
          broj=broj+1;
     }
return s;
}
int main()
{
    int n; 
    cout<<"Vnesi go n=";
    cin>>n;
    cout<<"Zbirot na broevite od 1 do "<<n<<" e: "<<zbir(n)<<endl;
return 0;
}

 или 


//Programa so koja se sobiraat broevite od 1 do n
//so primena na funkcija
#include<iostream>
using namespace std;

int zbir(int n)
{ int s=0;
for(int i=1;i<=n;i++)
s+=i;
return s;
}

int main()
{ int n;
   cout<<"Vnesi go n=";
   cin>>n;
   cout<<"Zbirot na broevite od 1 do "<<n<<" e: "<<zbir(n)<<endl;
return 0;
}


Програма со која се проверува колкуцифрен е внесениот број и се пресметува збирот на цифрите на бројот, при што се употребуваат две функции, едната за пресметување на бројот на цифри, а другата за пресметување на збирот на цифрите на внесениот број.


//Programa so koja se naogja kolkucifren e vneseniot broj
//i se presmetuva zbirot na cifrite na brojot
//Za brojot na cifrite se upotrebuva funkcija
//Za zbirot na cifrite se upotrebuva funkcija

#include<iostream>
using namespace std;

int BrojNaCifri(int m); 
int ZbirNaCifri(int m);

main()
{
      int n;
      cout<<"Vnesete priroden broj: "; cin>>n;
      cout<<"Vneseniot broj e "<<BrojNaCifri(n)<<"-cifren"<<endl;
      cout<<"Zbirot na cifrite na vneseniot broj e "<<ZbirNaCifri(n)<<endl;
system("pause");
return 0;
}

int BrojNaCifri(int m) //funkcija koja go presmetuva brojot na cifri
{
      int broj=0;
      do
      {
         broj ++;
         m=m/10;
      }while (m>0);
 return broj;
}

int ZbirNaCifri(int m) //funkcija koja go presmetuva zbirot na cifri
{
        int cifra,zbir=0;
        do
        {
           cifra=m%10;
           zbir+=cifra;
           m=m/10;
        }while(m>0);
return zbir;
}

Програма со која се пресметува збирот на цифрите на троцифрен број, при што се користи функција која проверува дали е внесен троцифрен број.


//Da se presmeta zbirot na cifrite na tricifren broj
#include<iostream>
using namespace std;
int numdigits(int n) //funkcija koja proveruva dali e vnesen tricifren broj
{                               //vlez e brojot n, a izlez brojot na cifri
            int broj_na_cifri=0; 
            while(n != 0)
            {
                        n /= 10;//n=n/10;
                        ++broj_na_cifri;
            }
            return broj_na_cifri; //go vraka brojot na cifri
}

main()

       int n,sn=0,sp=0,i;
       cout<<"Vnesi eden tricifren broj :";
       cin>>n;
             int proverka=numdigits(n); //povikuvanje na funkcijata so vistinski argument
       if (proverka!=3)
       {
            cout<<"Inputot ne e tri-cifren broj"<<endl;
            system("pause");
            return 0;
       }    

       else
          {
            int cifra1=(n/10)/10;
            int cifra2=(n/10)%10;
            int cifra3=n%10;
            sn=cifra1+cifra2+cifra3;
          }
cout<<"Zbirot na cifrite na brojot e "<<sn<<endl;
system("pause");
return 0;
}

Програма со која се печатат Армстронговите броеви во интервалот [1,n], при што за пресметување на збирот на степенуваните цифри се користи функција.

// Armstrongovi broevi
//Armstrongov broj od 3-ti stepen e na primer brojot 153 zatoa sto
//153=1 na treta + 5 na treta + 3 na treta

#include<iostream>
#include<cmath>
using namespace std;

int sum(int x,float m);

main()
{

       long int n;
       int i,k,stepen;
       cout<<"Do koj priroden broj gi barate Armstrongovite broevi?  n=";
       cin>>n;
       cout<<n<<endl;
       cout<<"Od koj red(stepenot na ciftrite)? stepen=";
       cin>>stepen;
       for (k=1;k<n;k++)
           if (k==sum(k,stepen))
              cout<<"Armstrongov broj e "<<k<<endl;
system("pause");
return 0;
}

int sum(int x,float m)
{
       int cifra;
       int zbir=0;
       do
       {
          cifra=x%10;
          zbir=zbir+pow(cifra,m); //so funkcijata pow se presmetuva cifra na m-ti stepen
          x=x/10;
       }while (x>0);
return zbir;
}


Што ќе се прикаже на екранот како резултат од извршувањето на следниот програмски сегмент?

#include <iostream>
using namespace std;
int f1(int t, int &u, int &v)
{
t = t+3;
u = u+1;
v =v - t + 2*u;
return v;
}

int main()
{
int a=1, b=2, c=3;
cout <<" Vrednosta na funkcijata iznesuva "<< f1(a,b,c) << endl;
cout <<" a vrednosta na a="<< a <<" b="<< b <<" c="<< c << endl;
return 0;
}


Vrednosta na funkcijata iznesuva 5
A vrednosta na a=1 b=3 c=5

Објаснување:
Кога ќе се повика функцијата f1(a,b,c) односно f1(1,2,3)
t=t+3 = 1+3 = 4 //vrednosta na t ne e povrzana so vrednosta na a
u=u+1 = 2+1 = 3 //vrednosta на u e i vrednost na b, zatoa sto e &u
v =v - t + 2*u = 5-4+2*3 = 3-4+6 = 5 //vrednosta на v e i vrednost na c, zatoa sto e &v
return v //kon main() se praka 5


Што ќе се прикаже на екранот како резултат од извршувањето на следниот програмски сегмент?

#include <iostream>
using namespace std;
int f1(int &t, int u, int &v)
{
t = 2*t+1;
u = u+1;
v = v + t + 2*u;
return v;
}

int main()
{
int a=1, b=2, c=3;
cout << "Funkcijata ima vrednost "<<f1(a, b, c)<< endl;
cout <<" Vrednostite za a, b i c se "<< a << " " << b << " " << c << endl;
return 0;
}


Funkcijata ima vrednost 12
Vrednostite za a, b i c se 3 2 12

Објаснување:
Кога ќе се повика функцијата f1(a,b,c) односно f1(1,2,3)
t = 2*t+1 = 2*1+1 = 3 //vrednosta на t e i vrednost na a, zatoa sto e &t
u = u+1 = 2+1 = 3 //vrednosta na u ne e povrzana so vrednosta na b
v = v + t + 2*u = 3+3+2*3 = 3+3+6 = 12 //vrednosta на v e i vrednost na c, zatoa sto e &v
return v //kon main() se praka 12

Одговори кој е резултатот од извршување на следниот програмски сегмент.

void duplicate (int& a, int& b, int& c)
{
a*=2;
b*=2;
c*=2;
}

int main ()
{
int x=1, y=3, z=7;
duplicate (x, y, z);
cout << "x=" << x << ", y=" << y << ", z=" << z;
return 0;
}

x=2, y=6, z=14

Објаснување:

Бидејќи влезните аргументи на функцијата void duplicate (int& a, int& b, int& c) се референци на променливи, тоа значи дека промената на нивните вредности ќе направи промена на вредностите на променливите со кои ќе биде повикана оваа функција во main(), односно

променливата х ќе ја добие вредноста на променливата а,
променливата y ќе ја добие вредноста на променливата b,
променливата z ќе ја добие вредноста на променливата c


Кога ќе ја повикате функцијата duplicate (x, y, z); односно duplicate (1, 3, 7);

a*=2; или а=а*2 = 1*2 = 2 //оваа вредност ќе се додели и на променливата х
b*=2; или b=b*2 = 3*2 = 6 //оваа вредност ќе се додели и на променливата y
c*=2; или c=c*2 = 7*2 = 14 //оваа вредност ќе се додели и на променливата z

Значи, ќе се отпечати
x=2, y=6, z=14


Како треба да се дефинираат рефенците во програмскиот код прикажан на сликата за да се добие следниот резултат x=1, y=6,z=14?

void duplicate (int a, int b, int c)
{
a*=2;
b*=2;
c*=2;
}

int main ()
{
int x=1, y=3, z=7;
duplicate (x, y, z);
cout << "x=" << x << ", y=" << y << ", z=" << z;
return 0;
}

void duplicate (int a, int &b, int &c)

Објаснување:
За разлика од претходниот пример, овде, влезните аргументи на функцијата

void duplicate (int a, int b, int c) се променливи и нивната промена нема да влијае на променливите со кои ќе биде повикана оваа функција во main(), поради што ќе се отпечати

x=1, y=3, z=7

За да се отпечати x=1, y=6,z=14 потпрограмата треба да се дефинира
void duplicate (int a, int &b, int &c)

Ако x=3, y=4, определи колкава ќе биде вредноста на x и y по извршување на следниот функциски повик swap(&x,&y).

void swap(int*a, int*b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}

x=4, y=3

Објаснување:

Функцијата swap(&x,&y) ќе ги смени вредностите на променливите x и y.

https://biljanaivanovic.wordpress.com/category/dev-c/funkcije-dev-c/

https://www.manuelradovanovic.com/p/sadrzaj.html?m=1

https://www.learncpp.com/cpp-tutorial/introduction-to-function-parameters-and-arguments/

https://m.youtube.com/watch?v=WqukJuBnLQU


No comments: