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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con ejercicio! POR FAVOR!
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con ejercicio! POR FAVOR!  (Leído 2,974 veces)
Trompasl

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Ayuda con ejercicio! POR FAVOR!
« en: 8 Mayo 2016, 21:28 pm »

Hola gente como estan? Espero que bien, veran yo estoy cursando Elementos de Programacion en la UNLAM, la cuestion es que me tope con este ejercicio que no puedo resolver
Citar
Se ingresar valores positivos entre 1 y 50, finalizando el ingreso con el valor -10, para ello generar una función que valide dicho ingreso.
Calcular:

Cuantos números son primos.
Cantidad de números pares.
Promedio de los números impares.
Utilizar las siguientes funciones:

Resto: recibe por parámetro el Dividendo y el Divisor ; Retorna el resto
EsPar: recibe por parámetro un número; Retorna 1 si es Par, 0 si es Impar ; Invoca a la función Resto
EsPrimo: recibe por parámetro un número; Retorna 1 si es primo, 0 si no es primo ; Invoca a la función Resto. (un número es primero si solo es divisible por 1 y por sí mismo)
Promedio: recibe por parámetro la suma y el contador; Retorna el promedio si contador > 0 sino Retorna 0.

y yo llegue a esto

Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{int num,numv,cont_primos=0,cont_pares=0,cont_impares=0,acumimp=0,promimp;

    printf("Ingrese numeros entre 1 y 50, -10 para terminar  ");
    scanf("%d", &num);
numv=validar(num,1,50,-10);
while(numv!=-10)
{
    if(ESPRIMO(numv)==1)
        {cont_primos++;}
    if(ESPAR(numv)==1)
        {cont_pares++;}
        else
        {acumimp=acumimp+numv;
        cont_impares++;
        promimp=acumimp/cont_impares;}

printf("Ingrese numeros entre 1 y 50, -10 para terminar  ");
scanf("%d", &num);
numv=validar(num,1,50,-10);
}
printf("Numeros primos:%d\nNumeros pares:%d\nPromedio impares:%d\n", cont_primos, cont_pares, promimp);
getch();
}

int validar(int NRO, int minimo,int maximo,int cierre)
{if(NRO<minimo&&NRO>maximo||NRO!=cierre)
    {do
    {printf("Ingrese numeros entre 1 y 50, -10 para terminar  ");
    scanf("%d",&NRO);
    }while (NRO<minimo&&NRO>maximo||NRO!=cierre);
    return NRO;}
    else {return NRO;}
}

int RESTO(int a, int b)
{int resto;
    resto=a%b;
return resto;
}

int ESPRIMO(int NRO)
{int contdiv=0,i,valor;
     for(i=2;i<NRO;i+=1)
        if(RESTO(NRO,i)==0)
        {contdiv++;
            }
    if(contdiv==0)
        valor=1;
    else
        valor=0;
return valor;
}

int ESPAR(int NRO)
{int res,valor;
    res=RESTO(NRO,2);
    if(res=0)
    {
        valor=1;
    }
    else {valor=0;}
return valor;}

Estamos viendo funciones como veran, la cuestion es que no me cuenta ni los nros pares ni los primos, ademas de que siempre sin importar que numero ponga el promedio de impares es 2293652, no encuentro el error si serian tan amables de darme una mano!

Gracias!



En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con ejercicio! POR FAVOR!
« Respuesta #1 en: 8 Mayo 2016, 23:00 pm »

Debes rehacer la rutina de los primos.

En la rutina ESPAR has escrito
Código
  1. if(res=0)
esto siempre será falso porqué haces que res valga 0 y, como las operaciones matemáticas siempre devuelven un valor, if recogerá el 0 y no ejecutará su código adjunto.

La condición del if de la rutina validar está mal construida: un número no puede ser menor que mínimo Y mayor que máximo.

promimp no puede ser un entero. Los promedios suelen dar lugar a números reales.

Y le das un poco de formato a tu código, que sea más coherente, tu profesor te lo agradecerá (puede que hasta te suba nota).


En línea

Trompasl

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ayuda con ejercicio! POR FAVOR!
« Respuesta #2 en: 8 Mayo 2016, 23:09 pm »

Hola, gracias por contestar! Mirá, si pongo OR || en el if no me sale del ciclo do while, porque es esto? Que tiene de malo la funcion de los primos? Arregle lo de promimp igual me sigue dando los mismo errores, una mano mas es mucho pedir?
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda con ejercicio! POR FAVOR!
« Respuesta #3 en: 8 Mayo 2016, 23:34 pm »

Sobre el if de validar
Código
  1. if(NRO != cierre && (NRO < minimo || NRO > maximo))
  2.  

Sobre la función de ESPRIMO
La tuya está bien, lo único es que es lenta, pero para números menores o iguales a 50 es suficiente.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda por favor con un ejercicio, dev c++
Programación C/C++
raenriquez4 8 5,491 Último mensaje 22 Agosto 2016, 06:20 am
por AlbertoBSD
Ejercicio de C, Ayuda por favor!
Programación C/C++
Geg1 7 3,701 Último mensaje 6 Noviembre 2016, 20:58 pm
por engel lex
Ayuda por favor ejercicio reloj do/while C « 1 2 »
Programación C/C++
juanpalomo098 13 10,546 Último mensaje 22 Noviembre 2016, 23:34 pm
por juanpalomo098
Por favor ayuda en un ejercicio en java
Ejercicios
alvaro09939 0 2,775 Último mensaje 17 Septiembre 2018, 13:09 pm
por alvaro09939
Ejercicio de diagrama ER ayuda por favor
Bases de Datos
Gbriel 1 1,944 Último mensaje 26 Octubre 2018, 15:20 pm
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines