Problema en C

R

Hola a todos/as, estoy aprendiendo poco a poco a programar en este lenguaje, en el que la verdad no me gusta mucho, y estoy realizando unos ejercicios que encontré por internet, y tengo una duda en uno de ellos, y la solución no viene. Bueno el enunciado de este problema es el siguiente, a ver si alguién me puede ayudar por favor.
En teoría este es más fácil, y sin embargo lo se hacer pero el otro no.

[/b]Hacer un programa que pida números hasta introducir uno divisible por 7; el programa también ha de terminar cuando la suma de los números que vamos introduciendo sea superior a 25.[/b] :

#include <stdio.h>
#include <conio.h>
int main(void)
{
int num=0, tot=0;


while(tot<=25)
{
                           printf("Introduce un numero: ");
                           scanf("%d", &num);
                           tot=tot+num;
                           printf("Total=%d\n", tot);
                           if(num%7==0)printf("Has introducido un multiplo de 7"); 
                           if(num%7==0)break;
}
getch();

}

Hacer un programa que pida números hasta que se introduzca un negativo. Se han de sumar por un lado los números pares y por el otro los números impares. [[ ESTE ES EL QUE NO ME SALE ]]

Por favor, si alguien sabe hacerlo que me de pistas o algo por favor, es que no caigo en él :s
Gracias.

A

Se puede hacer comprobando que el módulo 2 del número que introduces da o no da cero. Es muy parecido al que has hecho.

#include < iostream >
using namespace std;
int main()
{
int a=0,b=0,c=0;
while(a>=0) {
cout<<"Introduce un numero: "<<endl; cin>>a;
if(a%2==0) b=b+a; else(c=c+a);
}
cout<<"\nSuma pares: "<< b <<" - Suma impares: "<<c;
return 0;
}

Nota: las "<" y ">" están así para que media-vida no lo tome como tags HTML.

EnZo

buena solucion :)
solo cambiaria esta linea, aunque simplemente es por estetica.

if(a%2==0) b=b+a; else(c=c+a);

por

(a%2==0) ? b+=a : c+=a;

PD: Si no tuvieses el mod como lo harias?

LOc0

#3

Yo creo que para alguien que esté empezando la nomenclatura if-then es más clara que el ?-:

En cuanto a hacerlo sin mod, yo lo haría restándole al número en cuestión 2 unidades hasta llegar a 0 (par) o a 1 (impar).

Salu2 ;)

A

int par(int n);
int impar(int n);

int par(int n)
{
if (n == 0) return 1;
return impar(n-1);
}

int impar(int n)
{
if (n == 0) return 0;
return par(n-1);
}

PD: He hecho trampa y he consultado a google. : -P

Por lo visto el programa va restando 1 al número que introducimos. Cuando vale 0 devuelve si es par o no dependiendo de la funcion en la que está.

A

Pensándolo bien la solución de LOc0 es mejor, o al menos más rápida.

R

Muchas gracias tios ;)

A

A todo esto... ¿ Cómo calcular cuando un número es o no primo ?. ¿ Algún método realmente rápido ? ; -)

T

ARCHVILE para calcular si un numero o no es primo, tienes k acer un bucle for, que vaya desde el 2 hasta el numero en cuestion/2, y si alguno mod numero en cuestion=0, entonces, uno le divide, por lo cual no seria primo....

A

t4m4g0tch1, correcto; pero lo que pregunto es... ¿ Cual es el método más rápido ?

maRc

Primero comprueba que no es par, luego empieza a partir del 3 aumentando de 2 en 2.

A

Mucho mejor : -) El método que me enseñaron era justo ese, salvo porque además de comprobar si era par, se comprobaba si tenía raíz cuadrada, lo cual quita muchos números de la división.

LoRTH

Por si te sirve, yo hice un programa, que miraba del 1 al 10000 y que miraba los divisores de todos los numeros y que a la vez la suma de estos divisores formaran otro numero, los divisores de los cuales, la suma creara el primer numero. El unico error del problema es que repite los numeros...

#include <stdio.h>
#define MAX 10000
int contador1=0,contador2=0,z,i;
void main(){
printf("\n\nEls números amics son:\n");
for(z=1;z<=MAX;z++){
for(i=1;i<MAX;i++){
if((z%i==0) && (i!=z)) {
contador1=contador1+i;

}
}
for(i=1;i<MAX;i++){
if((contador1%i==0) && (i!=contador1)){
contador2=contador2+i;

              }
                                                                                                            }
                                                                            if((z==contador2) && (z!=contador1)){
                                                                                                            printf("%d i %d son nombres amics. \n",z,contador1);
                                                                                                                            }
                                                                                            contador1=0;
                                                                                                            contador2=0;
                                                                                                                    }

}

Si le pones envez de 10.000 100.000 seria una buena prueva para ver la potencia de un pc... Si esta hecho con variables globales, es de hace tiempo, con lo cual aun no sabia el tema de variables locales, ni funciones/procedimientos...

P

Hola, aprovechando este post os quería preguntar una cosa que no soy capaz de solucionar, a ver si vosotros me podeis echar un cable.

Con el bucle do-while tengo que pedir números por teclado hasta que la suma de los pares sumen más de 50. ¿Cómo hago esto? Es que no tengo ni idea. Bueno perdonar las molestias y demás y si me podeis ayudar os lo agradecería un monton. :)
Saludos.

EnZo

en javascript seria una cosa asi:

<script>
suma=0;
do {
num=Number(prompt("Numero " + suma));
if (num%2==0) suma+=num;
} while (suma<=50);
document.write(suma);
</script>

ara te toca traducirlo

maRc

En pseudocódigo:

hacer {
&nbsp leer_numero;
&nbsp si numero es par
&nbsp &nbsp &nbsp suma=suma+numero;
} mientras que suma <= 50

P

Ya está solucionado, muchas gracias :P

Usuarios habituales