gracias, como se añaden nuevas librerias al IDE?, uso VS.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
#include <stdio.h>
int main()
{
FILE *fp, *fpp;
if(fp = fopen("C:/users/robert/desktop/entrada", "r")==NULL) puts("error archivo entrada.");
if(fpp = fopen("C:/users/robert/desktop/salida", "w")==NULL) puts("error archivo salida.");
.
.
.
.
.
.
Citarwarning: assignment makes pointer from integer without a cast [enabled by default]
warning: assignment makes pointer from integer without a cast [enabled by default]
#include <stdio.h>
#include <math.h>
int funcion(int numero);
void main(){
int numero; int cifras; int primeracifra; int suma=0;
siguiente:
suma=0;
scanf("%d", &numero);
if(numero==0 || scanf("%d", &numero)!=1){
puts("\nfin de datos o datos incorrectos");
return;
}
if(funcion(numero)==-1) goto siguiente;
else{
if(primeracifra*cifras==suma) printf("\n%d cumple la condicion");
fflush(stdout);
goto siguiente;
}
}
int funcion (int numero){
int cifra=1; int *cifras=cifras; int *suma=suma; int *primeracifra=primeracifra;
int i=10;
if(numero%i==0) return -1; //numero de una sola cifra
cifra++;
for(i;i<=10000000000;i=i*10){
if(numero/i==0) break;
cifra++;
}
*cifras=cifra;
for(cifra;cifra>1;cifra--){
*suma=numero/(pow(10,cifra));
*suma=*suma+*suma;
}
*suma=*suma+(numero%10);
*primeracifra=(numero/pow(10,*cifras));
}
#include <stdio.h>
#include <math.h>
void funcion(int numero, int *cifrass, int *primeracifraa, int *sumaa);
void main(){
int numero; int cifras; int primeracifra; int suma=0;
int *cifrass;
int *primeracifraa;
int *sumaa;
*cifrass=cifras;
*primeracifraa=primeracifra;
*sumaa=suma;
suma=0;
while(scanf("%d", &numero) && numero != 0){
if(numero/10==0) continue;
funcion (numero, cifrass, primeracifraa, sumaa);
if(primeracifra*cifras==suma) printf("\n%d cumple la condicion");
fflush(stdout);
}
}
void funcion(int numero, int *cifrass, int *primeracifraa, int *sumaa){
int cifra=2; int s;
int i=100;
int cif;
for(i;i<=10000000000;i=i*10){
if(numero/i==0) break;
cifra++;
}
cifrass=&cifra;
for(cifra;cifra>1;cifra--){
s=numero/(pow(10,cifra));
s=s+s;
}
cif=cifra;
sumaa=&s+(numero%10);
s=(numero/pow(10,cif));
primeracifraa=&s;
}
Cita de: leosansan en 6 Enero 2014, 13:25 PM
Antes que nada un par de detallitos:
* la función main es de tipo int, así lo establece el estándar del C, y por tanto hay que declararla como tal, con su consiguiente return al final de la misma.
* tienes que acostumbrarte a indentar y/o sangrar y/o tabular el código, si no es casi imposible seguirlo.
Respecto al código:
* hay que poner printf o puts antes de la introducción de datos, si no queda la pantalla parpadeando y quien vaya a usarlo y no sepa de que va se quedará muy, pero que muy, mosqueado.
* tal como lo tienes faltaría un break en el if de la función, sin el else, si no no sale del bucle y se queda la pantalla como si no ocurriera nada.
* no hay mayor problema con el segundo while de la función main, salvo que está de más y te complica todo el código.
* un error frecuente en este tipo de ejercicios es que haces uso de una variable aplicándole una operación, tipo "num/=10" y pasa lo que pasa, que al volver a querer usar esa variable con su valor original ya no es el valor actual, de ahí que yo use num y num_0 para no perder el valor inicial por si te hiciera falta, que efectivamente te va a hacer falta.
* debes habituarte a poner printf, tantos como sean necesarios, para ver como evolucionan las variables a lo largo del código. En tu caso es conveniente que pongas un printf justo antes del último if de la función y veras que sorpresa te llevas con los valores de suma y cont. No paran de salir distintos valores para cada una de las variables y, curiosamente el valor de la variable "cont" siempre vale dos. Hazlo y piensa en el por qué.
* no tiene como mucho sentido un for y que dentro de su cuerpo de sentencias lo que aparezca sea un if, con su condición correspondiente. Te puedes ahorrar el if poniendo la condición entre los dos puntos y coma del for, que para eso está.
Y me dejo de rollo. He aquí una salida al código que te propongo:
Cita de: do-while en 6 Enero 2014, 00:38 AM
Dentro del cuerpo del bucle no modificas num, luego si entra en el bucle, nunca saldrá.
Lo que puedes hacer es leer en número antes de llegar al primer bucle, y al final del while que hay en su interior, justo antes de la llave de cierre, leer el siguiente número. Por ejemplo.
No he mirado si hay mas errores. Por cierto, no tengas miedo de utilizar el tabulador, tu código quedará mas organizado y será mas fácil leerlo (tal y como está es un caos y molesta bastante tener que leerlo).
¡Saludos!
#include <stdio.h>
#include <math.h>
#define N 5
int funcion(int num);
void main(){
int num, contmain;
int y;
if(scanf("%d", &num) && (num!= 0 && num>9)){
y=funcion(num);
if(y==1){ contmain ++;
printf("\n%d cumple la condicion", num);
}
if(contmain<N)printf("%d numeros que cumplen", contmain);
}
}
int funcion(int num){
int i, suma, cont=1;
int primeracifra;
suma=num%10;
for(i=10;i<=1000000;i*10){
if(num/i!=0){
cont++;
suma+=num/i;
}
else break;
}
primeracifra=num/(i/10);
if(primeracifra*cont==suma) return 1;
else return 0;
}
for(i=10;i<=1000000;i*10){
if(num/i!=0){
cont++;
suma+=num/i;
}
else break;
}
#include <stdio.h>
#include <math.h>
#define N 5
int funcion(int num);
void main(){
int num, contmain;
int y;
while(scanf("%d", &num) && num!= 0){ //para que el 0 marque el finales de la cadena
while(num/10!=0){ //while(el numero tenga como minimo, decenas)
y=funcion(num);
if(y==1){ contmain ++;
printf("\n%d cumple la condicion", num);
}
if(contmain<N)printf("%d numeros que cumplen la condicion", contmain);
}
}
}
int funcion(int num){
int i, suma=num%10, cont=1; //este contador cuenta en numero de cifras del numero y la variable suma empieza con el valor de las unidades del numero
int primeracifra;
for(i=10;i<=1000000;i*10){
if(num/i!=0){
cont++; //contador de cifras
suma+=num/i; //para ir sumando las cifras, recordemos que suma ya tiene asignado el valor de las unidades
}
}
i=10;
primeracifra=num/pow(i,cont-1); //la primera cifra es el numero divido entre i elevado al contador -1
if(primeracifra==suma) return 1; //si se cumple la condicion retorna 1
else return 0;
}