js per calcolo area [Aiuto per programmino!!]

sabiuf

Nuovo Utente
1 Giu 2012
13
0
0
Per favore, qualcuno potrebbe aiutarmi con questo programmino? (sono ai primi passi con Javascript!!)
L'obbiettivo è quello di trovare l'area di un poligono scomponibile in + triangoli..
Ho provato ciò che segue, ma senza ottenere risultati!!

PHP:
<html>
	<head>
		<title> triangoli </title>
	</head>


	<body>

		<SCRIPT LANGUAGE=Javascript>
		var triangoli=prompt("digita il numero dei triangoli che compongono il poligono: ") 
		var t1 = new Array()
		var i
		var l1
		var l2
		var l3
		var sp
		var a =new array(triangoli)
		var x

		for (i=0; i<triangoli; i++)
		{
		t1[0]=  prompt("digita la lunghezza del primo lato di un triangolo: ");
		t1[1]=	prompt("digita la lunghezza del secondo lato dello stesso triangolo: ");
		t1[2]=	prompt("digita la lunghezza del terzo lato dello stesso triangolo: ")
		sp= (t1[0]+t1[1]+t1[2])/2
		a[x]= Math.sqrt(sp*(sp-t1[0])*(sp-t1[1])*(sp-t1[2]))
		}
		
			document.write("a" + "br")



		</script>
		

	</body>

</html>

dove sono gli errori??
e come faccio a dirgli di salvare a (l'area) per ogni triangolo inseriro??
e come faccio a sommare tutte le aree??

Ringrazio di cuore chi è disposto ad aiutarmi!!
 
ciao
mi sembra che sia questo quello che vuoi
HTML:
<html>
<head>
<title> triangoli </title>
</head>
<body>
<script type="text/javascript">
	var triangoli=prompt("digita il numero dei triangoli che compongono il poligono: ");
	var t1 = new Array();
	var i;
	//var l1
	//var l2
	//var l3
	var sp;
	var a =new Array();
	var x;
	var totale= 0;
	for (i=1; i<=triangoli; i++)
	{
		t1[0]=  prompt("digita la lunghezza del primo lato del triangolo "+i+": ");
        t1[1]=    prompt("digita la lunghezza del secondo lato del triangolo "+i+": ");
        t1[2]=    prompt("digita la lunghezza del terzo lato del triangolo "+i+": ");
        sp= (t1[0]+t1[1]+t1[2])/2;
        a[i]= Math.sqrt(sp*(sp-t1[0])*(sp-t1[1])*(sp-t1[2]));
		document.write("area triangolo " + i + ": "+a[i]+"<br>");
		totale = totale + a[i];
	}
	document.write("area totale poligono: " + totale +"<br>");
</script>
</body>
</html>
poi se per salvare intendi "ricordare per sempre" devi ricorrere a un db, ma credo che in questo casi devi ricorrere ad un linguaggio lato server

p.s.
cerca di scrivere i titoli del post più adeguati
 
Ti ringrazio per l'impegno.....

ma il programma dà risultati sbagliati....Per esempio se nel 1° triangolo inserisco i lati di 3, 4 e 5 l'area risulta di 28726.767488050235 !!
 
ciao
ho trovato l'errore (dopo vari tentativi e modifiche)
come vedi ho messo un sacco di alert per seguire cosa fa e cosi mi sono accorto dove sbagliava (leggi i commenti)


HTML:
<html>
<head>
<title> triangoli </title>
</head>
<body>
<script type="text/javascript">
	var triangoli=prompt("digita il numero dei triangoli che compongono il poligono: ");
	//var t1 = new Array();
	var i;
	var t1 = new Array();
	var t2 = new Array();
	var t3 = new Array();
	var sp = new Array();
	var a =new Array();
	var totale= 0;
	for (i=1; i<=triangoli; i++)
	{
		sp[i]=0;
		alert ("semiperimetro inizio "+sp[i]);//sin qui ok
		t1[i]=  prompt("digita la lunghezza del primo lato del triangolo "+i+": ");
		alert ("lato uno non numero"+t1[i]);//sin qui ok
		t2[i]=  prompt("digita la lunghezza del secondo lato del triangolo "+i+": ");
		alert ("lato due "+t2[i]);//sin qui ok
        t3[i]=  prompt("digita la lunghezza del terzo lato del triangolo "+i+": ");
		alert ("lato tre "+t3[i]);//sin qui ok
        //sp[i]= t1[i]+t2[i]+t3[i];//!!!!!!l'errore è qui inserendo 1, 2 , 3 risulta 123 invece di 6
		sp[i]= t1[i]*1+t2[i]*1+t3[i]*1;//moltiplicando *1 i valori risulta 6 come dovrebbe essere
		alert ("perimetro "+sp[i]);
		sp[i]= sp[i]/2;
        alert ("semiperimetro "+sp[i]);
		a[i]= Math.sqrt(sp[i]*(sp[i]-t1[i]*1)*(sp[i]-t2[i]*1)*(sp[i]-t3[i]*1));
		document.write("area triangolo " + i + ": "+a[i]+"<br>");
		totale = totale + a[i];
	}
	document.write("area totale poligono: " + totale +"<br>");
</script>
</body>
</html>
 
che dire....... grazie! sei un grande!!!!
Ti chiedo un'ultima cosa... come si può inserire un prompt in cui scrivere l'unità di misura (a risposta chiusa)??
per esempio all'inizio "Seleziona l'unità di misura: mm, cm, dm, m, dam, hm, km"
 
Ultima modifica:
ciao
non credo che ci sia la possibilità di usare come in html le <select>
al massimo si può fare un controllo sulla variabile u_m, es se vuota o diversa dall'elenco di default vengono metri

HTML:
<script type="text/javascript">
	var triangoli=prompt("digita il numero dei triangoli che compongono il poligono: ");
	var u_m=prompt("scegli unit&agrave; di misura (mm, cm, dm, m, dam, hm, km)");
	// eccetera
	
	document.write("area totale poligono: " + totale +" "+u_m+"<sup>2</sup><br>");
</script>


p.s.
poi togli tutti gli alert (altrimenti uno impazzisce nell'inserire i dati)
 
Ciao,

per una addizione 1 + 2 + 3 puoi utilizzare una dichiarazione eval per non avere 123 ma 6

//sp= t1*1+t2*1+t3*1;//moltiplicando *1 i valori risulta 6 come dovrebbe essere

sp= eval(t1+t2+t3);


Valeria.
 
ciao vale
sei sicura?

HTML:
sp[i]=eval(t1[i]+t2[i]+t3[i]);
alert ("perimetro "+sp[i]);
risulta perimetro 123

anche se sinceramnte non so perchè. js non è stato mai la mia passione
 
ciao vale
ecco così funzia
ma visto che a me (mi) piace la polemica
se conti i caratteri che devi digitare il col mio sistema ne digiti meno (occhio allo spreco - vedi striscia)
 
Ciao,

il problema non è la quantità di caratteri da scrivere per una funzione.

Javascript calcola prima le moltiplicazioni e le divisoni nell'ordine scritto, dopo le addizioni e sottrazioni nell'ordine scritto,

quindi prima esegue le *1 *1 *1 e dopo i + e alcuni Browser non lo digeriscono.

se fai un calcolo 7+3/2 ti da come risultato 8.5 non 5.

Per avere 5 (7+3)/5

Math.sqrt(numero) per la radice quadra.

Valeria.
 
vi ringrazio per il tempo dedicato!!
:byebye: mi è stato davvero utile..
Potreste consigliarmi qualche buona guida per imparare Javascript o altri linguaggi di programmazione?
 
ciao
@sabiuf
se guardi in home tre le guide puoi trovare qualcosa che ti interessa.

@vale
se un bw (e come la maggior parte dei linguaggi) non segue la precedenza degli operatori vuol dire che è un bw o linguaggio "quasi" polacco.

1+2*3 da 7
5+6/3 da 3
4-7%3 da 1
dico quasi polacco perche non credo che ci siano linguaggi o bw che seguano la notazione polacca inversa
 
Ciao,

come detto prima * e / dopo + e - nell'ordine scritto.

1+2*3 da 7 SI 3*2+1 se segui la sequenza 1+2 = 3 * 3 = 9

5+6/3 da 7 SI 6/3 = 2 + 5 = 7 non 3 se segui la sequenza 5+6 =11 / 3 = 3.6666666666666665

4-7%3 da 3 SI 7%3 = 1 4-1 = 3 sequenza 4-1 = 3

L'operazione che devi eseguire per prima tra parentesi


Codice:
<script type="text/javascript">
document.write("1+2*3 = " + (1+2*3)) // = 7
document.write("<br>")
document.write("5+6/3 = " + (5+6/3)) // = 7
document.write("<br>")
document.write("4-7%3 = " + (4-7%3)) // = 3
</script>

In sequenza

Codice:
<script type="text/javascript">
document.write("1+2*3 = " + ((1+2)*3)) // = 9
document.write("<br>")
document.write("5+6/3 = " + ((5+6)/3)) // = 3.6666666666666665
document.write("<br>")
document.write("4-7%3 = " + (4-(7%3))) // = 3
</script>

Saluti, Valeria.
 

Discussioni simili