You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Buenas. Haciendo este ejercicio, me surgieron un par de preguntas.
Primero, claramente no estoy entendiendo bien el uso de scan, así que me gustaría que me pudieran decir cómo modificarlo para que encaje mejor en este ejercicio.
Segundo, no sé si hice el ejercicio de una manera un poco vueltera. Siento que tenía que trabajar con strings y tomarles la longitud, pero al final terminé haciendo las cosas con cuentas y no sabría cómo hacerlo de otra manera.
Sin más, acá está mi código:
`#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "getnum.h"
int
main(void){
int baseOG;
int baseFin;
//Primero tiene que ingresar la base original y la base final
do{
puts("Ingrese la base inicial y la deseada del numero en el siguiente formato: <original>deseada");
printf("(Note que sólo puede ingresar bases de un solo dígito; excepto '10', que debe expresarse como '0')\n: ");
}while(scanf("<%i[0-9]>%i[0-9]", &baseOG, &baseFin)!=5);
//* Nota: no sé si debe ser 5 (cuenta todo) o 2 (solo cuenta variables)
//* Nota2: en tiempo de ejecución, luego de que ingreses los datos, repite el print incesantemente.
//* Nota3: todavía no hice el caso especial de base10
//* Leo el número, tomo su longitud (para hacer la conversión polinómica a b10)
//* Voy a necesitar operar con el número, así que lo necesito como int; pero para tomar longitud, me conviene string
//* Voy a necesitar usar matemática para suplantar el dato de longitud.
int num;
num = getint("Ingrese el numero en su base original: ");
//* Hago la conversión de OG a base10
int numb10=0;
int aux=0;
int countDigits=0;
for(int i=0; num/(pow(10, i))<0 ; i++){
numb10 += (((num % (int)pow(10, i+1))-aux) / pow(10, i)) * pow(baseOG, i);
aux = num % (int)pow(10, i+1);
countDigits++;
}
//* Por si aclara algo en cuanto a las cuentas, el acumulador recibe el dígito correspondiente
//* por la base "a la i".
//* Para sacar, por ejemplo, el dígito menos significativo, basta con hacer %10.
//* Para el anteúltimo, %100 nos dejará también incluido el dígito anterior, así que lo borro (resto aux)
//* Pero ahora el dígito está acompañado de un cero a la derecha. Lo borro (divido por 10 a la i) y ahora sí
//* lo multiplico por la base elevada a la i; y modifico mi aux acordemente.
//* En fin. Luego paso de b10 a la base final
int numFin=0;
aux=numb10;
for(int i=0; i<countDigits; i++){
numFin+= (aux % baseFin) * pow(10, i);
aux = aux/baseFin;
}
//* Algoritmo para conversión de b10 a cualquier otra base. Armo el número "de atrás para adelante".
//* Finalmente, imprimo.
printf("%i (base%i) es %i en base%i", num, baseOG, numFin, baseFin);
}`
En resumen, me gustaría que me dijeran cómo usar el scan correctamente en este ejercicio, y si me convendría rehacerlo usando strings en lugar de cuentas
The text was updated successfully, but these errors were encountered:
scanf te devuelve la cantidad de datos que leyo bien, por lo tanto lo que deberias pedir es que sea 2 el resultado. si queres saber mas de scanf podes usar el siguiente comando en la terminal
man scanf
ahi indica lo siguiente
RETURN VALUE
On success, these functions return the number of input items success‐
fully matched and assigned; this can be fewer than provided for, or
even zero, in the event of an early matching failure.
The value EOF is returned if the end of input is reached before either
the first successful conversion or a matching failure occurs. EOF is
also returned if a read error occurs, in which case the error indicator
for the stream (see ferror(3)) is set, and errno is set to indicate the
error.
En cuanto al algoritmo, no es necesario usar pow, podrias ir manteniendo una variable y multiplicarla por la base cada iteracion para evitar el costo de la funcion pow en este caso. Es mejor hacerlo sobre los numeros antes que operar con strings, esta bien asi, solo fijate que podes remplazar el pow que deberia hacerlo una pisca mas eficiente
Buenas. Haciendo este ejercicio, me surgieron un par de preguntas.
Primero, claramente no estoy entendiendo bien el uso de scan, así que me gustaría que me pudieran decir cómo modificarlo para que encaje mejor en este ejercicio.
Segundo, no sé si hice el ejercicio de una manera un poco vueltera. Siento que tenía que trabajar con strings y tomarles la longitud, pero al final terminé haciendo las cosas con cuentas y no sabría cómo hacerlo de otra manera.
Sin más, acá está mi código:
`#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "getnum.h"
int
main(void){
}`
En resumen, me gustaría que me dijeran cómo usar el scan correctamente en este ejercicio, y si me convendría rehacerlo usando strings en lugar de cuentas
The text was updated successfully, but these errors were encountered: