¿Por que la cadena no devuelve la cantidad correcta de letras?

#include <stdio.h> #include <string.h>  int main(){ int longitud; char cad[20]; int i, j; int acum;  printf("Ingrese la cadena: "); scanf("%s", cad); longitud = strlen(cad);  for(i=0;i<longitud;i++){     if(cad[i]>='a' && cad[i]<='z'){         acum=acum+j;         j++;     }         }  printf("Hay %d letras\n",acum); return 0; } 

Hola quisiera saber a que se debe de que el programa no me pueda devolver la cantidad de letras correcta a la hora de ejecutarlo. Muchas gracias

¿Por qué me está dando un Null Pointer?

Veréis, estoy haciendo un programa simple para practicar herencias, interfaces, enumerados, listas, etc. Ya que estoy empezando de cero con Java y con la programación en general, entonces ando un poco perdido y no se que he hecho mal. Tengo la clase padre “Personajes” que tiene una hija que es “Heroes”, la clase padre tiene tres listas: una para los nombres, otra para los colores de los trajes y otra para los poderes, el problema viene cuando creo un objeto en la clase main, dandole valores a null a los tres atributos de lista para añadirle los elementos en las siguientes lineas, pues me marca todo bien, pero cuando ejecuto: PUM, Null Pointer, y no se porque… os dejo el código, aunque creo que lo he hecho como siempre:

Esta es la clase padre:

package modelos;  import java.util.ArrayList; import java.util.List;  import enums.ColorTraje; import enums.EnumVengadores; import enums.SuperPoder;  public class Personaje {  private List<EnumVengadores> nombreLst; private List<SuperPoder> superPoderLst; private Integer edad; private Boolean isMalvado; private Float estatura; private List<ColorTraje> colorTrajeLst;  public Personaje() {      superPoderLst = new ArrayList<SuperPoder>();     nombreLst = new ArrayList<EnumVengadores>();     colorTrajeLst = new ArrayList<ColorTraje>();  }  public Personaje(List<EnumVengadores> nombreLst, List<SuperPoder> superPoderLst, Integer edad, Boolean isMalvado,         Float estatura, List<ColorTraje> colorTrajeLst) {      this.edad = edad;     this.isMalvado = isMalvado;     this.estatura = estatura;      if (nombreLst != null) {          this.nombreLst = nombreLst;      }      else {          nombreLst = new ArrayList<EnumVengadores>();      }      if (superPoderLst != null) {          this.superPoderLst = superPoderLst;      }      else {          superPoderLst = new ArrayList<SuperPoder>();      }      if (colorTrajeLst != null) {          this.colorTrajeLst = colorTrajeLst;      }      else {          colorTrajeLst = new ArrayList<ColorTraje>();      }  }  public List<EnumVengadores> getNombreLst() {      return nombreLst;  }  public void setNombreLst(List<EnumVengadores> nombreLst) {      this.nombreLst = nombreLst;  }  public List<SuperPoder> getSuperPoderLst() {      return superPoderLst;  }  public void setSuperPoderLst(List<SuperPoder> superPoderLst) {      this.superPoderLst = superPoderLst;  }  public Integer getEdad() {      return edad;  }  public void setEdad(Integer edad) {      this.edad = edad;  }  public Boolean getIsMalvado() {      return isMalvado;  }  public void setIsMalvado(Boolean isMalvado) {      this.isMalvado = isMalvado;  }  public Float getEstatura() {      return estatura;  }  public void setEstatura(Float estatura) {      this.estatura = estatura;  }  public List<ColorTraje> getColorTrajeLst() {      return colorTrajeLst;  }  public void setColorTrajeLst(List<ColorTraje> colorTrajeLst) {      this.colorTrajeLst = colorTrajeLst;  } 

Esta es una clase hijo:

package modelos;  import java.util.List;  import enums.ColorTraje; import enums.EnumVengadores; import enums.SuperPoder;  public class Heroe extends Personaje { private Boolean isAvenger;  public Heroe() {      super();  }  public Heroe(List<EnumVengadores> nombreLst, List<SuperPoder> superPoderLst, Integer edad, Boolean isMalvado,         Float estatura, List<ColorTraje> colorTrajeLst, Boolean isAvenger) {      super(nombreLst, superPoderLst, edad, isMalvado, estatura, colorTrajeLst);     this.isAvenger = isAvenger;  }  public Boolean getIsAvenger() {      return isAvenger;  }  public void setIsAvenger(Boolean isAvenger) {      this.isAvenger = isAvenger;  } 

Y este es mi main:

package modelos;  import enums.ColorTraje; import enums.EnumVengadores; import enums.SuperPoder;  public class mainVengadores {  public static void main(String[] args) {     // TODO Auto-generated method stub      /*Personaje ironman = new Heroe();     ironman.setEdad(48);     ironman.getNombreLst().add(EnumVengadores.IRONMAN);     ironman.getColorTrajeLst().add(ColorTraje.AMARILLO);      System.out.println(ironman);*/       Personaje hulk=new Personaje(null, null, 45, true, 1.23f, null);      hulk.getNombreLst().add(EnumVengadores.HULK);     hulk.getColorTrajeLst().add(ColorTraje.VERDE);     hulk.getColorTrajeLst().add(ColorTraje.AZUL);     hulk.getColorTrajeLst().add(ColorTraje.AMARILLO);     hulk.getSuperPoderLst().add(SuperPoder.Super_Fuerza);      System.out.println(hulk);      } } 

Cuando ejecuto la clase main, me da como resultado un Null Pointer, ¿alguna ayuda? Mil gracias 🙂

¿Por qué httpbody de NSMutableURLRequest cambia caracteres de mi string en swift?

Actualmente trabajo en un poryecto de swift en el que el usuario puede subir fotografias a un servidor, para lograr esto codifico la imagen capturada a base 64 esto lo consigo con el sguiente código:

func convertImageToBasee64(image: UIImage){     let imageData = image.jpegData(compressionQuality: 1)     let base64String = imageData!.base64EncodedString()     return base64String } 

Posteriormente creo la variable que uso como parámetro

let imagenEnviar = convertImageToBasee64(image: imagenVistaPrevia.image!) let parametros = "imagen=" + imagenEnviar 

y por último ejecuto la clase de conexion a mi server.

let conexion:clsConexionIA = clsConexionIA.init(url: "miurl.php", params: parametros) conexion.request{(output) in   print(output) } 

esta es mi clase de conexión:

class clsConexionIA {    let URL: String    let PARAMS: String     init(url: String, params: String) {        self.URL = url        self.PARAMS = params.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!    }     func request(successHandler: @escaping (_ response: String) -> Void)->Void{        let request = NSMutableURLRequest(url: NSURL(string: self.URL)! as URL)        request.httpMethod = "POST"        request.httpBody = self.PARAMS.data(using: String.Encoding.utf8, allowLossyConversion: false)        let headers = ["Content-Type": "application/x-www-form-urlencoded"]        request.allHTTPHeaderFields = headers         let task = URLSession.shared.dataTask(with: request as URLRequest) { datos, respuesta, error in            if error != nil {                successHandler(String(describing: error));            } else {                let responseString = NSString(data: datos!, encoding: String.Encoding.utf8.rawValue)                print("RESPUESTA \(responseString)")                successHandler((responseString as String?)!);            }        }        task.resume()    } } 

Mi problema es que del lado de mi servidor php estoy recibiendo una cadena que no es un base64 válido, por lo que la imagen se guarda corrupta-dañada.

He utilzado Charles Proxy para inspeccionar los parametros que le paso a mi servidor, y en notado que el string que se envía al server es distinto al que obtengo al inspeccionar en tiempo de ejecución la linea self.PARAMS.data(using: String.Encoding.utf8, allowLossyConversion: false)

¿a qué se debe esto y como puedo corregirlo? Yo imagino que la parte .data(using: String.Encoding.utf8, allowLossyConversion: false) hace alguna modificación a mi string, pero no he encontrado la forma de corregir esta situación. También he intentado obtener el .data sin el parámetro allowLossyConversion pero no noto cambio alguno.

Algunos de los cambios que noto en el string es, por ejemplo, que me reemplaza los caracteres + por espacios en blanco, también la longitud de caracteres es distinta, por lo que forzar un replace de espacios del lado del servidor no me funciona.

Se que hasta este punto self.PARAMS = params.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)! mi string base64 es válido porque lo inspecciono en tiempo de ejecución, copio su valor y lo pego en algún decodificador online y la imagen se genera correctamente.

Espero y alguien pueda ayudarme, gracias de antemano comunidad!

¿Por qué este bucle no actualiza correctamente este array?

Intento hacer un bucle que añada al array fibSeq = [0,1] la suma de los dos numeros anteriores .

Es decir el resultado con 6 iteraciones debería ser este: fibSeq = [0,1,1,2,3,5,8,13]

Sin embargo el mio no actualiza:

function fib(num){ 	var fibSeq = [0,1]; 	var elultimo = fibSeq.length -1 	var elanterior = elultimo - 1 	var suma = elultimo + elanterior 	 	for (var i = 0; i < num; i++){ 		fibSeq.push(suma) 			} 	return fibSeq }  fib(6)

Y da como resultado fibSeq = [0,1,1,1,1,1,1]

He probado a incluir las declaraciones dentro del bucle

function fib(num){ 	var fibSeq = [0,1]; 	var elultimo = fibSeq.length -1 	var elanterior = elultimo - 1 	var suma = elultimo + elanterior 	 	for (var i = 0; i < num; i++){ 		elultimo = fibSeq.length -1 		elanterior = elultimo - 1 		suma = elultimo + elanterior 		fibSeq.push(suma) 			} 	return fibSeq }  fib(6)

Pero entonces me da unos numeros raros, no los que quiero (los que quiero son los fibonacci) : [0, 1, 1, 3, 5, 7, 9, 11]

Agradecería una explicación de porqué el bucle no se actualiza en vez de una solución de como obtener los numeros fibonacci ya que ando haciendo esto para aprender JS e intento evitar soluciones completas porque si no no aprendo. Gracias.

¿Por qué mi Tweepy Script responde a alguien que hace RT o Comentarios?

me podría ayudar alguien a resolver este problema, quiero que responda a la persona específica del tweet solamente, ahora mismo responde también a los rt o comentarios del mismo, y eso no quiero que lo haga, gracias de antemano.

El archivo .txt contiene una simple frase nada más.

import tweepy  class MyStreamListener(tweepy.StreamListener):      def on_status(self, status):         file = open("messages.txt", "r")         content = file.readlines()         line = content[0] # just a total guess of an index         print("answering @" + status.user.screen_name + " tweetID " + status.id_str + " with : " + line.rstrip())         api.update_status(status="@" + status.user.screen_name + " " + line, in_reply_to_status_id=status.id)         return False  consumer_key = '' consumer_secret = '' access_token = '' access_token_secret = ''  auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth) myStream = tweepy.Stream(auth, MyStreamListener()) myStream.filter(follow=['']) 

¿Por qué no se ejecuta jQuery?

Estoy tratando de validar un formulario y jQuery no valida. Estoy usando expresiones regulares y fue añadir un añadido si es válido o si no es válido. Por ejemplo, el usuario escribe y el cpf incorrecto se rellena. Este mensaje “Cpf no válido” o “Cpf válido” aparece. Si no es válido, no se permite continuar y, a continuación, desactiva los siguientes campos. Y si es válido, los campos están habilitados.

Frameworks / Bibliotecas: Jquery, jquery mask, jquery mask phone, Jquery Valide, Skeleton CSS.

Source-code

Javascript

function ValidaCPF() {     var RegraValida = document.getElementById("cpf").value;     var cpfValido = /^(([0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2})|([0-9]{11}))$  /;     if (cpfValido.test(RegraValida) == true) {         $  ('#cpf').after('<span style="color:green;">Válido</span>');      } else {         $  ('#cpf').after('<span style="color:red;">Inválido</span>');      } }  function fMasc(objeto, mascara) {     obj = objeto     masc = mascara     setTimeout("fMascEx()", 1) }  function fMascEx() {     obj.value = masc(obj.value) }  function mCPF(cpf) {     cpf = cpf.replace(/\D/g, "")     cpf = cpf.replace(/(\d{3})(\d)/, "$  1.$  2")     cpf = cpf.replace(/(\d{3})(\d)/, "$  1.$  2")     cpf = cpf.replace(/(\d{3})(\d{1,2})$  /, "$  1-$  2")     return cpf } 

En este caso, el campo continúa.

$  ('#cpf').after('<span style="color:green;">Válido</span>');         

En este caso, el campo no se puede continuar.

$  ('#cpf').after('<span style="color:red;">Inválido</span>');         

Erros

Link: https://pedroguilhermelima.github.io/check/

¿Por qué no funciona “.dispose()” en mi código? (JAVA)

Buenos días y saludos a todos.

Tengo un JFrame principal (main) que es un formulario de LOGIN. En este JFrame principal (main) tengo un botón de “Crear usuario” que lleva a otro JFrame (frameNuevoUsuario).

Necesito que al hacer click en el botón “Crear usuario” se habrá el JFrame nuevo (frameNuevoUsuario) y se cierre el anterior (main).

El problema de mi código es que me abre el nuevo JFrame, pero no me cierra el anterior. No me funciona ni .dispose() ni .setVisible(false).

En un principio he creado este método:

public void cerrarFrame() {     frameNuevoUsuario nuevousuario = new frameNuevoUsuario();     nuevousuario.setVisible(true);      main esteFrame = new main();     esteFrame.dispose(); 

Y lo he metido tal cual en el botón:

botonCrearUsuario = new JButton("Crear usuario");     botonCrearUsuario.addActionListener(new ActionListener() {         public void actionPerformed(ActionEvent arg0) {              cerrarFrame(); 

Pero nada macho, que no me funciona. Os dejo el código acortado del JFrame porque seguro será de utilidad para ver donde estoy metiendo la pata. Gracias de antemano.

package proyectoBiblioteca;  // "IMPORTS" QUE HE BORRADO PARA ACORTAR EL CÓDIGO  public class main extends JFrame {  /**  *   */ private static final long serialVersionUID = 1L; private JPanel contentPane; private JTextField textField; private JPasswordField passwordField; JButton botonCrearUsuario; String nombreUsuario; String contrasena;   //FRAME PRINCIPAL public static void main(String[] args) {     EventQueue.invokeLater(new Runnable() {         public void run() {             try {                 main frame = new main();                 frame.setVisible(true);             } catch (Exception e) {                 e.printStackTrace();             }          }     });  //CREAR TABLAS EN BASE DATOS             try {              Connection miConexion = DriverManager.getConnection("JDBC:sqlite:biblioteca.db");                            Statement miState = miConexion.createStatement();                            String sentenciaSQL = "CREATE TABLE usuarios(usuario VARCHAR UNIQUE, password VARCHAR)";                             miState.execute(sentenciaSQL);          } catch (SQLException e) {           }     }   // FRAME public main() {     setResizable(false);     setTitle("iLibrary");     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     setBounds(100, 100, 450, 379);     contentPane = new JPanel();     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));     setContentPane(contentPane);     contentPane.setLayout(null);      // BOTONES QUE HE BORRADO PARA ACORTAR EL CÓDIGO      botonCrearUsuario = new JButton("Crear usuario");     botonCrearUsuario.addActionListener(new ActionListener() {         public void actionPerformed(ActionEvent arg0) {              cerrarFrame();           }     });     botonCrearUsuario.setFont(new Font("Tahoma", Font.PLAIN, 14));     botonCrearUsuario.setBounds(96, 243, 258, 23);     contentPane.add(botonCrearUsuario);     setLocationRelativeTo(null);   }  public void cerrarFrame() {     frameNuevoUsuario nuevousuario = new frameNuevoUsuario();     nuevousuario.setVisible(true);      main esteFrame = new main();     esteFrame.dispose();          } 

}

¿por qué se me cambian los colores de un boton en mi pagina web en mac?

estoy diseñando mi sitio web, y ya esta casi terminado, pero me pasa que al subir mi sito al servidor y visualizarlo en un navegador chrome en mac, mis botones de boostrap se me cambian de color a azul, a un color grisaseo, pero en windows en el mismo navegador de chrome se ven del color que los puse, ya intente poner los colores en rgb, exadecimal y en ingles, por ejemplo red, blue, e igual pasa que no se me ponen los colores en mac. ¿alguien sabe porque me pasa esto?

<tr>                 <th scope="col">                 <form method="post" class="form-signin col-12">                     <input type="search" name="name1" class="form-control" placeholder="id" required>                     <div class="space-10"></div>                     <button id="VER_FAC" class="btn btn-sm vervacantes btn-block" style="    margin-top: 5%; background-color: blue; color: white;" type="submit" name="submit" value="Submit Form">Buscar archivos</button>                   </form>                   </th>                 <th scope="col">                   <form method="post" class="form-signin col-12">                     <input type="search" name="name" class="form-control" placeholder="Parte del nombre" required>                     <div class="space-10"></div>                     <button id="VER_FAC" class="btn btn-sm vervacantes btn-block" style="     margin-top: 5%;background-color: blue; color: white;" type="submit" name="submit" value="Submit Form">Buscar archivos</button>                   </form>                 </th>                 <th scope="col" style="display: table-cell; vertical-align: middle;">                   <a href="files_fecha.php" class="btn btn-primary" style="background-color: #3C3CFF; color: white;" type="submit" name="submit" value="Submit Form"> Ordenar por fecha</a>                 </th>                 <th scope="col"></th>                 <th scope="col"></th>                 <th scope="col" style="display: table-cell; vertical-align: middle;">                   <a href="files_estado.php" class="btn btn-primary" style="background-color: blue; color: white;" type="submit" name="submit" value="Submit Form"> Ordenar por estado</a>                 </th>                  </th>               </tr>

¿Por qué carga los datos previos al submit?

Tengo una aplicación construida con node, angular y mongo. Quiero traer ciertos datos al digitar un codigo pero al hacer el submit, la función se ejecuta correctamente y si obtengo los datos pero en la consola me muestra los datos previos al submit.

Este es mi component.ts

import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; import { Catalogo } from 'src/app/models/catalogo'; import { ClaseService } from 'src/app/services/clase.service'; import { Clase } from 'src/app/models/clase'; import { Transaccion } from 'src/app/models/transaccion'; import { Cuenta } from 'src/app/models/cuenta'; import { CuentaService } from 'src/app/services/cuenta.service';  export interface CuentaTable {   cuenta: string;   debe: number;   haber: number; }  @Component({   selector: 'app-crear-partida',   templateUrl: './crear-partida.component.html',   styleUrls: ['./crear-partida.component.css'],   providers: [ClaseService, CuentaService] })   export class CrearPartidaComponent implements OnInit {   //Titulos   public title: string;   public subtitle: string;   //Declarar modelos   public register_transaccion: Transaccion;   public clase: Clase;   public cuenta: Cuenta;    //Tabla   public CUENTAS_DATA: CuentaTable[];   //Filas a indexar   public newRow;   //Variables para debe y haber   public debe: number;   public haber: number;    constructor(     private _claseService: ClaseService,     private _cuentaService: CuentaService,   ) {      this.title = 'Nueva Partida'     this.subtitle = 'Partida'     this.register_transaccion = new Transaccion('', '', '', null, null, null);     this.CUENTAS_DATA = [];     this.newRow = new Array();   }    ngOnInit() {     console.log(this.CUENTAS_DATA)   }    getDebeHaber() {     if(this.register_transaccion.saldo == 0) {       if(this.register_transaccion.transaccion == 0) {         this.debe = this.register_transaccion.monto;         this.haber = 0;       } else {         this.debe = 0;         this.haber = this.register_transaccion.monto;       }     } else {       if(this.register_transaccion.transaccion == 1) {         this.debe = this.register_transaccion.monto;         this.haber = 0;       } else {         this.debe = 0;         this.haber = this.register_transaccion.monto;       }     }   }    addToTable() {     let codigo = this.register_transaccion.codigo     this.getClase(codigo.substring(0,1));     switch(this.register_transaccion.codigo.length) {       case 3:         this.getCuenta(codigo);       break;       case 5:       break;       case 7:       break;     }         this.getDebeHaber();     this.newRow = {       codigo: codigo,       cuenta: this.register_transaccion.cuenta,       debe: this.debe,       haber: this.haber     };     this.CUENTAS_DATA.push(this.newRow);     console.log(this.CUENTAS_DATA)     console.log(this.register_transaccion.saldo)   }    getClase(id: string) {     this._claseService.getClase(id).subscribe(       response => {                   if(!response.clase) {           //this._router.navigate(['/']);         } else {           this.clase = response.clase           this.register_transaccion.saldo = this.clase.saldo;         }       },       error => {         var errorMessage = <any>error          if(errorMessage != null) {           var body = JSON.parse(error._body);           console.log(error);         }       }     )   }   getCuenta(id: string){     this._cuentaService.getCuenta(id).subscribe(       response => {         if(!response.cuenta) {           //this._router.navigate(['/']);         } else {           this.cuenta = response.cuenta;           this.register_transaccion._id = this.cuenta._id;           this.register_transaccion.codigo = this.cuenta.codigo;           this.register_transaccion.cuenta = this.cuenta.cuenta;         }       },       error => {         var errorMessage = <any>error          if(errorMessage != null) {           var body = JSON.parse(error._body);           console.log(error);         }       }     )   } }  

Este es el .html

<h1>{¿Por qué carga los datos previos al submit?}</h1> <mat-card>     <form autocomplete="off" class="input-form" #inputForm="ngForm" (ngSubmit)="addToTable()">     <mat-form-field>       <input type="text" matInput placeholder="Código de Cuenta" #codigo="ngModel" name="codigo" [(ngModel)]="register_transaccion.codigo">           </mat-form-field>     <mat-form-field>       <input type="number" matInput placeholder="Monto $  "  min="0" step="0.01" #monto="ngModel" name="monto" [(ngModel)]="register_transaccion.monto" value="0">     </mat-form-field>     <mat-form-field>       <input type="number" matInput placeholder="Transacción" #transaccion="ngModel" name="transaccion" [(ngModel)]="register_transaccion.transaccion" min="0" max="1" value="0">       <mat-hint><i>0: Ingreso / 1: Egreso</i></mat-hint>     </mat-form-field>         <button mat-raised-button class="submit-button" type="submit" color="primary">Agregar</button>   </form>   </mat-card> 

Aquí muestro un ejemplo de lo que me sucede introducir la descripción de la imagen aquí

Como se ve en la imagen, en el primer submit, me muestra los datos inicializados y el codigo que estoy mandando. Cuando hago submit por segunda vez, me muestra los datos del submit anterior.

¿Qué puedo hacer para que cargue los datos de forma inmediata luego del submit?

Java: ¿Por qué no me imprime el valor solicitado en main cuando llamo un método de una clase B, cuyo método requiere información de una clase A?

Muy buenas, es que necesito ayuda con una problem que tengo:

Resulta ser que yo quiero desde la clase main llamar a un método que pertenezca a una clase B, dicho método mostrará información en pantalla, sin embargo, dicha información a mostrar está almacenada en una clase A. Por lo tanto, para que el método de la clase B pueda mostrar dicha información, este necesita acceder a la clase A que contiene esa información. Eso sí, primero se creo la información de la clase A.

Hasta aquí, yo entiendo que eso “debería” funciona, pero no es así: Cuando ejecuto el programa, en vez de mostrarme el valor solicitado, me tira un simple 0.

Aquí está el main:

    public static void main(String[] args) {      A objectoA = new A(); //Objecto de la clase A.     B objectoB = new B(); //Objecto de la clase B.      objectoA.agregarPersonas();             objectoB.mostrarInfo();      } //Fin del main. 

Aquí estaría la clase A:

//Aquí está mi declaración y longitudad de mi arreglo.      public int personas[] = new int[2];          public void agregarPersonas(){      //Aquí es donde se inicializa los dos valores al arreglo.      personas[0] = 24;     personas[1] = 26;  } //Fin del metodo.    

Y aquí está la clase B:

A objectoA = new A(); //Objecto de la clase A para acceder a los datos.  public void mostrarInfo(){      System.out.println(objectoA.personas[0]);  } //End of method. 

A lo que doy a entender, el main primero ejecuta el método A y crea la información, una vez eso, baja a la siguiente linea y ejecuta el método de la clase B, que llama a la información creada en la clase A para mostrar ese valor, pero solo me tira un 0.

Espero que me esté dando a explicar bien. Apreciaría mucho la ayuda.

¡Gracias!