Dekoder Morse'a

0

Poprzedni temat został zamknięty przez moderatora a problem nie został rozwiązany :/ Napisałem program od początku troche inaczej i zaczął działać. Tzn jeżeli podają zakodowane litery co raz "większe" np A później F itd to program prawidłowo rozkodowuje. Jeżeli natomiast np po literze O podam kod litery A to zamist wypisać OA program wypisuje OW. Gdzie może być problem? Dziękuję.

#include <stdio.h>
#include <stdlib.h> 
#include <string.h> 
main()
{
      int i,j,a=0,b=0,s=0,len,l=0,t=0,cmp=1,l2=0,cz=0;
      char c,kod[100];
      char tmp[7]={" "};
      char tmp2[7],wynik[50];
      char slownik[37][6]={
           {".-"}, {"-..."}, {"-.-."}, {"-.."}, {"."}, 
           {"..-."}, {"--."}, {"...."}, {".."}, {".---"}, {"-.-"},
           {".-.."}, {"--"}, {"-."}, {"---"}, {".--."}, {"--.-"},
           {".-."}, {"..."}, {"-"}, {"..-"}, {"...-"}, {".--"},
           {"-..-"}, {"-.--"}, {"--.."}, {".-.-.-"}, {".----"}, {"..---"},
           {"...--"}, {"....-"}, {"....."}, {"-...."}, {"--..."}, {"---.."},
           {"----."}, {"-----"}
           };
       char slownik2[38]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ.1234567890"};  
      printf("DEKODER KODU MORSE\'A\n");
      printf("Program sluzy do dekodowania sygnalu Morse\'a.\n");
      printf("Nalezy podac ciag znakow oddzielajac kazda zakodowana litere poprzez spacje.\n");
      printf("Podaj zakodowany ciag znakow:\n");
      i=0;
      //Wczytywanie ciagu znakow
      while ((c=getchar())!='\n')
      {
         kod[i] = c;
         i++;
      }
      kod[i]=' '; //dodawanie spacji po wczytaniu calego ciagu
      i++;
      kod[i]=0; //dodawanie zera na koncu ciagu
      //koniec wczytywania ciagu znakow
      len=strlen(kod);
      //liczenie ilosci spacji
      while (l!=len)
      {
            if (kod[l]==' ')
            {
            s++;
            l++;
            }
            else 
            l++;
      }
      l=0;
      //koniec liczenia ilosci spacji
      while (l!=s)
      {
            cmp=strcmp(tmp, tmp2);
            if (cmp!=0)
                  {
                  //wczytywanie zakodowanej litery do tablicy tmp
                  if (l2==b)
                  {           
                  i=0;
                  l2++;
                  while (kod[t]!=' ')
                  {
                        tmp[i]=kod[t];
                        i++;
                        t++;
                  }
                  i++;
                  t++;
                        tmp[t]=0; //zakonczenie ciagu
                  //koniec wczytywania zakodowanej litery do talbicy tmp
                  } 
                  {
                        i=0;
                        j=0;
                  //wczytywanie kodu litery do tablicy tmp2
                        {
                                do{
                                     
                                     if (slownik[a][j]==0)
                                     {
                                        j=0;
                                        *tmp2=0;
                                     }
                                     else
                                     {
                                         tmp2[i]=slownik[a][j];
                                         j++;
                                         i++;
                                     }
                                     }while (slownik[a][j]!=0);
                                     tmp2[i]=0;
                                     a++;
                        }
                  cmp=strcmp(tmp, tmp2);
                  }
                  }
             else
             {
             --a;
             wynik[b]=slownik2[a];
             b++;
             l++;
             tmp[1]=0;
             wynik[b]=0;
             *tmp2=0;
             }                       
             }
             wynik[s]=0;
            

      //koniec wczytywania zakodowanej litery do tablicy tmp
      printf("%s\n",wynik);
            system("pause");
}      
0

po znalezieniu kodu danej litery cofnij się na początek tablicy slownik i powinno dzialac

0

user image

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()
0
mgr.Dobrowolski napisał(a)

..

hej, ostreeee!

0
char t [0..65]=' TEMNAIOGKDWRUS_.QZY....

//kreski i kropki generowane od tyłu

koder (c)
    t[65]=c
    p=1
    while t[p]!=c
        p++
    while p>0
        if p % 2    
             kropka
             p= (p-1)/2
        else 
             kreska
             p= (p-2)/2

1 użytkowników online, w tym zalogowanych: 0, gości: 1