[C] kod morsa koder i dekoder

Awatar użytkownika
fryxjer
Użytkownik
Użytkownik
Posty: 226
Rejestracja: 27 lis 2006, o 22:02
Płeć: Mężczyzna
Lokalizacja: Raciborz
Podziękował: 62 razy
Pomógł: 23 razy

[C] kod morsa koder i dekoder

Post autor: fryxjer »

Dzień dobry, normalnie koduje do pliku, ale dekoder z pliku już nie działa poprawnie, nie wiem, czy można tak do tego problemu podejść.

Kod: Zaznacz cały

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define ROZMIAR 3
const char *alf[] = { 'A' , 'B'   ,'C'   ,'D'  ,'E','F'   ,'G'  ,'H'   ,'I' ,'J'   ,'K'  ,'L'   ,'M' ,'N' ,'O'  ,'P'   ,'Q'   ,'R'  ,'S'  ,'T','U'  ,'V'   ,'W'  ,'X'   ,'Y'   ,'Z'   };
const char *tab[] = { ".-", "-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.", "---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};

void koduj(FILE *plik1, FILE *plik2);
void dekoduj(FILE *plik1, FILE *plik2);
int dekoduj_jeden(char *str);
int dekoduj1(int n, char *tab1);

int main(int argc, char *argv[])
{
    FILE *plik1, *plik2, *plik3;
    int i;
    
    plik1 = fopen(argv[1],"r");
    plik2 = fopen(argv[2],"w");
    
    koduj(plik1,plik2);
    
    fclose(plik1);
    fclose(plik2);

    plik2 = fopen(argv[2],"r");
    plik3 = fopen(argv[3],"w");
    dekoduj(plik2,plik3);
    fclose(plik2);
    fclose(plik3);
    
    system("pause");
    return 0;
}

void koduj(FILE *plik1, FILE *plik2)
{
    int i;
    char znak,znak2;
    if(plik1==NULL || plik2==NULL)
    {
                printf("nie ma takich plików\n");
                }
    else{
         while((znak = fgetc(plik1)) != EOF){
         if(znak == ' ')
         fputc(znak, plik2);
         else if(isalpha(znak)){
              znak2=toupper(znak);
              i=(znak2-65);
              fputs(*(tab+i),plik2);
              fputs("|",plik2);
              }
         else if (ispunct(znak))
         fputc(' ',plik2);
         }
    } 
 
}

int dekoduj_jeden(char *str)
{
     int i;
     for(i=0;i<26;i++)
     if(strcmp(str,*(tab+i))==0)
     break;
     return i+65;
}

int dekoduj1(int n, char *tab1){
int k,i,flag;
for(k=0;k<26;k++){
for(i=0;i<n;i++){
if(tab1[i]==*((tab+k)[i])){
flag++;
       if(flag==n)
       return k;
       break;
}
}
}

}
void dekoduj(FILE *plik1, FILE *plik2)
{
     int i=0,j=0,k=0,l=0;
     //char tab1[5]={0,0,0,0,0}
     char *tab1;
     char znak, znak2;
     tab1=(char*) malloc(ROZMIAR*sizeof(char));
     while((znak = fgetc(plik1)) != EOF){
                 if(znak==' ')
                 fputc(znak,plik2);
                 else if(znak == '.' || znak=='-'){
                      tab1[i]=znak;
                      i++;
                      }
                 else if(znak != '.' && znak!='-'){
                      
                      printf("%s\ni=%d\n",tab1,i);
                      printf("\n");
                      printf("przerwa\n");
                      strlen(tab1);
                      
                      for(l=0,j=0;j<26;j++)
                      if(strcmp(tab1,*(tab+j))==0){
                      l=j;
                      if((l+65)==*(alf+l))
                      break;
                      }
                      
                      //znak2=dekoduj1(i,tab1);
                      
                      printf("%d\n",l);
                      znak2=(l+65);
                      fputc(znak2,plik2);
                      i=0;
                      j=0;
                      for(i=0;i<5;i++)
                      tab1[i]==0;
                      i=0;
                      }
     }
}
ksisquare
Użytkownik
Użytkownik
Posty: 132
Rejestracja: 1 cze 2012, o 07:04
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 15 razy

[C] kod morsa koder i dekoder

Post autor: ksisquare »

popatrz na drzewko:

Kod: Zaznacz cały

http://www.learnmorsecode.com/

Kod: Zaznacz cały

char t[64]= '%TEMNAIOGKDWRUS-.QZYCXBJP%L-FVH2%'
c=next()
i=0
while c != ' ' 
    if c == '-' 
         i=2*i+1
    else 
         i=2*i+2
    c=next()
t[i]
Awatar użytkownika
fryxjer
Użytkownik
Użytkownik
Posty: 226
Rejestracja: 27 lis 2006, o 22:02
Płeć: Mężczyzna
Lokalizacja: Raciborz
Podziękował: 62 razy
Pomógł: 23 razy

[C] kod morsa koder i dekoder

Post autor: fryxjer »

No jasne, dzięki
ODPOWIEDZ