You are on page 1of 16

⸙ ₴

Lënda: Shkenca Kompjuterike I (B)


Profesori: Fatos Maxhuni
Data: 02.03.2018
Kohëzgjatja: 120 min

Rregullat e Provimit:

Përdorimi i librave, materialeve dhe shënimeve tjera nuk lejohet.


Biseda me studentët tjerë gjatë provimit apo kopjimi i punës së
studentit tjetër nuk lejohet. Mashtrimi apo çfarëdo dhunimi tjetër i
këtyre rregullave do të rezultoi me zero pikë dhe përballje me
komision disiplinor.

Emri dhe Mbiemri: _____________________________

Nr. ID : _____________________________

1. Pyetje teorike nga lënda “Shkenca Kompjuterike I”


[10 pikë]

a) Çka është një klasë e çka një objekt në gjuhët programuese të bazuara në Objekte?
[2 pikë]

b) Çka shtyp kodi në vijim? Ju lutem rrethoni një opsion.


[2 pikë]
int i=21, j=4;
for (i=--i; i > j; i-=j%5, j+=3) {
System.out.print( i + " ");
}

1. 20 16 14 14 E SAKTE 3. 20 18 16 14
2. 21 18 15 12 4. 21 17 15 15

c) Cila vlerë ruhet në variablën y nga kodi në vijim?


[2 pikë]

int x = 17;
String y = (x - 2 % 5 == 0 || Math.sqrt(--x) % 2 == 0) ? "5" : "10";

Ruhet Vlera 5

d) Cila vlerë ruhet në variablën double c nga kodi në vijim?

[2 pikë]
int a = 17, b = -6;
double c = Math.sqrt(--a) * Math.abs(b++) / Math.sqrt(a--) - (a / -b);

Ruhet Vlera 3.0

e) Çka nënkuptoni me termin “method overloading”


[2 pikë]
ME termin method overloading nenkuptojme se mund te krijojme disa metoda
Me emer te njejte por me parametra te ndryshem

2. Shkruani klasën NumeroShkronjat që e kryen funksionin më poshtë [22 pikë]

Në metodën main [7 pikë]

a) Duke përdorë while loop, të kërkohet nga shfrytëzuesi të shtyp tekst deri sa nuk
shtypet teksti END (case sensitive) që është sentinel, terminon unazën (loop) dhe
nuk hyn në kalkulim.

VINI RE: Nuk pranohet përdorimi i komandës break për terminim të unazës

b) Në fund të shfaqet numri i të gjitha fjalive të shtypura si dhe të atyre që kanë


maksimum dhjetë (10) fjalë ku dy prej tyre kanë nga gjashtë (6) simbole dhe si
simbol të parafundit e kanë shkronjën A (case insensitive).

Rezultati të shfaqet si më poshtë:

Jane shtypur <x> fjali dhe <y> prejt tyre plotesojne kushtin

Ose nëse nuk është shtypur asnjë fjali (tekst) të afishohet teksti

Nuk u shtyp fare tekst

P.sh. Një fjali që plotëson kushtin

Bazuar ne piket e testit studenti e ka kaluar provimin.

Metoda numero [15 pikë]

c) Kalkulimi nëse një fjali e plotëson kushtin e kërkuar në pikën b) duhet të realizohet
vetëm në metodën numero

import java.util.Scanner;

public class NumeroShkronjat {


public static void main(String [] arg){
Scanner scan = new Scanner(System.in);
final String SENTINEL = "END";
int countTotal = 0; //te gjitha fjalite
int count = 0; //fjalite qe e plotesojne kushtin
System.out.printf("Shtyp tekst ose %s per fund: ",
SENTINEL);
String fjalia = scan.nextLine();
while(!fjalia.equals(SENTINEL)){
countTotal++;
if(numero(fjalia)){
count++;
}
System.out.printf("Shtyp tekst ose %s per fund: ",
SENTINEL);
fjalia = scan.nextLine();
}

if(countTotal == 0){
System.out.println("Nuk u shtyp fare tekst");
} else {
System.out.println("Jane shtypur "+countTotal+"
fjali dhe "+count+" prej tyre plotesojne kushtin");
}
}

//se paku dy fjale e plotesojne kushtin e kerkuar


private static boolean numero(String str){
String [] fjalet = str.split(" ");
if(fjalet.length <= 10) {
int count = 0;
for(String fjala : fjalet) {
if(fjala.length() == 6 &&
str.toLowerCase().charAt(fjala.length()-2) == 'a'){
//if(fjala.length() == 6 &&
str.toLowerCase().charAt(4) == 'a'){
count++;
if(count == 2){
return true;
}
}

}
}
return false;
}

//se fix dy fjale e plotesojne kushtin e kerkuar


private static boolean numeroFix(String str){
String [] fjalet = str.split(" ");
int count = 0;
if(fjalet.length <= 10) {
for(String fjala : fjalet) {
if(fjala.length() == 6 &&
str.toLowerCase().charAt(fjala.length()-2) == 'a'){
count++;
}
}
}
return count == 2;
}
}

3. Shkruani klasën Mesatarja që e kryen funksionin më poshtë: [18 pikë]

Duhet të mundësohet llogaritja e mesatares së numrave të shtypur pozitiv, negativ si dhe


mesatarja e të gjithë numrave të shtypur.

Metoda main:

a) Nga shfrytëzuesi të kërkohet madhësia e vargut, përderisa inputi nuk është së paku
15 numra.

Venin re: Nuk pranohet përdorimi i komandës break për terminim të unazës
[3 pikë]

b) Të kërkohet nga shfrytëzuesi t’i plotësoj vlerat e vargut me numra me presje dhjetore
64 bit. Të merren parasysh vetëm ata numra që janë në rangun -550 ... 550
[2.5 + 2.5 pikë]

Në fund të shfaqen cila është mesatarja e numrave pozitiv (p.sh. 135.5), mesatarja
e numrave negativ (p.sh. -84.2) dhe mesatarja e të gjithë numrave (p.sh. 32.3) e
pjesës së plotë të numrit, vlera që vijnë si rezultat i një thirrje të vetme të metodës
kalkuloMesataren dhe që janë të lexueshëm për shfrytëzuesin.
[3 pikë]

Metoda kalkuloMesataren:

a) Rezultati i plotë duhet të kalkulohet dhe kthehet me vetëm një thirrje të metodës
dhe nuk pranohet rezultati i tipit String, StringBuilder, StringBuffer apo çfarëdo forme
të Stringut. Nuk pranohet as kalkulimi përmes variablave të instancës apo atyre të
klasës.
[7 pikë]

import java.util.Scanner;

public class Mesatarja {


public static void main(String [] arg){
Scanner scan = new Scanner(System.in);
int length = 0;
System.out.print("Shtyp madhesine e vargut (>=15): ");
while(!scan.hasNextInt() || (length = scan.nextInt()) < 15)
{
scan.nextLine();
System.out.print("Shtyp madhesine e vargut (>=15):
");
}

double [] vargu = new double[length];

for(int i=0; i<vargu.length; ){


System.out.print("Shtyp double (-550 ... 550): ");
double vlera = scan.nextDouble();
if(vlera >= -550 && vlera <= 550) {

vargu[i++] = vlera;
}
}

double [] rezultati = kalkuloMesataren(vargu);


System.out.printf("Negativ: %f, pozitiv: %f, total:
%f%n",rezultati[0],rezultati[1],rezultati[2]);
}

private static double[] kalkuloMesataren(double [] arr) {


int sumNegativ = 0;
int sumPozitiv = 0;
//int sumTotal = 0;
for(double vlera : arr){
int val = (int)vlera;
//sumTotal += val;
if(val < 0) {
sumNegativ += val;
} else if (val > 0) {
sumPozitiv += val;
}
}
return new double[] {
(double)sumNegativ/arr.length,
(double)sumPozitiv/arr.length,
//(double)sumTotal/arr.length
(double)(sumPozitiv+sumNegativ)/arr.length
};
}
}

4. Krijoni programin që mundëson menaxhimin e përdorimit të internetit të një shfrytëzuesi.


[50 pikë]

Klasa Shfrytezuesi: [25 pikë]


a) Ka atributet: kodi (p.sh. BP1234) [readonly dhe identifikues i shfrytëzuesit], premium
[readonly] (është apo jo shfrytëzues premium), ip [readonly] (ip adresa, p.sh.
192.168.0.25) dhe (limiti i GigaBajtëve ne dispozicion të shfrytëzuesit). Ofroni
konstruktorin që pranon të gjitha parametrat ku edhe inicializohen atributet e klasës.
(Supozoni që parametrat e pranuar janë të saktë) [2+1 pikë]

b) Ofroni të gjitha metodat get dhe set për atribute më lart (ato që ju i shihni të nevojshme).
[2 pikë]

c) Ofroni metodën shkarkoTeDhena me parametrat: fromIp [ip adresa prej së cilës


shkarkohen të dhënat], madhesia [madhësia në GigaBajt të plotë e të dhënave] dhe si
rezultat të kthehet nëse të dhënat janë shkarkuar apo jo. (Supozoni që parametrat e
pranuar janë të saktë).
Nëse të dhënat shkarkohen të regjistrohet mesazhi:
Shkarkimi nga <fromIp> ne <ip> me madhesi <madhesia> GB shpenzoi <shpenzimi>
GB

Nëse të dhënat NUK janë shkarkuar në mungesë të GigaBajtëve të regjistrohet mesazhi:


Shkarkimi nga <fromIp> ne <ip> me madhesi <madhesia> GB nuk u realizua në
mungesë të GigaBajtëve: <mungesa>

Veni re: shkarkimi nga vetvetja nuk lejohet dhe regjistrohet si shkarkim i dështuar me
mesazh të qartë [10 pikë]

d) Ofroni metodën shpenzo që pranon si parametër fromIP (ip adresa prej cilës shkarkohen
të dhënat) dhe madhesia (madhësia në GigaBajt) dhe kthen sasinë e GigaBajtëve që do
të shpenzohen
Shpenzimi kalkulohet si vijon:
a) Nëse ip dhe fromIP i takojnë të njëjtit rang te IP adresave (pra tri vlerat e para të ip
adresës i kanë të njëjtë) kalkulohet si 10% i GigaBajtëve. P.sh. nga 192.168.0.25 në
192.168.0.132
b) Nëse ip dhe fromIP nuk i takojnë të njëjtit rang te IP adresave (pra tri vlerat e para të
ip adresës nuk i kanë të njëjtë) kalkulohet si 100% i GigaBajtëve. P.sh. nga
192.168.0.25 në 192.168.1.25 [5 pikë]
e) Ofroni metodën që reprezenton objektin e tipit Shfrytezuesi si String. Reprezentimi i një
objekti të tipit Shfrytezuesi si String duhet të jetë si vijon:
kodi - eshtePremium: ip [2.5 pikë]
f) Ofroni metodën që bënë krahasimin për barazi të dy objekteve të tipit Shfrytezuesi.

VENI RE: Dy shfrytëzues janë të barabartë nëse e kanë atributin kodi të barabartë.
[2.5 pikë]
Veni re: Mund të shtoni atribute shtesë si e shihni të nevojshme.

Klasa Provider: [25 pikë]

a) Ka dy atribute: emri dhe shfrytezuesit (varg i shfrytëzuesve).


[2 pikë]

b) Ofroni konstruktorin e klasës Provider që pranon si parametër emrin dhe numrin e


shfrytëzuesve ku edhe inicializohen atributet e klasës.
(Supozoni që parametrat e pranuar janë të saktë) [2 pikë]

c) Ofroni metodën shtoShfrytezuesin ku shtohet një shfrytëzues te shfrytezuesit,


nëse shfrytëzuesi është inicializuar dhe nuk ekziston në varg, përndryshe të
lajmërohet me mesazh të qartë përse shfrytëzuesi nuk është shtuar në varg.
[2 + 2 pikë]

d) Ofroni metodën shkarko që si parametra pranon: shfrytezuesin (i cili do t’i shkarkoi


të dhënat), ip (ip adresa prej cilës shkarkohen të dhënat), madhesia (madhësia ne
GigaBajt e të dhënave) dhe si rezultat kthen nëse u realizua shkarkimi apo jo.
[6 pikë]

e) Ofroni metodën maxShkarkimi që si rezultat kthen shfrytëzuesin që ka shpenzuar


më së shumti GigaBajtë
Veni re: Nëse ka më tepër se një shfrytëzues që kanë sasi të njëjtë të shpenzuar
si rezultat të kthehet shfrytëzuesi që ka limitin më të madh.
[4 pikë]

f) Ofroni metodën shfletoShkarkimet që shfleton të gjitha shkarkimet (të realizuara


dhe të parealizuara) për të gjithë shfrytëzuesit e internetit të ofruesit të shërbimit
(Provider) dhe ky shfletim të jetë i qartë për shfrytëzuesin.
[4 pikë]

g) Ofroni metodën main() ku do të krijohet një instancë e klasës Provider (atributet i


zgjedhni sipas dëshirës) me mundësi të ruajtjes së 10 shfrytëzuesve dhe të shtohen
2 instanca të klasës Shfrytezuesi.
Thirrni dhe afishoni metodat e instancës së krijuar: shkarko (për njërin nga
shfrytëzuesit e shtuar), maxShkarkimi dhe shfletoShkarkimet.
[3 pikë]

public class Provider {


private String emri;
private Shfrytezuesi [] shfrytezuesit;
private int index;

public Provider(String e, int nr) {


emri = e;
shfrytezuesit = new Shfrytezuesi[nr];
}

public String shtoShfrytezuesin(Shfrytezuesi user) {


if(user == null){
return "ERROR:Shfrytezuesi eshte NULL";
}

if(index == shfrytezuesit.length){
return "ERROR: Nuk ka vend per: "+user.getKodi();
}

if(contains(user)){
return "ERROR: Ekziston ne liste: "+user.getKodi();
}

shfrytezuesit[index++] = user;
return "SUKSES: U shtua shfrytezuesi: "+user.getKodi();
}

private boolean contains(Shfrytezuesi user) {


for(int i=0; i<index; i++){
if(shfrytezuesit[i].equals(user)){
return true;
}
}
return false;
}

public boolean shkarko(Shfrytezuesi user, String fromIp, int


madhesia) {
/*if(contains(user)){
return user.shkarkoTeDhena(fromIp, madhesia);
}
return false;*/

return contains(user) ? user.shkarkoTeDhena(fromIp, madhesia)


: false;
}

public Shfrytezuesi maxShkarkimi (){


Shfrytezuesi maxUser = null;
for(int i=0; i<index; i++){
Shfrytezuesi user = shfrytezuesit[i];
if(i == 0 || user.getTeShpenzuara() >
maxUser.getTeShpenzuara() ||
(user.getTeShpenzuara() == maxUser.getTeShpenzuara() &&
user.getLimiti() > maxUser.getLimiti())){
maxUser = user;
}
}
return maxUser;
}

public void shfletoShkarkimet (){


for(int i=0; i<index; i++){
Shfrytezuesi user = shfrytezuesit[i];
System.out.println(user+"\n-----------------
\n"+user.getShkarkimet());
}
}

public static void main(String [] arg) {


Provider prv = new Provider("UBT Net", 10);
Shfrytezuesi user = new Shfrytezuesi("AB0001", true,
"192.168.0.25", 30);
System.out.println(prv.shtoShfrytezuesin(user));
System.out.println(prv.shtoShfrytezuesin(new
Shfrytezuesi("AB0001", false, "192.168.0.45", 20)));
System.out.println(prv.shtoShfrytezuesin(new
Shfrytezuesi("AB0022", false, "192.168.1.45", 20)));
prv.shkarko(user, "192.168.0.45", 10);
prv.shkarko(user, "192.168.1.45", 10);
prv.shkarko(user, "192.168.0.25", 10);
prv.shkarko(user, "192.168.1.25", 50);
System.out.println("MAX = "+prv.maxShkarkimi());
System.out.println();
prv.shfletoShkarkimet();
}
}

public class Shfrytezuesi {


private String kodi;
private boolean premium;
private String ip;
private double limiti;
private String shkarkimet = "";
private double teShpenzuara;

public Shfrytezuesi(String k, boolean p, String i, double l){


kodi = k;
premium = p;
ip = i;
limiti = l;
}

public String getKodi(){


return kodi;
}

public boolean getPremium(){


return premium;
}

public String getIp(){


return ip;
}

public double getLimiti(){


return limiti;
}

public void setLimiti(double l) {


limiti = l;
}

public double getTeShpenzuara(){


return teShpenzuara;
}

public String getShkarkimet(){


return shkarkimet;
}

public boolean shkarkoTeDhena (String fromIp, int


madhesia){
double shpenzimi = shpenzo(fromIp, madhesia);
double teMbetura = limiti - teShpenzuara;
if(!fromIp.equals(ip) && teMbetura >= shpenzimi) {
teShpenzuara += shpenzimi;
shkarkimet +="Shkarkimi nga "+fromIp+" ne
"+ip+" me madhesi "+madhesia+" GB shpenzoi "+shpenzimi+"
GB\n";
return true;
}
if(fromIp.equals(ip)){
shkarkimet +="Nuk lejohet shkarkim nga
vetvetja\n";
} else {
shkarkimet +="Shkarkimi nga "+fromIp+" ne
"+ip+" me madhesi "+madhesia+" GB nuk u realizua në mungese
te GB: "+(shpenzimi - teMbetura)+"\n";
}
return false;
}

private double shpenzo(String fromIp, int madhesia) {


String sn = ip.substring(0, ip.lastIndexOf("."));
String fsn = fromIp.substring(0,
fromIp.lastIndexOf("."));
return sn.equals(fsn) ? madhesia*0.1 : madhesia;
}

private double shpenzo1(String fromIp, int madhesia) {


String [] sn = ip.split("\\.");
String [] fsn = fromIp.split("\\.");
for(int i=0; i<sn.length-1; i++){
if(sn[i] != fsn[i]) {
return madhesia;
}
}
return madhesia * 0.1;
}

@Override
public String toString(){
return kodi+" - "+(premium? "eshte" : "nuk eshte")+"
premium: "+ ip;

@Override
public boolean equals(Object obj) {
if(obj instanceof Shfrytezuesi) {
//if(obj.getClass() == Shfrytezuesi.class){
Shfrytezuesi user = (Shfrytezuesi)obj;
return kodi.equals(user.getKodi());
}
return false;
}
}

You might also like