Ayuda con ejercicio de C

mongui

Buenas. Nos han mandado éste ejercicio, que consiste en sacar las funciones para el menú principal. Aver si alguien me puede hechar una mano porfa : D

/*

  • Escribir un subprograma que reciba un numero entero como parametro y devuelva
  • un valor que lo clasifique como perfecto, deficiente o abundante
    */

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

void sumaDivisores(int, int *);

int main(){

int num, suma;

printf("Escribe un numero natural \t");

scanf("%d", &num);

sumaDivisores(num, &suma);

if (suma > num)
printf("%d es un numero abundante \n", num);
else
if (suma < num)
printf("%d es un numero deficiente \n", num);
else
printf("%d es un numero exacto\n",num);

getch();

}

void sumaDivisores(int n, int *total){

/* Calcula todos los divisores de n

  Para ello deberas dividir n entre todos
  los numeros naturales entre 1 y n-1

  Si encuentras un divisor, lo sumas
  a una variable contador

  Al final deberas devolver dicha
  variable contador a traves de (*total)
*/

}

Kartalon

Inténtalo porque no es nada difícil... O pon dudas más específicas, pero no esperes que otros te hagan los deberes.

PD: Yo me quedé en Hola Mundo y estoy de resaca :(

xTr3m1S

si fuese en C# te ayudaba, y ya, ya se que son muy parecidos, pero sudo ahora de ponerme a mirar las equivalencias.

mongui

Pero es que no entiendo el planteamiento :/

aLeoLo

oh no, C...

Es un odio visceral.

soz

_

0,67

MTX_Anubis

y cual es tu problema? xD

mongui

Pos éso, que realmente no entiendo qué pide... Numero exacto, abundante, o deficiente... WTF?

-SHolmes-

#2 Hola Mundo es mítico xDDD

El año pasado yo también me quedé ahí... por eso este año me toca volver a empezar xD

#1 Pregunta una duda específica, como ya han dicho por ahí, MV no te hace los deberes ;)

PD: los punteros me tocan los cojones, y la función que pones ahí... pues como que yo no te voy a poder ser de gran ayuda xD

mongui

La pregunta que hago es, que aver qué demonios tengo qué hacer. Es que éso que pone de mostrar un número en función de si es exacto, abundante, o deficiente es lo que no entiendo :/

xTr3m1S

mira que dificil es poner en google numero perfecto yq ue te salga esto de primer link

http://es.wikipedia.org/wiki/N%C3%BAmero_perfecto

el resto te los buscas solito.

edit: mira mas facil justo en la misma pagina que te he pasado, salen links a numeros deficientes y abundantes.

Dod-Evers

Pero si en el comentario de la función te dice qué es lo que tienes que hacer!.. ains...

blablabla

total = elresultadoquehassacado de hacer lo que te dicen hacer.

PD: Tú tienes que hacer la función de sumaDigitos o lo que sea. Un número perfecto es aquel que es igual a la suma y el producto de sus divisores por ejemplo el 6 = 3x2x1 y 6=3+2+1

MTX_Anubis

#8 te pide que hagas esta función

void sumaDivisores(int n, int *total){

/* Calcula todos los divisores de n

Para ello deberas dividir n entre todos
los numeros naturales entre 1 y n-1

Si encuentras un divisor, lo sumas
a una variable contador

Al final deberas devolver dicha
variable contador a traves de (*total)
*/
}

vamos ir de uno en uno hasta n-1 (realmente con n/2 te vale pero pone n-1 xD) mirando divisores, si es divisor lo sumas a una variable y los vas acumulando, finalmente.

vamos que es un for de 1 hasta n-1. Si es divisor (el resto es cero), que lo acumule. Ya está.

El resto ya lo tienes hecho.

Los numeros perfectos pues son iguales a la suma de sus divisores, los abundantes los que son menores y los deficientes los que son mayores, eso lo sacas leyendo el código xD

mongui

Sorry, pero en serio que estoy espesísimo. En clase no me costaría una paja sacarlo, pero después del puente, entre el vodka y el JB... Hechadme una mano.xD Tengo escrito lo que sería para que me dijese si es perfecto o no, pero me falta para que me diga lo de abundante o deficiente.xD

B

"Un número perfecto es un natural que es igual a la suma de sus divisores propios positivos, sin incluirse él mismo.

Así, 6 es un número perfecto, porque sus divisores propios son 1, 2 y 3; y 6 = 1 + 2 + 3. Los siguientes números perfectos son 28, 496 y 8128."

http://es.wikipedia.org/wiki/N%C3%BAmero_perfecto

Haz el código, e introduce el 6, 28, etc... Si te dice que son perfectos, está bien.

mongui

Sí, éso lo hace. Pero ahora quiero que diga que si no es perfecto, que me diga si es abundante o deficiente

SicKneSs

el q no sabes hacer ? lo que te piden es una chorradita

nose las condiciones de cuando un numero es abundante o lo otro, si no lo sabes busca en google y yata

basicamente es un for de 1 hasta n-1, si el resto entre la variable contadora del bucle y el int pasado por parametro es igual a cero pues se lo sumas al total...

despues en el main, si total = num entonces num es perfecto sino ... etc

MTX_Anubis

#16 pero vamos a ver, si eso te lo está haciendo aquí:

if (suma > num)
printf("%d es un numero abundante \n", num);
else
if (suma < num)
printf("%d es un numero deficiente \n", num);
else
printf("%d es un numero exacto\n",num);

mongui

Pero es que lo tengo que meter abajo en forma de funcion. En serio, estoy super bloqueado

Dod-Evers

Joder, sí que estás espeso...

Ejecuta el programa entero y ya está. Lo del abundante y deficiente ya está hecho.

main:

variable = funciónhechaporti();

si variable > x entonces
sino otra cosa

No tienes que hacer nada más...

Ya podían enseñaros programación estructurada en vez de a programar en c, que no se aprende a programar sabiendo la sintaxis!

sh0ty

Si tienes que dividir el numero por cada uno de los numeros que van de 2 a n-1 (Ej. 6/2, 6/3, 6/4... hasta 5) tienes que usar un bucle y saber cuando el resultado de la division es un numero natural para despues sumarlo a la variable que usaras a modo de contador. Sumando estos numeros si obtienes el mismo numero que introduciste como parametro a la funcion es que se trata de un numero perfecto.
Ah, y la varible contador debe estar siempre inicializada a 1, ya que para saber si es perfecto se tienen en cuenta todos los divisores excepto el mismo numero (todo numero es por lo menos divisible por el mismo y por la unidad).
Y supongo que para identificar un deficiente o abudante sencillamente hay que compararlo con el numero del que se trata, si la suma de divisores es mayor que el numero n entonces deduzco que debe ser abudante (por ser mayor) y viceversa.

Es curioso eso del numero perfecto, no conocia esa curiosidad.

gF

Pero si te explica perfectamente lo que tienes que hacer, no hace falta ni pensar...

Por cierto, dile a tu profesor que no es necesario dividir entre todos los que van de 1 a n-1, es suficiente con los que van de 1 a n/2, a partir de n/2 no habrá ninguno que divida a n...

void sumaDivisores(int n, int *total){

/* Calcula todos los divisores de n

Para ello deberas dividir n entre todos
los numeros naturales entre 1 y n-1

Si encuentras un divisor, lo sumas
a una variable contador

Al final deberas devolver dicha
variable contador a traves de (*total)
*/

Usuarios habituales

  • sh0ty
  • Dod-Evers
  • mongui
  • MTX_Anubis
  • SicKneSs
  • xTr3m1S
  • Kartalon