SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: maga10 en Jueves 3 de Diciembre de 2009, 18:54
-
Este es el codigo de lo que hice a la hora de compilarlo y ejecutarlo no hace nada, les agradeceria si alguien me pudiera ayudar..
/* Programa: Alumno: Practico N° 16, ejercicio 5
Autor: Gutierrez, Carina Magali
Fecha de entrga: 16/10/2009
Turno: tarde
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char encriptar_texto(char *pCh[]);
char desencriptar_texto(char encriptado[]);
int main()
{
char ch[20]={0}, encriptar, desencriptar, encriptado[20];
char *pCh[20]={0};
int i;
printf("ingrese un texto: ");
scanf("%s", ch);
for (i=0 ; i<20 ; i++)
{
pCh = &ch;
}
encriptar = encriptar_texto(pCh);
printf("nEl texto encriptado es: %c", encriptar);
desencriptar = desencriptar_texto(encriptado);
printf("nEl texto desencriptado es: %c", desencriptar);
return 0;
}
char encriptar_texto(char *pCh[])
{
char encriptado[20];
int i;
for (i=0 ; i!='n' ; i++)
{
encriptado= *pCh + 3;
//printf("nEl texto encriptado es: %c", encriptado);
}
return 0;
}
char desencriptar_texto(char encriptado[])
{
char desencriptado[20];
int i;
for (i=0 ; i!='n' ; i++)
{
desencriptado = encriptado - 3;
//printf("nEl texto desencriptado es: %c", desencriptado);
}
return 0;
}
-
Tienes varios errores.
1. En las funciones encriptar y desencriptar regresas un char, pero en el return de las funciones pones 0, o sea nada.
2. Utilizas variables de tipo char para guardar los textos encriptados/desencriptados, cuando deberias utilizar arreglos de char, o sea, encriptar[20], desencriptar[20].
3. La condicion de los ciclos for esta equivocada, preguntas i = 'n', cuando deberia ser cadena != ' ', ya que lo que debes preguntar es si llegamos al fin de la cadena, ademas ' ' es el terminador de las cadenas.
4. Para imprimir la cadena encriptada/desencriptada utilizas %c, deberias ser %s, una vez que cambies las variables encriptar/desencriptar de tipo char a tipo arreglo de char (o sea, cadena).
5. Tus funciones encriptar/desencriptar regresan un char, cuando deberian regresar un char* (puntero a char), aunque te recomendaria que en lugar de funciones que regresen un valor, utilices funciones void, y mejor pongas como parametros la cadena sin encriptar y la cadena encriptada en la primera funcion, y en la segunda funcion pon como parametro la cadena encriptada y la cadena desencriptada.
Esos serian los principales, corrijelos, y suerte.
Saludos :)
-
No quiero ser sapo, pero publicaste este mismo mensaje mas de una vez?
-
Aca esta el codigo mejorado y andando por ahi a alguien le sirve, yo estuve buscando algo asi y no encontre en ningun lado!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define N 80
void encriptarFrase();
void desencriptarFrase();
int largo;
char frase[N];
int main ()
{
printf("Ingrese la frase: ");
gets(frase);
largo = strlen(frase);
encriptarFrase();
printf("La frase encriptada es: %sn",frase);
desencriptarFrase();
printf("La dfrase desencriptada es: %sn",frase);
return 0;
}
void encriptarFrase ()
{
int i;
for(i=0 ; i<largo ; ++i)
{
//convierte las minuscalas a mayuscula.
*(frase + i) = toupper(*(frase + i));
//descarta los digitos
if(isalpha(*(frase + i)))
{
//verifica los casos especiales X-Y-Z
if(*(frase + i) > 87)
{
*(frase+i) = *(frase+i) - 23;
}
else
{
*(frase + i) = *(frase + i) + 3;
}
}
}
}
void desencriptarFrase ()
{
int i;
for(i=0 ; i<largo ; ++i)
{
if(isalpha(*(frase + i)))
{
if(*(frase + i) < 68)
{
*(frase+i)= *(frase+i) + 23;
}
else
{
*(frase+i)= *(frase+i) - 3;
}
}
}
}