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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Posición de un dígito
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Posición de un dígito  (Leído 3,895 veces)
lohayne

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Posición de un dígito
« en: 15 Abril 2018, 20:00 pm »

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 Desconectado

Mensajes: 104


Ver Perfil
Re: Posición de un dígito
« Respuesta #1 en: 15 Abril 2018, 20:42 pm »

pon tu código


En línea

lohayne

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Posición de un dígito
« Respuesta #2 en: 15 Abril 2018, 20:51 pm »

#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 Desconectado

Mensajes: 104


Ver Perfil
Re: Posición de un dígito
« Respuesta #3 en: 15 Abril 2018, 21:05 pm »

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

Código
  1. #include<stdio.h>
  2.  
  3. int main () {
  4. char numero[15];
  5. int pos = 0;
  6.  
  7. fprintf(stdout, "introduzca un digito: ");
  8. scanf("%s", numero);
  9. fprintf(stdout, "ntrodusca una posicion: ");
  10. scanf("%d", &pos);
  11.  
  12. fprintf(stdout, "%dth digito de %s es %c.\n", pos, numero, numero[pos-1]);
  13.  
  14. return 0;
  15. }
  16.  

« Última modificación: 15 Abril 2018, 21:22 pm por Kenji-chan » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Posición de un dígito
« Respuesta #4 en: 15 Abril 2018, 22:32 pm »

Ahí va mi versión, desde 0. Se deben tener algunas consideraciones, tal y como muestra el código
Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main() {
  5.    int n;
  6.    int copia;
  7.    unsigned i;
  8.    unsigned num_digitos;
  9.    unsigned pos;
  10.    unsigned resultado;
  11.  
  12.    // Adquiero el numero
  13.    printf("Numero: ");
  14.    scanf("%d", &n);
  15.  
  16.    // Hago copia pues el proceso es destructivo
  17.    copia = n;
  18.  
  19.    // Por razon de que log10 no puede usar numeros negativos lo hago positivo
  20.    if(copia<0)
  21.        copia = -copia;
  22.  
  23.    // Según documentación log10 no debería usarse con 0
  24.    if(copia == 0)
  25.        num_digitos=1;
  26.    else
  27.        num_digitos = log10(copia)+1;
  28.  
  29.    // Adquiero la posición deseada
  30.    printf("Posicion: ");
  31.    scanf("%u", &pos);
  32.  
  33.    // Si está fuera del número: avisar y salir
  34.    if(pos==0 || pos>num_digitos) {
  35.        puts("Indice fuera de rango");
  36.        return -1;
  37.    }
  38.  
  39.    // Consigo el número en la posición deseada
  40.    for(i=0; i<num_digitos-pos+1; ++i) {
  41.        resultado = copia%10;
  42.        copia /= 10;
  43.    }
  44.  
  45.    // Lo muestro
  46.    printf("En la posicion %d del numero %d esta el %d", pos, n, resultado);
  47. }
  48.  
En línea

lohayne

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Posición de un dígito
« Respuesta #5 en: 15 Abril 2018, 22:37 pm »

#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 Desconectado

Mensajes: 8


Ver Perfil
Re: Posición de un dígito
« Respuesta #6 en: 15 Abril 2018, 22:48 pm »

El código funcionó
No sé cómo Agradecêlos, ayudaron mucho
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Posición de un dígito
« Respuesta #7 en: 16 Abril 2018, 00:32 am »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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,019 Último mensaje 19 Septiembre 2010, 15:26 pm
por Karcrack
validar igualdad entre 2 cifras a nivel caracter (digito)
Dudas Generales
maxmag 4 3,457 Último mensaje 4 Junio 2012, 23:19 pm
por maxtextla
Como conseguir un generador de digito de control
Ingeniería Inversa
wiredbob 3 2,862 Último mensaje 22 Julio 2014, 12:02 pm
por wiredbob
Recorrer integer dígito por dígito
Programación C/C++
Daor02 3 13,106 Último mensaje 20 Junio 2016, 16:54 pm
por tincopasan
Digito no deseado?
Programación C/C++
JulianDronger 2 1,588 Último mensaje 22 Febrero 2019, 20:11 pm
por JulianDronger
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines