|
Mostrar Temas
|
Páginas: 1 2 [3] 4
|
21
|
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!
|
|
|
22
|
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!
|
|
|
23
|
Programación / Programación C/C++ / ¿Es correcto este diagrama de flujo?
|
en: 8 Enero 2014, 21:56 pm
|
Buenas, me piden hacer el diagrama de flujo de este programa: /* Includes del sistema */ #include <stdio.h>
/* Includes de la aplicacion */ /* Constantes del fichero */ #define RESPUESTANOPRIMO " %d no es primo\n" #define RESPUESTAPRIMO " %d es primo\n"
/* Tipos definidos por el usuario para el fichero */
/* Prototipo de funciones locales */ int main() { /* Almacenara el numero leido por teclado */ int valor; /* Servira como indice del bucle for que vamos a utilizar. */ int i; /* Solicitamos el numero que queremos saber si es primo */ printf("Introduzca un valor: "); scanf(" %d", &valor);
/* El bucle lo comenzamos en 2: todo numero es divisible por 1 * y lo terminamos antes de valor: todo numero es divisible por si mismo */
for ( i = 2; i < valor; i++ ) if (0 == (valor % i))
/* Si el resto es cero, es porque i divide * No es primo. */ printf(RESPUESTANOPRIMO, valor);
return 0; } Y lo he hecho así:  ¿Modificaríais algo? Gracias de antemano y un saludo!
|
|
|
24
|
Programación / Programación C/C++ / Duda con estructuras en C (Urgente)
|
en: 4 Enero 2014, 16:31 pm
|
Buenas, me han pedido un programa en la facultad en el que ,mediante estructuras, me pida dos fechas y el programa me dice si una fecha es posterior/anterior/igual a otra fecha y si los años son bisiestos o no. Tengo dos ficheros, el primero es fecha.c que hace la lectura, comprobación, comparación, comprobación si es bisiesto o no, con el código que me ha quedado así: #include <stdio.h> #include "fecha.h"
struct fecha leeFecha(void)
{
struct fecha Fech;
printf("Introduzca la fecha en formato dd/mm/aaaa: ");
scanf("%d/%d/%d", &Fech.dia, &Fech.mes, &Fech.anio);
return Fech; }
int compruebaFecha(struct fecha *pFecha) { int compru; // int dia; // int mes; int bis;
{ if (pFecha->dia < 1 || pFecha->dia > 31)
compru = 0;
else if (pFecha->mes < 1 || pFecha->mes > 12)
compru = 0;
else if ((pFecha->mes == 4 || pFecha->mes == 6 || pFecha->mes == 9 || pFecha->mes == 11) && (pFecha->dia > 30))
compru = 0;
else if (pFecha->mes == 2)
{ if ((bis = 1) && (pFecha->dia > 29))
compru = 0;
else if ((bis = 0) && (pFecha->dia > 28))
compru = 0; }
else
compru = 1; }
return compru;
}
int comparaFecha(struct fecha f1, struct fecha f2) /* Función comparaFecha, devuelve: -1 si fecha1 < fecha2 0 si fecha1 = fecha2 1 si fecha1 > fecha2 */ { int compara;
if (f1.anio < f2.anio) compara = -1; else if (f1.anio > f2.anio) compara = 1; else { if (f1.mes < f2.mes) compara = -1; else if (f1.mes > f2.mes) compara = 1; else { if (f1.dia < f2.dia) compara = -1; else if (f1.dia > f2.dia) compara = 1; else compara = 0; } }
return compara; }
void imprimeFecha(struct fecha f) {
printf("%02d/%02d/%d", f.dia, f.mes, f.anio);
return; }
// Funcion para comprobar si un anio es bisiesto: int esBisiesto(struct fecha f) { int bis = 0;
// anio bisiesto: {divisible por 4 y no por 100} o {divisible por 400}
if (((f.anio % 4 == 0) && (f.anio % 100 != 0)) || (f.anio % 400 == 0)) bis = 1;
return bis; }
Aquí está el fichero estructura.c que contiene a la función main y usa las funciones de fecha.c #include <stdio.h> #include "fecha.h"
int main() { struct fecha f1; struct fecha f2; // struct fecha *pf1; // struct fecha *pf2; int a; int compara; int bis1; int bis2;
f1 = leeFecha(); a = compruebaFecha(&f1);
if (a == 0) { printf("Formato de fecha incorrecto\n"); }
else { f2 = leeFecha(); a = compruebaFecha(&f2);
if (a == 0) { printf("Formato de fecha incorrecto\n"); }
else
{
compara = comparaFecha(f1, f2);
/* Imprimir */
imprimeFecha(f1); { if (compara > 0)
printf(" es posterior a ");
else if (compara == 0)
printf(" es igual a ");
else
printf(" es anterior a "); }
imprimeFecha(f2);
bis1 = esBisiesto(f1); bis2 = esBisiesto(f2);
{ if (bis1 == 1 && bis2 == 0)
printf("\nLa primera fecha es en bisiesto\n");
else if (bis1 == 0 && bis2 == 1)
printf("\nLa segunda fecha es en bisiesto\n");
else if (bis1 == 1 && bis2 == 1)
printf("\nAmbas fechas son en bisiesto\n");
else
printf("\nNinguna de las dos fechas es en bisiesto\n");
} } } return 0; } Y aquí está fecha.h: #ifndef FECHA_H #define FECHA_H
struct fecha { int dia; int mes; int anio; };
#define AMBAS_BISIESTO "Ambas fechas son en bisiesto\n" #define PRIMERA_BISIESTO "La primera fecha es en bisiesto\n" #define SEGUNDA_BISIESTO "La segunda fecha es en bisiesto\n" #define NINGUNA_BISIESTO "Ninguna de las dos fechas es en bisiesto\n"
struct fecha leeFecha( void ); int compruebaFecha( struct fecha *pFecha ); int comparaFecha( struct fecha f1, struct fecha f2 ); void imprimeFecha( struct fecha f ); int esBisiesto( struct fecha f );
#endif Pues bien, el programa me funciona perfectamente salvo por un pequeño error que no consigo solucionar, puede ser una tontería pero llevo tanto tiempo haciendo el programa que no lo veo. En la ejecución, si le pongo las fechas 06/01/1981 y 02/06/1980 me dice: 6/1/1981 es posterior a 2/6/1980 La segunda fecha es en bisiesto ¿Cómo consigo que en vez de 6/1/1981 y 2/6/1980 me ponga 06/01/1981 y 02/06/1980? Es decir, que no se "coma" esos ceros. ¿Alguna ayuda?, gracias de antemano Necesito que me de la ejecución tal y como digo por que si no no me lo dan como válido el programa, aunque funcione correctamente Un saludo!
|
|
|
25
|
Programación / Programación C/C++ / ¿Alguien me puede explicar este programa en C? (Dec-Binario)
|
en: 18 Diciembre 2013, 11:46 am
|
Buenas, tengo un programa que pasa de decimal (solo números positivos) a binario, pero no entiendo muy bien como hace la conversión, este es el código: #include <stdio.h>
int leeNumero(); void decBin(int n);
int main() { int n; n = leeNumero(); decBin(n); printf("\n);
return 0; }
int leeNumero() { int numero; do { printf("Introduzca un número no negativo: "); 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); } } Yo el programa lo entiendo de esta manera: Declaramos las funciones leeNumero y decBin, entramos en la función main, a través de la función leeNumero se comprueba que el número no sea negativo, volvemos a la función main y entramos en la función decBin, y es ahí donde me surge la duda, ya que no entiendo muy bien como hace la conversión a binario :S ¿Alguna ayuda?, gracias de antemano! P.D: El programa funciona perfectamente
|
|
|
26
|
Programación / Programación C/C++ / Problema al compilar un programa
|
en: 8 Diciembre 2013, 01:15 am
|
Buenas, he hecho el siguiente código que convierte dos caracteres hexadecimales a decimal, y sale del programa al ingresar "qq": // Biblioteca del sistema #include <stdio.h>
// Constantes del fichero #define CTE 16 #define VALOR "El valor decimal de 0x%c%c es %d\n" #define NOERROR 1 #define ERROR 0
// Funciones que usaremos int hexDec(char car1, char car2); int leeCaracter(char * ccar1, char * ccar2);
int main() { // Declaramos las variables char car1; char car2;
// Declaramos las variables de control int cuno; int cdos;
// Solicitamos los caracteres hexadecimales
do { // Llamamos a la función leeCaracter leeCaracter(&car1, &car2); cuno = NOERROR; cdos = NOERROR; if (!((('0' <= car1) && (car1 <= '9')) || (('A' <= car1) && (car1 <= 'F')) || (('a' <= car1) && (car1 <= 'f')))) { cuno = ERROR; }
if (!((('0' <= car2) && (car2 <= '9')) || (('A' <= car2) && (car2 <= 'F')) || (('a' <= car2) && (car2 <= 'f')))) { cdos = ERROR; } if ((NOERROR == cuno) && (NOERROR == cdos)) //Llamamos a la funcion hexDec hexDec(car1, car2); if ((cuno == ERROR) && (car1 != 'q')) { printf("Error en el primer valor introducido\n"); } if ((cdos == ERROR) && (car2 != 'q')) { printf("Error en el segundo valor introducido\n"); } getchar(); } while ((car1 != 'q') || (car2 != 'q')); return 0; }
// Definimos la funcion hexDec
int hexDec(char car1, char car2) { int valor1; int valor2; int valor;
if (('0' <= car1) && (car1 <= '9')) { valor1 = car1 - '0'; } else if (('A' <= car1) && (car1 <= 'F')) { valor1 = car1 - 'A' + 10; } else if (('a' <= car1) && (car1 <= 'f')) { valor1 = car1 - 'A' + 10 - 32; }
if (('0' <= car2) && (car2 <= '9')) { valor2 = car2 - '0'; } else if (('A' <= car2) && (car2 <= 'F')) { valor2 = car2 - 'A' + 10; } else if (('a' <= car2) && (car2 <= 'f')) { valor2 = car2 - 'A' + 10 - 32; } valor = CTE * valor1 + valor2; printf(VALOR, car1, car2, valor); return valor; }
// Definimos la funcion leeCaracter
int leeCaracter(char * ccar1, char * ccar2) {
printf("Introduzca un valor hexadecimal: "); scanf("%c%c", ccar1, ccar2); if ((*ccar1 == 'q') && (*ccar2 == 'q')) { return 0; } else if (((('0' <= *ccar1) && (*ccar1 <= '9')) || (('A' <= *ccar1) && (*ccar1 <= 'F')) || (('a' <= *ccar1) && (*ccar1 <= 'f'))) || ((('0' <= *ccar2) && (*ccar2 <= '9')) || (('A' <= *ccar2) && (*ccar2 <= 'F')) || (('a' <= *ccar2) && (*ccar2 <= 'f')))) { return 1; } }
Pero al compilar me da el siguiente aviso: hexDec7.c: En la función ‘leeCaracter’: hexDec7.c:138:1: aviso: el control alcanza el final de una función que no es void ¿Alguien me puede decir como solucionarlo? Saludos y gracias de antemano!
|
|
|
27
|
Programación / Programación C/C++ / Problema con programa conversor de decimal a binario
|
en: 27 Noviembre 2013, 17:55 pm
|
Buenas, tengo un ejercicio en el que me piden hacer un programa que pase de números positivos decimales a binario (incluyendo el 0), y yo he hecho esto: //Incluimos las librerías propias y del sistema
#include <stdio.h> #include "decBin.h"
//Declaramos las funciones
int leeNumero(); void decBin(int n);
int main() { int n; n = leeNumero(); if (n > 0) { decBin(n); } printf("\n");
return 0; }
int leeNumero() { int numero; do { printf(T_INTRODUZCA_NUMERO); scanf("\n%d", &numero); } while (numero < 0); /*Con este bucle hacemos que si el numero introducido es negativo, no lo procese y vuelva a pedirlo */
return numero; }
//La funcion decBin realiza la conversión decimal-binario
void decBin(int n) { if (n == 0) printf("0");
else if (n == 1) printf("1");
else { decBin(n / 2); printf("%d", n % 2); } } Aquí os pongo el fichero decBin.h:#ifndef DECBIN_H #define DECBIN_H
#define T_INTRODUZCA_NUMERO "Introduzca un numero no negativo: " #define T_INTRODUZCA_NUMERO2 "Introduzca un numero: "
#endif Me compila bien, sin avisos ni nada, y funciona bien salvo cuando le digo que me convierta el 0 en binario (qué evidentemente sigue siendo 0), lo que hace es salir del programa, ¿alguna solución? Gracias de antemano y un saludo!
|
|
|
28
|
Programación / Programación C/C++ / Problema con avisos al compilar un programa en C
|
en: 27 Noviembre 2013, 15:36 pm
|
Buenas, tengo que hacer el siguiente programa: potencia.c: realice un programa que obtenga la potencia de un número elevado a otro, dados ambos por teclado. Para ello: a ) escriba la función potencia, que recibe dos números como parámetros, la base y el exponente, y devuelve el resultado de elevar el primero al segundo. b ) escriba la función leeNumero, que no recibe ningún dato como parámetro y solicita un número no negativo (mayor o igual que 0) por teclado, que devolverá como resultado. La función debe solicitar la introducción del número tantas veces como sean necesarias hasta que el número sea correcto (no negativo). c ) escriba la función main, que haga uso de las dos funciones anteriores, para calcular la potencia de un número elevado a otro. Pues bien, tengo hecho esto://Incluímos las librerías propias y del sistema #include "potencia.h" #include <stdio.h>
//Declaramos las funciones int potencia(int base, int exponente); int leeNumero();
int main() {
//Declaramos las variables a usar int base; int exponente; int resultado; int numero;
printf(T_BASE, base); base = leeNumero(numero); printf(T_EXPONENTE, exponente); exponente = leeNumero(numero); //Llamamos a la funcion leeNumero
resultado = potencia(base, exponente); //Llamamos a la funcion potencia printf(T_RESULTADO, base, exponente, resultado); return 0; }
int potencia(int base, int exponente) {
int resultado = 1; if (exponente == 0) { resultado = 1; }
else {
for (; exponente >= 1; exponente--) { resultado *= base; } }
return resultado; }
int leeNumero() { int numero; do { printf(T_INTRODUZCA_NUMERO); scanf("%d", &numero); } while (numero < 0);
return numero; }
Este es el código de potencia.h:#ifndef POTENCIA_H #define POTENCIA_H
/*Textos a utilizar en la funcion printf*/ #define T_BASE "BASE:\n" #define T_EXPONENTE "EXPONENTE:\n" #define T_RESULTADO "%d elevado a %d es %d\n" #define T_INTRODUZCA_NUMERO "Introduzca un numero no negativo: "
#endif Pues bien, si lo compilo con el comando en consola: gcc -W -Wall -o potencia potencia.cMe salen los siguientes avisos: salas@313CDC38:~/Escritorio/pfunciones2$ gcc -W -Wall -o potencia potencia.c potencia.c: En la función ‘main’: potencia.c:29:3: aviso: demasiados argumentos para el formato [-Wformat-extra-args] potencia.c:31:3: aviso: demasiados argumentos para el formato [-Wformat-extra-args] potencia.c:29:9: aviso: se utiliza ‘base’ sin inicializar en esta función [-Wuninitialized] potencia.c:30:8: aviso: se utiliza ‘numero’ sin inicializar en esta función [-Wuninitialized] potencia.c:31:9: aviso: se utiliza ‘exponente’ sin inicializar en esta función [-Wuninitialized] ¿Alguna forma de solucionarlo? Compilándolo con el comando gcc -o potencia potencia.c me compila y hace lo que me piden, pero me gustaría tenerlo hecho sin que me de avisos. Gracias de antemano! Saludos!
|
|
|
29
|
Programación / Programación C/C++ / Cambiar una sentencia if else if por un if else
|
en: 11 Noviembre 2013, 22:32 pm
|
Buenas, tengo el siguiente programa básico para pasar de número decimal a hexadecimal: #include <stdio.h>
int main() {
/* Declaramos las variables */ char car1; char car2; char valor1; char valor2; int valor; printf("Introduzca el numero hexadecimal: "); scanf("\n%c%c", &car1, &car2);
/* Condiciones para el primer caracter*/ if ('0' <= car1 && car1 <= '9') valor1 = car1 - '0'; else if ('A' <= car1 && car1 <= 'F') valor1 = car1 - 'A' + 10;
/* Condiciones para el segundo caracter*/ if ('0' <= car2 && car2 <= '9') valor2 = car2 - '0'; else if ('A' <= car2 && car2 <= 'F') valor2 = car2 - 'A' + 10;
valor = 16 * valor1 + valor2;
printf("El valor decimal de 0x%c%c es %d\n", car1, car2, valor);
return 0; }
Me pide el profesor que cambie cada sentencia "if else if" por una "if else", pero he probado y siempre me da error al compilar, ¿alguna ayuda? Saludos!
|
|
|
30
|
Seguridad Informática / Seguridad / ¿Qué me puede pasar?
|
en: 21 Agosto 2012, 20:57 pm
|
Buenas, hace unas semanas me enfadé con una persona que conozco y cometí el error de meterme en su tuenti, la forma en la que lo hice fue averiguando la respuesta a la pregunta secreta de su hotmail y después dando a olvidar contraseña en tuenti.
Me arrepentí y admití mi culpa y le pedí perdón a la persona en cuestión, sé que estuvo bastante mal, pero aun así dicha persona dice que va a denunciarme.
Si conoceís algún caso así, ¿que me puede pasar?, ¿qué le dirá la policia?
Gracias y un saludo
|
|
|
|
|
|
|