Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Pepote21

Páginas: [1] 2 3 4
1
Hola a todos.

Tengo una clase Validador en el modelo con el siguiente método:

Código: [Seleccionar]
public DefaultFormatterFactory validarDosEnteros(){
        nf=NumberFormat.getNumberInstance();
        nf.setParseIntegerOnly(true);
        nf.setMaximumIntegerDigits(2);
        nft=new NumberFormatter(nf);
        nft.setAllowsInvalid(false);
        dff=new DefaultFormatterFactory(nft);
        return dff;
    }

Tengo la clase Controlador donde tengo:

Código: [Seleccionar]
getFtfNumSala().setFormatterFactory(validador.validarDosEnteros());
listado=getObjSdao().read(); //saber los registros de la db   

El problema que tengo es que me encuentro en un formulario con un JFormattedTextField que inicialmente está vacio y cuando introduzco un dato correcto de la base de datos, todo funciona bien al pulsar el botón LEER. Pero si pulso el botón LEER con el JFormattedTextField vacio o introduciendo un dato incorrecto (o eliminado) de la base de datos me causa una Exception NumberFormatException.

Llevo ya un par de días sin poder resolverlo. A ver si alguien me echa una mano.

De antemano gracias y un saludo a todos.

2
Hola.
Hace tiempo que estoy estudiando java y hace un par de meses cambié a apache netbeans 11.3. Tenía bastantes códigos utilizando imágnes que funcionaban perfectamente y al realizar proyectos con maven ya no me funcionan las imagenes. He probado dónde colocar el archivo de imágenes en diferentes sitios pero no consigo encontrar la resolución dle problema. Si meto las imágenes en la carpeta target sí que funciona pero no creo que sea la solución correcta. Creo que la solución correcta debería estar bien en la carpeta raiz "src" o inlcuso la posiblidad de carpetas de la misma. No tengo mucha experiencia con maven. A ver si alguien sabe un poco de esto. Gracias de antemano.

3
Hola. Quisiera hacer una consulta para ver si alguien me puede informar.
Tengo un formulario con un jcombobox y entonces quisiera utilizarlo tanto para insertar como para ver. Dicho formulario también lo cargo desde otro panel.
Mi pregunta es si el jcombobox puedo cargarlo y enabled o debo crear otro formulario sustituyendo los jcombobox por jtextfield.
Como podréis entender lo que intento es utilizar un único formulario.
Un saludo a todos.

4
Hola a todos. Estoy aprendiendo a programar y, generalmente, cuando el programa es un poco largo utilizo el patrón MVC. Lo que yo entiendo por este patrón es que las partes vista (solo GUI) y modelo (datos y lógica) van completamente separadas y es como yo lo hago. Sin embargo veo muchos ejemplos de MVC, en los cuales, dentro de la vista incluyen datos como el ingresar los datos de un combobox.

Repito, yo intento aprender con todo separado. Pero estoy teniendo problemas cuando los componentes tienen un modelo como el combobox y las tablas.

Mi pregunta es ¿Sabéis si siempre se puede separar o a veces, como por ejemplo cargar un combobox debo hacerlo en la vista?

A la espera de respuesta, un saludo.

5
Hola a todos. Os paso mi código del ejercicio CU00922C del tutorial pdf de programación avanzada Java de aprenderaprogramar. Gracias a todos. Un saludo.

Código: [Seleccionar]
public class Paquete {
    private int idPaquete;
    private int pesoPaquete;
   
    public Paquete(){
        idPaquete=0;
        pesoPaquete=0;
    }
   
    public Paquete(int idPaquete,int pesoPaquete){
        this.idPaquete=idPaquete;
        this.pesoPaquete=pesoPaquete;
    }

    public int getIdPaquete() {
        return idPaquete;
    }

    public void setIdPaquete(int idPaquete) {
        this.idPaquete = idPaquete;
    }

    public int getPesoPaquete() {
        return pesoPaquete;
    }

    public void setPesoPaquete(int pesoPaquete) {
        this.pesoPaquete = pesoPaquete;
    }

    @Override
    public String toString() {
        return "Paquete{" + "idPaquete=" + idPaquete + ", pesoPaquete=" + pesoPaquete + '}'+"\n";
    }
   
}
Código: [Seleccionar]
import java.util.Iterator;
import java.util.Random;
import java.util.Vector;

/**
 * Ejercicio CU00922C aprenderaprogramar.com
 * Interfaz list, clase VECTOR
 * Recorrer contenedor de paquetes al que se le añaden paquetes
 *
 * @author pepote21
 * @version 20171107
 */
public class Principal {
    public static void main(String[] args){
        Vector<Paquete> v=new Vector(5,1);//Contenedor con capacidad de 5 paquetes
        System.out.println("Capacidad inicial del contenedor: "+v.capacity()+" paquetes.");
        int cargaMaximaContenedor=v.capacity()*100;
        System.out.println("Capacidad máxima del contenedor: "+cargaMaximaContenedor+" kgs.");
       
        Random rnd=new Random();
        Paquete p=new Paquete();
        int pesoTotal=0;
               
        for(int i=0;i<50;i++){
            p.setPesoPaquete(rnd.nextInt(71)+80);//Aleatoriamente se establece el peso de cada paquete
            pesoTotal=p.getPesoPaquete()+pesoTotal;//Peso total contenedor
            v.add(p); //Añadimos 50 paquetes al contenedor   
        }
        System.out.println("Capacidad actual del contenedor: "+v.capacity());
        cargaMaximaContenedor=v.capacity()*100;
       
        pesoTotal=0;
        Iterator<Paquete> it=v.iterator();
        while(it.hasNext()){
            Paquete tmp=it.next();
            pesoTotal=tmp.getPesoPaquete()+pesoTotal;
        }
        String msg=("Un contenedor con capacidad para "+v.capacity()+" paquetes podría cargar "+
                cargaMaximaContenedor+" y tenemos "+v.capacity()+" paquetes con un peso total de: "+pesoTotal);       
        String msg3=(". No ha sido necesario aumentar la capacidad");
        if(pesoTotal<cargaMaximaContenedor){
            System.out.println(msg+msg3);       
        }
        while(pesoTotal>cargaMaximaContenedor){
            v.ensureCapacity(v.capacity()+1);//ampliar la capacidad
            cargaMaximaContenedor=v.capacity()*100;
            if(pesoTotal<=cargaMaximaContenedor){
                String msg2=(". Se ha aumentado la capacidad a "+v.capacity()+"\n paquetes lo que permite cargar hasta "+
                cargaMaximaContenedor+" kilos");
                System.out.println(msg+msg2);
            }         
        }
    }   
}

6
Hola a todos. Os paso mis códigos del ejercicio CU00921C del tutorial pdf de programación Java avanzada.

Código con linkedList= Vehiculo, ListadoVehiculos, Principal

Código con ArrayList=Vehiculo, ListadoVehiculos2, Principal2

Gracias.

Con respecto a los apartados:

a) Con linkedList 18.000.000 nanosegundos.
b) Con arrayList: 6.000.000 nanosegundos.
c) Las diversas pruebas me dan lo mismo, es decir que con ArrayList el tiempo invertido ha sido 1/3 del invertido en LinkedList, o sea, menor y al contrario de lo indicado en el temario. No sé a que se deben las diferencias. Espero no haber hecho algún error en el código. Pero además me salen tiempos mayores en el LinkedList comparándolo también con el código de Erik_Escriche.

Un saludo.

Código: [Seleccionar]
public class Vehiculo {
    private int idVehiculo;
    private String tipo;
   
    public Vehiculo(){
        idVehiculo=0;
        tipo="";
    }
   
    public Vehiculo(int idVehiculo,String tipo){
        this.idVehiculo=idVehiculo;
        this.tipo=tipo;
    }
   
    public int getIdVehiculo(){
        return idVehiculo;
    }
   
    public String getTipo(){
        return tipo;
    }
   
    public void setIdVehiculo(int idVehiculo){
        this.idVehiculo=idVehiculo;
    }
   
    public void setTipo(String tipo){
        this.tipo=tipo;
    }
   
    @Override
    public String toString(){
        return "Vehiculo ID: "+idVehiculo+". Tipo: "+tipo+"\n";
    }
}

Código: [Seleccionar]
package practicas.avanzadas.t921C.ejercicio2;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import practicas.avanzadas.t921C.ejercicio.Vehiculo;
/**
 *
 * @author pepote21
 */
public class ListadoVehiculos {
    List<Vehiculo> listaArray;
   
    public ListadoVehiculos(){
        listaArray=new LinkedList<Vehiculo>();
    }
   
    public void addVehiculo(Vehiculo vehiculo){
        listaArray.add(vehiculo);
    }
   
    public List<Vehiculo> getLista(){
        return listaArray;
    }
   
    @Override
    public String toString(){
        return listaArray.toString();
    }
   
    public Iterator<Vehiculo> iterator(){
        return new MiIteratorListadoVehiculos();
    }
   
   
    protected class MiIteratorListadoVehiculos implements Iterator<Vehiculo>{//clase interna
        public int posicion = 0;
        public boolean sepuedeeliminar = false; // Campos
       
        @Override
        public boolean hasNext() {
            return posicion < listaArray.size();
        } // Método
       
        @Override
        public Vehiculo next() { // Método
            Vehiculo res = listaArray.get(posicion); // Creamos un objeto Persona igual al que recorremos
            posicion ++;
            sepuedeeliminar = true;
            return res;
        }
       
        @Override
        public void remove() {
            if (sepuedeeliminar) {
                listaArray.remove(posicion-1);
                posicion--;
                sepuedeeliminar = false; }
        } // Cierre del método remove
    } // Cierre de la clase interna
}

Código: [Seleccionar]
package practicas.avanzadas.t921C.ejercicio2;

import java.util.Iterator;
import java.util.Random;
import practicas.avanzadas.t921C.ejercicio.Vehiculo;

/**
 * Ejercicio CU00921C aprenderaprogramar.com
 * Interfaz list, clase linkeList
 * Recorremos linkedList vehículos y eliminamos algunos
 * Diferencias entre linkedList y arrayList
 * @author pepote21
 * @version 20171106
 */
public class Principal {   
    public static void introVehiculos(ListadoVehiculos lista){//Introducimos 5000 vehículos en la lista
        Random rnd=new Random();
        String [] tipoVehiculo={"Coche","Camion","Furgoneta","Moto"};       
        for(int i=0;i<5000;i++){
            lista.getLista().add(new Vehiculo(i,tipoVehiculo[rnd.nextInt(4)]));//Atributo tipo establecido de forma aleatoria
        }
    }
    public static void recorrerListaMostrarCantidadVehiculos(ListadoVehiculos lista){//Recorremos lista y mostramos resumen de vehículos de cada tipo
        Vehiculo tmp;
        int coches=0;
        int camiones=0;
        int furgonetas=0;
        int motos=0;
        Iterator<Vehiculo> it=lista.iterator();//Recorremos la lista
        while(it.hasNext()){
            tmp=it.next();           
            switch(tmp.getTipo()){//Contamos los elementos de cada tipo
                case "Coche":
                coches++;
                break;
                case "Camion":
                camiones++;
                break;
                case "Furgoneta":
                furgonetas++;
                break;
                case "Moto":
                motos++;
                break;
            }
        }
        System.out.println("Resumen: hay "+coches+" coches, "+camiones+" camiones, "+
                furgonetas+" furgonetas y "+motos+" motos.");
    }
    public static void recorrerListaModificarCantidadVehiculos(ListadoVehiculos lista){
        Vehiculo tmp;
        String [] tipoVehiculo={"Coche","Camion","Furgoneta","Moto"};
        int coches=0;
        int camiones=0;
        int furgonetas=0;
        int motos=0;
        int vehiculosEliminados=0;
        long antes;
        long resultado;
        antes=System.nanoTime();
        Iterator<Vehiculo> it=lista.iterator();//Recorremos la lista
        while(it.hasNext()){
            tmp=it.next();
            if(!tmp.getTipo().equals("Coche")){
                it.remove();
                vehiculosEliminados++;
            }
        }
        coches=5000-vehiculosEliminados;
        System.out.println("Se han eliminado de la lista "+vehiculosEliminados+" vehiculos quedando "+coches+" coches");
        for(int i=0;i<vehiculosEliminados;i++){
            lista.getLista().add(new Vehiculo(coches+i+1,tipoVehiculo[0]));
            coches++;
        }
        resultado=System.nanoTime()-antes;
        System.out.println("Se han invertido "+resultado+" nanosegundos en eliminar y añadir vehiculos");
        System.out.println("Resumen: hay "+coches+" coches, "+camiones+" camiones, "+
                furgonetas+" furgonetas y "+motos+" motos.");
    }
    public static void main(String[]args){
        ListadoVehiculos lista=new ListadoVehiculos();
        introVehiculos(lista);
        recorrerListaMostrarCantidadVehiculos(lista);
        recorrerListaModificarCantidadVehiculos(lista);     
    }         
}

Código: [Seleccionar]
package practicas.avanzadas.t921C.ejercicio2;

import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
import practicas.avanzadas.t921C.ejercicio.Vehiculo;

/**
 *
 * @author pepote21
 */
public class ListadoVehiculos2 {
    List<Vehiculo> listaArray;
   
    public ListadoVehiculos2(){
        listaArray=new ArrayList<Vehiculo>();
    }
   
    public void addVehiculo(Vehiculo vehiculo){
        listaArray.add(vehiculo);
    }
   
    public List<Vehiculo> getLista(){
        return listaArray;
    }
   
    @Override
    public String toString(){
        return listaArray.toString();
    }
   
    public Iterator<Vehiculo> iterator(){
        return new MiIteratorListadoVehiculos();
    }
   
   
    protected class MiIteratorListadoVehiculos implements Iterator<Vehiculo>{//clase interna
        public int posicion = 0;
        public boolean sepuedeeliminar = false; // Campos
       
        @Override
        public boolean hasNext() {
            return posicion < listaArray.size();
        } // Método
       
        @Override
        public Vehiculo next() { // Método
            Vehiculo res = listaArray.get(posicion); // Creamos un objeto Persona igual al que recorremos
            posicion ++;
            sepuedeeliminar = true;
            return res;
        }
       
        @Override
        public void remove() {
            if (sepuedeeliminar) {
                listaArray.remove(posicion-1);
                posicion--;
                sepuedeeliminar = false; }
        } // Cierre del método remove
    } // Cierre de la clase interna
}

Código: [Seleccionar]
package practicas.avanzadas.t921C.ejercicio2;

import java.util.Iterator;
import java.util.Random;
import practicas.avanzadas.t921C.ejercicio.Vehiculo;

/**
 *
 * @author pepote21
 */
public class Principal2 {
    public static void introVehiculos(ListadoVehiculos2 lista){//Introducimos 5000 vehículos en la lista
        Random rnd=new Random();
        String [] tipoVehiculo={"Coche","Camion","Furgoneta","Moto"};       
        for(int i=0;i<5000;i++){
            lista.getLista().add(new Vehiculo(i,tipoVehiculo[rnd.nextInt(4)]));//Atributo tipo establecido de forma aleatoria
        }
    }
    public static void recorrerListaMostrarCantidadVehiculos(ListadoVehiculos2 lista){//Recorremos lista y mostramos resumen de vehículos de cada tipo
        Vehiculo tmp;
        int coches=0;
        int camiones=0;
        int furgonetas=0;
        int motos=0;
        Iterator<Vehiculo> it=lista.iterator();//Recorremos la lista
        while(it.hasNext()){
            tmp=it.next();           
            switch(tmp.getTipo()){//Contamos los elementos de cada tipo
                case "Coche":
                coches++;
                break;
                case "Camion":
                camiones++;
                break;
                case "Furgoneta":
                furgonetas++;
                break;
                case "Moto":
                motos++;
                break;
            }
        }
        System.out.println("Resumen: hay "+coches+" coches, "+camiones+" camiones, "+
                furgonetas+" furgonetas y "+motos+" motos.");
    }
    public static void recorrerListaModificarCantidadVehiculos(ListadoVehiculos2 lista){
        Vehiculo tmp;
        String [] tipoVehiculo={"Coche","Camion","Furgoneta","Moto"};
        int coches=0;
        int camiones=0;
        int furgonetas=0;
        int motos=0;
        int vehiculosEliminados=0;
        long antes;
        long resultado;
        antes=System.nanoTime();
        Iterator<Vehiculo> it=lista.iterator();//Recorremos la lista
        while(it.hasNext()){
            tmp=it.next();
            if(!tmp.getTipo().equals("Coche")){
                it.remove();
                vehiculosEliminados++;
            }
        }
        coches=5000-vehiculosEliminados;
        System.out.println("Se han eliminado de la lista "+vehiculosEliminados+" vehiculos quedando "+coches+" coches");
        for(int i=0;i<vehiculosEliminados;i++){
            lista.getLista().add(new Vehiculo(coches+i+1,tipoVehiculo[0]));
            coches++;
        }
        resultado=System.nanoTime()-antes;
        System.out.println("Se han invertido "+resultado+" nanosegundos en eliminar y añadir vehiculos");
        System.out.println("Resumen: hay "+coches+" coches, "+camiones+" camiones, "+
                furgonetas+" furgonetas y "+motos+" motos.");
    }
    public static void main(String[]args){
        ListadoVehiculos2 lista=new ListadoVehiculos2();
        introVehiculos(lista);
        recorrerListaMostrarCantidadVehiculos(lista);
        recorrerListaModificarCantidadVehiculos(lista);     
    }         
}

7
Hola a todos. Os paso mi código del ejercicio CU00920C del tutorial pdf de programación Java. Gracias. Un saludo.

Clase TipoDeCuadrupedo

Código: [Seleccionar]
public enum TipoDeCuadrupedo {
    LEON,PERRO,GATO,ELEFANTE
}


Clase Cuadrupedo

Código: [Seleccionar]
public class Cuadrupedo {
    private int idCuadrupedo;
    private String tipo; //León, Perro, Gato, Elefante
   
    public Cuadrupedo(){
        idCuadrupedo=0;
        tipo="";
    }
   
    public Cuadrupedo(int idCuadrupedo,String tipo){
        this.idCuadrupedo=idCuadrupedo;
        this.tipo=tipo;
    }
   
    public int getIdCuadrupedo(){
        return idCuadrupedo;
    }
   
    public String getTipoCuadrupedo(){
        return tipo;
    }
   
    @Override
    public String toString(){
        return "Cuadrupedo->ID: "+idCuadrupedo+" Tipo: "+tipo;
    }
   
    public void setTipusCuadrupedo(int tipus){
        switch(tipus){
            case 0:this.tipo=TipoDeCuadrupedo.LEON.toString();break;
            case 1:this.tipo=TipoDeCuadrupedo.PERRO.toString();break;
            case 2:this.tipo=TipoDeCuadrupedo.GATO.toString();break;
            case 3:this.tipo=TipoDeCuadrupedo.ELEFANTE.toString();break;
        }
    }
}


Clase ListaDeCuadrupedos

Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author
 */
public class ListaDeCuadrupedos {
    private List<Cuadrupedo> listaCuadrupedos;
   
    public ListaDeCuadrupedos(){
        listaCuadrupedos=new ArrayList<Cuadrupedo>();
    }
   
    public List<Cuadrupedo> getLista(){return listaCuadrupedos;}
    public void addCuadrupedo(Cuadrupedo cuadrupedo){
        listaCuadrupedos.add(cuadrupedo);
    }
    public Iterator<Cuadrupedo> iterator() {
        return new MiIteradorListaCuadrupedos();
    }
   
    protected class MiIteradorListaCuadrupedos implements Iterator<Cuadrupedo>{ // Clase interna
        public int posicion = 0;
        public boolean sepuedeeliminar = false;
       
        @Override
        public boolean hasNext() {
            return posicion < listaCuadrupedos.size();
        }
       
        @Override
        public Cuadrupedo next() {
            Cuadrupedo res = listaCuadrupedos.get(posicion); // Creamos un objeto Cuadrupedo igual al que recorremos
            posicion ++;
            sepuedeeliminar = true;
            return res;
        }
       
        @Override
        public void remove() {
            if (sepuedeeliminar) {
                listaCuadrupedos.remove(posicion-1);
                posicion--;
                sepuedeeliminar = false; }
        }
    } // Cierre de la clase interna
}


Clase con el main

Código: [Seleccionar]
import java.util.Iterator;
import java.util.Random;

/**
 *
 * @author
 */
public class Principal {
    public static void main(String[]args){
        Cuadrupedo a=new Cuadrupedo();
        ListaDeCuadrupedos lista=new ListaDeCuadrupedos();
        Random rnd=new Random();
        int leones=0;
        int perros=0;
        int gatos=0;
        int elefantes=0;
        for(int i=0;i<10000;i++){
            a.setTipusCuadrupedo(rnd.nextInt(4));
            lista.addCuadrupedo(new Cuadrupedo(i,a.getTipoCuadrupedo()));
            if(a.getTipoCuadrupedo()=="LEON"){
                leones++;
            }else if(a.getTipoCuadrupedo()=="PERRO"){
                perros++;
            }else if(a.getTipoCuadrupedo()=="GATO"){
                gatos++;
            }else{
                elefantes++;
            }
        }
        Iterator<Cuadrupedo> it=lista.iterator();
        while(it.hasNext()){
            Cuadrupedo tmp=it.next();
            if (tmp.getIdCuadrupedo()%1000==0){ //multiplos de 1000
                System.out.println(tmp);
            }
        }
        System.out.println("Resumen: hay "+leones+" leones, "+perros+" perros, "+
                gatos+" gatos y "+elefantes+" elefantes");
    }
}

8
Hola. Aquí dejo mis códigos para el ejercicio CU00842B del tutorial de programación web con PHP usando Notepad++ como editor.

Gracias a todos. Un saludo

Ejercicio 1
Código: [Seleccionar]
<html>
    <head>
    <meta charset="utf-8">
</head>
    <body>
        <?php
            
function mostrarDatos ($resultados) {
                if (
$resultados !=NULL) {
                    echo 
"- Nombre: ".$resultados['nombre']."<br/> ";
                    echo 
"**********************************<br/>";
}else {
    echo "<br/>No hay más datos!!! <br/>";
}
            }

            
$link mysqli_connect("sql213.byethost7.com""b7_2047****",  **********);
if($link==0){
echo "No se ha podido conectar a la base de datos";
}else {
mysqli_select_db($link"b7_2047****_cdaduno");
                
$tildes $link->query("SET NAMES 'utf8'"); //Para que se muestren las tildes correctamente
                
$result mysqli_query($link"SELECT * FROM agenda"); 

$i=0;
                while (
$fila mysqli_fetch_array($result)){//Mientras haya filas, $fila agrupa los datos de la fila y mientras $fila no eté vacio bucle while
                    
mostrarDatos($fila);
if(substr($fila['nombre'],0,1)=="M"){
    $i++;
}
}
echo "En la base de datos los nombres que empiezan por M son: ".$i;
                
mysqli_free_result($result);
                
mysqli_close($link);    
}

        
?>

</body>
</html>

Ejercicio 2
Código: [Seleccionar]
<html>
    <head>
    <meta charset="utf-8">
</head>
    <body>
        <?php
            
function mostrarDatos ($resultados) {
                if (
$resultados !=NULL) {
                    echo 
"- id: ".$resultados['id']."<br/> ";
                    echo 
"- Ciudad: ".$resultados['ciudad']."<br/>";
                    echo 
"- Pais: ".$resultados['pais']."<br/>";
                    echo 
"- Habitantes: ".$resultados['habitantes']."<br/>";
                    echo 
"- Superficie: ".$resultados['superficie']."<br/>";
echo "- Metro: ".$resultados['tieneMetro']."<br/>";
                    echo 
"**********************************<br/>";
}else {
    echo "<br/>No hay más datos!!! <br/>";
}
            }

            
$link mysqli_connect("sql213.byethost7.com""b7_2047****", **********);
if($link==0){
echo "No se ha podido conectar a la base de datos";
}else {
mysqli_select_db($link"b7_2047****_cdaduno");
                
$tildes $link->query("SET NAMES 'utf8'"); //Para que se muestren las tildes correctamente
                
$result mysqli_query($link"SELECT * FROM ciudades"); 
                
$habitantes=0;
$metro=0;
$ciudades=0;
$ciudades=mysqli_num_rows($result); //Número de ciudades
    while ($fila mysqli_fetch_array($result)){ //Mientras haya filas, $fila agrupa los datos de la fila y mientras $fila no eté vacio bucle while
                    
mostrarDatos($fila);
$habitantes+=$fila['habitantes'];
$metro+=$fila['tieneMetro'];
                }

                
mysqli_free_result($result);
                
mysqli_close($link); 
                echo 
"El total de habitantes de las ".$ciudades." ciudades es de ".$habitantes."<br/>";
                echo 
"De las ".$ciudades." ciudades, ".$metro." tienen metro";
}

        
?>

</body>
</html>

9
Hola a todos. Os paso mi código para el ejercicio CU00841B del tutorial básico de desarrollo web con PHP.

Gracias a todos. Un saludo

Código: [Seleccionar]
<html><head><meta charset="utf-8"></head>

    <body>
        <?php
            $link 
mysqli_connect("sql213.byethost7.com""b7_2047****", **********);//Conexión con el servidor que devuelve un identificador
            
mysqli_select_db($link"b7_2047****_cdaduno");//Le indicamos al servidor que queremos conectarnos con la bbdd
            
$tildes $link->query("SET NAMES 'utf8'"); //Para que se muestren las tildes
            
$result mysqli_query($link"SELECT * FROM ciudades");

$array_filas = array('México DF','Barcelona','Buenos Aires','Medellín','Lima','Caracas','Santiago','Antigua','Quito','La Habana');
for($i=0;$i<count($array_filas);$i++){
mysqli_data_seek ($result$i); //Nos posicionamos en cada fila
$extraidomysqli_fetch_array($result);//Introducimos en el array los datos de cada fila
echo "País: ".$extraido['pais']." --- Ciudad: ".$extraido['ciudad'].'<br/>';
}

            
mysqli_free_result($result);//libera la conexión establecida con la base de datos
            
mysqli_close($link);//cierre de la conexión con la bbdd
        
?>

    </body>
</html>

10
Hola a todos, estoy respondiendo al ejercicio CU00836B del curso básico de programación web con PHP. Estoy teniendo problemas en cuanto a que no puedo crear los documentos extensión .txt con .php.

Sobre el ejercicio os paso el código referente solo al apartado a)

Código: [Seleccionar]
<?php
    
function escribirTresNumeros($num1,$num2,$num3){
    $fp=fopen("codigo836E.txt","w");
fputs($fp,$num1."\n".$num2."\n".$num3);
fclose($fp);
}
escribirTresNumeros(719);
?>


Cuando haya resuelo el problema pasaré el código completo.
Sobre este código, no me crea el documento .txt
Pero además sobre el tema CU00837B he puesto el primer ejemplo creando el documen to .txt y codigo .php , y el programa me responde que "el navegador no responde", "detener script".
Estos son los códigos ejemplo 1:
codigo837A.txt
Código: [Seleccionar]
Prueba de escritura aprenderaprogramar.com
esto es una línea de texto
esto es una línea de texto
esto es una línea de texto
esto es una línea de texto
esto es una línea de texto
fin de la prueba de aprendraprogramar.com
y codigo837A.php (Son denominaciones para mi organización y estructura de códigos)
Código: [Seleccionar]
<?php //Ejemplo aprenderaprogramar.com
$file fopen("codigo837A.txt""r");
while(!
feof($file)) {
echo 
fgets($file). "<br />";
}
fclose($file);
?>


Estos dos están en el mismo archivo. A ver si alguien me puede ayudar un poco informándome.

Gracias. Un saludo.

11
Hola a todos. Os dejo mi código para el ejercicio CU00833B del curso básico de programación web con PHP. Gracias a todos. Un saludo

Código HTML

Código: [Seleccionar]
<!DOCTYPE html>
<html>
    <head>
        <title>Ejercicio tema CU00833B  aprenderaprogramar.com</title>
        <meta charset="utf-8">
       
    </head>
    <body>
    <form name="formularioDatos" method="get" action="codigo833E.php">
            <p>CÁLCULO TIEMPO LLENADO DEPÓSITO CILINDRICO </p>
            <br/>
            Introduzca el caudal disponible en litros/minuto: <input type="text" name="caudal" value=""/>
            <br/> <br/>
            Introduzca el diámetro del depósito en metros: <input type="text" name="diametro" value=""/>
            <br/> <br/>
            Introduzca la altura del depósito en metros: <input type="text" name="altura" value=""/>
<br/> <br/>
            <input value="Calcular" type="submit" />
         </form>     
    </body>
</html>


Código PHP

Código: [Seleccionar]
<?php 
    $caudal
=$_GET['caudal'];
    
$diametro=$_GET['diametro'];
$altura=$_GET['altura'];
$pi=3.141593;
$radio=$diametro/2;
    
$vDepm3=$pi*$radio*$radio*$altura;
$vDepl=$vDepm3*1000;
$tLlenadoDep=$vDepl/$caudal;

    echo 
"<br/> &nbsp; El volumen del depósito es de ".$vDepm3." metros cúbicos";
echo "<br/> &nbsp; Son: ".$vDepl." litros";
echo "<br/> &nbsp; El tiempo que transcurrirá hasta el llenado del depósito es de ".$tLlenadoDep." minutos";

?>


12
Hola a todos. Os dejo mi código para el ejercicio CU00829B del curso básico de desarrollo web con PHP.

Gracias a todos. Un saludo.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
    <head>
        <title>Ejercicio tema CU00829B aprenderaprogramar.com</title>
        <meta charset="utf-8">
       
    </head>
    <body>
   
    <?php
    echo '<h4>Ejercicio a)<h4/>';
    $cadena1='aprender';
$cadena2='aprende';
echo 'La cadena 1 es '.$cadena1.'<br/>';
echo 'La cadena 2 es '.$cadena2.'<br/>';
echo '<p>'.str_pad($cadena1, (strlen($cadena1)+10) , "*"STR_PAD_BOTH).'</p>';
    echo '<p>'.str_pad($cadena2, (strlen($cadena2)+10) , "*"STR_PAD_BOTH).'</p>';
echo '<hr>';
echo '<h4>Ejercicio b)<h4/>';
echo 'Comparación de los tres primeros caracteres de las dos cadenas<br/>';
if (strncmp($cadena1$cadena2,3) == 0) {
        echo 'Según strncmp las dos cadenas son iguales';
        }else {
        echo 'Según strncmp las dos cadenas NO son iguales'
        }
echo '<hr>';
echo '<h4>Ejercicio c)<h4/>';
$cadena3='ApRendEr A proGraMar.cOm';
echo 'La cadena 3 es '.$cadena3.'<br/>';
$cad3min=strtolower($cadena3);//A minúsculas
$cad3size=strlen($cad3min);//Tamaño de la cadena
if($cad3size%2==0){
echo str_pad($cad3min,$cad3size+$cad3size/2,'*',STR_PAD_BOTH).'<br/>';
}else{
echo str_pad($cad3min,$cad3size+($cad3size+1)/2,'*',STR_PAD_BOTH).'<br/>'
}
echo '<hr>';
?>

   
   
       
    </body>
</html>

13
Hola a todos. Paso mi código del ejercicio CU00828B del curso básico de desarrollo web con PHP.

Gracias a todos. Un saludo

Código: [Seleccionar]
<!DOCTYPE html>
<html>
    <head>
        <title>Ejercicio  aprenderaprogramar.com</title>
        <meta charset="utf-8">
       
    </head>
    <body>
    <?php
    $texto="El abecedario completo es algo largo y detallarlo exhaustivamente es costoso";
$texto=strtolower($texto);
$cadvocales=array('a','e','i','o','u');
for($i=0;$i<count($cadvocales);$i++){
echo 'La letra '.$cadvocales[$i].' aparece '.substr_count($texto$cadvocales[$i]).(substr_count($texto$cadvocales[$i])==1?' vez':' veces').'<br/>';
}
echo "<br>";
$cadconsonantes=array('b','c','d','f','g','h','j','k','l','m','n','ñ','p','q','r','s','t','v','x','y','z');
for($j=0;$j<count($cadconsonantes);$j++){
if(substr_count($texto$cadconsonantes[$j])!=0){
echo 'La letra '.$cadconsonantes[$j].' aparece '.substr_count($texto$cadconsonantes[$j]);
if(substr_count($texto$cadconsonantes[$j])==1){
echo ' vez<br/>';
}else{
echo ' veces<br/>';
}
}else{}
}
echo "<br>";
echo str_replace('a','*',$texto);
echo "<br/><br/>";
$cadparcial=substr($texto,23);//Opción 1
echo $cadparcial."<br/>";
$cadparcial2=strpos($texto,'completo');//Opción 2
$cadparcial2=substr($texto,$cadparcial2+9);
echo $cadparcial2;
?>

   
       
    </body>
</html>

14
Hola a todos. Os paso mí código del ejercicio CU00825B del curso básico de programación web en PHP.

Con respecto a la segunda parte, comentar que para las variables $a y $b he tenido que quitar los acentos cuando creí que podían llevarlos, ya que no me funcionaba. Esto me ha costado un poco. Y como error creo que se me ha quedado la (,) final en ruso que solucionaremos a medida que vayamos aprendiendo.

Con respecto a las variables $a y $b de la última fila yo creía que era más lógico utilizar las variables contadoras $i y $j, las cuales me llevarían a los corchetes que sería lo más lógico y así utilizar las variables $a y $b como variables string pudiendo utilizar los acentos, porque simplemente eran variables a utilizar en texto y que no dependían del array. Espero haberme explicado.

Gracias. Un saludo.

Código: [Seleccionar]
<!DOCTYPE html>
<html>
    <head>
        <title>Ejercicio tema CU00824B aprenderaprogramar.com</title>
        <meta charset="utf-8">
        <style type="text/css">
           
        </style>
        <script type="text/javascript">   
           
        </script>
    </head>
    <body>
    <?php
    $nalumnos[0]['ingles']=1;
$nalumnos[0]['frances']=14;
$nalumnos[0]['aleman']=8;
$nalumnos[0]['ruso']=3;
$nalumnos[1]['ingles']=6;
$nalumnos[1]['frances']=19;
$nalumnos[1]['aleman']=7;
$nalumnos[1]['ruso']=2;
$nalumnos[2]['ingles']=3;
$nalumnos[2]['frances']=13;
$nalumnos[2]['aleman']=4;
$nalumnos[2]['ruso']=1;
$nivel=array('basico','medio','avanzado');
for($i=0;$i<3;$i++){
echo "En el nivel ".$nivel[$i].' hay:<br/>';
echo $nalumnos[$i]['ingles'].($nalumnos[$i]['ingles']==1?' alumno':' alumnos').' en inglés,<br/>';
echo $nalumnos[$i]['frances'].($nalumnos[$i]['frances']==1?' alumno':' alumnos').' en francés,<br/>';
echo $nalumnos[$i]['aleman'].($nalumnos[$i]['aleman']==1?' alumno':' alumnos').' en alemán y<br/>';
echo $nalumnos[$i]['ruso'].($nalumnos[$i]['ruso']==1?' alumno':' alumnos').' en ruso.<br/>';
}
echo "<br/>";
        
?>

        <?php
    $nalumnos['basico']['ingles']=1;
$nalumnos['basico']['frances']=14;
$nalumnos['basico']['aleman']=8;
$nalumnos['basico']['ruso']=3;
$nalumnos['medio']['ingles']=6;
$nalumnos['medio']['frances']=19;
$nalumnos['medio']['aleman']=7;
$nalumnos['medio']['ruso']=2;
$nalumnos['avanzado']['ingles']=3;
$nalumnos['avanzado']['frances']=13;
$nalumnos['avanzado']['aleman']=4;
$nalumnos['avanzado']['ruso']=1;
for($i=0;$i<3;$i++){
if($i==0){$b='basico';
}else if($i==1){$b='medio';
}else{$b='avanzado';
}
echo "En el nivel ".$b.' hay:<br/>';
for($j=0;$j<4;$j++){
if($j==0){$a='ingles';
}else if($j==1){$a='frances';
}else if($j==2){$a='aleman';
}else {$a='ruso';
}
echo $nalumnos[$b][$a].($nalumnos[$b][$a]==1?' alumno':' alumnos').' en '.$a.',<br/>';
}
}
        
?>

     </body>
</html>

15
Hola a todos. Paso mis códigos correspondientes al ejercicio CU00817B del curso básico de programación web con PHP como si estuviera en primero. Gracias.
Un saludo

Ejercicio 1.

a) Hace frio

b) Código: http://lastrala.byethost7.com/codigo817E1.php

Código: [Seleccionar]
<?php
$haceFrio 
15;
$respuesta ="";
if(
$haceFrio<20){
    
$respuesta "Hace frio";
}else{
    
$respuesta "No hace frio";
}
echo 
$respuesta;
?>



Ejercicio 2

Código: [Seleccionar]
<?php
    $tipo
="Rueda de camión";
$grosor=0.33;
$diametro=1.45;
$marca="Kimashuki";
$msg="";
if($diametro>1.4){
$msg="La rueda es para un vehículo grande";
}else if($diametro<=1.4){
$msg="La rueda es para un vehículo pequeño";
}else{
$msg="No existe un tamaño de reuda válido";
}
echo "$msg";

?>


Código: http://lastrala.byethost7.com/codigo817E2.php

16
Hola a todos. Respondo al ejercicio CU00810B del curso de programación web con PHP desde cero y Filezilla como gestor FTP.

He visto respuestas variadas enel foro. Para la respuesta b) he copiado todo, pero creo que solo se pedia la versión de FileZilla y mi sistema operativo. Espero que mi respuesta sea correcta. Gracias a todos.

Un saludo.

a) ¿En qué ruta se encuentra el archivo ejecutable de FileZilla en tu computador? La respuesta depende del computador y sistema operativo que estés empleando. Un ejemplo de respuesta puede ser este: C:\Program Files\FileZilla FTP Client\filezilla.exe
C:\Program Files\FileZilla FTP Client\filezilla.exe

b) Consulta la opción de menú Ayuda (Help) y responde a las siguientes preguntas. ¿Cuál es la versión de Filezilla que has instalado? ¿Cuáles son los datos de tu sistema operativo? Puedes usar la opción <<Copy to clipboard>> para recuperar estos datos desde la ventana de la ayuda de Filezilla.

FileZilla Client
----------------

Version:          3.27.0.1

Build information:
  Compiled for:   x86_64-w64-mingw32
  Compiled on:    x86_64-pc-linux-gnu
  Build date:     2017-07-19
  Compiled with:  x86_64-w64-mingw32-gcc (GCC) 6.3.0 20170516
  Compiler flags: -g -O2 -Wall

Linked against:
  wxWidgets:      3.0.4
  SQLite:         3.19.3
  GnuTLS:         3.5.13

Operating system:
  Name:           Windows 10 (build 14393), 64-bit edition
  Version:        10.0
  Platform:       64-bit system
  CPU features:   sse sse2 sse3 ssse3 sse4.1 sse4.2 avx aes pclmulqdq
  Settings dir:   C:\Users\José\AppData\Roaming\FileZilla\


17
Hola. Os paso mi ejercicio CU01182E del taller práctico de programación web con JavaScript. Gracias a todos.

Un saludo.

Código: [Seleccionar]
<!DOCTYPE html>

<html>
    <head>
    <title>Ejemplo aprenderaprogramar.com</title>
<meta charset="utf-8">
        <style type="text/css">
    body {background-color:yellow; font-family: sans-serif;}
            label{color: maroon; display:block; padding:5px;}
.error{display:none; border:solid 1px; background-color:orange; margin-left:10px;}
        </style>
<script type="text/javascript">
    window.onload = function () {
                document.formularioContacto.nombre.focus();
                document.formularioContacto.addEventListener('submit', validarFormulario);
            }
function validarFormulario(evObject) {
    evObject.preventDefault();
var formulario = document.formularioContacto;
                var a=false;
var b=false;
var c=false;
a=comprobarNombre(formulario.nombre);
b=comprobarApellidos(formulario.apellidos);
c=comprobarEmail(formulario.email);
if(a && b && c){
   formulario.submit();
}
}
function mensajeError(nodo,numero,n){
    nodo.nextSibling.style.display = 'inline';
    var mensaje=['El campo '+nodo.name+' no puede estar vacio','El campo '+nodo.name+' demasiado largo. Máximo '+n+' caracteres','Falta la @'];
    nodo.nextSibling.textContent = mensaje[numero];
}
function ocultarMsg(nodo){
nodo.nextSibling.style.display = 'none';
}
function comprobarNombre(nombre){
    var num=15;
    if(nombre.value == null || nombre.value.length == 0 || /^\s*$/.test(nombre.value)){
    mensajeError(nombre,0);
return false;
}else if(nombre.value.length > 15){
    mensajeError(nombre,1,15);
return false;
}else{
    ocultarMsg(nombre);
    return true;
}
}
function comprobarApellidos(apellidos){
    if(apellidos.value == null || apellidos.value.length == 0 || /^\s*$/.test(apellidos.value)){
    mensajeError(apellidos,0);
return false;
}else if(apellidos.value.length > 30){
    mensajeError(apellidos,1,30);
return false;
}else{
    ocultarMsg(apellidos);
    return true;
}
}
function comprobarEmail(email){
    if(email.value == null || email.value.length == 0 || /^\s*$/.test(email.value)){
    mensajeError(email,0);
return false;
}else if(email.value.length > 35){
    mensajeError(email,1,35);
return false;
}else if(!/[@]/.test(email.value)){
    mensajeError(email,2);
    return false;
}else{
    ocultarMsg(email);
    return true;
}
}
</script>
    </head>
    <body>
        <div id="cabecera">
    <h1>Portal web aprenderaprogramar.com</h1>
<h2>Didáctica y divulgación de la programación</h2>
        </div>
        <!-- Formulario de contacto -->
        <form name ="formularioContacto" class="formularioTipo1" method="get" action="http://aprenderaprogramar.com">
            <p>Si quieres contactar con nosotros envíanos este formulario relleno:</p>
            <label for="nombre"><span>Nombre:</span> <input id="nombre" type="text" name="nombre" /><span class="error"></span></label>
            <label for="apellidos"><span>Apellidos:</span> <input id="apellidos" type="text" name="apellidos" /><span class="error"></span></label>
            <label for="email"><span>Correo electrónico:</span> <input id="email" type="text" name="email" /><span class="error"></span></label>
            <label>
    <input type="submit" value="Enviar">
<input type="reset" value="Cancelar">
</label>
        </form>
    </body>
</html>

18
Hola a todos. Aquí dejo mis códigos correspondientes al ejercicio CU01170E del curso práctico de desarrollo web con JavaScript de esta web. Gracias. Un saludo.

Apartado a)

Código: [Seleccionar]
<!DOCTYPE html>
<html>
    <head>
        <title>Ejercicio  aprenderaprogramar.com</title>
        <meta charset="utf-8">
        <style type="text/css">
           
        </style>
        <script type="text/javascript">   
            function navegador(){
                var objetoNav=window.navigator.userAgent;
var pattern1=/Chrome/;
var pattern2=/Safari/;
var pattern3=/Opera/;
var pattern4=/Firefox/;
var pattern5=/MSIE/;
var msg='Estás usando: ';
                if(pattern1.test(objetoNav)){
    msg=msg+' Google Chrome';
}else if(pattern2.test(objetoNav)){
    msg=msg+' Apple Safari';
}else if(pattern3.test(objetoNav)){
    msg=msg+' Opera';
}else if(pattern4.test(objetoNav)){
   msg=msg+' Mozilla Firefox';
}else if(pattern5.test(objetoNav)){
    msg=msg+' Microsoft Explorer';
}else{
    msg=msg+' un navegador diferente';
}
                alert(msg);
            }
            window.onload = function(){
    navegador();
            }


        </script>
    </head>
    <body>
    <h1>DETECTAR NAVEGADOR CON JAVASCRIPT</h1>
    <div id="navegador" ></div>
       
    </body>
</html>


Apartado b)

Código: [Seleccionar]
<!DOCTYPE html>
<html>
    <head>
        <title>Ejercicio  aprenderaprogramar.com</title>
        <meta charset="utf-8">
        <style type="text/css">
           
        </style>
        <script type="text/javascript"> 
            function navegador(){
                var objetoNav=window.navigator.userAgent;
var navegador;
if(objetoNav.indexOf('Chrome')!=-1){
    navegador='Google Chrome';
} else if(objetoNav.indexOf('Safari')!=-1){
    navegador='Apple Safari';
} else if(objetoNav.indexOf('Opera')!=-1){
    navegador='Opera';
} else if(objetoNav.indexOf('Firefox')!=-1){
    navegador='Mozilla Firefox';
} else if(objetoNav.indexOf('Explorer')!=-1){
    navegador='Microsoft Explorer';
} else if(objetoNav.indexOf('Edge')!=-1){
    navegador='Microsoft Edge';
} else{
    navegador='Desconocido';
                }
var browser = document.getElementById("navegador");
browser.innerHTML='Estás usando ' +navegador;
            }
            window.onload = function(){
    navegador();
            } 
        </script>
    </head>
    <body>
    <h1>DETECTAR NAVEGADOR CON JAVASCRIPT</h1>
    <div id="navegador" ></div>
       
    </body>
</html>


19
Hola a todos. Dejo mi respuesta y mi código para el ejercicio CU01168E del curso práctico de desarrollo web con JavaScript. Gracias. Un saludo.

Respuesta a):

Como hay dos funciones y una es interna a la otra, los ámbitos pueden  ser diferentes. El primer this se refiere al objeto cabecera mientras que el segundo this se refiere al objeto window, o sea el segundo this puede hacer referencia a otro ámbito, como así ocurre.


Respuesta b) código:

Código: [Seleccionar]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
    <title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
        <script type="text/javascript">
            function ejemplo() {
                var cabecera = document.querySelector('#cabecera');
                var respuestaCabecera = function () {
    var that=this;
                    alert(this);
                    setTimeout(function () { alert(that);}, 2000);
                };
                cabecera.addEventListener('click', respuestaCabecera, false);
            }
        </script>
    </head>
    <body onload="ejemplo()">
    <div id="cabecera">
    <h2>Cursos aprenderaprogramar.com HAZ CLICK AQUÍ</h2>
<h3>Ejemplos JavaScript</h3>
</div>
    </body>
</html>

20
Hola a todos. Dejo mis respuestas al ejercicio CU01167E del curso práctico de programación web con JavaScript desde cero. Gracias. Un saludo.

a.   
•   target_date
-   Tipo: Date.
-   Cometido: almacenar la fecha futura respecto de la cual el script va a mostrar los días, horas, minutos y segundos que faltan para alcanzar dicha fecha. Devolverá un entero, número de milisegundos transcurridos desde el 1 de enero de 1970.
-   Ámbito: Global

•   days, hours, minutes, seconds.
-   Tipo: Number, aunque inicialmente no declaradas.
-   Cometido: almacenar el número de los mismos.
-   Ámbito: global.

•   countdown
-   Tipo: Object
-   Cometido: nodo que almacena el contenido del span
-   Ámbito: local.

•   current_date
-   Tipo: Date.
-   Cometido: almacenar la fecha actual respecto de la cual el script va a mostrar los días, horas, minutos y segundos que faltan para alcanzar dicha fecha. Devolverá un entero, número de milisegundos transcurridos desde el 1 de enero de 1970.
-   Ámbito: local.

•   seconds_left
-   Tipo: Number, ya que las dos variables Date devolverán enteros.
-   Cometido: almacenar el resultado de la diferencia de las variables Date, y de la cual se extraerán los días, horas, minutos y segundos.
-   Ámbito: local.

b.    Si se declara current_date en ámbito local no funciona la cuenta atrás de los segundos. Ello se debe a que la función del método setInterval()  necesita saber segundo a segundo el tiempo actual.

c.   Sí . Quizás fuese mejor así ya que en la ejecución solo habría que buscar en la función local.

d.    getTime()

e.   Documento cargado directa e inicialmente por el evento onload en la función ejemplo(), con el método getTime() que extrae el tiempo en milisegundos de las dos fechas a tratar, y que como aspecto principal la función del método SetInterval() se encarga de ello.

Páginas: [1] 2 3 4

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".