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 - estudianteuv

#1
Java / Cambiar color al pintar (JComponent)
13 Mayo 2019, 02:55 AM
Sinceramente soy malo en JAVA. Tengo una duda, ¿cómo podría cambiar de color a la hora de pintar en el canvas? Algo así como una paleta de colores. No sé como se podría hacer, ayuda!

package com.mycompany.mavenproject3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import javax.swing.JComponent;
import javax.swing.JFrame;


public class NewClass extends JComponent  {

    private Point inicioArrastre;
    private Point finArrastre;
    private ArrayList<Shape> lineas = new ArrayList<Shape>();
   
    public NewClass() {
        super();
       
        addMouseListener(new MouseAdapter() {

            public void mousePressed(MouseEvent e) { // cuando se presiona el mouse
                inicioArrastre = new Point(e.getX(), e.getY());
                repaint();
            }

            public void mouseReleased(MouseEvent e) { // cuando se deja de presionar el mouse
                finArrastre = new Point(e.getX(), e.getY());
                Shape linea = crearLinea(inicioArrastre.x, inicioArrastre.y, finArrastre.x, finArrastre.y);
                lineas.add(linea);
                repaint();
            }
        });
        addMouseMotionListener(new MouseMotionAdapter() {

            public void mouseDragged(MouseEvent e) { // cuando se esta arrastrando el mouse
                finArrastre = new Point(e.getX(), e.getY());
                Shape linea = crearLinea(inicioArrastre.x, inicioArrastre.y, finArrastre.x, finArrastre.y);
                lineas.add(linea);
                inicioArrastre = new Point(finArrastre.x, finArrastre.y);
                repaint();
            }
        });
           
    }

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLUE);
        for (Shape linea : lineas) { // dibuja todos las elipses
            g2.draw(linea);
        }
    }

    private Line2D.Float crearLinea(int x1, int y1, int x2, int y2) {
        return new Line2D.Float(x1, y1, x2, y2);
    }
   
    public static void main(String[] a3d) {
   
        JFrame ventana = new JFrame("Dibujar");
        ventana.setSize(800, 800);
        ventana.setLocationRelativeTo(null);
        ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ventana.add(new NewClass());
        ventana.setVisible(true);
       

    }

   

}
#2
Sí, claro tengo que tomar en cuenta esas limitaciones y restricciones que mencionas... Pero... ¿Cómo validar? No aterrizo mi idea.
#3
Hola, tengo que elaborar un programa que "Analizar si una frase capturada por el usuario está bien escrita en español." es decir; si el usuario escribe "El coche es azul", es correcto, pero si escribe "El azul es coche", es incorrecto.

No se me ha ocurrido mucho, OJO. No tengo que usar apunteros, ni recursividad (ya que no se ha visto en el curso), ni archivos, solo es el uso de cadenas y todo lo demás, a excepción de lo antes mencionado...

¿Alguna idea?
#4
Tengo un programa que lee una cadena, luego pide un carácter a editar y un carácter a poner. Al final se trata de mostrar la cadena y en la letra editada poner el carácter que el usuario puso, tengo esto pero no encuentro el error, ¡Gracias!

#include<stdio.h>
char *sust(char *p,char edit,char po);
int main(){
char cad[10];
char editar;
char poner;
char *r;
printf("Ingrese cadena: ");
scanf("%s",&cad);
fflush(stdin);
printf("Letra a editar: ");
scanf("%c",&editar);
fflush(stdin);
printf("Letra a poner: ");
scanf("%c",&poner);
r=sust(cad,editar,poner);
printf("Cadena editada: %s",r);
return 0;
}
char *sust(char *p,char edit,char po){
if((*p)=='\0')return p;
if((*p)==edit){
edit==po;
return sust(++p,edit,po);
}
else return p;
}
#5
Hola, quiero imprimir esto en la pantalla pero me sale solamente 32

for (int i=0;i<nivel;i++){
for(int j=0;j<nivel;j++){
mT[i][j]='#';
}
}


No sé porque, he intentado cambiar algo pero hasta ahora no me funciona nada.
La matriz esta declara como entero. De hecho sale 32 que es el codigo ASCII.
¿Como le hago para que salga el gato?

De igual manera si le pongo "#" me sale
[Error] invalid conversion from 'const char*' to 'int'
#6
Cita de: XKC en 24 Mayo 2018, 23:16 PM
Has probado con NULL??

Sinceramente no, y no sé como usarlo, ¿solamente escribo NULL? ¿O tengo que agregarle algo más?
#7
Hola a todos, ¿qué tal?

Lo que pasa es que tengo este programa que adjuntaré, el cuál no sé si es correcto (espero puedan ayudarme en la función, si es que está mal) pero en fin, mi pregunta es que; ¿cuál es el carácter especial para detener un vector, por ejemplo en cadenas es '\0', como sabes, ¿pero en un vector?

Espero puedan ayudarme. Este es el programa:
Lo he compilado y funciona pero al final sale 0.

Código (ada) [Seleccionar]
#include<stdio.h>
#define T 5

int buscar_nmayor(int *v,int n);

int main(){
int vct[T];
int mayor,i=0;
int num_mayor;

for(i=0;i<T;i++){
printf("Inserte valor %i del vector: ",i+1);
scanf("%i",&vct[i]);}
mayor=vct[0];
num_mayor=buscar_nmayor(vct,mayor);
printf("El numero mayor del vector es: %i",num_mayor);
return 0;
}

int buscar_nmayor(int *v,int n){
if(*v=='\0')return 0;
else{if(*v>n)return buscar_nmayor(++v,n);
else return buscar_nmayor(++v,n);}
}
#8
Cita de: MAFUS en 23 Mayo 2018, 23:19 PM
Cómo te había explicado una operación booleana en C se evalúa a 1 si el resultado es true y 0 si el resultado es false. El código aprovecha este hecho en el trozo de código *cad==c, es decir, si el carácter actual de la cadena es igual a carácter c devolverá 1, caso contrario 0.
Este resultado se suma a lo que devuelva la siguiente llamada a buscar_c apuntando al siguiente carácter de la cadena. Y todo esto es lo que retornará la función.
Por recursividad los resultados se irán acumulando y cuando hayan retornado todas las funciones la última entregará el resultado esperado.

-------------------- Fuera del tema ---------------------------
Por otra parte es importante recalcar el cad+1 en vez de ++cad en el argumento de buscar_c. Esto es debido a que además de incrementar cad en 1 en otra parte se hace uso del valor de esa variable. Uno no sabe qué operando evaluará antes C en una operación matemática. Si hubiera sido ++cad, al evaluar *cad==c lo haría con el siguiente carácter al que nos interesa y el programa fallaría y por eso he optado por no modificar dicha variable. Pero todo esto tiene que ver con los puntos de secuencia, algo de lo que tendrás oportunidad de aprender más adelante.

¡Que grande! Muchas gracias, amigo. Justamente esa también era una de mis dudas, por qupe el cad+1 si con un ++cad bastaba para mover el puntero, en fin, ¡muchísimas gracias por la explicación!
#9
Cita de: MAFUS en 23 Mayo 2018, 20:15 PM
Para hacerla recursiva sería:
int buscar_c(char *cad, char c) {
    if(*cad=='\0')
        return 0;
    return (*cad==c)+buscar_c(cad+1,c);
}


El else tuyo no tiene sentido.
Éste código funciona para las implementaciones que consideren 1 como resultado de un true, que son todas las que conozco.

¡Gracias! No sabía lo del else, funciona totalmente, pero una duda... No sé si me podrías explicar.

Al poner el segundo return, ¿cómo es que automáticamente sabe el programa que es 1?
Aparte, nunca había visto ponerle return y después una condición ¿retorna una condición...?

Entendí todo a excepción de la linea 5 que escribiste, ¿me la podrías explicar? ¡De ante mano, gracias!
#10
Hola.

Tengo este programa donde el usuario ingresa una cadena y luego en esa misma; busca la letra y el programa imprime cuantas veces aparece dicho caracter

El problema es que solo me da la longitud, soy nuevo en esto, me gustaría que lo revisarán y me digan lo que le falta y claro, el por qué y como funciona para aprender

Muchas gracias!

#include<stdio.h>
int buscar_c (char *cad,char c,int cont);
int main(){
char let;
char pal[10];
int result;
printf("Inserte una palabra: ");
gets(pal);
printf("Letra a buscar: ");
scanf("%c",&let);
result=buscar_c(pal,let,result);
printf("Numero de veces que se repite %c son: %i",let,result);
return 0;
}

int buscar_c(char *cad,char c,int i=0){
if(*cad=='\0')return 0;
else(*cad==c);return 1+buscar_c(++cad,c,i++);
}