Autor Tema: Ejercicios resueltos en C (lenguajeC) función número base delimitador punteros  (Leído 1874 veces)

Alejandra Mirano

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
Necesito  saber porque se imprimen los números de el arreglo con ceros incluidos en la funcion getbval.


Código: [Seleccionar]
#include <stdio.h>
#include <string.h>
int getbval(char num[], char base[], unsigned int **valorptr);
int validar(int partes[], char base[], char num[]);
void remplazar(char num[], int **partes);
main(){
char entrada[255];
char num[50];
char base[2];
char delim[] = "#";
int i = 0;
unsigned int * valor;
fflush(stdin);
printf("inserte numero:");
scanf("%s", &entrada);
if (strstr(entrada, "#") == NULL) { //si no se especifica base se asume base 10
strcat(entrada, "#10");
}
char * token = strtok(entrada, delim);
while (token != NULL){ //strtok separa la entrada en lo que viene antes y despues del #. se asigna respectivamente
if (i == 0){
strcpy(num, token);
i++;
} else if (i == 1) {
if (token == NULL) {
strcpy (base, "10");
} else {
strcpy(base, token);
}
}
token = strtok(NULL, "#");
}
if (getbval(num, base, &valor) == 1){ //revision de
printf("La entrada es: %s, la base es: %s, y el valor es: %i", num, base, valor);//temporal para revisar los valores
} else {
printf("error");
}
}
int getbval(char num[], char base[], unsigned int **valorptr){
int valor, i;
int partes[255];
remplazar(num, &partes);

printf("partes: \n");
for (i=NULL; i<strlen(num); i++){ //temporal

printf("%i\n", partes[i]); //temporal
} //temporal
if (validar(partes, base, num) == 1){
*valorptr = 125;
return(1); //temporal
} else {
return(0);
}

}
void remplazar(char num[], int **partes){
int i;
for (i=0; i < strlen(num); i++){
if (num[i] == '1'){
partes[i] = 1;
} else if (num[i] == '2'){
partes[i] = 2;
} else if (num[i] == '3'){
partes[i] = 3;
} else if (num[i] == '4'){
partes[i] = 4;
} else if (num[i] == '5'){
partes[i] = 5;
} else if (num[i] == '6'){
partes[i] = 6;
} else if (num[i] == '7'){
partes[i] = 7;
} else if (num[i] == '8'){
partes[i] = 8;
} else if (num[i] == '9'){
partes[i] = 9;
} else if (num[i] == 'a'){
partes[i] = 10;
} else if (num[i] == 'b'){
partes[i] = 11;
} else if (num[i] == 'c'){
partes[i] = 12;
} else if (num[i] == 'd'){
partes[i] = 13;
} else if (num[i] == 'e'){
partes[i] = 14;
} else if (num[i] == 'f'){
partes[i] = 15;
} else if (num[i] == 'g'){
partes[i] = 16;
} else if (num[i] == 'h'){
partes[i] = 17;
} else if (num[i] == 'i'){
partes[i] = 18;
} else if (num[i] == 'j'){
partes[i] = 19;
} else if (num[i] == 'k'){
partes[i] = 20;
} else if (num[i] == 'l'){
partes[i] = 21;
} else if (num[i] == 'm'){
partes[i] = 22;
} else if (num[i] == 'n'){
partes[i] = 23;
} else if (num[i] == 'o'){
partes[i] = 24;
} else if (num[i] == 'p'){
partes[i] = 25;
} else if (num[i] == 'q'){
partes[i] = 26;
} else if (num[i] == 'r'){
partes[i] = 27;
} else if (num[i] == 's'){
partes[i] = 28;
} else if (num[i] == 't'){
partes[i] = 29;
} else if (num[i] == 'u'){
partes[i] = 30;
} else if (num[i] == 'v'){
partes[i] = 31;
} else if (num[i] == 'w'){
partes[i] = 32;
} else if (num[i] == 'x'){
partes[i] = 33;
} else if (num[i] == 'y'){
partes[i] = 34;
} else if (num[i] == 'z'){
partes[i] = 35;
}
}
}
int validar(int partes[], char base[], char num[]){
int i, flag=1;
for (i=0; i < strlen(num); i++){
if (partes[i] > (int) base){
flag = 0;
}
}
if (flag == 1){
return (1);
} else {
return (0);
}
}
« Última modificación: 30 de Octubre 2020, 09:21 por Ogramar »

mark255

  • Sin experiencia
  • *
  • Mensajes: 10
    • Ver Perfil
Re:Lenjuage C, Ejercicio con arreglos
« Respuesta #1 en: 13 de Octubre 2020, 21:53 »
hola alejandra

seria interesante saber que pretendes con este programa,
así como cual es el formato de entrada y que esperas en la salida

se puede imaginar pero con mas información mejor diagnostico

errores y/o posibles mejoras:
- lo primero es que remplazar es horrible, facilmente mejorable
  si es numérico resata 48 a num[ i], si es mayuscula ...
- el main se escribe completo con valor de retorno
- en el scanf pide un puntero, puede ser &entrada[0] o entrada pero no &entrada
- delim es una constante y la declaras como una variable
  luego no usas la constate en strstr y el segundo strtok
- en strcpy (base, "10"); intentas meter tres chars en base de solo dos
- en el printf del resultado %i no es para unsigned
- cuando llamas a partes te pasa como con scanf, envia solo el puntero
- en el for de getval i no puede valer NULL, no es un puntero
- en el if de getval haces *valorptr = 125; pero declaras unsigned int **valorptr
- en remplazar otro tanto con partes
- en validar en el if intentas convetir un puntero en un int

espero que con esto mejore tu programa

suerte ;-)
« Última modificación: 14 de Octubre 2020, 11:20 por Ogramar »

mark255

  • Sin experiencia
  • *
  • Mensajes: 10
    • Ver Perfil
Re:Lenjuage C, Ejercicio con arreglos
« Respuesta #2 en: 14 de Octubre 2020, 23:53 »
hola alejandra

he hecho un programa que quizás te pueda servir como guía, no se si he acertado en lo que pretendes, pero seguro alguna cosa puedes utilizar  ;)

no me gusta como queda el código aquí  :-*

así que te lo paso en este link -> https://linkode.org/#Kscp1iCGuja4w3GM48bL77


 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".