Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 13

UNIVERSITETI POLITEKNIK I TIRANES

FAKULTETI I TEKNOLOGJISE DHE INFORMACIONIT


DEPARTAMENTI I ELEKTRONIKES DHE TELKOMUNIKACIONIT

PUNE LABORATORI Nr.2


Lenda:Programim i Orientuar nga Objekti.
Tema:Kalkulatori Binar.

Punoi:Joan Janku Pranoi:Msc. Kleona Binjaku


Dega:Inxhinieri Informatike IIA
Laborator Debuging
Programet nuk kompilohen me gabime sintaksore. Kompilatori
Java do te tregoje pozicionin (ose pozicionin e perafert) te
gabimeve tuaja sintaksore. Por edhe pse program mund te
kompilohet ai mund te mos jete I lire nga gabimet. Gabimet ne run-time dhe gabimet logjike
jane shume me te veshtira per tu gjetur dhe per tu rregulluar. Pavaresisht se cfare gabimi
ekziston, procesi I lokalizimit dhe rregullimit te gabimeve tuaja njihet si debugging. Ne menyre
qe te debug gabimet sintaksore , kompilatori tregon tipin e gabimit dhe pozicionin e perafert. Ne
menyre qe te debug gabimet run-time, Java zakonisht perfundon programin duke treguar se ku
ka dale gabimi. Ne Java jane perjashtimet ( Exceptions ) qe merren me trajtimin e gabimeve qe
mund te ndodhin ne program gjate ekzekutimit te tij. Gabimet logjike jane te veshtira per tu
evidentuar. A ka ndonje menyre me te lehte per lokalizuar gabimin tone logjik ? Po , ne Eclipse
do te perdorim Debugger, qe na lejon te vendosim ne kod nje break point (nje pike ndalese) , nje
pozicion ne programin tone
,qe kur arihet aty shkakton ndalimin e ekzekutimit ,keshtu qe ne mund te shohim cfare vlere
variablash jane para se te vazhdojme me ekzekutimin e programit.
Ne Eclipse per te perdorur break point , duhet te kalojme shtypim butonin Debug (si ne figura
1) ose te zgjedhim nga menyja Windows , menu Perspective -Open Perspective - Debug. Ne
Debug do te shohim dy panele siper editorit , Debug dhe Variables/Breakpoints.
Figura 1.
Në perspektivën e debugging, ju mund të shtoni break point në kodin tuaj dhe të inspektoni
vlerat
e variablave. Për të shtuar një break point , klikoni dy herë në kolonën e majtë të editorit në
rreshtin ku dëshironi vendosni break point. Kjo vendos një rreth të blu në të majtë të
rreshtit. Rrethi përfaqëson një break point. Për shembull, si më poshtë.
Gjithashtu do të shihni nje break point të shtuar në listën Breakpoints në pjesën e sipërme të
djathtë
(nëse keni zgjedhur Breakpoints dhe jo Variablat). Për të hequr një breakpoint, klikoni dy herë
ku është rrethi blu. Gjithashtu mund të vendosni dhe hiqni breakpoint duke klikuar me të
djathtën në kolonën e majtë të paraqitur dhe duke zgjedhur Toggle Breakpoint nga menyja e
pop-up. Nëse e ekzekutoni normalisht programin, breakpoints janë te injoruara perndryshe duhet
te zgjidhni Debug nga menyja Run (ose kliko mbi butonin që duket si një merimangë ose shtyp
F11).
Kur programi arrin një break point, ai do të pushojë. Ju tani mund të inspektoni se çfarë po
ndodh
në program. Nën panelin Debug, do të shihni një "run trace " të programit (cilat metoda janë
aktive 2
dhe rendi ne te cilin jane thirrur). Nëse zgjidhni Variablat në pjesën e sipërme të djathtë, do të
shihni variablat e deklaruara në këtë pikë të programit dhe vlerat e tyre aktuale. Për të vazhduar
ekzekutimin e programit, ose klikoni në butonin Resume ose
zgjidhni Resume nga menyja Run ose shtypni F8. Ju mund ta ndaloni programin duke klikuar
në butonin Stop ose duke zgjedhur Terminate nga menyja Run (ose Control + F2). Në
rifillimin, programi do të vazhdojë derisa të arrijë një breakpoint
tjetër. Nëse breakpoint është në një lak ose në një metodë të thirrur
nga brenda një loop, ajo do të ndalet çdo here.
Do të shkruani një program që do të na duhet te shpjegojme pse të
përdorim debugging. Në këtë program, ju do të llogaritni rrënjët e një ekuacioni kuadratik. Një
ekuacion kuadratik ka formën ax2 + bx + c = 0 ku a, b, dhe c janë koeficientë dhe x është një
ndryshore. Koeficientet a, b dhe c jepen nga përdoruesi dhe pastaj të llogarisni rrenjet x .
Rrenjet x1 dhe x2 te ekuacionit gjenden me formulat :
,
Para se te llogarisni rrenjet duhet që të llogarisni rrënjën katrore të dallorit b2 - 4ac. Nëse dallori
është pozitiv, ekuacioni ka dy rrënjë. Nëse dallori është zero, ekuacioni ka një rrënjë. Nëse është
negativ, ekuacioni nuk ka rrënjë. Në shumicën e gjuhëve te programimit , rrënjë katrore të një
vlere negative, do të shkaktonte ndërprerjen e programit , ndersa në Java, kjo gjeneronte vlerat
NaN (jo një numër) . Sigurisht qe nuk ka interes të dale NaN, keshtu qe krijoni një program të
quajtur Ekuacion.java i cili përbëhet nga tre metoda: main(), llogaritDallor(), llogaritRrenje().
Në main() , deklaroni një Scanner , int a, b, c dhe double rrenje1, rrenjet2. Vlerat e a, b dhe c
jepen nga përdoruesi dhe llogaritjet do te jene si më poshte: dallori = llogaritDallor (a, b, c);
rrenje1 = llogaritRrenje (dallor, a, b, '+'); rrenje2 = llogaritRrenje (dallor, a, b, '-'); Së fundi,
shfaqni ne ekran dy rrënjët.
Metoda llogaritDallor() do të llogarit dhe kthen Math.sqrt (b * b-4 * a * c). Metoda
llogaritRrenje() do të marrë dallorin, dy vlerat int a dhe b, dhe nje char '+' ose '-'. Duke
përdorur if-else , përcaktoni nëse char është '+' ose '-' dhe llogaritjet (-b + dallor) / (2 *
a) ose (-b-dallor) / (2 * a).
Ekzekutoni programin duke perdorur si inpute 1,3 dhe 1. Rezultatet duhet të jenë përafërsisht -
0.3819660112501051 dhe -2,618033988749895.
Perdorimi i Debuggibg:
Le të shtojmë dy breakpoint, një në shprehjen e kthimit në llogaritDallor() dhe një në kushtin if
te llogaritRrenje(). Ekzekutoni programin ne Debug, duke përdorur të njëjtat vlera ne hyrje. Ju
nuk keni nevojë të rikompiloni programin tuaj nese shtoni breakpoint.Po te vini re panelin
Debug. Ai liston se ju jeni aktualisht duke përdorur Quadratic, ajo ju tregon
3
Tregon emrin e makinës suaj dhe po ekzekuton një Thread të quajtur main. Pas dhenies se 3
vlerave kur arrin breakpoint në llogaritjen e dallorit , tregohet Ekuacioni .llogaritDallor() dhe
numrin e rreshtit brenda programit. Në pjesën e sipërme të djathtë te panelit , zgjedhni Variablat.
Ju do të shihni tre parametrat tuaj të kaluar llogaritDallor dhe vlerat e tyre. Në editor do të shihni
breakpoint qe është e theksuar. Për të vazhduar ekzekutimin, klikoni në butonin Resume ose
shtypni F8. Do te vini re edhe cfare tregohet në metodën tjetër (Ekuacion.llogaritRrenje).
Le të shqyrtojmë tani pse është e rëndësishme të përdorim breakpoint. Po te ekzekutoni
programin në mënyrë normale (jo në Debug) dhe se inputet jane 1, 2, 3 , ju do të merrni si dalje
NaN dy herë. Kjo do të thotë se rrënjët nuk janë numra që tregon se diçka ka shkuar keq, por nuk
ju është dhënë ndonjë informacion për atë që ka shkuar keq. Tani e ekzekutoni programin në
modalitetin Debug, përsëri me hyrje 1, 2, 3. Kur programi ndalon në llogaritjen e dallorit, ne nuk
shohim asgjë të rëndësishme, vetëm se po përdor a = 1, b = 2, c = 3 për të kryer veprimin , por
ka ende për të llogaritur vlerën dhe për ta kthyer atë. Duke
vazhduar në llogaritRrenje, ne shohim vlerën e parametrit te
dallorit qe ka vlerën NaN. Kjo na tregon se në llogaritjen e
dallorit, diçka nuk shkoi mire. Për të kuptuar se çfarë po ndodh, në
llogaritDallor, do të ndryshojmë kodin si më poshtë: int temp=b*b-4*a*c;
double dallor=Math.sqrt(temp); // ne programin tuaj emertimet mund te jene ndryshe return
dallor;
Shtoni breakpoint për të gjitha shprehjet me siper. Ruani dhe ekzekutoni programin tuaj në
Debug.
Përsëri futni 1, 2, 3. Shohim një variabël shtuar në listën e Variablave, x është -8 dhe me pas
vlerën e dallorit qe është NaN.
Provoni një grup tjetër inputesh duke ekzekutuar programin mënyrën Debug . p.sh jepni 0, 2, 3 si
hyrje. Vazhdoni deri sa te arrini tek llogaritRrenje. Duhet të shihni se dallori është 2.0, një
numër
i pranueshëm. Deri ne breakpoint te If , ne nuk shohim ndonjë gjë shqetësuese. Ne piken e
ardhshme do te kemi NaN dhe -Infinity. Ka dicka qe nuk shkon. Le të ndryshojme këtë metodë
si me poshte: double nr, p; p=2*a; if(c==‘+’) nr=-b+d; else nr=-b-d; return nr/p;
Hiqni breakpoint qe jane dhe shtoni nje në shprehjen return. Ekzekutoni programin në mënyrën
Debug duke përdorur inputet 0, 2, 3 dhe vazhdoni përmes metodës së llogaritDallor. Programi
ndalet në return në herën e parë që thiret llogaritRrenje. Vini re se nr dhe p janë 0.0. Keshtu qe
(0.0 / 0.0) jep NaN. Dhe ne pushimin tjetër, do të shihni nr është -4.0 ndërsa p është 0.0. Keshtu
qe (-4.0 / 0.0) jep -Infinity.
4
Tani të përpiqemi t'i rregullojmë problemet. Së pari, nëse dallori është NaN, duhet te nxjerrim që
asnjë rrënjë nuk ekziston. Së dyti, nëse a është 0, atehere ekuacioni nuk është një ekuacion i
grades se dyte. Ne kete rast ndryshojme kodin ne main duke krahasuar dallorin me NaN:
if(Double.compare(dallor,Double.NaN)==0)
System.out.println(“Ky ekuacion nuk ka rrenje”);
else // thirret llogaritRrenje() dy here Dhe
ne rastin e dyte:
if(a==0)
System.out.println(“Ky nuk eshte ekuacion i grades se dyte”); else
// llogaritDallor, llogaritRrenje,dalja
import java.util.Scanner; class ekuacion
{
public static double llogaritDallor (int a,int b,int c)
{
return Math.sqrt(b*b-4*a*c);
}

public static double llogaritRrenje (double dallor,int a,int b,char c)


{
if (c=='+')
{
return (-b+dallor)/2*a;
} else
return (-b-dallor)/2*a;
}

public static void main (String[] args)


{
Scanner sc = new Scanner(System.in); int a,b,c;
double dallori, rrenja1,rrenja2;

System.out.println("A = "); a=sc.nextInt();


System.out.println("B = "); b=sc.nextInt();
System.out.println("C = ");
c=sc.nextInt();

dallori=llogaritDallor(a,b,c);

if (Double.compare(dallori,Double.NaN)==0)
{
System.err.println("Ky ekuacion nuk ka rrenje");
}
else
{ if(a==0)
{
System.err.println("Ky nuk eshte ekuacion i grades se dyte");
} else {
rrenja1=llogaritRrenje(dallori,a,b,'+');
rrenja2=llogaritRrenje(dallori,a,b,'-');

System.out.println("Rrenja1 = "+rrenja1);
System.out.println("Rrenja2 = "+rrenja2);
} }

}
}
Outputet sipas kodit me siper:
Pasi shkrova kete program,fillimisht eclipse threw ArrayIndexOutOfBounds exception. Ky exception u
gjenerua sepse fillimisht gjatesine e matrices e kisha caktuar 4. Loopi while ,iteronte deri tek elementi
me index 5,I cili nuk ekzistonte. Ne nje array klasike ne qofte se numri I elementeve percaktohet deri ne
n,elementet kane indekse nga 0->n-1. Fillimisht perdora debugging dhe me gjeneroi automatikist nje
breakpoint tek lista[num]=lista[num].nextInt();
->Prandaj,kreva ndrsyhimin e loop-it,nga 0 ne 5 .

Dhe nuk me ndodhen me exceptions.


Nga figura me siper mund te shihet se me kete kod edhe per inputet 5,-
3,-2-6,-7 nuk nxjerr.

Debugging do te perdorej me shume per run-time-error,dhe logic-error si psh:

Error message per runtime error: (shembull)

Exception in thread "main" java.util.InputMismatchException

at java.util.Scanner.throwFor(Scanner.java:909) at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextDouble(Scanner.java:2456) at MPG.main(MPG.java:15)

Error message per runtime error: (shembull)

15.5 mi. / 341.0 gal. = 22.0 mpg


Sugjerohet qe breakpoints te vendosen ne pjese “te rrezikshme” te kodit,te cilat mund te gjenerojne erroe
ose exceptions.

FALEMIDERIT!

You might also like