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 - Alien-Z

#41
Cita de: amchacon en 20 Agosto 2013, 08:10 AMEso ya depende del profesor, pero break/continue son sentencias totalmente válidas en la vida real.

Generalmente suelen dejar códigos más claros que hacerlas con ellas.

Ya veo, no sabía que hubieran otras opiniones respecto a su uso. En mi facultad los profesores nos prohibían estas instrucciones debido a que utilizar un break/continue es equivalante a la instrucción goto: estás "saltando" desde un punto del bucle a otro modificando el curso de ejecución del programa. Teniendo en cuenta que los paradigmas heredan unos de otros: El paradigma orientado a objetos hereda del estructurado que a su vez hereda del secuencial, C++ es OO y Secuencial a la vez, se deben ejecutar las instrucciones sin saltos de línea.

Tú código queda claro porque hay un único break, pero si estuvieramos hablando de una aplicación un poco más compleja en la que, al permitirse el uso de break/continue, cada bucle tuviera 3 o 4, haría casi imposible su comprensión.

Cualquier opinión o debate es bienvenido. Un saludo.
#42
Dev-C++ no era recomendable hasta hace poco porque llevaba varios años sin actualizarse, pero para quien no lo sepa salió una nueva versión estable hace 2 meses así que en principio no hay problema en trabajar con esta IDE, aunque yo tiro más por Code::Blocks.

Hay que tener en cuenta que las IDE's no son más que interfaces cuya fución es hacer "bonita" el área de trabajo e incluir opciones que faciliten algunas tareas, pero no tienen nada que ver con la programación en sí, depende únicamente del gusto de cada uno.

Un saludo.
#43
Cuando se inicializan las posiciones de un array de carácteres de este modo hay que añadir manualmente el fin de cadena:

Código (cpp) [Seleccionar]
char romano[TAM],letras[]={'I','V','X','L','C','M'},*ptr,*p; //Este es tu código
char romano[TAM],letras[]={'I','V','X','L','C','M', '\0'},*ptr,*p; //Sería así


Si actualizas la variable de control en la condición del bucle (*ptr++) te estás saltando el primer elemento del array:

Código (cpp) [Seleccionar]
while(*ptr++ != '\0')

Debes de hacerlo antes de terminar el bucle:

Código (cpp) [Seleccionar]
while(*ptr != '\0') {
  ...
  ptr++;
}


Con ese condicional lo único que estás haciendo es comprobando si la entrada es igual a lo que hay en el array "letras[]", no si se trata de un número romano:

Código (cpp) [Seleccionar]
if(*ptr++ != *p++)
              printf("Error!! no es numero romano\n");


Si yo meto "IVXLM" sería correcto pero si introduzco "VII" me la daría por mala cuando si es un número romano.

El ejemplo de amchacon es genial para guiarte en tu código pero me parece que se la ha pasado indicar que solo es para que lo uses como esquema porque no se deben utilizar las instrucciones break/continue para modificar el curso de una iteración en los bucles.

Código (cpp) [Seleccionar]
if (romano[i] == letras[j]) break;

Un saludo.
#44
¿Las salidas son correctas y te da error?: Problema de eficiencia (los jueces online te suelen exigir que los programas se ejecuten en un determinado tiempo), no has seguido las instrucciones de entrada/salida que te indican en la web (el Juez es un programa y tiene implementado un método para leer e imprimir que hay que seguir a rajatabla o no te comprende), etc.

En el link que has añadido te explican que debes comparar letra por letra según la entrada. Te hago un esquema en pseudocódigo:

SI (i+2 no nos salimos de la cadena) Y (cadena[i] == 'O') Y (cadena[i+1] == 'I') Y (cadena[i+2] == 'E') -> contador++;
i++;


Empieza horizontalmente línea por línea de izquierda a derecha y viceversa hasta el final de la entrada; después lo mismo pero verticalmente y por último en diagonal.

Si no funciona ayudaría que indicaras cuál es exactamente el error que te señala el juez online. Un saludo.
#45
Estoy de acuerdo con kaltorak, hoy en dia en pocos sitios te van a pedir que programes con lenguajes estructurados como C, y no solo eso, si quieres hacer aplicaciones complejas vas a necesitar mucho menos tiempo y esfuerzo utilizando un lenguaje que siga el paradigma orientado a objetos que con uno estructurado.

C++ o Java:

Aqui hay que señalar que, aunque Java esté basado en C++, no se pueden realizar aplicaciones del mismo nivel debido a que Java no utiliza un compilador sino un compilador interpretado junto a una máquina virtual. Esto es, cuando compilas con Java no se crean ejecutables sino unos ficheros intermedios de formato .java con instrucciones especiales que son leídas por la máquina virtual y ejecutadas una a una. Esto tiene sus ventajas y sus inconvenientes pero lo que más destaca:

1- Multiplataforma: Puedes ejecutar cualquier aplicación creada con Java en cualquier dispositivo ya sea un PC, un móvil, una consola, etc. siempre y cuando tengas instalada la máquina virtual de Java en ese aparato. C++ también es multiplataforma por supuesto, la diferencia es que no sirve el mismo ejecutable para cualquier dispositivo, es decir: Si quieres el programa para un MAC debes llevarte el código fuente al MAC y compilarlo ahi, y el ejecutable que has obtenido solo servirá para MAC's; si lo quieres para una distribución de Linux deberás llevarte el código fuente a esa distribución y compilarlo en ella.

De ahi que cuando quieres bajarte un programa de internet te dice "Selecciona el sistema operativo", porque aunque se haya desarrollado con un lenguaje multiplataforma, hay que lanzar el ejecutable específico para ese SO, cosa que no pasa con Java ya que los bytecodes (el código intermedio obtenido tras compilar) se puede ejecutar en cualquier plataforma, la gran pega es que tienes que tener instalada obligatoriamente la máquina virtual (a diferencia de C++ que no depende de ninguna aplicación).

2- Con Java no se pueden hacer grandes aplicaciones por lo comentado anteriormente: no se crean ejecutables, sino bytecodes, eso hace que al ejecutar las instrucciones de una en una se consuman muchos recursos. Nunca vas a ver un videojuego para PS3 o XBOX360 hechos en Java ni tampoco te van a pedir en un banco o una base militar una aplicación desarrollada con este lenguaje (donde la eficiencia y la seguridad son imprescidibles, esto da mucho que hablar, porque java tiene varios fallos de seguridad irremediables); sin embargo como es más rápido y sencillo el desarrollo en él (por tanto se necesita menor inversión), muchas empresas suelen sacrificar eficiencia por disminuir los costes.

¿Entonces Java o C++?: Yo siempre me he inclinado hacia el gremio de C++, nunca he sido muy amigo de Java pero en la universidad nos obligaron a programar con él una temporada, y ya que aprendí a usarlo he seguido haciendo aplicaciones sencillas por si algún día fuera a necesitarlo. Pero si quieres ser un programador de 10 te sugiero que aprendas los dos lenguajes, uno te va a ser más útil (o sencillo de usar) que el otro dependiendo del proyecto.

Otra opción es C#, la ideó Microsoft como "fusión" entre Java y C++, pero no tiene ni las ventajas de uno ni las de otro, es más bien una cosa mediocre con características de ambos lenguajes; aunque quizá otros compañeros del foro que hayan trabajado más tiempo con él puedan darte opiniones más completas.

Un saludo.
#46
Muy sencillo:

La variable leido es de tipo ssize_t e intentas imprimirla como un especificador de formato para enteros:

Código (cpp) [Seleccionar]
printf ("Leidos: %d bytes\n",leido);

Debes utilizar el especificador de formato "%zd":

Código (cpp) [Seleccionar]
printf ("Leidos: %zd bytes\n",leido);

Un saludo.
#47
Salió hace 8 dias y me acabo de enterar por este post. Test Mode: ON

Cualquier tipo de información es benivenida.
#48
Programación C/C++ / Re: Error con el while
19 Agosto 2013, 15:09 PM
Utiliza un puntero para iterar dentro de la cadena:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>

int main()
{
char cadena[] = "hola sam, hola sam.";
char *pCadena = cadena;
int numEspacios = 0;

while (*pCadena != '\0') {
if (*pCadena == ' ') numEspacios++;
pCadena++;
}

   printf("%d palabras/n", numEspacios+1);

   return 0;
}



Tu código tiene un error: En el caso de la cadena vacía (char cadena[] = "") el programa imprimirá numEspacios+1 palabras, es decir, 0+1 palabras lo cual está mal.

Por tu registro de errores puedo suponer que estás programando en C++: main.cpp: In function 'int main()': ... así que te recomiendo el tipo String para manejar cadenas.

Un saludo.
#49
Aqui lo explican bastante bien con un ejemplo completo: http://es.softuses.com/9454

Un saludo.
#50
Java / Re: Maximizar y minimizar
19 Agosto 2013, 14:19 PM
Aqui te explican cómo funcionan las operaciones de maximizar/minimizar en java: http://lefunes.wordpress.com/2008/02/18/iniciar-maximizado-o-minimizado-un-jframe/

Dichas operaciones también se pueden ejecutar cuando lees una entrada del teclado.

Saludos.