Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - satu

#21
Java / Re: Ayuda con Eventos y libreria Swing
5 Febrero 2013, 17:26 PM
Buenas!!

También podrías controlar que solo acepte números.

He modificado algunas cosillas para acortar el código y que solo convierta números. No sé mucho de Java, pero es un buen ejemplo para practicar:

Clase Convertidor
Código (java) [Seleccionar]
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

public class Convertidor extends JFrame {
    //Declaracion de variables
    private static final long serialVersionUID = 1L;
    private JLabel etiqueta1;
    private JLabel etiqueta2;
    private JTextField campo1;
    private JTextField campo2;
    private JButton botonCalcular;
    private JRadioButton botonBinario;
    private JRadioButton botonHexadecimal;
    private ButtonGroup grupoBotones;
    private boolean esBinario;
    private boolean esHexadecimal;
    private int numeroDecimal;
   
    public Convertidor() {
        super("Convertidor");
        setLayout(new FlowLayout());
       
        //Se crean las etiquetas
        etiqueta1 = new JLabel("Numero a convertir");
        etiqueta2 = new JLabel("Numero convertido ");
       
        //Se crean los campos, el primero para ingresar y el otro para imprimir
        campo1 = new JTextField(10);
        campo2 = new JTextField(10);
        campo2.setEditable(false);
       
        //Se crean los botones de Radio y uno normal
        botonCalcular = new JButton("Calcular");
        botonBinario = new JRadioButton("Binario");
        botonHexadecimal = new JRadioButton("Hexadecimal");
       
        //Se crean booleanos necesarios para determinar el tipo de numero a convertir
        esBinario = false;
        esHexadecimal = false;
        numeroDecimal = 0;
       
        //Se crea el grupo de botones de radio y se agregan los botones radio a
        //dicho grupo
        grupoBotones = new ButtonGroup();
        grupoBotones.add(botonCalcular);
        grupoBotones.add(botonBinario);
        grupoBotones.add(botonHexadecimal);
       
       
        //Se agregan las etiquetas, campos y botones a la ventana
        add(etiqueta1);
        add(campo1);
       
        add(etiqueta2);
        add(campo2);
       
        add(botonBinario);
        add(botonHexadecimal);
        add(botonCalcular);
       
        //Se crea instancia AdministradorEventos para controlar los eventos
        AdministradorEventos administrador = new AdministradorEventos();
       
        //Se le agregan eventos a los botones a utilizar
        botonBinario.addItemListener(administrador);
        botonHexadecimal.addItemListener(administrador);
        botonCalcular.addActionListener(administrador);
    }
   
    private class AdministradorEventos implements ActionListener, ItemListener {
       
        /**
         * Metodo que permite calcular el numero numero decimal a binario, hexade
         * cimal o viceversa, segun lo que se haya seleccionado en los botones
         * de radio
         */
        public void actionPerformed(ActionEvent evento) {
        String resultado = "";
            if(campo1.getText().equals("")) {
                JOptionPane.showMessageDialog(null, "No ha ingresado ningun numero", "ERROR", 0);
            } else {
            try {
            numeroDecimal = Integer.parseInt(campo1.getText());
                } catch(Exception e) {
                JOptionPane.showMessageDialog(null, "Solo números, por favor", "ERROR", 0);
                numeroDecimal = 0;
                }
            if(esBinario) {
            while(numeroDecimal != 0) {
            resultado += numeroDecimal % 2; //Se concatena
            numeroDecimal /= 2;
            }
            char arregloChar[] = resultado.toCharArray();
            resultado = "";
            for(int i = 0; i < arregloChar.length; i++) {
            resultado += arregloChar[(arregloChar.length-1)-i];
            }
                    campo2.setText(resultado);
            } else if(esHexadecimal) {
                    int resto = 0;
                    while(numeroDecimal != 0) {
                        resto = numeroDecimal % 16;
                        switch(resto) {
                            case 10:
                            resultado += "A";
                                break;
                            case 11:
                            resultado += "B";
                                break;
                            case 12:
                            resultado += "C";
                                break;
                            case 13:
                            resultado += "D";
                                break;
                            case 14:
                            resultado += "E";
                                break;
                            case 15:
                            resultado += "F";
                                break;
                            default:
                            resultado += resto;
                                break;
                        }//Fin del Switch
                        numeroDecimal = numeroDecimal / 16;
                        System.out.println(numeroDecimal);
                    }//Fin del ciclo While
                    char arregloChar[] = resultado.toCharArray();
                    resultado = "";
                    for(int i = 0; i < arregloChar.length; i++) {
                    resultado += arregloChar[(arregloChar.length-1)-i];
                    }
                    campo2.setText(resultado);
            } else {
            JOptionPane.showMessageDialog(null,"Seleccione el tipo de numero a convertir","Error", 0);
            }
            }
        }
       
        /**
         * Metodo que permite seleccionar el tipo de numero a convertir
         */
        public void itemStateChanged(ItemEvent evento) {
            if(botonBinario.isSelected()) {
                esBinario = true;
                esHexadecimal = false;
            } else if(botonHexadecimal.isSelected()) {
                esBinario = false;
                esHexadecimal = true;
            }
        }
    }
}


Saludos
#22
Buenas!!

He echado un ojo por encima y he visto algunas cosas a corregir:
-La función ran debe devolver un entero (return num)
-El main se puede reducir muuuuuuuuuuuuuuuuuuuuuuuucho. Utiliza las funciones que has creado, no repitas tanto el código
-Cuando cifras y descifras abres y cierras los ficheros varias veces. Eso consume muchos recursos y es totalmente innecesario
Código (cpp) [Seleccionar]
is.seekg(0, ios::beg);
is.close();
double long size2=0;
cout << endl << endl<< "PUEDE TARDAR SEGUNDOS DEPENDIENDO DE LA LONGITUD DEL ARCHIVO" << endl << endl;
is.open (str);

...........

mens='\0';
is.close();
is.open (str);
int v=0;


No sé si habrá más cosas, he mirado solo por encima

Saludos
#23
Buenas!!

Los errores ocurren porque utilizas en la función introduceNombre las variables datoscomp, datosobt..... cuando esas variables las tienes definidas en el main, es decir, que solo las puedes usar en el main. Los parámetros que le pasas a la función son dc, dp, dr y dt, así que debes usar estos:


void introduceNombre (char dc[N],char dp[N],char dr[N],char dt[N]) {
    printf("Introduce nombre de archivo sin extension");
    gets(dc);
    strcpy(dp,dc);
    strcpy(dr,dc);
    strcpy(dt,dc);
    strcat(dc,".train");
    strcat(dp,".test");
    strcat(dr,".real");
    strcat(dt,".out");
}


Lee sobre el alcance de las variables.
Para que se modifique el valor de los parámetros debes pasarlos por referencia.
Main debe devolver un entero.

Saludos
#24
Buenas!!

Código (cpp) [Seleccionar]

#include<iostream>
#include<vector>

using namespace std;

int entero_negativo(vector<int> &v){
    unsigned i, s = 0;
    for(i = 0; i < v.size(); i++) {
        if(v[i] < 0) {
            s++;
        }
    }
    return s;
}

int main() {
    int i = 0, negativos, n;
    vector<int> v;
    do {
        cout << "Introduzca el elemento " << i << " del vector: ";
        cin >> n;
        v.push_back(n);
        i++;
    } while(n != 0);
    negativos = entero_negativo(v);
    cout << endl << "Hay " << negativos << " numeros negativos en el vector" << endl;
    cin.sync();
    cin.get();
    return 0;
}


Saludos
#25
Programación C/C++ / Re: ayuda en turbo c++
30 Noviembre 2012, 20:48 PM
Hola

Léete las normas del Foro, no se hacen tareas. Si pones lo que llevas hecho te podemos ayudar.

Saludos
#26
Hola

Si supieras qué es y cómo se usa sabrías qué significa y qué función tiene en el programa. Léete el enlace que así es como se aprende!!

Saludos
#27
Buenas!!!

Te he cambiado el código, a ver si es esto lo que necesitas:

#include <stdio.h>
#include <stdlib.h>

#define size 10

void suma(int *arreglo);

int main () {
    int arreglo[size], i;
    for(i = 0; i < size; i++) { //Aqui voy recorriendo el arreglo
        printf("Escriba el numero\n");
        scanf("%d", &arreglo[i]);  // voy guardando un dato en cada posicion del arreglo
    }
    suma(arreglo);  // mi funcion que trabaja con los datos de mi arreglo
    while(getchar() != '\n') ; // Limpia el buffer
    getchar(); // Pausa la ejecucion del programa hasta que pulses una tecla
    return 0;
}

void suma(int *xarreglo) { //Inicializacion de mi funcion
    int sum = 0, i, pnt[size];
    for(i = 0; i < size; i++) {
        pnt[i] = xarreglo[i];
        sum+=pnt[i];
    }
    printf("La suma es: %d\n", sum);
}



Saludos!!
#28
Hola!!

No hace falta ninguna función, puedes hacer un casting:


int main() {
    char c;
    int i;
    c = getchar();
    i = (int)c;

    printf("Valor numérico de %c es %i", c, i);
    return 0;


Saludos
#29
Hola!!

Puedes hacer algo como esto:

char opcion;
......
opcion = getchar();
while(getchar() != '\n') ;
switch(opcion)
............


Creo que debería funcionar.

Saludos
#30
Hola!!

Tienes que reservar memoria para nombre y para contextura, y después liberarla.

Y las cadenas de caracteres no se comparan con ==, se utiliza strcmp

Saludos