• Jueves 28 de Marzo de 2024, 11:57

Autor Tema:  A ver si me pueden solucionar el problemita, gracias!  (Leído 1196 veces)

AlejandroFioretti

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
A ver si me pueden solucionar el problemita, gracias!
« en: Jueves 26 de Noviembre de 2009, 17:10 »
0
Gente, el tema es así...estoy en Ing. en Sistemas en la U.T.N y recién estoy empezando con esto de la programación y realmente me da mucha vergüenza poner esto aca porq se q hay gente q sabe mucho y esto es una tremenda estupidez...pero a mi me está complicando la vida!!! En fin, hace unos dias estoy experimentando el lenguaje c a ver q onda...y me puse a hacer un programa muy muy sencillo, el programa consiste en ingresar números hasta una cierta cantidad (en mi ejemplo son 5 números) y el programa me va a ir contando a ver cuantos ceros hay...la suma total de los negativos...y el promedio de los positivos el problema es q el programa no me tiene en cuenta el último dato ingresado...es decir, por ejemplo si ingreso 5 ceros y uno de esos 5 ceros aparece en el ultimo pedido del programa este no me lo cuenta, avisándome q solo se ingresaron 4 ceros...y además como veran en el primer while he puesto si la cant. de números ingresados es menor o igual q 5...y el programa me pide 6 veces q ingrese los datos...no se si me explico espero me puedan ayudar!!! Desde ya les agradezco aunq más no sea...solo por leer a este ignorante más de este mundo ignorante, gracias! Muchas gracias!!

#include<stdio.h>
#include<string.h>
#include<conio.h>

void main()
{
 int sne=0;
 int snn=0;
 int cc=0;
 int cp=0;
 int cn=0;
 int nro;
 float prom;
  printf("Ingrese un númeron");
  scanf("%d",&nro);
  while (cn<=5)
    {
        ++cn;
        if (nro>0)
         {
           sne=sne+nro;
           ++cp;
         }
       else
           if (nro<0)
              snn=snn+nro;
           else
              ++cc;
   printd("Ingrese un númeron");
   scanf("%d",&nro);
    }
  while(cp!=0)
 {
  prom=sne/cp;
  }
  printf("El promedio de los pos. es %.2f , la suma de los neg. es %d ,  la cant. de ceros es %d, prom,snn,cc);
getch();
}

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: A ver si me pueden solucionar el problemita, gracias!
« Respuesta #1 en: Jueves 26 de Noviembre de 2009, 19:23 »
0
Buenas

Fijate que arriva del cuadro de texto para los menajes tenes una lsita ddesplegable para poneretiquietas de codigo, asi es mas facil leer.  :good:

Ahi estas incrementando el contador y evaluas los valores antes  de hacer la lectura, por lo que en la ultima lectura no se evalua el valor ingresado, o sea, sea el valor que sea no se incrementa ningun acumulador.
Lo que podrias hacer es sacar la lectura de afuera del while, y pasar la de adentro al principio.
 Igual fijate que si usas un contador inicializado en 0 y como condicion <= N, se va a ejecutar N+1 veces, si solo queres 5 pone < N.

Tambien proba de hacerlo con un ciclo for, va a resultar mas facil.

Espero haber podido ayudar  :good:

UTN  :beer:
The sweet smell of a great sorrow lies over the land.


ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: A ver si me pueden solucionar el problemita, gracias!
« Respuesta #2 en: Jueves 26 de Noviembre de 2009, 19:42 »
0
Igual que el compañero te recomiendo que uses etiquetas [ code][ /code] (sin espacio) o la lista desplegable de arriba que dice code, hace que el codigo sea mas facil de leer.

Como bien apunta el compañero, la lectura la haces al final del ciclo y no al principio, ademas tienes una lectura inecesaria antes del ciclo while, y tambien la condicion de terminacion del ciclo esta mal, ya que tu contador inicia en cero, deberia ser while (cn<5), ya que de 0 a 4 son 5 numeros. De la forma en que lo haces, en realidad estas leyendo 7 veces, no 5, es raro que no notaras que haces 7 lecturas al ejecutar el programa.

Tambien tienes un error de logica en esta parte:

Código: C
  1.  
  2.     while(cp!=0)
  3.     {
  4.         prom=sne/cp;
  5.     }
  6.  
  7.  

Si cp != 0 entonces se crea un ciclo infinito, ya que no modificas el valor de cp dentro del ciclo.

Lo mas seguro es que querias sacar el promedio solo si habias leido positvos, por lo que deberias usar un if en lugar de un while.

Esos son los errores de logica que note a simple vista, quizas tengas mas, asi que te recomiendo que leas un poco mas sobre porgramacion en C/C++ y hagas mas ejercicios, para que poco a poco vayas entendiendo un poco mas sobre el lenguaje.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

AlejandroFioretti

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: A ver si me pueden solucionar el problemita, gracias!
« Respuesta #3 en: Jueves 26 de Noviembre de 2009, 19:47 »
0
Muchisimas gracias por la ayuda gente!!!! Problema solucionado!!!! y aguante el foro!