elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  TENGO VARIAS DUDAS CON MI CODIGO
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: TENGO VARIAS DUDAS CON MI CODIGO  (Leído 1,707 veces)
Jay

Desconectado Desconectado

Mensajes: 26


Ver Perfil
TENGO VARIAS DUDAS CON MI CODIGO
« en: 2 Abril 2019, 08:21 am »

TENGO VARIAS DUDAS CON MI CODIGO
1- NO SE POR QUE CUANDO ME IMPRIME LA POSICION EN LA QUE ESTA EL NUMERO MAYOR Y EL MENOR ME DA LA MISMA POSICION DEBERIA SER DIFERENTE

2- COMO PUEDO CONTAR LA CANTIDAD DE NUMERO POSITIVOS QUE SON Y CUALES SON, YA CONSIGO QUE ME HAGA LA SUMA DE LOS NUMEROS POSITIVOS Y NEGATIVOS PERO NO CONSIGO SABER COMO IMPRIMIR CUALES SON Y CUANTOS SON



#include <stdio.h>


int main()
{
        int arreglo[50],i, numero=10, positivos=0, negativos=0, ceros=0, mayor=0, menor=0, posicion=0;



        for (i = 0; i<numero; i++)//Se llena el arreglo con los 10 elementos que le pones
        {
        printf("Introduzca numero: \n");
        scanf("%d",&arreglo);

        }

        for(i=0; i<numero; i++){

            if(arreglo > mayor){
          mayor = arreglo;
          posicion = i;

        }

        if(arreglo < menor){
          menor = arreglo;
          posicion = i;

        }
        }

      for(i = 0; i<numero; i++)
        {
        if(arreglo > 0)
            positivos+=arreglo;

        }


      for(i = 0; i<numero; i++)
        {
        if(arreglo < 0)
            negativos+=arreglo;

        }




      printf("\nSuma de numeros positivos: %d", positivos);
      printf("\nSuma de numeros negativos: %d", negativos);
      printf("\nEl numero mayor es: %d y se encuentra en la posicion: %d", mayor,posicion);
      printf("\nEl numero menor es: %d y se encuentra en la posicion: %d", menor,posicion);



    return 0;
}


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: TENGO VARIAS DUDAS CON MI CODIGO
« Respuesta #1 en: 2 Abril 2019, 10:41 am »

Para la próxima el código del programa entre etiquetas de Código GeSHi (puedes seleccionar el lenguaje de programación apropiado en un desplegable que hay encima del cuadro de texto)

Ese código tiene un problema. Si introduces todos los elementos positivos, el mínimo va a ser incorrecto y si introduces todos los elementos negativos, el máximo va a ser incorrecto... :rolleyes: :rolleyes:
Además tienes una variable que parece que es para contar los 0, pero no la estás usando...

Citar
1- NO SE POR QUE CUANDO ME IMPRIME LA POSICION EN LA QUE ESTA EL NUMERO MAYOR Y EL MENOR ME DA LA MISMA POSICION DEBERIA SER DIFERENTE
La posición es la misma porque lo estás guardando en la misma variable <posicion>... Por eso se sobreescribe la primera asignación que es la posición del número mayor y se guarda la última asignación que haces que es la posición del menor número del array.

Citar
2- COMO PUEDO CONTAR LA CANTIDAD DE NUMERO POSITIVOS QUE SON Y CUALES SON, YA CONSIGO QUE ME HAGA LA SUMA DE LOS NUMEROS POSITIVOS Y NEGATIVOS PERO NO CONSIGO SABER COMO IMPRIMIR CUALES SON Y CUANTOS SON
Para contar los números positivos y los negativos, crea dos variables <cantidad_positivos> y <cantidad_negativos> y como ya tienes una condición para detectar cuándo un número es positivo o negativo, sólo tienes que incrementar la variable correspondiente en cada caso.
Para saber cuáles son puedes:
  • Obtenerlo al momento que recorres el array.
Código:
Numeros positivos:
Desde i := 0 hasta elementos-1
    si v[i] > 0
        mostrar v[i]
    fin si

Numeros negativos:
Desde i := 0 hasta elementos-1
    si v[i] < 0
        mostrar v[i]
    fin si
También puedes recorrer el array una sola vez y mostrar cada elemento en una línea seguido de "positivo" o "negativo" según el caso.

  • Guardarlos en otro array auxiliar
Código:
Desde i := 0 hasta elementos-1
    si v[i] > 0
        guardar v[i] en array_positivos
    sino
        guardar v[i] en array_negativos
    fin si

  • Guardar los índices en otro array auxiliar. En este caso es un poco lío pero si trabajas con objetos más grandes es una forma de ahorrar espacio.
Código:
Desde i := 0 hasta elementos-1
    si v[i] > 0
        guardar i en indices positivos
    sino
        guardar i en indices negativos
    fin si


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Phoiinex

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: TENGO VARIAS DUDAS CON MI CODIGO
« Respuesta #2 en: 2 Abril 2019, 20:16 pm »

Hola,

Soy nuevo en esto de la programación, vi tu duda y me pareció un buen reto el  poder encontrar solución tanto al programa, como a tus dudas, espero haber ayudado.

Código:
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
int arreglo[5], i, numero = 5, positivos = 0, negativos = 0,  mayor = 0, menor = 0, posicion = 0, posicion1 = 0,x;
int pos[5] = {}, neg[5] = {};//inicializamos todas las posiciones en 0, ya que por defecto el compilador inicializa los elementos que no tienen un valor específico.



for (i = 0; i < numero; i++)//Se llena el arreglo con los 10 elementos que le pones
{
printf("Introduzca numero: \n");
cin >>arreglo[i];

     //vamos guardando en nuestros array auxiliares los valor negativos y positivos
if (arreglo[i] > 0) {
pos[i] = arreglo[i];


}else {
neg[i] = arreglo[i];
}

}

for (i = 0; i < numero; i++) {

if (arreglo[i] > mayor) {
mayor = arreglo[i];
posicion = i;

}

if (arreglo[i] < menor) {
menor = arreglo[i];
posicion1 = i;

}
}

for (i = 0; i < numero; i++)
{
if (arreglo[i] > 0)
positivos += arreglo[i];

}


for (i = 0; i < numero; i++)
{
if (arreglo[i] < 0)
negativos += arreglo[i];

}


//Salidas por pantalla
cout << "Los numero positivos son: ";
for (i = 0; i < numero; i++) //bucle que nos permitira imprimir todos los numero positivos como negativos
{
if (pos[i] > 0)   
{
cout << (pos[i]) << "  ";
}
}
printf("\nSuma de numeros positivos: %d", positivos);
printf("\nEl numero mayor es: %d y se encuentra en la posicion: %d", mayor, posicion);

cout << "\nLos numero negativos son: ";
for (i = 0; i < numero; i++) //bucle que nos permitira imprimir todos los numero positivos como negativos
{
if (neg[i] < 0)
{
cout << (neg[i]) << "  ";
}

}
printf("\nSuma de numeros negativos: %d", negativos);
printf("\nEl numero menor es: %d y se encuentra en la posicion: %d", menor, posicion1);

return 0;
}

 

YreX-DwX gracias por tus opciones me guié por ellas.

En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: TENGO VARIAS DUDAS CON MI CODIGO
« Respuesta #3 en: 2 Abril 2019, 21:08 pm »

Hola,
Soy nuevo en esto de la programación, vi tu duda y me pareció un buen reto el  poder encontrar solución tanto al programa, como a tus dudas, espero haber ayudado.
Código
  1. #include <iostream>
  2. #include <conio.h>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int arreglo[5], i, numero = 5, positivos = 0, negativos = 0,  mayor = 0, menor = 0, posicion = 0, posicion1 = 0,x;
  8. int pos[5] = {}, neg[5] = {};//inicializamos todas las posiciones en 0, ya que por defecto el compilador inicializa los elementos que no tienen un valor específico.
  9.  
  10.  
  11.  
  12. for (i = 0; i < numero; i++)//Se llena el arreglo con los 10 elementos que le pones
  13. {
  14. printf("Introduzca numero: \n");
  15. cin >>arreglo[i];
  16.  
  17.     //vamos guardando en nuestros array auxiliares los valor negativos y positivos
  18. if (arreglo[i] > 0) {
  19. pos[i] = arreglo[i];
  20.  
  21.  
  22. }else {
  23. neg[i] = arreglo[i];
  24. }
  25.  
  26. }
  27.  
  28. for (i = 0; i < numero; i++) {
  29.  
  30. if (arreglo[i] > mayor) {
  31. mayor = arreglo[i];
  32. posicion = i;
  33.  
  34. }
  35.  
  36. if (arreglo[i] < menor) {
  37. menor = arreglo[i];
  38. posicion1 = i;
  39.  
  40. }
  41. }
  42.  
  43. for (i = 0; i < numero; i++)
  44. {
  45. if (arreglo[i] > 0)
  46. positivos += arreglo[i];
  47.  
  48. }
  49.  
  50.  
  51. for (i = 0; i < numero; i++)
  52. {
  53. if (arreglo[i] < 0)
  54. negativos += arreglo[i];
  55.  
  56. }
  57.  
  58.  
  59. //Salidas por pantalla
  60. cout << "Los numero positivos son: ";
  61. for (i = 0; i < numero; i++) //bucle que nos permitira imprimir todos los numero positivos como negativos
  62. {
  63. if (pos[i] > 0)  
  64. {
  65. cout << (pos[i]) << "  ";
  66. }
  67. }
  68. printf("\nSuma de numeros positivos: %d", positivos);
  69. printf("\nEl numero mayor es: %d y se encuentra en la posicion: %d", mayor, posicion);
  70.  
  71. cout << "\nLos numero negativos son: ";
  72. for (i = 0; i < numero; i++) //bucle que nos permitira imprimir todos los numero positivos como negativos
  73. {
  74. if (neg[i] < 0)
  75. {
  76. cout << (neg[i]) << "  ";
  77. }
  78.  
  79. }
  80. printf("\nSuma de numeros negativos: %d", negativos);
  81. printf("\nEl numero menor es: %d y se encuentra en la posicion: %d", menor, posicion1);
  82.  
  83. return 0;
  84. }
  85.  
 
Ya que estás empezando vamos a comentar el programa aunque he de decir que no se hacen tareas por lo que no deberías haber puesto tu código tan pronto. De todos modos tiene algunos fallos así que vamos a verlos. Al final dejo otras correcciones aunque no son errores como tal está bien corregirlos también:
  • ¿Has probado a ejecutarlo?
Cuando muestras los negativos y los positivos, seguro que no aparecen como esperarías. Estás guardando valores en dos arrays/arreglos distintos por lo que cada uno va  a su "ritmo". No puedes usar sólo el contador <i>. Piénsalo a ver.
  • Problema si todos los valores son positivos o si todos los valores son negativos
Estás igual que al principio. Si ponemos <maximo = 0> y <minimo = 0>, si introducimos todo números positivos nos va a dar como resultado que el más pequeño es 0 cuando no lo es y si introducimos todo números negativos, nos va a dar que el máximo es 0 cuando tampoco lo es.

No sé si me he dejado algún error más, pero los más visibles son esos.

Ahora vamos a ver algunos detalles:
  • La librería <conio.h>
Esa librería no es estándar por lo que no todos los compiladores pueden usarla y es una librería que no es necesaria. La función más común de esa librería suele ser <getch()> que podemos sustituir por <getchar()> que se encuentra en <stdio.h> (en C) o <cstdio> (en C++) o por <cin.get()> que se encuentra en <iostream> en C++.
  • Mezcla de <printf()> y <cout>
<printf()> es una función incluida en <stdio.h> (en C) y <cstdio> (en C++). Sin embargo es más típica de C ya que en C++ se suele optar por usar <cin> y <cout> (incluído en <iostream>) para entrada y salida sustituyendo a <printf()> y <scanf()> de C.
  • Uso de constantes
No se recomienda usar "números mágicos", es decir, números literales que aparecen de repente y no sabes por qué tienen ese valor. ¿Por qué un 5? Imagina que tienes un programa muy grande y tienes muchos arrays/arreglos de tamaño 5 y un día dices "voy a aumentar la capacidad a 10", tendrías que sustituir todos los "5" por "10" con cuidado de que haya algún 5 que no tengas que cambiar. Para ello usa constantes y sólo tendrás que cambiar el valor de la constante una vez para que cambie en todo el programa.
Código
  1. const int MAX_SIZE = 5;
  2. int main(){
  3.    int array[MAX_SIZE];
  4.    // ...
  5. }
PD: La variable <numeros = 5> es lo que hace en tu caso de constante pero no lo aprovechas tanto como podrías/deberías (además constante mejor para asegurarte de que no vas a cambiar su valor por error).
  • Nombres de las variables
Asegúrate de que puedes saber qué indica una variable leyendo únicamente su nombre y no porque lo hayas programado tú y te acuerdes que "x" es tal cosa.
PD: Tienes una variable <x> que no usas en todo el programa me parece.
Por ejemplo el array de <pos> podría dar lugar a equivocación ya que "posiciones" se suele abreviar como "pos" en muchos sitios. Igual que <posicion> y <posicion1>; mejor que sean algo como <posicion_maximo> y <posicion_minimo>.
  • Sentencias innecesarias
A partir de la línea 60, cuando quieres mostrar los positivos y los negativos. Recorres los vectores/arrays/arreglos :xD donde has guardado por un lado los positivos y por otro los negativos. No tienes que comprobar otra vez que el valor que hay guardado sea positivo o negativo respectivamente. Además usa dos contadores para saber cuántos positivos hay (esos serán los que tienes que recorrer cuando los quieras mostrar) y otro igual pero para los negativos. (Si tienes 3 positivos y 2 negativos, no muestres 5 posiciones porque las últimas contendrán basura o 0).

Creo que no me dejo nada más. Suerte y ya me comentarás lo que consigas avanzar... O lo que no. :-X :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tengo varias dudas sobre DVD a formato FLV, y otras cosas sobre FLV
Multimedia
SaintGermain 0 2,578 Último mensaje 30 Mayo 2005, 21:47 pm
por SaintGermain
Tengo varias dudas
Hacking
NoobHackING 1 2,589 Último mensaje 16 Enero 2012, 22:45 pm
por 2Fac3R
varias dudas con código batch y como hacer para saber la ip
Scripting
r7pyrred 2 3,260 Último mensaje 24 Noviembre 2012, 01:06 am
por r7pyrred
tengo varias dudas sobre iniciarme en hacking wireless
Hacking Wireless
ismael50723 7 4,641 Último mensaje 18 Junio 2015, 19:37 pm
por Sh4k4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines