Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Glaber en 02 de Febrero 2013, 22:04
-
Hola a todos espero que lean este mensaje es sobre un programa q voy a escribir mas adelante.Lo que pasa es q me lleve programacion y 2 materias mas y si no rindo programacion repito!(la rendi mal en diciembre y me queda febrero).Lo bueno es q me dieron para hacer el mismo programa q no lo pude terminar todavia ,esta casi terminado pero no cumple con su consigna...¡por eso querian q me ayuden!¡se lo agradeceria de por vida a quien me ayude!
A continuacion la consigna del programa :
Escribir un programa que encripte una cadena de caracteres sumando 2 al código ASCII de cada uno de sus caracteres.
La forma en q lo hize yo en el BC:
#include<stdio.h>
#include<conio.h>
void main()
{
int encrip=0, i=0;
char cadena [20]
printf("ingrese el texto a encriptar \n")
scanf("%s",&cadena);
encrip=cadena;
cadena=encrip+2;
printf("el texto encriptado; %i",cadena);
getch();
}
El resultado de ese programa es q por ejemplo escribo hola y me imprime el valor de la primera letra solamente o sea 106(+2 de 104 q seria la h) .La consigna dice q tiene q emprimir el valor de una cadena de caracteres por ejemplo 106 23 42 52 y no solo la primera letra de la palabra :(.Estuve averiguando y seguro hay q usar for pero nose q poner y tambien creo q hay q usar length pero no se bien.Por favor un experto o alguien q sepa programacion me ayudaria ?? se lo agradeceria eternamente es para pasar de grado :(.
-
Hola, te pongo aquí un código que al menos a mí me funciona, no sé qué compilador estás usando así que a lo mejor tienes que hacerle alguna adaptación para poder ejecutarlo con tu compilador
Veo en tu código cosas que no se entienden
encrip=cadena;
cadena=encrip+2;
Si encrip es un número no puedes asignarle una cadena
Aquí te dejo el código, a ver si te sirve, ten en cuenta que las cadenas son arrays de caracteres, de ahí que tengas que usar bucles o bien for o bien do while
#include<stdio.h>
#include<string.h>
int main() {
int encrip=0;
int i=0;
typedef char TipoCadena[40]; //Declaramos el TipoCadena
TipoCadena cadena; //Declaramos la variable cadena
printf("ingrese el texto a encriptar \n");
scanf("%s",&cadena);
printf("El numero de caracteres en la cadena es %d \n",strlen(cadena));
typedef char TipoCadEncriptada[strlen(cadena)]; //Declaramos el tipo CadenaEncriptada
TipoCadEncriptada cadenaEncriptada;
do {
printf("Caracter extraido: %c con valor ascii %d \n",cadena[i], int(cadena[i]));
encrip = int(cadena[i]) +2;
cadenaEncriptada[i] = char(encrip);
printf("Caracter encriptado: %c con valor ascii %d \n",cadenaEncriptada[i], int(cadenaEncriptada[i]));
i=i+1;
} while (i < strlen(cadena));
printf("El texto encriptado es ");
for (int j=0; j<strlen(cadena); j++) {
printf("%c", cadenaEncriptada[j]);
}
return 0;
}
-
Hola mayen lei tu mensaje muchas gracias por el programa.Respecto al compilador el profesor me dijo q lo haga con el BC pero el borland C++ creo q es lo mismo.Ahora lo voy a probar y veo si me anda :D
-
Lo probe en el Borland C++ 4.5 y me tira 1 solo error en esta parte creo q es:
typedef char TipoCadEncriptada[strlen(cadena)]; //Declaramos el tipo CadenaEncriptada
TipoCadEncriptada cadenaEncriptada;
podrias probarlo en borland ++ 4.5 y decirme cual es el error?
-
Intenta escribirlo así:
char TipoCadEncriptada[strlen(cadena)]; //Declaramos el tipo CadenaEncriptada
TipoCadEncriptada cadenaEncriptada;
Es decir, quita el typedef.
-
ya le quite y copie como vos dijistes y me tira 3 y errores
-
Hola, he estado revisando el código, he quitado los comentarios porque me estaban dando problemas. Yo logro ejecutar este código en C, inténtalo tú, si tú no puedes posiblemente se deba a que usamos compiladores diferentes:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int encrip;
int i;
typedef char TipoCadena[40];
typedef char TipoCadEncriptada[40];
TipoCadena cadena;
TipoCadEncriptada cadenaEncriptada;
encrip=0;
i=0;
printf("ingrese el texto a encriptar \n");
scanf("%s",&cadena);
printf("El numero de caracteres en la cadena es %d \n",strlen(cadena));
do {
printf("Caracter extraido: %c con valor ascii %d \n",cadena[i], int(cadena[i]));
encrip = int(cadena[i]) +2;
cadenaEncriptada[i] = char(encrip);
printf("Caracter encriptado: %c con valor ascii %d \n",cadenaEncriptada[i], int(cadenaEncriptada[i]));
i=i+1;
} while (i < strlen(cadena));
printf("El texto encriptado es ");
for (int j=0; j<strlen(cadena); j++) {
printf("%c", cadenaEncriptada[j]);
}
return 0;
}
Cuando ejecuto el programa si introduzco una cadena como "puerta" obtengo un resultado así:
ingrese el texto a encriptar
puerta
El numero de caracteres en la cadena es 6
Caracter extraido: p con valor ascii 112
Caracter encriptado: r con valor ascii 114
Caracter extraido: u con valor ascii 117
Caracter encriptado: w con valor ascii 119
Caracter extraido: e con valor ascii 101
Caracter encriptado: g con valor ascii 103
Caracter extraido: r con valor ascii 114
Caracter encriptado: t con valor ascii 116
Caracter extraido: t con valor ascii 116
Caracter encriptado: v con valor ascii 118
Caracter extraido: a con valor ascii 97
Caracter encriptado: c con valor ascii 99
El texto encriptado es rwgtvc
-
Muchas Gracias Mayen ahora si me anda ! sos un groso te lo agradesco mucho. :D
-
che mayen una sola cosa mas.Estuve probando el programa con el borland C++ ,anda,pero... encripta una palabra de 11 caracteres maximos y si el profesor me dice xq no encripta electricidad por ejemplo o otra palabra mas larga ...¿que le digo?.¿como hago para q incrpte palabras de mas de 11 caracteres?por favor decime como hago y poneme el programa devuelta con las cosas q hace en cada renglon o sea explicame q hacen las funciones q hay algunas q no entiendo y seguro me pregunta .
-
Hola! La longitud o numero de caracteres que se pueden encriptar se controla en las líneas:
typedef char TipoCadena[40];
typedef char TipoCadEncriptada[40];
Es decir, ahora mismo a mí me encripta hasta 40 caracteres, si se quiere se pueden poner más o menos.
Sobre la explicación de las líneas voy a prepararla y te la pongo cuando la tenga
Ejemplo de resultado de ejecutar con una palabra de 34 caracteres:
ingrese el texto a encriptar
superescalifragilisticoespialidoso
El numero de caracteres en la cadena es 34
Caracter extraido: s con valor ascii 115
Caracter encriptado: u con valor ascii 117
Caracter extraido: u con valor ascii 117
Caracter encriptado: w con valor ascii 119
Caracter extraido: p con valor ascii 112
Caracter encriptado: r con valor ascii 114
Caracter extraido: e con valor ascii 101
Caracter encriptado: g con valor ascii 103
Caracter extraido: r con valor ascii 114
Caracter encriptado: t con valor ascii 116
Caracter extraido: e con valor ascii 101
Caracter encriptado: g con valor ascii 103
Caracter extraido: s con valor ascii 115
Caracter encriptado: u con valor ascii 117
Caracter extraido: c con valor ascii 99
Caracter encriptado: e con valor ascii 101
Caracter extraido: a con valor ascii 97
Caracter encriptado: c con valor ascii 99
Caracter extraido: l con valor ascii 108
Caracter encriptado: n con valor ascii 110
Caracter extraido: i con valor ascii 105
Caracter encriptado: k con valor ascii 107
Caracter extraido: f con valor ascii 102
Caracter encriptado: h con valor ascii 104
Caracter extraido: r con valor ascii 114
Caracter encriptado: t con valor ascii 116
Caracter extraido: a con valor ascii 97
Caracter encriptado: c con valor ascii 99
Caracter extraido: g con valor ascii 103
Caracter encriptado: i con valor ascii 105
Caracter extraido: i con valor ascii 105
Caracter encriptado: k con valor ascii 107
Caracter extraido: l con valor ascii 108
Caracter encriptado: n con valor ascii 110
Caracter extraido: i con valor ascii 105
Caracter encriptado: k con valor ascii 107
Caracter extraido: s con valor ascii 115
Caracter encriptado: u con valor ascii 117
Caracter extraido: t con valor ascii 116
Caracter encriptado: v con valor ascii 118
Caracter extraido: i con valor ascii 105
Caracter encriptado: k con valor ascii 107
Caracter extraido: c con valor ascii 99
Caracter encriptado: e con valor ascii 101
Caracter extraido: o con valor ascii 111
Caracter encriptado: q con valor ascii 113
Caracter extraido: e con valor ascii 101
Caracter encriptado: g con valor ascii 103
Caracter extraido: s con valor ascii 115
Caracter encriptado: u con valor ascii 117
Caracter extraido: p con valor ascii 112
Caracter encriptado: r con valor ascii 114
Caracter extraido: i con valor ascii 105
Caracter encriptado: k con valor ascii 107
Caracter extraido: a con valor ascii 97
Caracter encriptado: c con valor ascii 99
Caracter extraido: l con valor ascii 108
Caracter encriptado: n con valor ascii 110
Caracter extraido: i con valor ascii 105
Caracter encriptado: k con valor ascii 107
Caracter extraido: d con valor ascii 100
Caracter encriptado: f con valor ascii 102
Caracter extraido: o con valor ascii 111
Caracter encriptado: q con valor ascii 113
Caracter extraido: s con valor ascii 115
Caracter encriptado: u con valor ascii 117
Caracter extraido: o con valor ascii 111
Caracter encriptado: q con valor ascii 113
El texto encriptado es uwrgtguecnkhtciknkuvkeqgurkcnkfquq
Pulsar cualquier tecla para continuar.
-
si si eso lo entendi solo q yo cuando pruebo el programa me aparece:
Ingrese el texto a encriptar
(aca escribo)elultimosamurailapelicula
(y despues me imprime ):
Caracter extraido: a con valor ascii 97
Caracter encriptado: c con valor ascii 99
caracter extraido:i con valor ascii 105
caracterencriptado:k con valor ascii 107
caracer extraido:l con valor ascii 108
caracter encriptado:n con valor ascii 110
.... y sigue hasta q termina pero la cosa es q empieza de ailapelicula y falto el numero de
caracteres q tiene la cadena y falto encriptar elultimosamur.Fijate si podes arreglar para q me imprima desde el principio de la palabra xq las palabras largas me las encripta desde la mitad para delante y falta todo el principio .
-
A mí no me da ese problema, a mi me funciona bien ¿puedes poner el codigo q estas usando para verlo?
-
Este es el codigo q uso el q me distes al principio mira :
(uso el borland C++ 4.5)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int encrip;
int i;
typedef char TipoCadena[40];
typedef char TipoCadEncriptada[40];
TipoCadena cadena;
TipoCadEncriptada cadenaEncriptada;
encrip=0;
i=0;
printf("ingrese el texto a encriptar \n");
scanf("%s",&cadena);
printf("El numero de caracteres en la cadena es %d \n",strlen(cadena));
do {
printf("Caracter extraido: %c con valor ascii %d \n",cadena, int(cadena));
encrip = int(cadena) +2;
cadenaEncriptada = char(encrip);
printf("Caracter encriptado: %c con valor ascii %d \n",cadenaEncriptada, int(cadenaEncriptada));
i=i+1;
} while (i < strlen(cadena));
printf("El texto encriptado es ");
for (int j=0; j<strlen(cadena); j++) {
printf("%c", cadenaEncriptada[j]);
}
return 0;
}
-
Para pegar código mejor usa el icono que te aparece cuando escribes el post # (insertar código), si no no te lo pega bien porque por ejemplo los [ i ] han desaparecido.
El caso es que a mí sí me compila y se ejecuta bien.
Pienso que el problema que tienes a lo mejor se debe a que en la consola no tienes espacio suficiente para ver todo el resultado y por eso solo ves la parte final. Prueba después de ejecutar el programa a escoger la opción "Seleccionar todo", luego "Copiar" y luego pégalo en el bloc de notas de Windows. Si es lo que te digo (que se esté cortando), cuando lo selecciones todo y lo pegues ya podrás verlo entero
-
Probe de todas formas seleccionando manual y con ctr E ,copiando con crt c pegando con crt v ,seleccionando todo y pegarlo en un bloc de nota guardarlo .cpp o .c y abriendolo desde el bloc poniendo open etc.Todo sigue igual me imprime desde la mitad hasta el final pero el principio no aparece nose xq sera :S
Te pongo otra vez el codigo pasame el q tenes vos si llega a ser diferente.Cualquier cosa lo pruebo en otra maquina xq uso la netbook de la escuela.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int encrip;
int i;
typedef char TipoCadena[40];
typedef char TipoCadEncriptada[40];
TipoCadena cadena;
TipoCadEncriptada cadenaEncriptada;
encrip=0;
i=0;
printf("ingrese el texto a encriptar \n");
scanf("%s",&cadena);
printf("El numero de caracteres en la cadena es %d \n",strlen(cadena));
do {
printf("Caracter extraido: %c con valor ascii %d \n",cadena[i], int(cadena[i]));
encrip = int(cadena[i]) +2;
cadenaEncriptada[i] = char(encrip);
printf("Caracter encriptado: %c con valor ascii %d \n",cadenaEncriptada[i], int(cadenaEncriptada[i]));
i=i+1;
} while (i < strlen(cadena));
printf("El texto encriptado es ");
for (int j=0; j<strlen(cadena); j++) {
printf("%c", cadenaEncriptada[j]);
}
return 0;
}
-
El código es exactamente igual, puede que esté relacionado con la configuración de la consola. Supón que en la consola tienes configurado que como máximo se muestren por pantalla 50 líneas y que todo lo demás lo corta... El caso es que a mí me sale bien. Te comento las partes del programa:
#include <stdio.h> //Carga de las librerías para que se puedan usar las funciones
#include <stdlib.h> // básicas de petición de datos e imprimir por pantalla
#include <string.h> // Carga de la librería específica para usar funciones propias
// de cadenas
//Para poder usar funciones hemos de cargar las librerías donde estas funciones están
// contenidas. La carga de funciones se indica con include <nombreDelArchivoLibreria>
// Declaramos el procedimiento principal a ejecutar por el programa, int indica que el
//tipo de retorno será un entero y main que es la función principal. () indica que no
// tiene argumentos.
int main(){
//Declaramos variables de tipo entero: encrip e i
int encrip;
int i;
//Declaramos los tipo array o arreglo de caracteres, con un máximo de 40 caracteres
//permitidos para una cadena o una cadena encriptada
typedef char TipoCadena[40];
typedef char TipoCadEncriptada[40];
// Creamos las variables del tipo array o arreglo que hemos definido anteriormente
TipoCadena cadena;
TipoCadEncriptada cadenaEncriptada;
// Inicializamos variables con contenido inicial igual a cero
encrip=0;
i=0;
//Mostramos el mensaje de solicitud del texto, \n indica salto de línea y retorno de carro
printf("ingrese el texto a encriptar \n");
//Petición de datos al usuario con la función scanf. %s significa que se pide una
// cadena de texto y cadena es el nombre de la variable donde se va a guardar. & indica
// que la variable cadena pasa por referencia a la función
scanf("%s",&cadena);
//Mostramos el número de caracteres que tiene la cadena, para ello nos valemos
// de la función strlen(x) que devuelve el número de caracteres de una cadena
printf("El numero de caracteres en la cadena es %d \n",strlen(cadena));
//Creamos un bucle con el que recorremos la cadena introducida. La variable índice
// del bucle es i.
do {
// Mostramos el caracter en posición i en la cadena empezando por cero
// %c indica que ahí insertamos un caracter y %d que ahí insertamos un número
// cadena[ i ] es el elemento del array o arreglo que contiene un caracter, el que insertamos
//int(cadena[ i ]) devuelve el número entero equivalente al caracter según el alfabeto ascii
// en ascii cada letra tiene un número asociado
printf("Caracter extraido: %c con valor ascii %d \n",cadena[ i ], int(cadena[ i ]));
// Asignamos a la variable encrip el número asociado al caracter más dos unidades
// por ejemplo a la a le corresponderá el número de la c, a la d el nº de la f, etc.
encrip = int(cadena[ i ]) +2;
//char(x) representa el caracter asociado a un número x, lo que hacemos es
//meter dentro del array cadenaEncriptada el caracter que toque, en posición i
cadenaEncriptada[ i ] = char(encrip);
//Mostramos el caracter encriptado, la letra y su número asociado
printf("Caracter encriptado: %c con valor ascii %d \n",cadenaEncriptada[ i ], int(cadenaEncriptada[ i ]));
//Avanzamos el contador en una unidad, con lo que pasamos a la siguiente letra de la cadena
i=i+1;
// Condición para repetir el bucle: el bucle se repite si i es menor que la longitud de la
// cadena. Por ejemplo si la cadena es pan la longitud es 3 y el bucle se repite si i vale 0, 1 o 2 pero no cuando vale 3
} while (i < strlen(cadena));
//Mensaje avisando de que vamos a mostrar el texto encriptado
printf("El texto encriptado es ");
//Bucle para recorrer el array o arreglo y mostrar caracter a caracter la cadena encriptada
//El bucle usa como índice j y va desde cero hasta la longitud de la cadena, que es la
// misma longitud que la cadena encriptada
for (int j=0; j<strlen(cadena); j++) {
//Mostramos la cadena encriptada caracter a caracter
printf("%c", cadenaEncriptada[ j ]);
}
//La función main devuelve cero, esto es un formalismo
return 0;
}
-
Muchas gracias mayen nose como agradecertelo,disculpa por tantas preguntas pero lo que pasa que no entiendo mucho de esto :P
Voy a tratar de escribir yo una palabra corta y mostrarle al profesor como anda y si safo bueno mejor ...y si me pregunta xq no imprime una palabra mas larga le digo q la consola no esta configurada que se yo . Ahora voy a estudiar lo q hace cada cosa que me pasastes y esperemos que rinda bien .Cualquier cosa q no entienda te pregunto por el foro.Saludos.
-
Hola mayen,necesito el mismo programa pero que me ande en un compilador de C lo intente modificar pero no pude hacer que me agarre en C. Uso el compilador BC nose si lo conoces. Avisame cual es la diferencia entre C y C++ porque para mi es lo mismo pero el profesor capaz que me la hace dificil y me dice porque no lo hize en el compilador de C(BC)que uso en la escuela.
-
Hola! yo no tengo el compilador que estás usando, he probado a correr el código en codepad.org y me daba un par de errores en la compilación C debido a una cuestion de sintaxis pedía (int)(cadena[ i ]) y daba error con int(cadena[ i ]), además daba un error con un bucle for. Aquí te dejo el código con esa modificación a ver si te funciona
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int encrip;
int i;
int j;
typedef char TipoCadena[40];
typedef char TipoCadEncriptada[40];
TipoCadena cadena;
TipoCadEncriptada cadenaEncriptada;
encrip=0;
i=0;
printf("ingrese el texto a encriptar \n");
scanf("%s",&cadena);
printf("El numero de caracteres en la cadena es %d \n",strlen(cadena));
do {
printf("Caracter extraido: %c con valor ascii %d \n",cadena[i], (int)(cadena[i]));
encrip = (int)(cadena[i]) +2;
cadenaEncriptada[i] = (char)(encrip);
printf("Caracter encriptado: %c con valor ascii %d \n",cadenaEncriptada[i], (int)(cadenaEncriptada[i]));
i=i+1;
} while (i < strlen(cadena));
printf("El texto encriptado es ");
j=0;
do {
printf("%c", cadenaEncriptada[j]);
j++;
} while (j<strlen(cadena));
return 0;
}
-
Muchas gracias mayen tu programa me anda en C esta perfecto :D
-
¡Genial!
-
Muchas gracias Mayen por haverme ayudado rendi bien gracias a vos y pase de año!:D. Ahora solo me queda 1 materia . Nose como agradecertelo aprendi cosas q no savia gracias a tu explicacion q ni mis amigos me quisieron ayudar.. la verdad es bueno q halla personas buenas como vos en el mundo. :)