elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Píldoras formativas en seguridad de la información


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, YreX-DwX)
| | |-+  código morse es urgente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: código morse es urgente  (Leído 311 veces)
jpp97

Desconectado Desconectado

Mensajes: 1


Ver Perfil
código morse es urgente
« en: 2 Febrero 2020, 17:58 »

tengo un programa que se utiliza para la codificación y decodificacion morse lo que cundo introduzco la palabra ni me la guarda ni me codifica y no me abre los dos archivo que ya tengo creados.... alguien puede ayudarme??? :(

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_LLETRES 15
//Metode per carregar el diccionari en una variable
void carregar_diccionari(char abecedari[36][15]){
    FILE *fitxer;
    char linia[10];
    fitxer=fopen("morse.txt","r");
    int cont=0;
    if (fitxer==NULL)
    {
        printf("No existeix el fitxer.");
    }else{
        while ( !feof(fitxer) && cont != 36){ //ja que llegim lletra i morse hi han 74 elements perÚ aixÚ passa
                                              //perque hi ha linies de mes al fitxer. daquesta manera ens assegurem que
                                              //agafi lletra i morse que toquen
            fscanf(fitxer,"%s",linia);
            fscanf(fitxer,"%s",linia);
            int i =0, j=0;
            while(linia!='*'){
                if(linia=='.'){
                     abecedari[cont][j]='.';
                     j++;
                }else if(linia=='-'){
                     abecedari[cont][j]='-';
                     j++;
                }
                i++;
            }
            abecedari[cont][j]='\0';
            cont++;
        }
    }
    fclose (fitxer);
}
//per contar les letres de paraula perque no superi el maxim
int numero_lletres(char linia[]){
    int llarg =0;
    while(linia[llarg]!='\0'){
        llarg++;
    }
    return llarg;
}
//per pasar de la lletra al morse
void lletra_morse(char matriu[36][15], int fila){
    for(int j = 0; matriu[fila][j]!='\0'; j++){
        printf("%c", matriu[fila][j]);
    }
    printf("     ");
}
//metode per anar recorrent una paraula i anant imprimint el seu valor morse
void traduccio_paraula_morse(char linia[], char abecedari[36][15]){
    int contador_bucle_1=0;
    while(linia[contador_bucle_1]!='\0'){
        if(linia[contador_bucle_1]>=65 && linia[contador_bucle_1]<=90){
            lletra_morse(abecedari,linia[contador_bucle_1]-65);
        }else if (linia[contador_bucle_1]>=48 && linia[contador_bucle_1]<=57){
            lletra_morse(abecedari,linia[contador_bucle_1]-22);
        }else if (linia[contador_bucle_1]>=97 && linia[contador_bucle_1]<=122){
            lletra_morse(abecedari,linia[contador_bucle_1]-97);
        }
        contador_bucle_1++;
    }
    printf("\n");
}
//guardem lletra a lletra la traduccio a un fitxer codificat
void guardar_paraula_morse(char linia[], char abecedari[36][15]){
    int contador_1=0;
    FILE* escriure;
    escriure = fopen("codificat.txt", "a");
    while(linia[contador_1]!='\0'){
        if(linia[contador_1]>=65 && linia[contador_1]<=90){
            fprintf(escriure,"%s ",abecedari[linia[contador_1]-65]);
        }else if (linia[contador_1]>=48 && linia[contador_1]<=57){
            fprintf(escriure,"%s ",abecedari[linia[contador_1]-22]);
        }else if (linia[contador_1]>=97 && linia[contador_1]<=122){
            fprintf(escriure,"%s ",abecedari[linia[contador_1]-97]);
        }else if(linia[contador_1]=='\n'){
            fprintf(escriure,"\n");
        }else if(linia[contador_1]=='\t'){
            fprintf(escriure,"\t");
        }else if(linia[contador_1]==' '){
            fprintf(escriure,"\t");
        }
        contador_1++;
    }
    fclose(escriure);
}
//metode que per transformar tot un fitxer original a un de morse
void codificar_fitxer(char abecedari[36][15]){
    FILE *fitxer, *fit;//, *escriure;
    char linia[2];
    fitxer=fopen("original.txt","r");
    if (fitxer==NULL)
    {
        printf("No existeix el fitxer.");
    }else{
        fit = fopen("codificat.txt", "w"); //si obrim amb mode w borrem contingut fitxer
        fclose(fit);
        while ( !feof(fitxer)){
            fscanf(fitxer,"%c",&linia[0]); //llegim lletra a lletra
            linia[1]='\0'; //posem caracter de final de linia (sentinella)
            guardar_paraula_morse(linia,abecedari);
            linia[0]='\0'; //posem caracter de final de linia (sentinella)
        }
    }
    fclose (fitxer);
}
//retorna el valor ascii
int valor_morse_abecedari(char linia[], char abecedari[36][15]){
    int i, j;
    for(i=0; i<36;i++){
        for(j=0; linia[j]!='\0' && abecedari[j]!='\0';j++){
            if(linia[j]!=abecedari[j]){
                break;
            }
        }
        if(linia[j]=='\0' && abecedari[j]=='\0'){
            return i;
        }
    }
    return -1;
}
//metode per guardar paraules en morse a paraules de text normal
void guardar_paraula(char linia[], char abecedari[36][15]){
    FILE* escriure;
    escriure = fopen("decodificat.txt", "a");
    char morse[15], text[2];
    int cont = 0, cont2, valor;
    while(linia[cont]!='\0'){
        cont2=0;
        while(linia[cont]!=' ' && linia[cont]!='\0'){
            morse[cont2]=linia[cont];
            cont2++;
            cont++;
        }
        if(cont2!=0){
            morse[cont2]='\0';
            valor= valor_morse_abecedari(morse,abecedari);
            cont++;
            if(valor!=-1){
                if(valor>=0 && valor <= 25){
                    text[0]=valor+65;
                }else if(valor>=26 && valor <= 35){
                    text[0]=valor+22;
                }
                text[1]='\0';
                if(linia[cont]=='\n'){
                    fprintf(escriure,"%s\n",text);
                    break;
                }else if(linia[cont]=='\t'){
                    fprintf(escriure,"%s ",text);
                    break;
                }else{
                    fprintf(escriure,"%s",text);
                }
            }
        }else{
            cont++;
        }
    }
    fclose(escriure);
}
//metode per decodificar un fitxer codificat
void decodificar_fitxer(char abecedari[36][15]){
    FILE *fitxer, *fit;//, *escriure;
    char linia[1];
    char morse[100];
    int cont;
    fitxer=fopen("codificat.txt","r");
    if (fitxer==NULL)
    {
        printf("No existeix el fitxer.");
    }
    else
    {
        fit = fopen("decodificat.txt", "w");
        fclose(fit);
        while ( !feof(fitxer)){
            linia[0]='.';
            cont=0;
            while(linia[0]!='\t' && linia[0]!='\n' && !feof(fitxer) && linia[0]!='\0'){
                fscanf(fitxer,"%c",&linia[0]);
                morse[cont]=linia[0];
                cont++;
            }
            morse[cont]='\0';
            guardar_paraula(morse,abecedari);
        }
    }
    fclose (fitxer);
}
int main()
{
    char diccionari[36][15];
    int opcio = -1;
    char paraula[100];
    carregar_diccionari(diccionari);
    printf("Benvingut al codificador, decodificador de codi Morse.\n\n");
    while(opcio != 0 ){
        printf("\nQue vols fer a continuacio?\n\n");
        printf("\n0-Sortir del decodificador morse\n");
        printf("1-Codificar paraula\n");
        printf("2-Codificar fitxer\n");
        printf("3-Descodificar el fitxer\n");
        scanf("%i", &opcio);
        switch(opcio){
            case 1:
                //Cas per codificar una paraula
                printf("\nEscriu una paraula per a ser codificada en morse.\n");
                scanf("%s", paraula);
                if(numero_lletres(paraula)> MAX_LLETRES){
                    printf("\nError, la paraula es massa llarga per a ser codificada.\n");
                }else{
                    printf("\n\n");
                    traduccio_paraula_morse(paraula, diccionari);
                }
                break;
            case 2:
                printf("\nHas escollit codificar el fitxer. Ara podras veure el fitxer codificat.txt\n");
                codificar_fitxer(diccionari);
                break;
            case 3:
                printf("\nHas escollit decodificar el fitxer. Ara podras veure el fitxer decodificat.txt\n");
                decodificar_fitxer(diccionari);
                break;
            case 0:
                printf("\nFins un altre. Gracies per utilitzar el decodificador morse.\n");
                break;
            default:
                printf("\nHas escollit una opcio no valida del menu.\n");
                break;
        }
    }
    return 0;
}


En línea

codX

Desconectado Desconectado

Mensajes: 65


Es más complejo de lo que crees...


Ver Perfil
Re: código morse es urgente
« Respuesta #1 en: 14 Febrero 2020, 01:49 »

Hola, para escribir en un archivo debes usar
fopen("rutaAlarchivo.txt", "wt")

para leer usas "r". Para agregar texto usas "at".


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda Con Codigo de VB .net(Urgente)
.NET (C#, VB.NET, ASP)
iory330 2 1,858 Último mensaje 9 Octubre 2009, 21:02
por iory330
Traductor morse en batch
Scripting
Sr.Origami 5 2,755 Último mensaje 15 Junio 2010, 13:18
por Sr.Origami
programa convierte caracteres alfanumericos a morse (python)
Scripting
Glas.jfcc 3 4,172 Último mensaje 9 Junio 2012, 05:14
por Jirp96
Morse - ¿donde está mal?
Programación C/C++
andie13 4 1,249 Último mensaje 7 Noviembre 2016, 21:17
por andie13
como aprendo codigo morse?
Dudas Generales
vestra 2 628 Último mensaje 26 Junio 2019, 17:38
por animanegra
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines