Inicialmente su código debe leer un archivo llamado “reglas.txt”, este contiene en cada
línea alguna letra del abecedario (solo trabajaremos con letras mayúsculas) y al lado
de cada letra estará su respectiva codificación en binario. Serán las letras de la A
hasta la Z y los números de 0 al 4, así tenemos 32 caracteres, 5 bits para cada uno. El
archivo tiene la siguiente estructura:
<Letra> <Binario de 5 bits>Ejemplo reglas.txt:
G 00000
Z 11001
K 00011
.
.
.
.
1 01110
Fíjese que las letras en el archivo no necesariamente están en orden alfabético,
igualmente los números tampoco están en orden. La idea es que las cadenas de
entrada tengan un significado diferente según el archivo de reglas. Todas las letras y
números mencionados anteriormente deben estar incluidos en las reglas con su
respectiva codificación en binario.
Si la entrada fuera 1 00000110010111000000, se tiene que escribir el mensaje
decodificado en un archivo de salida, cada entrada es una línea en la salida. Para el
ejemplo anterior, en el archivo salida se escribe GZ1G. Todo esto con las reglas
definidas antes.
se que el codigo dice que se tiene que imprimir en un archivo salida, pero primero estoy probando que me imprima por la terminal para ir probando y asegurarme primero de que este funcionando correctamente.
Bueno. ya tengo el codigo hecho pero el codigo presenta errores, yo tengo un modelo d eprueba del archivo reglas que esta asi:
K 00101
J 10111
A 00100
X 10010
E 01100
P 11100
por lo menos si en la consola coloco opcion 1 y 00101 me imprime K que es correcto pero si coloco ejemplo 10010 que es X no me imprime nada no hace nada, y si coloco ambas lineas juntas 0010110010 (que es como se coloca en realidad) me imprime nada mas la K por eso no se que esta pasando
Código C:
Ver original
#include <stdlib.h> #include <stdio.h> #include <string.h> int main (int argc, char *argv[]) { int i=0,j=0,k=0,l=0,m=0,n=0; char bin[50],str1[5],letra,op,ArrSol[10]; int caracter,ret; int v=0, z=5; char array[5]; FILE *reglas; if(op=='1'){ //Opción 1 if(reglas==NULL){ }else{ //printf("%c %s\n",letra,str1);//Probando que lee línea a línea for (v=0;v<z;v++){ array[v]=bin[v]; l++; } v=l; z=z+5; } if (ret==0){ /*char word= letra; printf("%c", word);*/ ArrSol[k]=letra; k++; } } } } return 0; }
aqui les explico como funciona mi codigo para que no haya alguna duda:
como leo por consola una cadena de maximo 50 digitos uso un arreglo array para ir cortando esa cadena cada 5 valores (despues los iteradores v y z van a ir cambiando ahora desde ejemplo de 5 hasta 9 y asi sucesivamente para ir picando la cadena cada 5 digitos) y ese arreglo ahora lo comparo con el str1 que lee mi fscanf y uso la funcion strncmp, si son iguales devuelve 0 y quiere decir que el arrego es igual a una cadena por lo tanto guardo en arreglo soluicon la letra.
y esa letra es la codificacion que la cadena que equivale mi arreglo de 5 digitos segun el archivo reglas.
uso un segundo while ya que el tiene que seguir leyendo linea tras linea y seguir viendo cuando ese arreglo es igual alguna de las cadenas que sale en el archivo reglas.
si pueden ayudarme con esto se los agradeceria muchisimo.