Mejorar sintaxis.

Iniciado por FKT, 24 Agosto 2015, 11:17 AM

0 Miembros y 1 Visitante están viendo este tema.

FKT

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;
}
Solo hay 10 tipos de personas, las que saben binario y las que no.

Orubatosu

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
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

FKT

#2
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?
Solo hay 10 tipos de personas, las que saben binario y las que no.

ivancea96

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.

DarK_FirefoX

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

FKT

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  :)
Solo hay 10 tipos de personas, las que saben binario y las que no.

robertofd1995

#6


Se envio dos veces , el de abajo es el que esta bien , sorry

robertofd1995

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


furciorifa

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.

FKT

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
Solo hay 10 tipos de personas, las que saben binario y las que no.