Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Funzioni astruse di calcolo intervalli

    Ciao,

    sto modificando uno script che genera un file Excel.

    Adesso però mi sono incagliato in un pezzo di codice che non riesco a capire cosa faccia e che logica segua.
    Questo codice dovrebbe calcolare la cella da cui iniziare (cinit) e quella dove finire (cend) per calcolare una somma.
    Teoricamente per calcolare str_lettere_ore3 basterebbe fare str_lettere_ore2 + sizeof(arr_ute_con_ore).
    Solo che vengono fatti dei calcoli strani usando quozienti e logaritmi, e non capisco perchè.


    Il codice è questo:

    codice:
    //colonna iniziale
    $cinit=5+sizeof($arr_ute_con_ore);
    $n=ln($cinit);
    $tolgo=parteSX($n);
    $num_da_div=$cinit-$tolgo;
    $arrQ=quozienti($num_da_div-1);
    $str_lettere_ore2=strLetter($arrQ, $arrayLetter);
    			
    $cend=4+(sizeof($arr_ute_con_ore)*2);
    $n=ln($cend);
    $tolgo=parteSX($n);
    $num_da_div=$cend-$tolgo;
    $arrQ=quozienti($num_da_div-1);
    
    $str_lettere_ore3 = strLetter($arrQ, $arrayLetter); // Estrapola la lettera corrispondente alla colonna indicata da arrQ
    
    
    //ritorna il numero delle lettere della colonna excel
    function ln($num){
    	$arraySize = sizeof($GLOBALS['arrayLetter']);
    	$n=((log(((arraySize-1)*$num)+arraySize))/log(arraySize));
    	return (int)$n;
    }
    
    //trovo la parte sinistra della classe di numeri
    function parteSX($num){
    	$arraySize = sizeof($GLOBALS['arrayLetter']);
    	$n1=pow($arraySize, $num);
    	$n=(($n1-$arraySize)/(arraySize-1));
    	return $n;
    } 
    
    //while per la divisione del numero per cui trovare le lettere, restituisce un array di quozienti
    function quozienti($num){
    	$arraySize = sizeof($GLOBALS['arrayLetter']);
    	$i=0;
    	while($num>0){
    		$q=$num%$arraySize;
    		$quozienti[$i]=$q;
    		$num=$num/$arraySize;
    		$num=(int)$num;	
    		$i++;
    	}
    	return $quozienti;
    }
    
    //dato un array di quozienti e un array di lettere restituisce una stringa di lettere corrispondente
    function strLetter($arrQ, $arrL){
    	$str="";
    	while(true){
    		//igor: aggiunto controllo della validità dell'array
    		if(is_array($arrQ))
    			$elem=array_pop($arrQ);
    		else 
    			$elem = NULL;
    		
    		if($elem!=NULL){
    			$str=$str.$arrL[$elem];	
    		}else{
    			return $str;
    		}
    	}
    }
    A me sembra che per fare alcuni calcoli sia stato complicato esageratamente il ragionamento.
    Inizialmente invece del sizeof($arrayLetter) c'era messo a mano il numero 26 (il numero di lettere dell'alfabeto). Questo però crea problemi se si deve andare oltre la Z e passare alle celle AA, AB, AC, etc di Excel.
    Ed è quello che devo correggere..... SE CAPISSI LA LOGICA DEL CODICE!!!

    Mi dite la vostra impressione sui calcoli che vengono eseguiti e su cosa fanno?

    PS - Se vi servono altri elementi non esitate a chiedere!

  2. #2
    So che è un problema che la maggior parte di voi non potrebbe risolvere essendo più matematico che di programmazione.
    Anche se non sapete darmi una mano mi suggerite un forum o un newsgroup dove posso chiedere (magari dove per qualche matematico il mio grattacapo sia una scemata)?

    Devo risolvere la cosa entro domani e sono ancora a cercare di capire cosa faccia quel codice!!!

    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.