Foro de elhacker.net

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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){
  5.  
  6. printf("\nEscribe tres numeros y indicare cual es el mayor");
  7.  
  8. int n1,n2,n3;
  9.  
  10. printf("\nIntroduce el primer numero:");
  11. scanf("%i",&n1);
  12.  
  13.        printf("\nIntroduce el segundo numero:");
  14. scanf("%i",&n2);
  15.  
  16.        printf("\nIntroduce el tercer numero:");
  17. scanf("%i",&n3);
  18.  
  19. if( n1 > n2 || n1 > n3 ){
  20. printf("\n%i es el mayor.",n1);
  21. }
  22. if( n2 > n1 || n2 > n3){
  23. printf("\n%i es el mayor.",n2);
  24. }
  25. if( n3 > n2 || n3 > n1){
  26. printf("\n%i es el mayor.",n3);
  27. }
  28.  
  29.  
  30. return 0;
  31. }


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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){
  5.  
  6. printf("\nEscribe tres numeros y indicare cual es el mayor");
  7.  
  8. int array[3];
  9. array[0] = a;
  10. array[1] = b;
  11. array[2] = c;
  12.  
  13. printf("\nIndica el primer numero:");
  14. scanf("%i",&a);
  15. printf("\nIndica el segundo numero:");
  16. scanf("%i",&b);
  17. printf("\nIntroduce el tercer numero:");
  18. scanf("%i",&c);
  19.  
  20. if( a > b || a > c ){
  21. printf("\n%i es el mayor.",n1);
  22. }
  23. if( b > a || b > c){
  24. printf("\n%i es el mayor.",n2);
  25. }
  26. if( c > b || c > a){
  27. printf("\n%i es el mayor.",n3);
  28. }
  29.  
  30.  
  31. return 0;
  32. }

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
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
  1. int i, array[10];
  2. for(i=0; i<10; i++)
  3.    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
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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(){
  5.  
  6. printf("\nEscribe tres numeros y indicare cual es el mayor");
  7.  
  8. int n1,n2,n3;
  9.  
  10. printf("\nIntroduce el primer numero:");
  11. scanf("%i",&n1);
  12.  
  13.        printf("\nIntroduce el segundo numero:");
  14. scanf("%i",&n2);
  15.  
  16.        printf("\nIntroduce el tercer numero:");
  17. scanf("%i",&n3);
  18.  
  19. if( n1 > n2 || n1 > n3 ){
  20. printf("\n%i es el mayor.",n1);
  21. }
  22. if( n2 > n1 || n2 > n3){
  23. printf("\n%i es el mayor.",n2);
  24. }
  25. if( n3 > n2 || n3 > n1){
  26. printf("\n%i es el mayor.",n3);
  27. }
  28.  
  29.  
  30. return 0;
  31. }

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í:

Código
  1. if( n1 > n2 && n1 > n3 ){
  2. printf("\n%i es el mayor.",n1); //n1 es el mayor
  3. }
  4. else if( n2 > n1 && n2 > n3){
  5. printf("\n%i es el mayor.",n2); //n2 es el mayor
  6. }
  7. else
  8.        {
  9. printf("\n%i es el mayor.",n3); //'n3 es el mayor
  10. }

Espero entiendas la diferencia entre || y &&.

Salu2s


Título: Re: Mejorar sintaxis.
Publicado por: FKT en 24 Agosto 2015, 17:50 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í:

Código
  1. if( n1 > n2 && n1 > n3 ){
  2. printf("\n%i es el mayor.",n1); //n1 es el mayor
  3. }
  4. else if( n2 > n1 && n2 > n3){
  5. printf("\n%i es el mayor.",n2); //n2 es el mayor
  6. }
  7. else
  8.        {
  9. printf("\n%i es el mayor.",n3); //'n3 es el mayor
  10. }

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

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
  1.  
  2.    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 */
  3.  
  4.    int array[10];
  5.    array[0]=0;
  6.    array[1]=1;
  7.    //.....
  8.    array[9]=10;
  9.  
  10.  
  11.   //este codigo de aqui lo podrias meter en una función que se llame maximo :)
  12.    for(int i=0;i<array_size;i++){
  13.    if(max>array[i])
  14.         max=array[i];
  15.    }
  16.  
  17.  return max;
  18.  
  19.  
  20.  

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
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
  1.  
  2.    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 */
  3.  
  4.    int array[10];
  5.    array[0]=0;
  6.    array[1]=1;
  7.    //.....
  8.    array[9]=10;
  9.  
  10.  
  11.   //este codigo de aqui lo podrias meter en una función que se llame maximo :)
  12.    for(int i=0;i<array_size;i++){
  13.    if(max>array[i])
  14.         max=array[i];
  15.    }
  16.  
  17.  return max;
  18.  
  19.  
  20.  

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.