Autor
|
Tema: Posición de un dígito (Leído 4,453 veces)
|
lohayne
Desconectado
Mensajes: 8
|
hola ¿alguien podría ayudarme con una función en la que pongo un número y cualquier posición y el programa me devuelve el dígito del número que está en esa posición. De izquierda a derecha.
Por ejemplo (358, 1) = 3 El dígito de 358 en la posición 1 es 3
Hice un código, pero la función relacionada con la posición sigue yendo mal
|
|
|
En línea
|
|
|
|
Kenji-chan
Desconectado
Mensajes: 104
|
pon tu código
|
|
|
En línea
|
|
|
|
lohayne
Desconectado
Mensajes: 8
|
#include<stdio.h> #include<math.h>
int contdigitos(int &n); int posicao (int &num,int &n); int maiordig (int n);
//main
int main () { int n=0,pos,num; scanf("%i",&n); int numdigitos= contdigitos(n); int npos=posicao(num,n); printf("\n numero de digitos:%i",numdigitos); printf("\n entre com um numero: "); scanf("%d", &n);
printf("coloque a posicao: "); scanf("%d", &pos);
printf("%dth digit of %d is %d.\n", pos, n,npos);
int largedig= maiordig(n); printf("maior digito:%i",largedig);
return 0;}
// numero de digitos
int contdigitos(int &n) { if (n < 10) { return 1; } int contador = 0; while (n > 0) { n /= 10; contador++; } return contador; } //num = posição int posicao(int &num,int &n){ int r, t1, t2;
t1 = pow(10, num +1); r = n % t1;
if (num > 0) { t2 = pow(10, num); r = r / t2; }
return r; } int maiordig (int n) { int digit, maior=0; while (n>0){ digit=n%10; if(digit>maior) maior=digit; n=n/10;} return maior ;}
El ejercicio original se compone de 3 funciones, pero sólo la función que pide la posición va mal
|
|
|
En línea
|
|
|
|
Kenji-chan
Desconectado
Mensajes: 104
|
por que no tratas el numero como un string (char*) de esa forma podras recorrer sus posición para saber que dígito ocupa que posición de este modo #include<stdio.h> int main () { char numero[15]; int pos = 0; fprintf(stdout , "introduzca un digito: "); fprintf(stdout , "ntrodusca una posicion: "); fprintf(stdout , "%dth digito de %s es %c.\n", pos , numero , numero [pos -1]); return 0; }
|
|
« Última modificación: 15 Abril 2018, 21:22 pm por Kenji-chan »
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Ahí va mi versión, desde 0. Se deben tener algunas consideraciones, tal y como muestra el código #include <stdio.h> #include <math.h> int main() { int n; int copia; unsigned i; unsigned num_digitos; unsigned pos; unsigned resultado; // Adquiero el numero // Hago copia pues el proceso es destructivo copia = n; // Por razon de que log10 no puede usar numeros negativos lo hago positivo if(copia<0) copia = -copia; // Según documentación log10 no debería usarse con 0 if(copia == 0) num_digitos=1; else num_digitos = log10(copia )+1; // Adquiero la posición deseada // Si está fuera del número: avisar y salir if(pos==0 || pos>num_digitos) { puts("Indice fuera de rango"); return -1; } // Consigo el número en la posición deseada for(i=0; i<num_digitos-pos+1; ++i) { resultado = copia%10; copia /= 10; } // Lo muestro printf("En la posicion %d del numero %d esta el %d", pos , n , resultado ); }
|
|
|
En línea
|
|
|
|
lohayne
Desconectado
Mensajes: 8
|
#include<stdio.h> #include<math.h>
int contdigitos(int &n); int maiordig (int &n); //main
int main () { char numero [15]; int n,pos=0,num; scanf("%i",&n);
int numdigitos= contdigitos(n); printf("\n numero de digitos:%i",numdigitos);
int largedig= maiordig(n); printf("maior digito:%i",largedig);
fprintf(stdout, "introduzca un digito: "); scanf("%s", numero); fprintf(stdout, "ntrodusca una posicion: "); scanf("%d", &pos);
fprintf(stdout, "%dth digito de %s es %c.\n", pos, numero, numero[pos-1]);
return 0;}
// numero de digitos
int contdigitos(int &n) { if (n < 10) { return 1; } int contador = 0; while (n > 0) { n /= 10; contador++; } return contador; }
int maiordig (int &n) { int digit, maior=0; while (n>0){ digit=n%10; if(digit>maior) maior=digit; n=n/10;} return maior ;}
jajaja Ahora la posición es correcta, pero mi función para mayor dígito esta volviendo 0 y no tengo ni idea de por qué
|
|
|
En línea
|
|
|
|
lohayne
Desconectado
Mensajes: 8
|
El código funcionó No sé cómo Agradecêlos, ayudaron mucho
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Estas mezclando C y C++ en un compilador de C++.
Cuando en C++ pasas un argumento a una función cuyo argumento esté prototipo con un & pasas una referencia y por tanto ese dato será modificado. En contdigitos has variado el valor de n, cuando se lo entregas a maiordig ya no tienes el valor n original sino el que te dejó contdigitos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Calculado el dígito dos mil billones del número pi
« 1 2 »
Noticias
|
wolfbcn
|
15
|
6,735
|
19 Septiembre 2010, 15:26 pm
por Karcrack
|
|
|
validar igualdad entre 2 cifras a nivel caracter (digito)
Dudas Generales
|
maxmag
|
4
|
3,704
|
4 Junio 2012, 23:19 pm
por maxtextla
|
|
|
Como conseguir un generador de digito de control
Ingeniería Inversa
|
wiredbob
|
3
|
3,130
|
22 Julio 2014, 12:02 pm
por wiredbob
|
|
|
Recorrer integer dígito por dígito
Programación C/C++
|
Daor02
|
3
|
13,740
|
20 Junio 2016, 16:54 pm
por tincopasan
|
|
|
Digito no deseado?
Programación C/C++
|
JulianDronger
|
2
|
1,859
|
22 Febrero 2019, 20:11 pm
por JulianDronger
|
|