Anuncios Google

Decir el mayor de 2 numeros

Quiero hacer un programa k digas cual es el mayor de 3 numeros probe a escribir esto y me dice cual es el numero medio ni el mayor ni el menor

Por ejemplo si pongo en los numeros

3,4,5

me dice k es el segundo

si pongo 4,3,5

me dice k es el primero

y si pongo 3,5,4

me dice k es el tercero aqui el codigo fuente:

#include <stdio.h>
 
int main(int argc, char **argv)
{
	int i;
	int cantidad[3];
 
	for(i = 0;i < 3;i ++)
		{
			scanf("%i", &cantidad[i]);
		}
	if(cantidad[1] < cantidad[2] && cantidad[3] < cantidad[2])
		{
			printf("El segundo numero es el mayor");
		}
	if(cantidad[1] < cantidad[3] && cantidad[2] < cantidad[3])
		{
			printf("El tercer numero es el mayor");
		}
	if(cantidad[2] < cantidad[1] && cantidad[3] < cantidad[1])
		{
			printf("EL primer numero es el mayor");
		}
	return 0;
}



Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de recoco

Yo

Yo haría:

#include <vector>
 
int el_mayor_de_tres (vector <int> tabla)
 
{
 
int i, actual, mayor;
 
int const M=3;
 
cin>>actual;
 
for (i=0; i<M; i++){
 
actual = tabla[i];
 
cin>>actual;
 
if (i == M - 1){
 
   if (tabla[0] > tabla[1])
 
      mayor = tabla[0];
 
   else 
 
      mayor = tabla[1];
 
    if (tabla[1] > tabla[2])
 
      mayor = tabla[1];
 
   else
 
      mayor = tabla[2];
 
    if (tabla[2] > tabla[1])
 
      mayor = tabla[2];
 
   else
 
       mayor = tabla[1];
    }
}
 
return mayor;
 
}

 


Image Hosted by ImageShack.us 

Imagen de joserc87

Bueno,

Pero el if (i==M-1) es innecesario. Lo puedes sacar del for no? Además, si pasas un vector como argumento, ¿Para qué haces un cin?

Ya puestos, si lo haces con la clase vector, hazlo genérico. En 5 líneas sería:

#include <vector>
 
int el_mayor_de_tres (vector <int> tabla){
  int mayor=0;
  for (int i=1; i<tabla.size (); i++)
    if (tabla [i] > tabla [mayor])
      mayor = i;
  return mayor;
}

¿Hay otra opción más sencilla?


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de Loopin

Noop, es la mas sencilla. De

Noop, es la mas sencilla. De hecho el problema se llamaria "calcular el elemento maximo de un vector". La unica objecion seria tener en cuenta los negativos, para inicializar la variable maximo al minimo valor (negativo) codificable.

Un saludo!


Imagen de joserc87

En realidad.

La variable "mayor" no almacena el máximo, sino la posición donde está. Al inicializarla a 0, estoy diciendo que a priori el máximo es la primera posición. Luego comparo para calcular el máximo. Vamos, que funciona perfectamente con negativos (o debería). :)

Ahora, eso sí, si el vector solo tiene una posición, peta. Aunque sería un poco tonto encontrar el máximo de un solo número, no? xD


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de Loopin

Cierto, me he colado al leer

Cierto, me he colado al leer por encima el codigo XD

Ahora, mirandolo detenidamente, creo que no petaria, puesto que en la comprobacion del bucle, i<size(), si size es 1, entonces 1<1 es falso, por tanto no entra al bucle y devolveria directamente el elemento, no?

Aunque carezca de sentido calcular el maximo de un solo elemento XD


Imagen de joserc87

Es verdad.

No me había parado a pensarlo, pero no petaría con un solo elemento. De hecho, incluso devolveria 0, que sería la posición del máximo (el único).

Solo petaría si no tiene elementos, pero eso sí que no tiene ni pies ni cabeza... xD

Si nos ponemos a buscarle 3 pies al gato, creo que se podría comprimir un poquito más, solo por jugar :P

int el_mayor_de_tres (vector <int> tabla){
  int mayor=0;
  for (int i=1; i<tabla.size (); i++, mayor=tabla [i]>tabla [mayor]?i:mayor);
  return mayor;
}


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de joserc87

Ya puestos...

Si lees los datos con for, ¿por que no compararlos también en un bucle? Es menos código y más genérico :)

#include <stdio.h>
 
#define N 3
 
int main(int argc, char **argv)
{
	int i;
	int cantidad[N];
 
	for(i = 0;i < N;i ++){
		scanf("%i", &cantidad[i]);
	}
 
	int mayor=0;
	for(i=1; i<N; i++){
		if (cantidad [i]>cantidad [mayor])
			mayor = i;
	}
	printf ("El %d%s numero es el mayor", mayor+1, (mayor==0?"er":"o"));
	return 0;
}

Ahora cambia N por 10, 100 o 10000 y te funcionará igual :D.

Saludos.

Nota: Lo del for(i=1...) no es un error. Es porque empiezo asumiendo que el mayor es el 0, y luego lo comparo con el resto (hago N-1 comparaciones).


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de klozz

Aquí esta

tu code:
#include <stdio.h>
 
int main(int argc, char **argv)
{
	int i;
	int cantidad[3];
 
	for(i = 0;i < 3;i ++)
		{
			scanf("%i", &cantidad[i]);
		}
	if(cantidad[1] < cantidad[2] && cantidad[3] < cantidad[2])
		{
			printf("El segundo numero es el mayor");
		}
	if(cantidad[1] < cantidad[3] && cantidad[2] < cantidad[3])
		{
			printf("El tercer numero es el mayor");
		}
	if(cantidad[2] < cantidad[1] && cantidad[3] < cantidad[1])
		{
			printf("EL primer numero es el mayor");
		}
	return 0;
}
 
Mi code:
 
#include <stdio.h>
 
int main(int argc, char **argv)
{
	int i;
	int cantidad[3];
 
	for(i = 1;i < 3;i ++)//el indice empieza ahora en 1 y tu lo tenias en 0 pero ahi //estabas haciendo una mala iniciacion pues no encontraba dicho numero en el //indice mas bien no encontraba nunca el 0 y el primer valor quedaba guardado en //el indice 0
		{
			scanf("%i", &cantidad[i]);
		}
	if(cantidad[1] < cantidad[2] && cantidad[3] < cantidad[2])
		{
			printf("El segundo numero es el mayor");
		}
	if(cantidad[1] < cantidad[3] && cantidad[2] < cantidad[3])
		{
			printf("El tercer numero es el mayor");
		}
	if(cantidad[2] < cantidad[1] && cantidad[3] < cantidad[1])
		{
			printf("EL primer numero es el mayor");
		}
	return 0;
}


TEAM MEX Homebrew y desarrollo PSP

Metal TrooperV.Pre-Alpha (15%)Lua , 10% C .

Ubunshell VProof. (45%)C

RPG Magues (35%)Lua , 5% C


Android development for Xperia X8 ^^ mis roms en XDA-Developers ya que en Scenebeta no las publican xD

Xperience  | MIUI Pikachu | Semc debrand engine | Froyexp | Xperience walkman mod | Android 4.0.4 CN9 Crema de nieve

-- KLOZZ

Imagen de joserc87

Casi, pero no.

Si declaras cantidad como un vector de 3 posiciones, no puedes acceder a la posición cantidad[3], porque esta es la cuarta, contando el 0.

El for estaba bien. En lugar de cambiar el for, tendrías que haber cambiado los índices de las condiciones (del 0 al 2).

Tu código, puede que funcione, o puede que te de un error de segmento, dependiendo del sistema operativo y la configuración de la memoria en ese momento, ya que estás accediendo a posiciones fuera del vector ;).


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de klozz

Si pero checando que hemos

Si pero checando que hemos iniciado el vector en el numero 1 ;D solo seria arreglar esto for(i = 1;i < 3;i ++) por 

esto otro for(i = 1;i <= 3;i ++) error mio al no haber re-leido lo que puse D: ya que ponemos que el vector es de 3 tablas y en el for iniciamos con el numero 1 osea que el vector inicia en 1 y termina en 3  hacemos la comprobacion de si i es menor o igual a 3 se ejecute si no es y se pasa entonces ya no continua. 

Igual arriba ustedes reacomodan el codigo acortandolo yo solo le acomodé el fallo pero igual se lo puse erroneo xD por el tipeo que no puse la comprobacion de <= SALUDOS!.


TEAM MEX Homebrew y desarrollo PSP

Metal TrooperV.Pre-Alpha (15%)Lua , 10% C .

Ubunshell VProof. (45%)C

RPG Magues (35%)Lua , 5% C


Android development for Xperia X8 ^^ mis roms en XDA-Developers ya que en Scenebeta no las publican xD

Xperience  | MIUI Pikachu | Semc debrand engine | Froyexp | Xperience walkman mod | Android 4.0.4 CN9 Crema de nieve

-- KLOZZ

Imagen de joserc87

Mmm

Pero si pones eso, el vector entonces tiene que ser de 4 posiciones. Cuando i==3, estás accediendo a la cuarta posición.

Lo mejor siempre es empezar en 0, para no desperdiciar una posición tontamente.


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de recoco

Se

Se puede hacer un "cantidad.size() - 1" para no pasarse del vector, es decir una búsqueda o recorrido con sentinela.

Imagen de joserc87

Eso

Solo se puede hacer si usas la clase vector, no con vectores estáticos ;)

Casi lo lograste, pero en tus

Casi lo lograste, pero en tus condiciones tienes los índices mal. El primer número del array (tal y como pusiste el code) es cantidad[0] y no cantidad[1]. En otras palabras, a los índices de tus funciones réstales 1, y funcionará tu code.

Si lo quieres extender (comparar más números), te recomiendo que ordenes primero el array (hay muchos ejemplos de cómo se hace por ahi). Cuando esté ordenado, simplemente tomas el número del extremo derecho (si ordenaste de menor a mayor) y declaras que ese es el mayor de todos.
La ventaja de hacerlo así, es que funciona para cualquier cantidad de números, sin necesidad de añadir más condiciones ni nada ;)

Imagen de anxoganso

No lo entendi mi podrias

No lo entendi mi podrias poner un codigo fuente para ver a lo que te refires ¿?

Imagen de martin7777

#include <stdio.h>   int

#include <stdio.h>
 
int main(int argc, char **argv)
{
	int i;
	int cantidad[2];
 
	for(i = 0;i < 3;i ++)
		{
			scanf("%i", &cantidad[i]);
		}
	if(cantidad[0] < cantidad[1] && cantidad[2] < cantidad[1])
		{
			printf("El segundo numero es el mayor");
		}
	if(cantidad[0] < cantidad[2] && cantidad[1] < cantidad[2])
		{
			printf("El tercer numero es el mayor");
		}
	if(cantidad[1] < cantidad[0] && cantidad[2] < cantidad[0])
		{
			printf("EL primer numero es el mayor");
		}
	return 0;

Creo que se refiere a esto. Asi depaso que veo esto voy aprendiendo.


Imagen de anxoganso

Ya lo solucione pero en tu

Ya lo solucione pero en tu código hay u error cuando declaras cantidad pon un tres no un dos
int cantidad[3];

Que es lo que no entendiste?

Que es lo que no entendiste?

PD. No hagas doble comentario, por favor.

Imagen de anxoganso

Me funciono lo k dijistes no

Me funciono lo k dijistes no me acordaba de k el indice empieza en 0 y no en 1 a y lo k dijistes abajo lo voy a buscar por ahi haber gracias :D


Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.