Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Funcion strlen

Estas en el tema de Funcion strlen en el foro de PHP en Foros del Web. Cita: Iniciado por Briss Hola a todos estoy tratando de hacer esta funcion tengo un input donde ingreso numeros (pueden ser 1 a 15) estos ...
  #1 (permalink)  
Antiguo 21/02/2014, 12:32
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Funcion strlen

Cita:
Iniciado por Briss Ver Mensaje
Hola a todos estoy tratando de hacer esta funcion tengo un input donde ingreso numeros (pueden ser 1 a 15) estos numeros ingresados debo multiplicarlos de derecha a izquierda por 3 y 1 empezando siempre con 3...
si el resultado de esta multiplicación da como resultado 2 dígitos debo sumarlos... ejemplo si tenia 3 x 5 =15 tendría q hacer 1+5=6
... luego de esto, tenia que sumar todos los resultados para obtener una suma final...
a esta suma final debo restarle la decena superior mas próxima .... y mi resultado sera el numero buscado...
ejemplo si mi resultado final fue 59 tendría q tener 60-59= numero buscado
primero la estaba tratando de resolver con strlen, substr, switch... pero la verdad es que resultaría demasiado larga asi que deci cambiarme a for pero me faltan dos cosas la suma final y la resta de la decena superior proxima
esto es lo que tengo hasta ahora me la suma me gustaria que solo me saliera una vez ... y me falta la resta de la decena superior proxima aun no se como hacerlo
Código PHP:
<?php 
$numeros
=$_POST['numeros'];
$multiplicar =  '13131313131313'//aca tengo una duda no importa cuantos numeros tenga la multiplicacion siempre la hara bien????? 
    
function numerobuscado($cadena$multiplicar){ 
    echo 
"<br>"

  
        for( 
$i strlen($numeros);$i >= 0$i--){  
        
         echo  
$sum $numeros[$i] * $multiplicar[$i]; 
          
         
$n1=strlen($sum);
          if (
$n1==2){ 
               
$nume1substr ("$sum"01); 
               echo 
"-"
                
$nume2 substr ("$sum"11); 
               echo 
"-"
              echo  
$digito $nume1+$nume2
             
              }
      else
              { 
                echo 
"--"
            echo 
$digito=$sum
         
        } 
         
        }     
      
    }
    echo 
numerobuscado($numeros$multiplicar); 
      
?>

Última edición por Briss; 21/02/2014 a las 14:18 Razón: codigo
  #2 (permalink)  
Antiguo 21/02/2014, 14:19
Avatar de elporfirio  
Fecha de Ingreso: octubre-2013
Mensajes: 37
Antigüedad: 10 años, 6 meses
Puntos: 4
Sonrisa Respuesta: Funcion strlen

Me gusto mucho tu reto, al ver tu forma de programar, es como yo lo hacía :D es increible ver como cada día nos vamos superando.

Y que gracias a que aprendemos más cosas, podemos simplificar los resultados

Por decirlo así pude ver desde donde vengo y hasta donde voy gracias.

Aquí te lo dejo, estaba totalmente ocmentado, pero creo que será mas divertido que investiges como funciona.

recuerda visitar www.elporfirio.com de vez en cuando ;)

Código PHP:
<form action="" method="post">
    <input type="text" name="numeros">
    <input type="submit">
</form>
<?php
if($_POST){
    
    function 
multiplicar($numeros){
        
#cambiamos los digitos a $array
        
$digitos str_split($numeros);
        
$digitos array_reverse($digitos);
        
        
#establece el multiplicador inicial
        
$multi 3;
        
        
$suma 0;
        foreach(
$digitos as $numero){
            
$entero intval($numero);
            
            
$tmp $entero $multi;
                       
            
$sumando sumar($tmp);
            
            
$suma $suma $sumando;
            
            
#cambia el multiplicador de 1 a 3
            
$multi = ($multi == 3) ? 3;
        }
        
        return 
$suma;
    }
    
    function 
sumar($numero){
        
$suma 0;
        
$array array_map("intval"str_split($numero));
        
        if(
count($array) > 1){
            foreach(
$array as $num){
                
$suma $suma $num;
            }
            echo 
$suma;
        }
        else {
            
$suma $numero;
        }
        return 
$suma;
    }
    
    function 
restar($numero){
        
$suma 0;
        
$decena 0;
        
$array array_map("intval"str_split($numero));
        
        
$decena $numero;
        
$indice end($array);
        for(
$i $indice$i 10$i++){
            
$decena $decena 1;
        }
        echo 
"Decena siguiente: "$decena."<br>";
        
        
$resultado $decena $numero;
        return 
$resultado;
    }
    
    
$numeros trim($_POST["numeros"]);
    
    
$res_multiplicacion multiplicar($numeros);
    
    echo 
"Número original: "$numeros."<br>";
    echo 
"Resultado multiplicacion: "$res_multiplicacion."<br>";
    
    
$res_resta restar($res_multiplicacion);
    echo 
"número buscado; "$res_resta ."<br>";
}
?>
__________________
visita http://elporfirio.com o habrá tabla ¬¬
  #3 (permalink)  
Antiguo 21/02/2014, 14:27
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 9 meses
Puntos: 12
Respuesta: Funcion strlen

Gracias amigo elporfirio pues ya lo he logrado resolver obvio mi código no es tan hermoso como el tuyo jejeje... y lo que dices es muy cierto siempre buscamos simplificar código... al principio yo saca mi numero de dígitos y asi un swith para cada caso te imaginas una locura jejejeje pero me pase a for y pude reducir bastantes lineas de todas maneras gracias por lo q me indicas lo checare y checare tambien la liga
Saludos
  #4 (permalink)  
Antiguo 21/02/2014, 14:58
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Funcion strlen

¿es un tipo de dígito verificador?

Creo que se puede resolver con algo así:

Código PHP:
Ver original
  1. $entrada='3457';//entrada de ejemplo
  2. $entrada=str_split(strrev($entrada));//"volteamos" y partimos la entrada
  3. $suma=0;
  4. foreach($entrada as $pos =>$car){
  5.     $mul=($pos%2)?$car:$car*3;//si es el primer caracter multiplicamos por 3 si no, no
  6.     if($mul>9){//si el resultado es mayor a 9 (10 o más)
  7.         $mul=str_split($mul);//dividimos la cadena
  8.         $mul=$mul[0]+$mul[1];
  9.     }
  10.     $suma+=$mul;//acumulamos la suma
  11. }
  12. $decena=ceil($suma/10)*10;//buscamos la decena más próxima
  13. $suma=$decena-$suma;//restamos
  14.  
  15. echo 'Numero buscado: '.$suma;

Etiquetas: funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:12.