Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: pedro,, en 12 de Marzo 2016, 00:13
-
Hi!
EJERCICIO
Crea las siguientes funciones en PHP:
a) Una función (tipo procedimiento, no hay valor devuelto) denominada escribirTresNumeros que reciba tres números enteros como parámetros y proceda a escribir dichos números en tres líneas en un archivo denominado datosEjercicio.txt. Si el archivo no existe, debe crearlo.
b) Una función denominada obtenerSuma (tipo función, devolverá un valor numérico) que reciba una ruta de archivo como parámetro, lea los números existentes en cada línea del archivo, y devuelva la suma de todos esos números.
c) Una función denominada obtenerArrNum (tipo función, devolverá un array de valores numéricos) que reciba una ruta de archivo como parámetro, lea los números existentes en cada línea del archivo, y devuelva un array cuyo índice 0 contendrá el número existente en la primera línea, cuyo índice 1 contendrá el número existente en la segunda línea y así sucesivamente.
d) Crea código php donde a través de la función escribirTresNumeros escribas en el fichero los números 2, 8, 14. Luego, mediante la función obtenerSuma muestra por pantalla el resultado de sumar los números existentes en el archivo. Finalmente, mediante la función obtenerArrNum obtén el array, recórrelo y muestra cada uno de los elementos del array.
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title>
<meta charset="utf-8">
</head>
<body>
<?php
escribirTresNumeros(2, 8, 14);
echo 'En primer lugar se llamará a la función escribirTresNumeros, pasándole como parámetros (2, 8, 14).';
echo 'Allí se creará un archivo con nombre datosEjercicio.txt';
echo '<hr>Después llamaremos a la función obtenrSuma a la que pasaremos como parámetro el nombre del del archivo';
echo ' que se creó en la función escribirTresNumeros.';
echo 'El resultado de sumar los tres números del archivo datosEjercicio.txt es: ' . obtenerSuma('datosEjercicio.txt');
echo '<hr> Y por último llamaremos a la función obtenerArrNum, pasándole como parámetro el nombre del archivo';
echo ' que se creó en la función escribirTresNumeros. Y nos devolverá los datos que tenga dentro de un array.<br/>';
$arrayNuevo = obtenerArrNum('datosEjercicio.txt');
$msg = '<br/>El array que devuelve la función obtenerArrNum contiene: <br/>';
for($i=0; $i<count($arrayNuevo); $i++) {
$msg = $msg . 'En el índice ' . $i . ' tenemos como valor ' . $arrayNuevo[$i] . '<br/>';
}
echo $msg;
function escribirTresNumeros($n1, $n2, $n3) {
$n1 = $n1 . "\r\n";
$n2 = $n2 . "\r\n";
$n3 = $n3 ;
$fp = fopen('datosEjercicio.txt', 'a');
fputs($fp, $n1);
fputs($fp, $n2);
fputs($fp, $n3);
fclose($fp);
}
function obtenerSuma($nomArchivo){
$fp = fopen($nomArchivo, 'r');
$suma = 0;
while(!feof($fp)) {
$linea = fgets($fp);
$suma += $linea;
}
return $suma;
}
function obtenerArrNum($nomArchivo){
$fp = fopen($nomArchivo, 'r');
$i = 0;
while(!feof($fp)) {
$arrayNum[$i++] = fgets($fp);
}
return $arrayNum;
}
?>
</body>
</html>
http://aprendehtml.byethost3.com/CU00836B/ejercicioCU00836B.php
Saludos. 8)
-
Hola Pedro!
Todo bien viendo algunas observaciones
Quizás yendo en la línea tradicional te recomendaría que hagas la declaración de funciones en la parte inicial del código y luego hagas uso de las mismas. Esto es básicamente un criterio de "mantener el código ordenado evitando declarar y usar funciones en cualquier punto, sino tratar de hacerlo ordenadamente":
<!DOCTYPE html>
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title>
<meta charset="utf-8">
</head>
<body>
<?php
//PARTE DECLARATIVA
function escribirTresNumeros($n1, $n2, $n3) {
$n1 = $n1 . "\r\n";
$n2 = $n2 . "\r\n";
$n3 = $n3 ;
$fp = fopen('datosEjercicio.txt', 'a');
fputs($fp, $n1);
fputs($fp, $n2);
fputs($fp, $n3);
fclose($fp);
}
function obtenerSuma($nomArchivo){
$fp = fopen($nomArchivo, 'r');
$suma = 0;
while(!feof($fp)) {
$linea = fgets($fp);
$suma += $linea;
}
return $suma;
}
function obtenerArrNum($nomArchivo){
$fp = fopen($nomArchivo, 'r');
$i = 0;
while(!feof($fp)) {
$arrayNum[$i++] = fgets($fp);
}
return $arrayNum;
}
//PARTE EJECUTIVA
escribirTresNumeros(4, 8, 14);
echo 'En primer lugar se llamará a la función escribirTresNumeros, pasándole como parámetros (2, 8, 14).';
echo 'Allí se creará un archivo con nombre datosEjercicio.txt';
echo '<hr>Después llamaremos a la función obtenrSuma a la que pasaremos como parámetro el nombre del del archivo';
echo ' que se creó en la función escribirTresNumeros.';
echo 'El resultado de sumar los tres números del archivo datosEjercicio.txt es: ' . obtenerSuma('datosEjercicio.txt');
echo '<hr> Y por último llamaremos a la función obtenerArrNum, pasándole como parámetro el nombre del archivo';
echo ' que se creó en la función escribirTresNumeros. Y nos devolverá los datos que tenga dentro de un array.<br/>';
$arrayNuevo = obtenerArrNum('datosEjercicio.txt');
$msg = '<br/>El array que devuelve la función obtenerArrNum contiene: <br/>';
for($i=0; $i<count($arrayNuevo); $i++) {
$msg = $msg . 'En el índice ' . $i . ' tenemos como valor ' . $arrayNuevo[$i] . '<br/>';
}
echo $msg;
?>
</body>
</html>
En realidad es típico mantener las funciones en archivos externos, de modo que se pondría la instrucción de carga al principio del archivo para luego hacer uso de ellas.
El código no me funciona bien si lo ejecuto varias veces. Por ejemplo lo ejecuto una primera vez con escribirTresNumeros(2, 8, 14); y en el archivo de datos queda
2
8
14
Lo ejecuto una segunda vez con escribirTresNumeros(4, 8, 14); y en el archivo de datos queda
2
8
144
8
14
De modo que ya los resultados no son correctos en la segunda ejecución
Esto es debido a que el archivo no se está sobreescribiendo
Saludos!
-
Hola César.
Para que se sobrescriba el archivo solo habría que cambiar el modo de apertura del archivo, está en 'a' y lo he sustituido 'w+' quedando así la linea afectada...
$fp = fopen('datosEjercicio.txt', 'w+');
Gracias por la corrección y los consejos.
Saludos.