Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: FKT en 24 Agosto 2015, 11:17 AM

Título: Mejorar sintaxis.
Publicado por: FKT en 24 Agosto 2015, 11:17 AM
Buenas quiero saber si hay alguna forma más corta o más bonita de hacer el siguiente codigo.
Esque creo que uso demasiados "if" y probablemente hay alguna otra forma.
Es un ejemplo un poco simple.
Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main(){

printf("\nEscribe tres numeros y indicare cual es el mayor");

int n1,n2,n3;

printf("\nIntroduce el primer numero:");
scanf("%i",&n1);

       printf("\nIntroduce el segundo numero:");
scanf("%i",&n2);

       printf("\nIntroduce el tercer numero:");
scanf("%i",&n3);

if( n1 > n2 || n1 > n3 ){
printf("\n%i es el mayor.",n1);
}
if( n2 > n1 || n2 > n3){
printf("\n%i es el mayor.",n2);
}
if( n3 > n2 || n3 > n1){
printf("\n%i es el mayor.",n3);
}


return 0;
}
Título: Re: Mejorar sintaxis.
Publicado por: Orubatosu en 24 Agosto 2015, 12:04 PM
Es un caso pequeño, no veo problemas. Si fueran mas números lo conveniente sería usar un arreglo, definir una variable como máximo a cero y luego compararla con cada numero, y asignarle ese valor solo cuando sea mayor.

Pero con 3 es una posible solución sin recurrir a un arreglo. Para mas números si que sería interesante la que te he expuesto como una sencilla
Título: Re: Mejorar sintaxis.
Publicado por: FKT en 24 Agosto 2015, 12:40 PM
Vale, bueno acabo de "aprender" ahora mismo que son los arrays o arreglos. Aunque me has dicho que en este caso no es necesario usar un array porque es simple voy ha intentar hacerlo con un array aver que tal.

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

int main(){

printf("\nEscribe tres numeros y indicare cual es el mayor");

int array[3];
array[0] = a;
array[1] = b;
array[2] = c;

printf("\nIndica el primer numero:");
scanf("%i",&a);
printf("\nIndica el segundo numero:");
scanf("%i",&b);
printf("\nIntroduce el tercer numero:");
scanf("%i",&c);

if( a > b || a > c ){
printf("\n%i es el mayor.",n1);
}
if( b > a || b > c){
printf("\n%i es el mayor.",n2);
}
if( c > b || c > a){
printf("\n%i es el mayor.",n3);
}


return 0;
}


Corrigeme si es así.

La verdad es que me parece prácticamente el mismo trabajo en lo que la diferencia que veo es simplemente que te puede ahorrar unos 7 minutos en programas largos.(O eso creo)
Por cierto los vectores son lo mismo que un array?
Título: Re: Mejorar sintaxis.
Publicado por: ivancea96 en 24 Agosto 2015, 13:29 PM
Cita de: FKT en 24 Agosto 2015, 12:40 PM
Por cierto los vectores son lo mismo que un array?
Si te refieres a "vector" dentro del lenguaje, es de C++.

El problema de ese código, es que creas el array, pero no lo usas.

Lo importante de un array, es que se puede iterar por él. Se puede acceder a sus elementos en un bucle, cosa que con variables diferentes no puedes:
Código (cpp) [Seleccionar]
int i, array[10];
for(i=0; i<10; i++)
    printf("%i", array[i]);


Si quieres implementar un array en ese código, haz un bucle que encuentre el número más grande.
Título: Re: Mejorar sintaxis.
Publicado por: DarK_FirefoX en 24 Agosto 2015, 15:36 PM
Cita de: FKT en 24 Agosto 2015, 11:17 AM
Buenas quiero saber si hay alguna forma más corta o más bonita de hacer el siguiente codigo.
Esque creo que uso demasiados "if" y probablemente hay alguna otra forma.
Es un ejemplo un poco simple.
Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main(){

printf("\nEscribe tres numeros y indicare cual es el mayor");

int n1,n2,n3;

printf("\nIntroduce el primer numero:");
scanf("%i",&n1);

        printf("\nIntroduce el segundo numero:");
scanf("%i",&n2);

        printf("\nIntroduce el tercer numero:");
scanf("%i",&n3);

if( n1 > n2 || n1 > n3 ){
printf("\n%i es el mayor.",n1);
}
if( n2 > n1 || n2 > n3){
printf("\n%i es el mayor.",n2);
}
if( n3 > n2 || n3 > n1){
printf("\n%i es el mayor.",n3);
}


return 0;
}


Independientemente de que quieras mejorar este código para que tenga "mejor sintaxis". ¿Ya probaste si el código está correcto?

Imagina esta situación:
n1=4, n2=6, n3=1

Veras que se va a cumplir la condición del primer if pues n1=4 es mayor que n3=1, por lo tanto vas a imprimir que n1=4 es el mayor, lo cual no es correcto. Luego vas a tener el segundo if que también se va a cumplir la condición de que n2=6 es mayor que n1=4 y también que n2=6 es mayor que n3=1, por lo tanto también va a imprimir que n2=6 es el mayor, este sería el correcto, pero date cuenta de los errores que tienes.

Debería ser así:

if( n1 > n2 && n1 > n3 ){
printf("\n%i es el mayor.",n1); //n1 es el mayor
}
else if( n2 > n1 && n2 > n3){
printf("\n%i es el mayor.",n2); //n2 es el mayor
}
else
        {
printf("\n%i es el mayor.",n3); //'n3 es el mayor
}


Espero entiendas la diferencia entre || y &&.

Salu2s
Título: Re: Mejorar sintaxis.
Publicado por: FKT en 24 Agosto 2015, 17:50 PM
Cita de: DarK_FirefoX en 24 Agosto 2015, 15:36 PM
Independientemente de que quieras mejorar este código para que tenga "mejor sintaxis". ¿Ya probaste si el código está correcto?

Imagina esta situación:
n1=4, n2=6, n3=1

Veras que se va a cumplir la condición del primer if pues n1=4 es mayor que n3=1, por lo tanto vas a imprimir que n1=4 es el mayor, lo cual no es correcto. Luego vas a tener el segundo if que también se va a cumplir la condición de que n2=6 es mayor que n1=4 y también que n2=6 es mayor que n3=1, por lo tanto también va a imprimir que n2=6 es el mayor, este sería el correcto, pero date cuenta de los errores que tienes.

Debería ser así:

if( n1 > n2 && n1 > n3 ){
printf("\n%i es el mayor.",n1); //n1 es el mayor
}
else if( n2 > n1 && n2 > n3){
printf("\n%i es el mayor.",n2); //n2 es el mayor
}
else
        {
printf("\n%i es el mayor.",n3); //'n3 es el mayor
}


Espero entiendas la diferencia entre || y &&.

Salu2s

Tienes razón lo sabía pero se me ha pasado, no sé porque he usado || y no &&.

Como funciona el if,else if,else? Yo siempre he usado un "If-then-else", o en algunos casos un "If" solo, veo que mucha gente usa "else if"

La verdad ninguno de los videos o documentos que encuentro que explican el array no los entiendo, teneis algun link que explique como funcionan o si alguien se quiere tomar el tiempo para explicarmelo  :)
Título: Re: Mejorar sintaxis.
Publicado por: robertofd1995 en 24 Agosto 2015, 23:36 PM


Se envio dos veces , el de abajo es el que esta bien , sorry
Título: Re: Mejorar sintaxis.
Publicado por: robertofd1995 en 24 Agosto 2015, 23:44 PM
Cita de: FKT en 24 Agosto 2015, 17:50 PM

La verdad ninguno de los videos o documentos que encuentro que explican el array no los entiendo, teneis algun link que explique como funcionan o si alguien se quiere tomar el tiempo para explicarmelo  :)

Un array es una de las distintas estructuras de datos que hay para almacenar datos , en el caso del array puedes imaginártelo como un matric de 1 x n (espero que sepas que es una matric xD ) , sino imagínate que tienes una fila de  n cajas una detrás de otra.

Esas cajas agrupadas forman un conjunto , y eso es el array , dentro del array hay n huecos y dentro de esos huecos puedes poner cosas , números , strings,  otro array ( y asi crearas un array bidimensional , de esta manera en lugar de tener una fila de cajas , ahora tendras una tabla de cajas con filas y columnas ) , objetos , es decir puedes meter de todo  (mal pensados abstenerse de comentarios XD).

Dependiendo del lenguaje en el que estes puede estar implementado de manera distinta o tener distintos métodos pero normalmente en casi todos suele ser igual. (por ej en java un array permite guardar lo que quieras siempre que sean del mismo objeto , un arrayList permite guardar en el array distintos tipos de objetos ,  si esto te suena a chino , no te preocupes que ya lo entenderas con el tiempo)

Y para que sirve todo esto , pues para muchísimas cosas ,guardar cosas ,  tener conjuntos mas agrupados , para iterar sobre estos de una manera rápida con un bucle for , while , for-each y todas las maneras que se te ocurran.

Por ejemplo en tu caso anterior :

Código (cpp) [Seleccionar]


    int max=array[0]; /* aqui lo que haces es asignar a la variable max , el primer valor que contenga el array ,los indices normalmente empiezan en el 0 */

    int array[10];
    array[0]=0;
    array[1]=1;
    //.....
    array[9]=10;


   //este codigo de aqui lo podrias meter en una función que se llame maximo :)
    for(int i=0;i<array_size;i++){
    if(max>array[i])
         max=array[i];
    }

  return max;




Espero que lo hayas entendido bien , comentame si te a servido o tienes algún problema  :)

Título: Re: Mejorar sintaxis.
Publicado por: furciorifa en 25 Agosto 2015, 03:43 AM
Matemáticamente hablando un array y un vector son lo mismo pueden ser representados de la misma manera, pero para usos más estrictos de el habla y las diferencias en C y C++ , vector es en C++ , y array es en C , tienen diferentes propiedades.
Título: Re: Mejorar sintaxis.
Publicado por: FKT en 27 Agosto 2015, 13:42 PM
Cita de: robertofd1995 en 24 Agosto 2015, 23:44 PM
Un array es una de las distintas estructuras de datos que hay para almacenar datos , en el caso del array puedes imaginártelo como un matric de 1 x n (espero que sepas que es una matric xD ) , sino imagínate que tienes una fila de  n cajas una detrás de otra.

Esas cajas agrupadas forman un conjunto , y eso es el array , dentro del array hay n huecos y dentro de esos huecos puedes poner cosas , números , strings,  otro array ( y asi crearas un array bidimensional , de esta manera en lugar de tener una fila de cajas , ahora tendras una tabla de cajas con filas y columnas ) , objetos , es decir puedes meter de todo  (mal pensados abstenerse de comentarios XD).

Dependiendo del lenguaje en el que estes puede estar implementado de manera distinta o tener distintos métodos pero normalmente en casi todos suele ser igual. (por ej en java un array permite guardar lo que quieras siempre que sean del mismo objeto , un arrayList permite guardar en el array distintos tipos de objetos ,  si esto te suena a chino , no te preocupes que ya lo entenderas con el tiempo)

Y para que sirve todo esto , pues para muchísimas cosas ,guardar cosas ,  tener conjuntos mas agrupados , para iterar sobre estos de una manera rápida con un bucle for , while , for-each y todas las maneras que se te ocurran.

Por ejemplo en tu caso anterior :

Código (cpp) [Seleccionar]


    int max=array[0]; /* aqui lo que haces es asignar a la variable max , el primer valor que contenga el array ,los indices normalmente empiezan en el 0 */

    int array[10];
    array[0]=0;
    array[1]=1;
    //.....
    array[9]=10;


   //este codigo de aqui lo podrias meter en una función que se llame maximo :)
    for(int i=0;i<array_size;i++){
    if(max>array[i])
         max=array[i];
    }

  return max;




Espero que lo hayas entendido bien , comentame si te a servido o tienes algún problema  :)



Querrás decir matriz en vez de matric no? Lo entiendo prefectamente gracias, pero lo que pedia era aprender como se usan jeje aunque me lo has aclarado más
Título: Re: Mejorar sintaxis.
Publicado por: pomada_de_la_campana en 30 Agosto 2015, 09:44 AM
Estos ejercicios son para que desarrolles las tus habilidades de programación, de momento no te recomiendo que uses los arreglos dado que estas comenzando y puedes perder el objetivo del ejercicio que es aprender a usar la estructuras if else junto con el operador &&.

Saludos.