Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    5

    funzione che nn funziona(nn entra nel while)

    ho una funzione che mi da' problemi:

    function critt(x,y)
    {
    n=x*y;
    x1=x-1;
    y1=y-1;
    b=x1*y1;
    alert ("b= "+b);
    e=1;
    r1=0;
    r2=0;
    while ((r1=0)||(r2=0))
    {
    e++;
    r1=e%x1;
    alert("r1= "+r1);
    r2=e%y1;
    alert("r2= "+r2);
    }
    alert ("e= "+e);
    }

    tutti gli alert sono per verificare se funzioni tutto...
    in pratica b viene calcolato corrattamente...poi dovrebbe assegnare dei valori a e r1 ed r2...ed entrare nel while...solo che effettivamente nn ci entra mai, visto che e dovrebbe subito venire incrementato di uno...mentre invece mi viene sempre restituito e=1...senza contare che gli alert dentro il while vengono bellamente ignorati....

    dove sbaglio???

    tnx dell'aiuto

  2. #2
    i confronti in javascript si fanno con il doppio uguale:

    codice:
     while ((r1==0)||(r2==0))
    questo è quello che mi è saltato all'occhio...comincia a correggere questo...

    Purtroppo bisogna imparare che il computer non sbaglia...fa solo quello che gli dici di fare

    www.netpolaris.it

  3. #3
    Utente di HTML.it L'avatar di dannie
    Registrato dal
    Aug 2005
    Messaggi
    336
    Ciao! Sicuramente sono sbagliati i test nell'if: i confronti si fanno con == , = è l'operatore di assegnamento! Prova a correggere questo, poi vediamo se ci sono altri problemi!

  4. #4
    Utente di HTML.it L'avatar di dannie
    Registrato dal
    Aug 2005
    Messaggi
    336
    Originariamente inviato da Shagrat
    i confronti in javascript si fanno con il doppio uguale:

    codice:
     while ((r1==0)||(r2==0))
    questo è quello che mi è saltato all'occhio...comincia a correggere questo...


  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    5
    grazie...nn l'avevo proprio notato...è che il browser nn mi segnava neanche l'errore(che peraltro ho fatto solo in quella funzione...in tutto il resto del programma è fatto nel modo corretto)...

    però devo ancora correggere qualcosa...visto che così la funzione nn funziona come vorrei io...se avrò ancora problemi chiederò di nuovo

    tnx ancora

  6. #6
    Utente di HTML.it L'avatar di dannie
    Registrato dal
    Aug 2005
    Messaggi
    336
    Perchè non è un errore nel senso stretto del termine: le assegnazioni all'interno delle parentesi dell'if sono permesse!
    In particolare, in molti linguaggi di programmazione, l'if valuta che l'espressione contenuta fra parentesi sia diversa da zero (false vale zero): quindi nel tuo caso stavi poneno due variabili uguali a zero e poi ne facevi l'or: 0 or 0 ovviamente dà zero, che corrisponde al false -> condizione mai verificata. Non so se questo ragionamento vale anche per javascript (magari qualcuno potrà confermare o smentire ), comunque il meccanismo è probabilmente qualcosa di simile!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    5
    grazie...

    cmq quella funzione faceva parte di quest'obbrobrio della natura che vorrebbe essere una dimostrazione della crittografia rsa(ambizioso come primo scriptino in jscript??? )

    soltanto che nell'ultima fase...forse per colpa dei numeri troppo grossi nn riesce a decrittarmi il messaggio...(nel caso vogliate testarlo si scrivono dei caratteri nel primo form in alto, 2 numeri primi sotto e poi si fa partire...fa apparire un bel po' di alert con dentro le variabili(utili mentre si programmano poi le toglierò)...quando funzionerà mi dedicherò anche a togliere tutte le parti commentate...
    codice:
    <html>
    <head>
    <script language="JavaScript">
    //Begin
    /*function showkeycode()
    {
    	word ="";
    	ascii=new Array();
    	lett=new Array();
    	for(i=0;i<document.characterCode.character.value.length;i++)
    	{
    		ascii[i]=document.characterCode.character.value.charCodeAt(i);
    		document.pqe.write("<input type=\"hidden\" name=\"asciival"+i+"\" value=\""+ascii[i]+"\" />");
    		lett[i]=String.fromCharCode(ascii[i]);
    		word=word+lett[i];
    		alert(ascii[i]);
    	}
    }*/
    function MakeArray(n)
    {
    	this.length = n
    	for (var i=1;i<=n;i++)
    	{
    		this[i]=0
    	}
    	return this
    }
    function checknum()
    {
    	if (document.MCD.nval.value =="") return;
    	if (document.MCD.mval.value=="") return;
    	k = parseInt(document.MCD.nval.value)
    	j = parseInt(document.MCD.mval.value)
    
    	if (k=="NaN") return;
    	if (j=="NaN") return;
    	if (k==0) return;
    	if (j==0) return;
    	if (isNaN(k)) return
    	if (isNaN(j)) return
    	document.MCD.mcd.value =k
    	n=maxcd(k,j);
    	alert (n);
    	document.MCD.mcd.value = n;
    	if (n!=1) 
    	{
    		alert("i numeri non sono validi.");
    		//critt(originaln,originalm);
    	}
    	else
    	{
    		u=critt(k,j);
    		alert ("e è: "+u);
    	}
    	return;
    }
    function maxcd(n,m)
    {
    	//document.pqe.mcd.value =""
    	Quot = new MakeArray(50)
    	//document.pqe.Algor.value = ""
    
    	/*if (document.pqe.nval.value =="") return;
    	if (document.pqe.mval.value=="") return;
    	n = parseInt(document.pqe.nval.value)
    	m = parseInt(document.pqe.mval.value)
    
    	if (n=="NaN") return;
    	if (m=="NaN") return;
    	if (n==0) return;
    	if (m==0) return;
    	if (isNaN(n)) return
    	if (isNaN(m)) return
    	document.pqe.mcd.value =n*/
    	//takinnames();
    
    	if (n < m) 
    	{
    		z = n
    		n = m
    		m = z
    		//document.pqe.nval.value = n
    		//document.pqe.mval.value = m
    	}
    	originaln = n
    	originalm = m
    	xstep = 1
    	r = 1
    	while ( r != 0) 
    	{
    		r=n%m
    		//q = Math.floor(n/m)
    		//r = n - m*q
    		//ShowStep (n,m,q,r)
    		n = m
    		m = r
    		//Quot[xstep]=q
    		//++xstep
    	}
    	//document.pqe.mcd.value = n
    	//if (n=1) critt(originaln,originalm);
    	//else document.write("i numeri non sono validi.");
    	//setgcd(n)
    	//gcd = n
    	a =1
    	c = 0
    	for (i=xstep; i>0; i--)
    	{
    		z = c - Quot[i]*a
    		c = a
    		a = z
    	}
    	return (n);
    	//theCombo = " "+gcd+" = " +a+"*"+originalm+" + "+b+"*"+originaln
    	//document.pqe.lincom.value = theCombo
    	//lcm = originaln*originalm/gcd
    	//document.pqe.lcm.value = lcm
    }
    function getnum ()
    {
    	a=document.pqe.aval.value;
    	prima=primo(a);
    	b=document.pqe.bval.value;
    	primb=primo(b);
    	if ((prima) && (primb)) {critt (a,b);}
    }
    function primo (x)
    {
    	var risultato = "";
    	var primo = true;
    	var i = 2;
    	var j;
    	while ((i < x) && primo)
    	{
    		j = x / i;
    		j = Math.floor (j);
    		j = x - (j * i);
    		if (j == 0)
    		{
    			primo = false;
    		}
    		else
    		{
    			i++;
    		}
    	}
    	if (!(primo))
    	{
    		risultato = risultato
    		+ x
    		+ " non è un numero primo!";
    		alert (risultato);
    	}
    	/*else
    	{
    		risultato = risultato
    		+ x
    		+ " non è un numero primo!";
    		alert (risultato);
    	}*/
    	return(primo);
    }
    function critt(x,y)
    {
    	word ="";
    	ascii=new Array();
    	lett=new Array();
    	for(i=0;i<document.characterCode.character.value.length;i++)
    	{
    		ascii[i]=document.characterCode.character.value.charCodeAt(i);
    		alert(ascii[i]);
    	}
    	n=x*y;
    	x1=x-1;
    	y1=y-1;
    	b=x1*y1;
    	alert ("b= "+b);
    	e=1;
    	r1=0;
    	r2=0;
    	while ((r1!=1)||(r2!=1))
    	{
    		e++;
    		r1=maxcd(e,x1);
    		//r1=e%x1;
    		//s1 = Math.floor(e/x);
    		//r1 = e - x*s1;
    		//alert("r1= "+r1);
    		r2=maxcd(e,y1);
    		//r2=e%y1;
    		//s2 = Math.floor(e/y);
    		//r2 = e - y*s2;
    		//alert("r2= "+r2);
    	}
    	alert ("e= "+e);
    	f=0;
    	chk="";
    	do
    	{
    		f++;
    		d=(b*f+1)/e;
    		chk=d-parseInt(d);
    		alert("f= "+f);
    		alert("d= "+d);
    		alert("chk= "+chk);
    	}
    	while (chk!=0);
    	alert ("d int è = "+d);
    	me=new Array();
    	c=new Array();
    	for (i=0;i<document.characterCode.character.value.length;i++)
    	{
    		me[i]=Math.pow(ascii[i],e);
    		alert("m^e= "+me[i]);
    		c[i]=me[i]%n;
    		alert("il messaggio crittato è "+c[i]);
    	}
    	cd=new Array();
    	decritt=new Array();
    	for (i=0;i<document.characterCode.character.value.length;i++)
    	{
    		cd[i]=Math.pow(c[i],d);
    		alert("c^d= "+cd[i]);
    		decritt[i]=cd[i]%n;
    		lett[i]=String.fromCharCode(decritt[i]);
    		word=word+lett[i];
    	}
    	alert("il messaggio originale è: "+word);
    	//return (e);
    	//while	(r1=0 || r2=0)
    	//s1 = Math.floor(e/x)
    	//r1 = e - x*s1
    	//s2 = Math.floor(e/y)
    	//r2 = e - y*s2
    }
    /*function power(l,z)
    {
    	w=1;
    	for (i=0;i<z;i++)
    	{
    		w=w*l;	
    	}
    	return(w)
    }*/
    /*function ShowStep(n,m,q,r)
    {
    	SoFar = document.GCD.Algor.value
    	thisStep = " " + n+" = " +m + "*" + q+" + "+r
    	SoFar = SoFar+"\n"+thisStep
    	document.GCD.Algor.value = SoFar
    }*/
    /*function setgcd(x)
    {
    	document.GCD.gcd.value = x
    }*/
    //function showchar()
    //{
    //	for(i=0;i<lett.length;i++)
    //	{
    //		alert(word);
    //	}
    //}
    //End
    </script>
    </head>
    <body>
    
    
    
    <div align="center">
    <form name="characterCode">
    	Digita un carattere:
    	<input type="text" name="character" size="15">
    
    	<!--<input type="button" value="Mostra il codice ASCII" onClick="showkeycode();">
    	<input type="button" value="Mostra il carattere ASCII" onClick="alert(word);">-->
    </form>
    <form name="pqe">
    	<input type="button" name="Goo" value="Clicca qui per eseguire il calcolo" onclick="getnum()">
    
    	<input type="reset" name="reset2" value="Cancella">
    
    	<input type="text" name="aval" size="15">
    
    	<input type="text" name="bval" size="15">
    
    	
    
    	
    
    </form> 
    </div>
    </body>
    </html>

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    5
    ho trovato l'errore

    ma nn so come correggerlo:

    durante la decrittazione...nel calcolo: m=(c^d)%n


    spesso c^d è numero enormemente alto

    roba dell'ordine di 10^30...e javascript me lo scrive in notazione scientifica lasciando perdere quindi le cifre + lontane...importantissime in un operazione di modulo...

    allora mi chiedevo se nn c'è un modo per forzare javascript di lavorare nel modo solito (chessò... anche una funzione come quella che blocca a tot cifre decimali i numeri in excel mi andrebbe bene...metterei 50 cifre decimali e ci dovrei stare comodo)

    qualcuno ha un'idea?

  9. #9
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    riscrivere l'algoritmo in un inguaggio che supporti calcoli dispendiosi come quelli, ad esempio in Python

    Python è un linguaggio di scripting che dispone di alcune librerie molto utili come NumPy in grado di lavorare con numeri di qualsiasi grandezza (l'unico limite sarebbe la memoria fisica del tuo elaboratore) senza generare un overflow.
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    5
    coughcough


    devo finire sta' roba entro dopodomani mattina presto...premesso che nn sono il tipo che riesce a reggere una notte di lavoro(ammesso che mi basti per studiare un nuovo linguaggio)...per me sarebbe impossibile farcela...

    siete sicuri che nn esista un modo per aumentare almeno un po' il numero di cifre dopo cui arrotonda??

    è una roba per scuola... al limite sarei anche disposto a far andare l'algoritmo solo per numeri piccoli in modo da permettere il funzionamento


    se proprio nn c'è niente da fare mi potete almeno dire il valore dopo il quale jscript approssima? in modo che superato quel valore faccio comparire un alert apposito che avvisa della correttezza del calcolo...


    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.