edongashi Shënimet e ushtrimeve

Bazat e Programimit - Java 13


Detyrë: Çfarë shfaqet kur të ekzekutohet ky kod?

int f(int a) {
  return a + 5;
}

int main() {
  cout << "a = " << f(3) + 2 * f(2) << endl;
  cout << "b = " << f(f(2)) << endl;
  return 0;
}

a = 22
b = 12

Detyrë: Çfarë shfaqet kur të ekzekutohet ky kod?

int f(int x, int a) {
  return x + 3 * a;
}

int g(int a) {
  return a * 2;
}

int main() {
  cout << 2 * g(f(3, f(2, 1)) + 2);
  return 0;
}

80

Detyrë: Çfarë shfaqet kur të ekzekutohet ky kod?

int h(int x) {
  if (x < 1) {
    return 0;
  } else {
    return x + h(x - 1);
  }
}

int main() {
  cout << 2 * h(5);
  return 0;
}

30

Detyrë: Të shkruhen dy funksione me emrin max. Njëri e gjen maksimumin e matricës ndërsa tjetri të vektorit.

#include <iostream>
using namespace std;

#define N 3

int max(int v[], int n)
{
  int rez = v[0];
  for (int i = 0; i < n; i++)
  {
    if (v[i] > rez)
    {
      rez = v[i];
    }
  }

  return rez;
}

int max(int A[][N], int rr)
{
  int rez = A[0][0];
  for (int i = 0; i < rr; i++)
  {
    for (int j = 0; j < N; j++)
    {
      if (A[i][j] > rez)
      {
        rez = A[i][j];
      }
    }
  }

  return rez;
}

int main()
{
  int v[5] = {5, 3, 15, 2, 7};
  cout << "Maksimumi i v: " << max(v, 5) << endl;

  int M[N][N] = {
    {3, 1, 5},
    {7, 3, 9},
    {8, 0, -3}
  };

  cout << "Maksimumi i M: " << max(M, N) << endl;
  return 0;
}

Detyrë: Të deklarohet struktura drejtkendesh(a,b) e cila mban brinjët e drejtkëndëshit. Të shkruhen funksionet int perimetri(drejtkendesh), int siperfaqja(drejtkendesh), double diagonalja(drejtkendesh), dhe drejtkendesh rrotullo(drejtkendesh) dhe funksione tjera në lidhje me drejtkëndëshin.

#include <iostream>
#include <sstream>
#include <fstream>
#include <math.h>
#include <string>

using namespace std;

struct drejtkendeshi {
  int a;
  int b;
};

int perimetri(drejtkendeshi d) {
  return 2 * (d.a + d.b);
}

int siperfaqja(drejtkendeshi d) {
  return d.a * d.b;
}

double diagonalja(drejtkendeshi d) {
  return sqrt(pow(d.a, 2) + pow(d.b, 2));
}

drejtkendeshi rrotulluar(drejtkendeshi d) {
  drejtkendeshi rez;
  rez.a = d.b;
  rez.b = d.a;
  return rez;
}

void shfaq(drejtkendeshi d){
  cout << "(" << d.a << "," << d.b << ")" << endl;
}

string toString(drejtkendeshi d) {
  stringstream ss;
  ss << "(" << d.a << "," << d.b << ")";
  return ss.str();
}

bool identik(drejtkendeshi d1, drejtkendeshi d2) {
  if (d1.a == d2.a && d1.b == d2.b) {
    return true;
  } else {
    return false;
  }
}

bool ngjashem(drejtkendeshi d1, drejtkendeshi d2) {
  if (identik(d1, d2) || identik(d1, rrotulluar(d2))) {
    return true;
  } else {
    return false;
  }
}

int main() {
  drejtkendeshi d = { 4, 3 };
  cout << toString(d) << endl;
  cout << "Perimetri: " << perimetri(d) << endl;
  cout << "Siperfaqja: " << siperfaqja(d) << endl;
  cout << "Diagonalja: " << diagonalja(d) << endl;
  cout << toString(rrotulluar(d)) << endl;

  ofstream file;
  file.open("drejtkendeshi.txt");
  file << "Drejtkendeshi d: " << toString(d);
  file << endl;
  file << "Drejtkendeshi i rrotulluar: "
       << toString(rrotulluar(d))
       << endl;

  drejtkendeshi d2 = rrotulluar(d);
  cout << "d1 === d2? " << identik(d, d2) << endl;
  cout << "d1 <=> d2? " << ngjashem(d, d2) << endl;

  return 0;
}

Funksionet brenda strukturave

Funksionet mund të vendosen edhe brenda strukturave, me ç’rast funksioni ka qasje direkte në fushat e strukturës.

struct drejtkendeshi {
  int a;
  int b;

  int perimetri() {
    return 2 * (a + b);
  }
};

Funksionet brenda strukturave thirren duke iu qasur me pikë .:

drejtkendeshi d = { 5, 3 };
cout << d.perimetri(); // shtypet 16

Vëreni se si funksioni perimetri nuk po merr asnjë parametër, kjo pasi që është në kuadër të strukturës.


Detyrë: Të shkruhet struktura drejtkendeshi dhe të shkruhen funksionet perimetri, siperfaqja, dhe diagonalja brenda asaj strukture dhe të thirren për drejtkëndëshin $(4,3)$.

#include <iostream>
#include <math.h>
using namespace std;

struct drejtkendeshi {
  int a;
  int b;

  int siperfaqja() {
    return a * b;
  }

  int perimetri() {
    return 2 * (a + b);
  }

  double diagonalja() {
    return sqrt(pow(a, 2) + pow(b, 2));
  }
};

int main() {
  drejtkendeshi d = { 4, 3 };
  cout << "Siperfaqja: " << d.siperfaqja() << endl;
  cout << "Perimetri: "  << d.perimetri()  << endl;
  cout << "Diagonalja: " << d.diagonalja() << endl;
  return 0;
}

Detyrë: Të deklarohet struktura rezultati(piketShkrim, piketGoje). Të deklarohet struktura notat e cila mban 5 rezultate për lëndët e semestrit.

Pastaj të definohen funksionet int nota(rezultati), double notaMesatare(notat), int provimeTeKaluara(notat).

#include <iostream>
using namespace std;

struct rezultati {
  int piketMeShkrim;
  int piketMeGoje;
};

struct notat {
  rezultati matematike;
  rezultati fizike;
  rezultati baza;
  rezultati programim;
  rezultati zgjedhore;
};

int nota(rezultati r) {
  if (r.piketMeShkrim < 50 || r.piketMeGoje < 50) {
    return 5;
  }

  int piket = (r.piketMeShkrim + r.piketMeGoje) / 2;
  if (piket >= 90) {
    return 10;
  } else if (piket >= 80) {
    return 9;
  } else if (piket >= 70) {
    return 8;
  } else if (piket >= 60) {
    return 7;
  } else if (piket >= 50) {
    return 6;
  } else {
    return 5;
  }
}

double notaMesatare(notat n) {
  return (nota(n.matematike)
        + nota(n.fizike)
        + nota(n.baza)
        + nota(n.programim)
        + nota(n.zgjedhore)) / 5.0;
}

int provimeTeKaluara(notat n) {
  int totali = 0;
  if (nota(n.baza) > 5) {
    totali++;
  }
  if (nota(n.matematike) > 5) {
    totali++;
  }
  if (nota(n.fizike) > 5) {
    totali++;
  }
  if (nota(n.programim) > 5) {
    totali++;
  }
  if (nota(n.zgjedhore) > 5) {
    totali++;
  }

  return totali;
}

int main() {
  rezultati r = { 35, 85 };
  cout << nota(r)
       << endl;

  notat studenti;
  studenti.matematike = {57, 65};
  studenti.fizike = {35, 48};
  studenti.baza = {72, 90};
  studenti.programim = {42, 58};
  studenti.zgjedhore = {95, 100};

  cout << "Matematike me goje: "
       << studenti.matematike.piketMeGoje
       << endl;

  cout << "Nota mesatare e studentit: "
       << notaMesatare(studenti)
       << endl;

  cout << "Studenti ka kaluar kaq provime: "
       << provimeTeKaluara(studenti)
       << endl;

  return 0;
}

Detyrë: Të deklarohet struktura vetura(marka, viti) dhe të krijohen funksione të cilat e kthejnë në string këtë strukturë.

#include <string>
#include <iostream>
#include <sstream>
using namespace std;

enum Marka {
  audi,
  bmw,
  mercedes
};

struct Vetura {
  Marka marka;
  int viti;
};

string toString(Marka m) {
  stringstream ss;
  switch (m) {
    case audi:
      ss << "Audi";
      break;
    case bmw:
      ss << "BMW";
      break;
    case mercedes:
      ss << "Mercedes";
      break;
  }

  return ss.str();
}

string toString(Vetura v) {
  stringstream ss;
  ss << "Marka: " << toString(v.marka)
     << ", Viti: " << v.viti;
  return ss.str();
}

int main() {
  Vetura v = { mercedes, 2010 };
  cout << toString(v);
  return 0;
}

Detyrë: Të deklarohet struktura Personi(Emri,Mbiemri,Mosha,Paga) dhe të shkruhen funksionet Personi lexoTeDhenat() i cili lexon të dhënat e një personi nga tastiera si dhe shfaqTeDhenat(Personi) i cili shfaq të dhënat e personit në ekran.

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

struct Personi
{
  string Emri;
  string Mbiemri;
  int Mosha;
  double Paga;
};

void shfaqTeDhenat(Personi n)
{
  cout << "=== Te dhenat e personit ===" << endl;
  cout << "Ju jeni:    " << n.Emri << " " << n.Mbiemri << endl;
  cout << "Mosha juaj: " << n.Mosha << endl;
  cout << "Paga juaj:  " << n.Paga << endl;
}

Personi merrTeDhenat()
{
  Personi b;
  cout << "Ju lutem plotesojeni formularin ne vijim." << endl;
  cout << "Emri dhe mbiemri: ";
  cin >> b.Emri >> b.Mbiemri;
  cout << "Mosha: ";
  cin >> b.Mosha;
  cout << "Paga: ";
  cin >> b.Paga;
  return b;
}

int main()
{
  Personi v = merrTeDhenat();
  cout << endl;
  shfaqTeDhenat(v);
  return 0;
}