Mostrar numeros pares e impares

B

Buenas,

Sigo con mi curso de php y me encuentro estancado en el siguiente ejercicio:

Tengo que mostrar en pantalla cuantos números pares e impares hay en una secuencia de números introducida en la url y con el GET. Tengo parte del algoritmo terminado pero me falta el modulo que es lo que me cuesta mas ya que entran las operaciones matemáticas.

Por ejemplo: En la url introducimos 1234 y el programa nos dice que hay dos números pares y dos números impares.

Adjunto la parte final del algoritmo que he sacado y a ver si alguien me puede echar una mano con el modulo. La gracia del ejercicio es hacerlo sin cadenas ni arrays.

Gracias

/* (MAIN) */
/******************************/

// Leemos el número de la entrada.
$num = $_GET["n"];

// Calculo de las cifras pares e impares.
tiposCifras($num, $pares, $impares);

// Mostrar resultados en pantalla.
print "- El numero de cifras pares es $pares";
print "<br />";
print "- El numero de cifras impares es $impares";
		
?>
ESL_Kaiser

si el número es divisible entre 2 (resto 0) va a ser par, el resto impares, investiga como hacerlo que no es difícil y es lo que mola aprender

2 respuestas
B

#2 esa parte la tengo clara, lo unico es que no se como declarar la funcion y si hay un for o un if por medio......

NickNack

function tiposCifras($num) {
codigo;
}

el resto de codigo esta 1290213890213980123 veces en internet

1 respuesta
ESL_Kaiser

entonces no lo tienes claro del todo no? si vas a guardar los números en alguna tabla necesitar un for para recorrerla y si tienes que hacer comparaciones y discriminación pues un if

Fyn4r

Haces el modulo 2 para saber si la última cifra es par o impar, luego divides entre 10 (division entera) y así hasta que la división te de 0. Digo así sin pensar mucho, igual es una parida XD

B

Gracias por los consejos, lo pruebo y os ciento que tal :)

_Rpv

Yo solo vengo a decir que no recominedo los cursos de udemy de victor robles, son malísimos. y los vende bastante.

B

#4 #2

He sacado algo asi, pero tengo problemas de codigo;

Error el linea 54: tiposCifras($num, $parells, $senars);
Error en linea 41: return $pares . $impares;
Y luego error en el print

function tiposCifras($num) {

	    for($i=0;$i<strlen($num);$i++)

{

    if(is_numeric($num[$i]))

    {

        if($num[$i]%2==0)

            $pares[]=$num[$i];

        else

            $impares[]=$num[$i];

    }

}
 
return($pares,$impares);

}

/* (MAIN) */
/******************************/

// Leemos el número de la entrada.
$num = $_GET["n"];

// Calculo de las cifras pares e impares.
tiposCifras($num, $pares, $impares);

// Mostrar resultados en pantalla.
print "- El numero de cifras pares es $pares";
print "<br />";
print "- El numero de cifras impares es $impares";
		
?>
1 respuesta
NickNack

#9

Error el linea 54: tiposCifras($num, $parells, $senars);

Lo tienes en catalan y en el codigo en castellano. La función solo necesita un parametro y tu le estas pasando tres, sobra pares e impares.

Error en linea 41: return $pares . $impares;

creo (estoy un poco oxidado en PHP que se me corrija si no tengo la razon) que no puedes devolver dos variables asi tan a pelo, prueba:

return array('pares' => $pares,
             'impares' => $impares);

Y luego sacalo del array para el printf

$pepe = tiposCifras($num) para tener el return en algun sitio, si solo llamas la funcion no te va a devolver nada

1 respuesta
B

#10 En el codigo sale en castellano todo

Lo del array lo he intentado pero el ejercicio me pide que tengo que hacerlo sin arrays y ahi me pierdo....

1 respuesta
NickNack

#11

tiposCifras($num, $devuelveParOImpar) {

blah blah;

if ($devuelveParOImpar == 'par') {

return $par;

} else {

return $impar;

}

y luego recuerda pasarle el parametro

$pares = tiposCifras($num, 'par');
$impares = tiposCifras($num, 'impar');

Un poco guarrón pero sirve sin arrays

PD: $pares[] y $impares[] son arrays tambien eh

isvidal

tiposCifras($num) {
$valores = str_split($num)
$par = 0;
$inpar = 0;

for($i = 0; $i < count($valores); $i++){
(int)$valores[$i] % 2 ? $inpar++ : $par++
}

return "Hay un total de {$par} pares i un total de {$inpar} inpares en el numero {$num}"
}

Tengo la sintaxis un poco oxidada y tal (Seguro que falla algun punto y coma o algo me he dejado, lo he echo a pelo, corrigelo tu), pero la logica es correcta.

Solo tienes que pasarle el numero en forma de string a la funcion.

/* (MAIN) /
/
*****************************/

// Leemos el número de la entrada.
$num = $_GET["n"];

// Calculo y printado de las cifras pares e impares.
print tiposCifras($num);

Asi quedaria añadiendo arriba o abajo la funcion entera de tiposCifras

Y aun mas comprimido:

/* (MAIN) /
/
*****************************/

// Leemos calculo y print de las cifras pares e impares.
print tiposCifras($_GET["n"]);

1 respuesta
banerplayer

#13 En el enunciado del compañero dice que no se pueden utilizar arrays y con str_split lo estas haciendo :P.

Ahora edito con mi posible solución :D.

#1 Ahi va mi posible solución

spoiler

Puede que tenga algun fallo, pero creo que la solución que buscas se asemeja a esto :P

edit: corregido

spoiler
1 respuesta
B

#14 ya...me lie ahi....no se pueden utilizar arrays y el main no se puede modificar...

16 días después
B

Si alguien tiene curiosidad de saber como se hacia el ejercicio sin arrays ni cadenas:

<?php
/* MÒDUL tipusXifres */
/***********************/

function tipusXifres($n, &$par, &$sen){
	
$par = 0;
$sen = 0;


while ( !($n == 0) ){
	$xifra = $n % 10;
	if($xifra % 2 == 0)
		$par = $par + 1;
	else
		$sen = $sen + 1;
$n = (int) ($n / 10);
}
}

$num = $_GET["n"];

tipusXifres($num, $parells, $senars);

print "- El nombre de xifres parells és $parells";
print "<br />";
print "- El nombre de xifres senars és $senars";
		
?>
Fyn4r

Sí, #6 se hacía una idea, debe de ser un genio

1 respuesta
Ranthas

#17 Mucho genio, pero tu no programas en catalán....¿o sí?

Usuarios habituales