| |
|
52
|
Programación / Programación C/C++ / Re: ¿Cómo hacer el diagrama de flujo de esta función?
|
en: 12 Enero 2014, 13:34 pm
|
cuando llamas a decBin dentro de esa misma funcion, para efectos del diagrama de flujo es como si llamaras a una función externa, ya que a fin de cuentas eso es lo que está haciendo, que la función que llame seaexactamente igual, no tiene nada que ver  A ver si lo he entendido, yo lo he hecho así xD 
|
|
|
|
|
53
|
Programación / Programación C/C++ / ¿Cómo hacer el diagrama de flujo de esta función?
|
en: 11 Enero 2014, 17:40 pm
|
Buenas, tengo este programa que pasa de decimal a binario: #include <stdio.h> #include "decBin.h"
void decBin(int n); int leeNumero();
int main () {
int n;
n = leeNumero(); decBin(n); printf("\n"); return 0;
}
int leeNumero()
{
int numero;
do{
printf(T_INTRODUZCA_NUMERO); scanf("%d", &numero);
} while(numero < 0);
return numero;
}
void decBin (int n)
{
if (n == 0) printf("0"); else if (n == 1) printf("1");
else { decBin (n/2); printf("%d", n % 2);
}
} El diagrama de flujo de la función main como de la función leeNumero sé hacerlos, pero no sé como hacer el de la función recursiva decBin, ¿alguna ayuda?Gracias de antemano y saludos!
|
|
|
|
|
55
|
Programación / Programación C/C++ / Re: Problema con programa conversor de hexadecimal a decimal
|
en: 10 Enero 2014, 11:07 am
|
tu programaste hexDec? por hexDec revisa la validez de los caracteres... lo otro que no entiendo es por qué tendrias que quitar cosas de hexDec :s creo que es bueno que te expliques con mas detalle (sin codigo) para poder comprender lo siguiente... - que tienes? - que quieres? - que sabes? - cual es tu problema? - donde está el problema?
porque hexValidos a simple vista se ve funcional, hexDec también, así que no comprendo el problema del programa
Buenas, sí, yo hice hexDec, el caso es que en mi facultad me piden primero que haga el programa hexDec.c con una función llamada hexDec (aparte de la función main) que haga lo siguiente: Modifique el programa de forma que, además de la función main, exista una función que tome como parámetros dos caracteres hexadecimales y devuelva su valor decimal. Eso supone: - declarar una nueva función llamada hexDec - definir la nueva función - modificar la función main para que utilice la nueva función Bueno, esta función la hice y me funciona el programa perfectamente, ahora viene el ejercicio 2 donde me piden lo siguiente: Defina una nueva función hexValidos que reciba dos caracteres como parámetros, y devuelva una indicación de si los dos caracteres son caracteres hexadecimales validos o no. En mi anterior mensaje pongo lo que llevo hecho y a falta de un par de cosas parece que me sirve perfectamente
|
|
|
|
|
56
|
Programación / Programación C/C++ / Re: Problema con programa conversor de hexadecimal a decimal
|
en: 10 Enero 2014, 11:01 am
|
Buenas, he conseguido hacer esto: #include <stdio.h>
#define NOERROR 1 #define ERROR 0
int hexValidos(char a, char b); int hexDec(char c1, char c2); int main() {
/* Declaramos las variables */ char car1; char car2;
/* Bucle While para que salga con qq */ do { printf("Introduzca el numero hexadecimal: "); scanf(" %c %c", &car1, &car2); hexDec(car1, car2); } while(car1 != 'q' && car2 != 'q');
return 0; }
int hexDec(char c1, char c2) {
char v1; char v2; int cuno = NOERROR; int cdos = NOERROR; int resultado;
if (c1 != 'q' && c2 != 'q') {
if ('0' <= c1 && c1 <= '9') v1 = c1 - '0'; else if ('A' <= c1 && c1 <= 'F') v1 = c1 - 'A' + 10; else if ('a' <= c1 && c1 <= 'f') v1 = c1 - 'a' + 10; else { hexValidos(c1,c2);
} if ('0' <= c2 && c2 <= '9') v2 = c2 - '0'; else if ('A' <= c2 && c2 <= 'F') v2 = c2 - 'A' + 10; else if ('a' <= c2 && c2 <= 'f') v2 = c2 - 'a' + 10; else { hexValidos(c1,c2); }
if (cuno == NOERROR && cdos == NOERROR) { resultado = 16 * v1 + v2;
printf("El valor decimal de 0x%c%c es %d\n", c1, c2, resultado);
} }
cuno = NOERROR; cdos = NOERROR;
return resultado;
}
int hexValidos(char a, char b) {
char va1; char va2; int cuno = NOERROR; int cdos = NOERROR;
if (a != 'q' && b != 'q') {
if ('0' <= a && a <= '9') va1 = a - '0'; else if ('A' <= a && a <= 'F') va1 = a - 'A' + 10; else if ('a' <= a && a <= 'f') va1 = a - 'a' + 10; else { cuno = ERROR; } if ('0' <= b && b <= '9') va2 = b - '0'; else if ('A' <= b && b <= 'F') va2 = b - 'A' + 10; else if ('a' <= b && b <= 'f') va2 = b - 'a' + 10; else { cdos = ERROR; }
if (cuno == ERROR || cdos == ERROR) { printf("Invalido\n");
} }
return 0;
} Pero tengo un par de cosas que no me sirven, cuando meto un par de caracteres no validos el programa hace lo siguiente: Introduzca el numero hexadecimal: ta Invalido El valor decimal de 0xta es 1866¿Cómo puedo hacer que no me salga el mensaje de "El valor decimal..."? Y segundo, cuando intento compilar con avisos (gcc -W -Wall -o hexDec5 hexDec5.c me sale el siguiente aviso: aviso: se define la variable ‘va2’ pero no se usa aviso: se define la variable ‘va1’ pero no se usa¿Cómo puedo solucionarlo? Saludos y gracias de antemano!
|
|
|
|
|
58
|
Programación / Programación C/C++ / Problema con programa conversor de hexadecimal (SOLUCIONADO)
|
en: 9 Enero 2014, 23:06 pm
|
Buenas, tengo un programa que convierte dos caracteres hexadecimales a su correspondiente número en decimal, admite tanto mayúsculas como minúsculas y si se introduce los caracteres qq el programa termina. El código es el siguiente: #include <stdio.h>
#define NOERROR 1 #define ERROR 0
int hexDec(char c1, char c2); int main() {
/* Declaramos las variables */ char car1; char car2;
/* Bucle While para que salga con qq */ do { printf("Introduzca el numero hexadecimal: "); scanf(" %c %c", &car1, &car2); hexDec(car1, car2); } while(car1 != 'q' && car2 != 'q');
return 0; }
int hexDec(char c1, char c2) {
char v1; char v2; int cuno = NOERROR; int cdos = NOERROR; int resultado;
if (c1 != 'q' && c2 != 'q') {
if ('0' <= c1 && c1 <= '9') v1 = c1 - '0'; else if ('A' <= c1 && c1 <= 'F') v1 = c1 - 'A' + 10; else if ('a' <= c1 && c1 <= 'f') v1 = c1 - 'a' + 10; else { cuno = ERROR; printf("Error en el primer valor introducido\n");
} if ('0' <= c2 && c2 <= '9') v2 = c2 - '0'; else if ('A' <= c2 && c2 <= 'F') v2 = c2 - 'A' + 10; else if ('a' <= c2 && c2 <= 'f') v2 = c2 - 'a' + 10; else { cdos = ERROR; printf("Error en el segundo valor introducido\n");
}
if (cuno == NOERROR && cdos == NOERROR) { resultado = 16 * v1 + v2;
printf("El valor decimal de 0x%c%c es %d\n", c1, c2, resultado);
} }
cuno = NOERROR; cdos = NOERROR;
return resultado;
} Hasta ahí bien, el problema es que me piden una función hexValidos (la función hexDec debe seguir existiendo) que reciba dos caracteres como parámetros, y devuelva una indicación de si los dos caracteres son caracteres hexadecimales válidos o no (con el mensaje "Invalido). El problema es que no sé muy bien como hacerlo, por ahora he hecho lo siguiente (qué seguro que está mal, pero no se me ocurre otra cosa): void hexValidos(char a, char b) {
int v1; int v2; int valor; int ca = NOERROR; int cb = NOERROR;
if (a != 'q' && b != 'q')
{ if ((('0' <= a && a <= '9') || ('A' <= a && a <= 'F') || ('a' <= a && a <= 'f')) && (('0' <= b && b <= '9') || ('A' <= b && b <= 'F') || ('a' <= b && b <= 'f'))) hexDec(c1,c2);
else printf("Invalido\n");
return;
} ¿Alguna ayuda?, no pido que me hagan el código pero si me gustaría al menos tener alguna indicación o consejo sobre como hacerlo. Gracias de antemano y un saludo!
|
|
|
|
|
59
|
Programación / Programación C/C++ / Re: ¿Es correcto este diagrama de flujo?
|
en: 9 Enero 2014, 19:10 pm
|
Ahhh el llamado pseudocódigo, esos diagramas de flujo son excelentes para confundir a las personas y venderles una buena idea o una completa basura con una lógica y cáracter argumentado con un encanto sin igual...  En fin, viejos recuerdos, mira, una cosa que se me hace raro en las instituciones es que no enseñan a realizar el ciclo for, extraño, pero así pasa, lo hicieron en el mio, lo hicieron en muchos, hay muchas cosas que no se enseñan, y que estan en los libros amigo mio, internet no siempre es la respuesta. No es tan dificil, solo es cuestión de leer un poco, si quieres saber más, que bien te haría, te sugiero estos sitios, hablan también de C# que también es muy util, pero digamos que te dejo estos links para que uses la referencia que tienen sobre los diagramas. Codificación del diagrama de flujoEstructura repetitiva forEstructura repetitiva whileEstructura repetitiva do whileAquí el curso, muy recomendable. Curso introduccion a CSharp/C# - CSharpYaSaludos  Gracias por el diagrama y por los enlaces para aprender más sobre esto, una cosilla, ¿con qué programa has hecho el diagrama? Saludos!
|
|
|
|
|
60
|
Programación / Programación C/C++ / Re: ¿Es correcto este diagrama de flujo?
|
en: 9 Enero 2014, 00:05 am
|
leer valor --> i=2 --> (valor%i == 0) --> Sí --> Fin (No es primo) --> No --> (i++) --> (i < valor) --> Sí --> Volver a (valor%i == 0) --> No --> Fin (Sí es primo)
Yo lo haría así. Aunque la condición de (i < valor) puedes reducirla a (i <= valor/2) para ahorrarte ciclos en el for.
Saludos.
Buenas, antes que nada gracias por mirarlo aunque he de decirte que por ahora no tengo que cambiar el código, ya que según lo que me pidan tendré que modificarlo de una forma u otra. Por ahora lo que tengo que hacer es hacer el diagrama de flujo de dicho código, aunque sé de antemano que es bastante pobre como programa xD
|
|
|
|
|
|
| |
|