# Shkenca > Informatikë dhe Internet > Arti i programimit >  Java: Program mbi funksionet trigonometrike!

## mad

ne fillim nje pershendetje per kedo qe eshte duke lexuar!

eshte nje kerkese per nje program ne gjuhen Java te cilit i kerkohet:
me futjen e dy parametrave ne console, ku i pari te jeti kendi( ne grad) dhe i dyti te jete njeri nga funksionet trigonometrike(cos,sin,tg,cotg), programi te shkruaj rezultatin! 

p.s: une e kam provuar ne disa menyra, por edhe megjithese funksionet jane te gatshme per sin,cos, dhe tg, prap nuk po i rradhis dot ne menyre perzgjedhjeje!
ju lutem, nqs ka mundesi te me ndihmoni sa me shpejt te jete e mundur sepse brenda te dieles behet mbyllja dhe ruajtja e serverit te rrjetit te shkolles! 

ju faleminderit!

----------


## boraa

pershendetje,

mendoj qe per zgjidhjen e  problemit ,ju duhen dy variabla qe te ruajne njeri vleren e kendit dhe tjetri qe mendoj duhet te jete string te ruaje se cilin prej funksioneve trigonometrike desheroni te perdorni.dhe pastaj me disa kushte logjike (if else ose me "switch" ) duhet testur funksioni  i zgjedhur dhe nepermjet funksioneve te gatshme qe ofron gjuha mund te behen llogaritjet dhe te afishohet rezultati ne console.

kjo do te ishte ne vija te pergjithshme rruga per zgjidhje,megjithate nuk arrij te kuptoj qarte problemin qe keni pasur ju gjate zgjidhjes apo nese ju desheroni kodin.gjithsesi shpresoj t u kem ardhur ne ndihme.nese keni me tej pyetje ...

----------


## cunimartum

mad Pershendetje:
po te jap nje ide si gjysem pseudo code



```
import java.lang.math;

. KETU hap main(String[] args) ose hap klasen e re 
. e cila me pas mund te thirret nga main si te jene
. specifikimet
. Merr stringun qe mund te jete cos, sin, apo tan 
. trigFunc - te kete funksionin trigonometrik



String trigFunc;
double angle;
// po e ze qe trigFunc dhe angle i kane vlerat e tyre tashme

if(trigFunc == cos)
{
	printo( Math.cos(angle) );
}
else if
. te njejten gje edhe per funksionet e tjera
. 
.
```

E bera printo sepse ne vitet e para profesorat e ndryshem u japin nxenesve klasa qe i kane bere vete per print etj. Nese do menyren standarte System.out...  shkruaj prape.
Nese e do kodin komplet nuk e di sa do mesoje nga assgn. ?? por megjithate mund ta kerkosh, te ta japim edhe te testuar por bjer specifikimet e sakta qe te jete i sakte.
Gjithashtu nese mundohesh ta besh vete kujdes pak me cotan sepse sikur nuk vura re tek Math.lang keshtu qe mund te te duhet te luash pak vete aty.
Pershendetje.

----------


## mad

une e kuptoj cfare me ke shkruar, dhe jam munduar te bej dicka te tille, dhe si algoritem pak a shume, ja kam arritur, pervec funksionit cotg, sepse ashtu sic ti e di, nuk egziston ne sdk e JAVA-s. por prape disa here me kompilohet, disa here jo


dmth:

public class  ExA {
    public static void main(String[] args) {

    String trigFunc = (cos, sin, tan);
    double angle;

    if (trigFunc==cos) {
       System.out.println(Math.cos(angle));
   } 
       else {
             if (trigFunc==sin) {
                System.out.println(Math.sin(angel));
             }
          else {
                System.out.println(Math.tan(angle));
          {
       }
    }
}



une prap e provova, kaq sa kam shkruar, por nqs nuk e e keni te sikletshme dhe te mundimshme, ma nisni pra pseudokodin e plote.  kerkesa e programit eshte me pak fjale:
pasi te shkruhet ne console parametri i pare, i cili eshte masa e kendit ne grade(detyrimisht nje double), dhe parametri i dyte njeri nga funksionet trigonometrike(cos, sin, tan, cotan) programi te afishoje pergjigjen.

shume faleminderit. e kuptoj qe eshte dicka e vogel, por po me jep nje siklet goxha te madh!

se shpejti, shpresoj!

----------


## edspace

Ketu ke kodin qe kerkon por ne C++  :buzeqeshje:  
Mjafton ta kthesh ne Java. 

cotg(x) = 1 / tg(x) apo jo? Perse ke shkruajtur funksion me vete?




```

#include <iostream>
#include <string>
#include <cstdlib>
#include <cmath> 
#include <iomanip>


using namespace std;

int main(int argc, char *argv[])
{
    const double grad_ne_rad = M_PI/180;  //grade ne radian

    double kendi;
    double rezultati;
    string funksioni = "gabim";

    if (argc >= 3)
    {
        kendi = atof( argv[1] ) * grad_ne_rad;

        funksioni = argv[2];

        if( funksioni == "sin")
            rezultati = sin(kendi);

        else if( funksioni == "cos")
            rezultati = cos(kendi);
        
        else if( funksioni == "tg")
            rezultati = tan(kendi);
        
        else if( funksioni == "cotg")
            rezultati = 1.0 / tan(kendi);

        else
            funksioni = "gabim";

    }

    if (funksioni != "gabim"){
            cout.precision(2);
            cout << funksioni << "( " << argv[1] << " ) = " 
                 << setiosflags(ios::fixed) 
                 << rezultati << endl;
    }
    else{
        cout << "Komande e gabuar" << endl;
        cout << "perdorimi: " << argv[0] << " kendi [cos,sin,tg,cotg]" << endl;
        cout << "shembull: " << argv[0] << " 90 cos" << endl;
    }
        
    return 0;
} 



```

----------


## Ardi_Pg_ID

Per mendimin tim menyra me e mire per te bere nje gje te tille eshte nje select case ku mund te vesh 4 case te ndryshme per kete gje te tille 

char funksjoni;

cout<<"\n Beni nje zgjedhje nga menyja e meposhtme"
       <<"\n\tTangenti"
       <<"\n\tCosinus"
       <<"\n\tSinus"
       <<"\n\tKotangent"<<endl;
cin>>funksjoni


case (funksjoni)

case:a
case:A
{
   //kodi .....
} 
e meradhe 
mos haro te vesh edhe failur code nuk e di sintaksen ne 

 Kodi eshte en C++ modifikoje ne menyre te tille per java

----------


## cunimartum

Mad  nuk e di nese ne kodin e vertet ke bere " if (trigFunc == "cos") "  nese po duhet ta ndryshosh sic e kam bere une me poshte, klasa String te ofron "equals" method per te krahasuar dy stringje.
Kur te pyeta per specifikime e kisha llafin,
1.  Nga merret input , nga console me komanden  "java Trig 30 cos" psh.  apo me " java Trig"  dhe pastaj prompt userin per "30 cos"   ??
2.  Ka nevoje per try ... catch Exceptions, une po i ve megjithate.

Dikush tek "si te ..." per te njejten teme qe ke hapur ketu te ka rekomanduar "switch ... case"  NUK mund te perdoret switch ne java per stringjet madje me mire mos te perdoret fare ne java, ne te kundert nga C ose C++ ne java  switch reagon shemtuar ne disa raste, ka artikuj plot mbi kete ceshtje.
Ja dhe kodin vers. 1,  do ti japesh komanden 
java Trig 23 cos   -- ne console (apo terminal po te perdoresh Unix)



```
import java.lang.Math;


public class Trig
{
	public static void main(String[] args)
	{
	// Catch exceptions if there are any ... 
	try
	{
		double angle;
		/*  get the second argument in "java Trig args[0] args[1]
				which will be args[1] the trigonometric funct.
		*/
		String function = args[1];			
		
		Double argDouble = new Double(args[0]);	// Assign args[0] to a Double type object
		angle = argDouble.doubleValue();	// tear the primitive double value out of that, could have been done in one step
		angle = angle * ( Math.PI / 180 );
		/*		Get the function and calculate it. */
		if (function.equals("cos") )
				angle = Math.cos(angle);
		else if (function.equals("sin") )
				angle = Math.sin(angle);
		else if (function.equals("tan") )
				angle = Math.tan(angle);
		else if (function.equals("cotan") )
				angle = 1 / Math.cos(angle);
		else
			{
				System.out.println("Enter a regular function: cos, sin, tan, cotan");
				return;
			}
			
		System.out.println(angle);	//Print the angle
	}
	catch (NumberFormatException e)
	{
		System.out.println("The angle MUST be a number ");
	}
	catch (ArrayIndexOutOfBoundsException e)
	{
		System.out.println("There should be two arguments, an angle and a function");
	}
	
	}	// finished with main
}
```

----------


## cunimartum

Nese duhet promptur useri  per vlerat e kendit dhe cilin funksion dhe jo ti hidhen si argumenta mainit shkruaje nje shenim.

Na dhe Trig.class te gatshme per ta testuar.

----------


## cunimartum

Me fal por komentet i vura ne anglisht qe ti kishe gati, por po shof qe je ne ceki, nese te ndihmojne me shume komentet shqip me thuaj.

----------


## mad

programi eshte perfekt fare! persa i eprket komenteve, pa merak fare se perkthehen, por edhe po u vune ne anglisht, dmth kshu si jane, eshte bota, mos them qe eshte edhe me mire!

----------


## boraa

```
package ConsoleApplication1;

import System.Math;

/**
 * Summary description for Class1.
 */
public class Class1
{
	public Class1()
	{
		//
		// TODO: Add Constructor Logic here
		//
	}

	/** @attribute System.STAThread() */
	public static void main(String[] args)
	{
		//
		// TODO: Add code to start application here
		//
		double angleDegrees = 90;
		double angle = (angleDegrees*90)/Math.PI;//kthen kendin ne radian mqs keshtu e pranojne metodat.Supozohet qe kendi nga perdoruesi jepet ne grade
		String trigFun = "";
		trigFun = System.Console.ReadLine();
		if(trigFun.equalsIgnoreCase("cos"))
			System.out.println(Math.Cos(angle));
		else
			if(trigFun.equalsIgnoreCase("sin"))
			System.out.println(Math.Sin(angle));
		else
			if(trigFun.equalsIgnoreCase("tan"))
			System.out.println(Math.Tan(angle));
		else
			if(trigFun.equalsIgnoreCase("cotg"))
		    {
			  if((angleDegrees-90*angleDegrees/90)!=0)//kontrollon nese kendi ne grade i dhene eshte shumefish i 90 mqs eshte vlere e palejuar e cotg
				  System.out.println(1/Math.Tan(angle));
			 else
				  System.out.println("ju keni shtypur nje vlere te palejuar per funksioni cotg");

		    }
		else
			System.out.println("Jepni nje funksion trigonometrik");
		
		System.Threading.Thread.Sleep(1500);
		
	    
		
        
	}
}

ke dhe ketu nje metode vetem gjej nje menyre per leximin e double nga tastiera
```

----------


## mad

prit prit.......

provova versionin 1. te kodit, ne plan te pare nuk ka asnje problem. dmth funksionet me vlerat e pergjithshme, si: sin(cos) 30, 45, 60, ecc  jane ne rregull por kur shkruaj psh:  tan 90( i cili nuk egziston) me jep nje vlere 1.6.........e vazhdon. tani une e modifikova kodin per 2 raste qe kapa une, :
per tan 90, dhe cotan 0, qe te afishohet ndonje nesazh gabimi!
por do te doja te beja te njejten gje edhe per shumfishat e tyre, meqe keto funksione jane te pakten gjysem periodike, per te mos thene me periode te plote. 
po per nje gje habitem, si ka mundesi qe meqe metoda eshte e gatshme, te mos kete te paracaktuar ate bashkesin e famshme te percaktimit???? 

ja kodin e aktualizuar:



```
import java.lang.Math;


public class Trig
{
	public static void main(String[] args)
	{
	// Catch exceptions if there are any ... 
	try
	{
		double angle;
		boolean err;
		/*  get the second argument in "java Trig args[0] args[1]
				which will be args[1] the trigonometric funct.
		*/
		String function = args[1];			
		err=false;
		
		Double argDouble = new Double(args[0]);	// Assign args[0] to a Double type object
		angle = argDouble.doubleValue();	// tear the primitive double value out of that, could have been done in one step
		angle = angle * ( Math.PI / 180 );
		/*		Get the function and calculate it. */
		if (function.equals("cos") )
				angle = Math.cos(angle);
		else if (function.equals("sin"))
				angle = Math.sin(angle);
		else if (function.equals("tan")){
			if(angle==90*( Math.PI / 180 )){
				 System.out.println("Nuk eshte i percaktuar");
				 err=true;
			}
				else angle = Math.tan(angle);
		}
		else if (function.equals("cotan")){
			if(angle==0){
				 System.out.println("Nuk eshte i percaktuar");
				 err=true;
			}
				else angle = 1 / Math.cos(angle);
		}
		else
			{
				System.out.println("Enter a regular function: cos, sin, tan, cotan");
				return;
			}
			
		if(!err)System.out.println(angle);	//Print the angle
	}
	catch (NumberFormatException e)
	{
		System.out.println("The angle MUST be a number ");
	}
	catch (ArrayIndexOutOfBoundsException e)
	{
		System.out.println("There should be two arguments, an angle and a function");
	}
	
	}	// finished with main
}
//mos duhet te perdor cikel ketu, qe sa here te gjeje vlere te njejte, te kete nderprerje me break;???
```

----------


## boraa

per te pare fushen e percaktimit ,psh ne rastin kur kemi vlere te palejuar per cotg
qe eshte kendi 0 , 180 ,360 e me rradhe duhet qe pjestimi i vleres se kendit  me 180 te jape mbetje 0 dmth te jete shumefish i 180 (ose i pi nqs vlera e kendit nga perdoruesi futet ne radian ).prandaj ne kodin qe kam derguar tek rasti i cotg 

kam bere :
 if( (angle - 180*angle/180) != 0) 
kete shumezimin prape me 180 e kam bere se nuk e di si e jep rezultatin ne kete rast pjesitimi ,jep double apo int .ideja eshte qe rezultati te jete int prandaj nese nuk eshte keshtu ndrysho operatorin

ky kusht jep mbetjen e pjestimit te angle me 180 .nqs eshte zero ath eshte shumefish i 180 pra vlere e palejuar mqs eshte funx periodik.
po keshtu dhe per 90 grade per tangentin.per cos dhe sin nuk ka vlera te palejura ,ato takohen veten tek tang dhe cotg mqs ka pjesime ,pra s ke me per te kontolluar per vlera te palejuara
dmth:



```
double angleDegrees = 90; //vlera lexohet nga console

double angle = Math.PI*angleDegrees/180;
//kthen kendin ne radian mqs keshtu e pranojne metodat.Supozohet qe kendi nga perdoruesi jepet ne grade
String trigFun = "";
trigFun = System.Console.ReadLine();
if(trigFun.equalsIgnoreCase("cos"))
System.out.println(Math.Cos(angle));
else
if(trigFun.equalsIgnoreCase("sin"))
System.out.println(Math.Sin(angle));
else
if(trigFun.equalsIgnoreCase("tan"))
{ if((angleDegrees - 90*angleDegrees/90)!=0)
System.out.println(Math.Tan(angle));
else
System.out.println("keni dhene vlere te palejuar per funxionin tangent")
}
else
if(trigFun.equalsIgnoreCase("cotg"))
{
if((angleDegrees-180*angleDegrees/180)!=0)//kontrollon nese kendi ne grade i dhene eshte shumefish i 90 mqs eshte vlere e palejuar e cotg
System.out.println(1/Math.Tan(angle));
else
System.out.println("ju keni shtypur nje vlere te palejuar per funksioni cotg");

}
else
System.out.println("Jepni nje funksion trigonometrik");
```

----------


## edspace

boraa dhe mad, 

Kur postoni kod ne forum eshte mire qe ta rrethoni ate me etiketat e kodit qe te ruaje formatin qe ju perdorni. Kjo e ben kodin me te qarte.

----------

