Konwerter tekstu na braille'a w jezyku C

0

Witam. Na wstepie chciałem zaznaczyć że to mój pierwszy program(nie licząc drobnych programików robionych na zajeciach), wiec prosze o wyrozumiałośc. Mój problem polega na tym, że musze jako prace zaliczeniową napisać program konwertujący tekst na alfabet Braile'a. Mam już część programu napisaną niestety brakuje najważniejszego czyli samego konwertowania. Ogólnie mam pomysł jak to ma wyglądać i naprawde kilka godzin straciłem na realizaje tego co wykombinowałem, ale niestety nic nie wychodzi. Moja wizja jest taka: w alfabecie Braille'a znaki sa zbudowane z punktów i pustych pól (w jednym znaku są dwie kolumny po 3 wiersze) ja wymyśliłem że do każdego znaku przyporządkuje tablice znakowa z "0" jako punkty i "_" jako puste miejsca. Program miałby działać tak:

  1. wpisujemy tekst który program uznaje jako tablice znakową- scanf -> tablica[]
  2. program tworzy tablice z pierwszego słowa (do spacji)
  3. program wczytuje przypisane tablice dla poszczególnych liter
  4. tworzy jedną tablice z wczytanych wczesniej i wyswietla ją.
  5. wraca do miejsca w którym napotkał spacje
  6. spacje traktuje jako przejście do nowej linii
  7. wczytuje kolejny wyraz
  8. po przekonwertowaniu tekstu wpisujemy nowy tekst do tłumaczenia lub wracamy do menu po przez wcisniencie ESC.

A to stworzyłem do tej pory:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
 
                  
void instrukcja()
{
    system("cls");
            printf("\n\n\n  ------------------------ INSTRUKJA OBSLUGI PROGRAMU ------------------------\n\n\n");
            printf("\n   Program obsluguje sie po przez wybieranie odpowiednich klawiszy z numerami\n");
            printf("\n   przypisanymi im w menu. Menu z opisami klawiszy jakie nalezy wybrac w celu \n");
            printf("\n   wykonywania wymaganej czynnosci podane sa na poczatku lub na koncu kazdej\n");
            printf("\n   czesci programu(przykladem jest menu glowne).\n");
            printf("\n\n\n ++++++++++++++++++++++++++++++++++ MENU ++++++++++++++++++++++++++++++++++++++ \n");
            printf("\n\t\t\t> ESC. Powrot do menu glownego < \n");
            printf("\n\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
    while(getch()!=27);    
     }
void na_braille()
{
     system("cls");
 do{              
            printf("\n\n\tWpisz tekst(bez polskich znakow) ktory chcesz przekonwertowac na\n\talfabet BRAILLE'A, a nastepnie potwierdz ENTER'EM\n\n");
            printf("\n\n\n");
            char A[3][2]= {
                  {'0','_'},
                  {'_','_'},
                  {'_','_'}
                  };
            char B[3][2]= {
                  {'0','_'},
                  {'0','_'},
                  {'_','_'}
                  };
            char C[3][2]= {
                  {'0','0'},
                  {'_','_'},
                  {'_','_'}
                  };
            char D[3][2]= {
                  {'0','0'},
                  {'_','0'},
                  {'_','_'}
                  };
            char E[3][2]= {
                  {'0','_'},
                  {'_','0'},
                  {'_','_'}
                  };
            char F[3][2]= {
                  {'0','0'},
                  {'0','_'},
                  {'_','_'}
                  };
            char G[3][2]= {
                  {'0','0'},
                  {'0','0'},
                  {'_','_'}
                  };
            char H[3][2]= {
                  {'0','_'},
                  {'0','0'},
                  {'_','_'}
                  };
            char I[3][2]= {
                  {'0','0'},
                  {'_','_'},
                  {'0','_'}
                  };
            char J[3][2]= {
                  {'0','0'},
                  {'_','0'},
                  {'0','_'}
                  };
            char K[3][2]= {
                  {'0','_'},
                  {'_','0'},
                  {'0','_'}
                  };
            char L[3][2]= {
                  {'0','_'},
                  {'0','_'},
                  {'0','_'}
                  };
            char M[3][2]= {
                  {'0','0'},
                  {'_','_'},
                  {'0','_'}
                  };
            char N[3][2]= {
                  {'0','0'},
                  {'_','0'},
                  {'0','_'}
                  };
            char O[3][2]= {
                  {'0','_'},
                  {'_','0'},
                  {'0','_'}
                  };
            char P[3][2]= {
                  {'0','0'},
                  {'0','_'},
                  {'0','_'}
                  };
            char Q[3][2]= {
                  {'0','0'},
                  {'0','0'},
                  {'0','_'}
                  };
            char R[3][2]= {
                  {'0','_'},
                  {'0','0'},
                  {'0','_'}
                  };
            char S[3][2]= {
                  {'_','0'},
                  {'0','_'},
                  {'0','_'}
                  };
            char T[3][2]= {
                  {'_','0'},
                  {'0','0'},
                  {'0','_'}
                  };
            char U[3][2]= {
                  {'0','_'},
                  {'_','_'},
                  {'0','0'}
                  };
            char V[3][2]= {
                  {'0','_'},
                  {'0','_'},
                  {'0','0'}
                  };
            char W[3][2]= {
                  {'_','0'},
                  {'0','0'},
                  {'_','0'}
                  };
            char X[3][2]= {
                  {'0','0'},
                  {'_','_'},
                  {'0','0'}
                  };
            char Y[3][2]= {
                  {'0','0'},
                  {'_','0'},
                  {'0','0'}
                  };
            char Z[3][2]= {
                  {'0','_'},
                  {'_','0'},
                  {'0','0'}
                  };
                  
    /*konwertująca część programu*/
    
            printf("\n\n\n ++++++++++++++++++++++++++++++++++ MENU ++++++++++++++++++++++++++++++++++++++ \n");
            printf("\n\t\t> ESC. Powrot do menu glownego < \n");
            printf("\n\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
            }  
     while(getch()!=27);  
     }
void o_programie()
{
     system("cls");
     printf("\n\n\n\n\t napis jakis jak sie swieci znaczy zakolilo\n\n\n");
     }
int main()
{      A:
        system("cls");
  printf("\n\n\n --------- Wcisnij klawisz z odpowiednim numerem aby wykonac czynnosc --------- \n"); 
  printf("\n\n\n ++++++++++++++++++++++++++++++++++ MENU ++++++++++++++++++++++++++++++++++++++ \n");
  printf("\n\t\t> 1. Instrukcja obslugi < \n");
  printf("\n\t\t> 2. Konwersja alfabateu LACINSKIEGO na BRAILLE'A < \n"); 
  printf("\n\t\t> 3. O programie i tworcy <\n");
  printf("\n\t\t> 4. ZAKONCZ DZIALANIE PROGRAMU <\n");
  printf("\n\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
      printf("\n\t\t\tPODAJ OPCJE...\n");
      switch (getch())
      {
       case '1':{
            instrukcja();  
            }
            break; 
       case '2' :{
            na_braille();
            }
            break;
       case '3' :{
            o_programie();
            }
            break;
       case '4' :{
            return 0;
            }
            break;
       default: {
                printf("Mistrzuniu pomyleczka wynikla - nie ten znak ZIOM!!!\n");
                }}
      
system("PAUSE"); goto A;
return 0;
}

tego co do tej pory wykombinowałem odnośnie samej konwersji nawet nie wrzucałem bo nic z tego nie działa same błedy wychodzą.
Prosze o pomoc bo musze juz na dniach to oddać.

0
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

void instrukcja()
{
  system("cls");
  printf("\n\n\n  ------------------------ INSTRUKJA OBSLUGI PROGRAMU ------------------------\n\n\n");
  printf("\n   Program obsluguje sie po przez wybieranie odpowiednich klawiszy z numerami\n");
  printf("\n   przypisanymi im w menu. Menu z opisami klawiszy jakie nalezy wybrac w celu \n");
  printf("\n   wykonywania wymaganej czynnosci podane sa na poczatku lub na koncu kazdej\n");
  printf("\n   czesci programu(przykladem jest menu glowne).\n");
  printf("\n\n\n ++++++++++++++++++++++++++++++++++ MENU ++++++++++++++++++++++++++++++++++++++ \n");
  printf("\n\t\t\t> ESC. Powrot do menu glownego < \n");
  printf("\n\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
  while (getch()!=27);
}
void na_braille()
{
  system("cls");
  do
    {
      printf("\n\n\tWpisz tekst(bez polskich znakow) ktory chcesz przekonwertowac na\n\talfabet BRAILLE'A, a nastepnie potwierdz ENTER'EM\n\n");
      printf("\n\n\n");
      char A[3][2]=
      {
        {'0','_'},
        {'_','_'},
        {'_','_'}
      };
      char B[3][2]=
      {
        {'0','_'},
        {'0','_'},
        {'_','_'}
      };
      char C[3][2]=
      {
        {'0','0'},
        {'_','_'},
        {'_','_'}
      };
      char D[3][2]=
      {
        {'0','0'},
        {'_','0'},
        {'_','_'}
      };
      char E[3][2]=
      {
        {'0','_'},
        {'_','0'},
        {'_','_'}
      };
      char F[3][2]=
      {
        {'0','0'},
        {'0','_'},
        {'_','_'}
      };
      char G[3][2]=
      {
        {'0','0'},
        {'0','0'},
        {'_','_'}
      };
      char H[3][2]=
      {
        {'0','_'},
        {'0','0'},
        {'_','_'}
      };
      char I[3][2]=
      {
        {'0','0'},
        {'_','_'},
        {'0','_'}
      };
      char J[3][2]=
      {
        {'0','0'},
        {'_','0'},
        {'0','_'}
      };
      char K[3][2]=
      {
        {'0','_'},
        {'_','0'},
        {'0','_'}
      };
      char L[3][2]=
      {
        {'0','_'},
        {'0','_'},
        {'0','_'}
      };
      char M[3][2]=
      {
        {'0','0'},
        {'_','_'},
        {'0','_'}
      };
      char N[3][2]=
      {
        {'0','0'},
        {'_','0'},
        {'0','_'}
      };
      char O[3][2]=
      {
        {'0','_'},
        {'_','0'},
        {'0','_'}
      };
      char P[3][2]=
      {
        {'0','0'},
        {'0','_'},
        {'0','_'}
      };
      char Q[3][2]=
      {
        {'0','0'},
        {'0','0'},
        {'0','_'}
      };
      char R[3][2]=
      {
        {'0','_'},
        {'0','0'},
        {'0','_'}
      };
      char S[3][2]=
      {
        {'_','0'},
        {'0','_'},
        {'0','_'}
      };
      char T[3][2]=
      {
        {'_','0'},
        {'0','0'},
        {'0','_'}
      };
      char U[3][2]=
      {
        {'0','_'},
        {'_','_'},
        {'0','0'}
      };
      char V[3][2]=
      {
        {'0','_'},
        {'0','_'},
        {'0','0'}
      };
      char W[3][2]=
      {
        {'_','0'},
        {'0','0'},
        {'_','0'}
      };
      char X[3][2]=
      {
        {'0','0'},
        {'_','_'},
        {'0','0'}
      };
      char Y[3][2]=
      {
        {'0','0'},
        {'_','0'},
        {'0','0'}
      };
      char Z[3][2]=
      {
        {'0','_'},
        {'_','0'},
        {'0','0'}
      };

      /*konwertująca część programu*/

      printf("\n\n\n ++++++++++++++++++++++++++++++++++ MENU ++++++++++++++++++++++++++++++++++++++ \n");
      printf("\n\t\t> ESC. Powrot do menu glownego < \n");
      printf("\n\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
    }
  while (getch()!=27);
}
void o_programie()
{
  system("cls");
  printf("\n\n\n\n\t napis jakis jak sie swieci znaczy zakolilo\n\n\n");
}
int main()
{
  char znak;
  do
    {
      system("cls");
      printf("\n\n\n --------- Wcisnij klawisz z odpowiednim numerem aby wykonac czynnosc --------- \n");
      printf("\n\n\n ++++++++++++++++++++++++++++++++++ MENU ++++++++++++++++++++++++++++++++++++++ \n");
      printf("\n\t\t> 1. Instrukcja obslugi < \n");
      printf("\n\t\t> 2. Konwersja alfabateu LACINSKIEGO na BRAILLE'A < \n");
      printf("\n\t\t> 3. O programie i tworcy <\n");
      printf("\n\t\t> 4. ZAKONCZ DZIALANIE PROGRAMU <\n");
      printf("\n\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
      printf("\n\t\t\tPODAJ OPCJE...\n");
      switch (znak=getch())
        {
        case '1':
          instrukcja();
          break;
        case '2' :
          na_braille();
          break;
        case '3' :
          o_programie();
          break;
        case '4' :
          return 0;
          break;
        default:
          printf("Mistrzuniu pomyleczka wynikla - nie ten znak ZIOM!!!\n");
        }
      system("PAUSE");
    }
  while (znak!='4');
  system("PAUSE");
  return 0;
}

Wszystko ładnie działa. Twój pomysl na konwersje jest w miare ok, ale proponuje te tablice char'ów zamknąć w jeszcze jednej tablicy. W ten sposób łatwiej sie będzie do nich odnosić.
Tzn możesz zrobić wtedy tak że masz tablicę
literki[26], i każdą literkę z tekstu zamieniasz na tablicę np. literki[tolower(literka_z_tekstu)-'a']

0

Nie dokońca rozumiem o co ci chodzi. Czy ma to wygądac mniej wiecej tak:

 literki[tolower({'0','_'},{'_','_'},{'_','_'};)-'a',kolejne_literki]
0

Nie nie nie.

Łatwiejszy przykład:
tablica która literkom z tekstu przypisuje ich numer w alfabecie.
Tworzymy tablicę:

int numerki[26];
for(int i=0;i<26;i++)
  numerki[i]=i+1;

A teraz chcemy żeby z wczytanego tekstu pozamieniać literki na numerki (tzn a->1, b->2, C->3 itd).

char bufor[100];
scanf("%s",&bufor);
for(int i=0;i<strlen(bufor);i++)
  printf("%d",numerki[tolower(bufor[i])-'a']);

W ten sposób po wpisaniu:
abcdEFG
wyświetli nam się
1234567

Teraz w twoim przypadku proponuje zrobić analogicznie, tylko zamiast tego 1,2,3 itd wyświetlą się te twoje brajlowe znaczki.

0

ok do tej pory chyba rozumiem. Tylko jak teraz wytłumaczyć programowi żeby wyświetlał tablice 2x3 zawarte w jednym wyrazie obok siebie?

0

To byłoby dość skomplikowane. Prościej będzie zrobic sobie dodatkowy wektor (2xN)x3 w którym sobie ułożysz cały tekst do wyświetlenia.
Tzn będziesz sobie do niego dodawał po "literce". Pierwszy wiersz tej tablicy to będzie "najwyższy poziom" tych brajlowych znaczków, środkowi wiersz to będzie środkowy poziom i ten dolny to będzie dolny poziom tekstu brajlowego (ale nie jednej litery, tylko wszystkich które chcesz wyświetlić). Potem wypiszesz sobie po prostu całe te wiersze pod sobą. Oczywiście robisz to po wyrazie.

0

A co to ten wektor, tzn jak sie tworzy i jak on działa?

0

Oj no chodziło mi o dodatkową tablicę do której to będziesz przepisywał.
Wszystko trzeba ci tłumaczyc na prostych przykładach?
Załóżmy że chcemy zlożyć sobie taki tekst brajlowy i np. mamy

char A[1][2] = {{'*'},{'o'}};
char B[1][2] = {{'-'},{'+'}};

(czyli każda literka składa się z takiego znaczka
np.

*
o

Wczytujemy tekst i mamy tam wyraz ABAA
Tworzymy tablicę o rozmiarze (1*4)x2.
char tablica[4][2];
i następnie w pętli wpisujemy tam pierwszy i drugi wiersz naszych literek, czyli:

tablica[0][0] = '';
tablica[1][0] = '-
tablica[2][0] = '
';
tablica[3][0] = '*';

tablica[0][1] = 'o';
tablica[1][1] = '+';
tablica[2][1] = 'o';
tablica[3][1] = 'o';

Następnie wypisujemy tab[i][0] a poniżej tab[i][1], co da nam efekt:

*-**
o+oo

Czyli taki jaki chcieliśmy.

0

ok to na razie wszystko jasne będę próbował coś działać z tym konwerterem. Mam jeszcze takie pytanie odnośnie powrotu do menu. Chciałem zrobić taki myk żeby po skorzystaniu z którejś opcji programu można było wrócić do menu głównego po wciśnięciu ESC. Niestety moje próby z czymś takim:

 while(getch()!=27);  

nie bardzo sie spisują. Może jakaś podpowiedz jak to poprawić.

0

Nie jest źle, ale jak dla mnie posiadanie tylu nazwanych tablic dla każdej literki jest strasznym bałaganiarstwem (dodawanie potem innych znaków będzie bardzo karkołomne). Rozważ takiego typu rozwiązanie:

const int DotsCount = 6;

struct BrailleLetter {
    char ascii;
    char braille[DotsCount];
};

const int LetterCount = 'Z'-'A'+1;
typedef BrailleLetter BrailleDictionary[LetterCount];

const BrailleDictionary brailleDictionary = {
    { 'a', 
      { '0', '_',
        '_', '_',
        '_', '_' }
    },

    { 'b', 
      { '0', '_',
        '0', '_',
        '_', '_' }
    },

    // i tak dalej
}

const BrailleLetter emptyField = {
    { ' ', 
      { '_', '_',
        '_', '_',
        '_', '_' }
    },
}

const BrailleLetter& findLetter(char letter) {
     letter = tolower(letter);

     if(!islower(letter)) {
          return emptyField;
     }

     for(int i=0; i<LetterCount; ++i) {
          if(brailleDictionary[i].ascii == letter) {
                return brailleDictionary[i];
          }
     }
}
0

Witam mam ogromną proźbę do stone_89 Czy udało Ci się już napisać ten konwerter i czy działa ponieważ mam napisać taki program na zaliczenie z informatyki a że jestem dopiero początkujący to niewiele jeszcze wiem o pisaniu programów i siedzę nad tym już parę dni i nic nie mogę wymyślić tak więc prosiłbym o zamieszczenie działającego programu na tym forum byłbym bardzo wdzięczny!!!!! Z góry dzięki za pomoc i czekam na odpowiedź!!! Pozdrawiam!!!!!! ;-)

0

Początkujący? Miałeś cały semestr programowania. Tu na forum jest już część rozwiązania + porady jak to do kończyć, a ty nie umiesz tego złożyć do kupy i prosisz się o gotowca. Trzeba sie było uczyć a nie imprezować...
A autorowi odradzałbym podawanie gotowca bo potem może się okazać że to jego kolega ze studiów go splagiatuje...

0

W tym kodzie który mi podałeś wystepuje błąd i nie wiem co jest nie tak

<quote=MarekR22>

const BrailleLetter emptyField = {
    { ' ', 
      { '_', '_',
        '_', '_',
        '_', '_' }
    },

</quote>

Wyświetla mi sie taki błąd:

expected ,' or ;' before "const

robiłem to czego program chce ale to nic nie daje tylko jeszcze więcej błędów się pojawia

0

do: wielka prośba. Ja też jestem początkujący i dopiero pierwszy semestr miałem programowanie, pierwszy i ostatni bo nie jestem na informatyce tylko na mechanice i budowie maszyn ale mam taki przedmiot. Prawda jest taka że większość ludzi miała znacznie łatwiejsze programy(załóżmy jakies proste obliczeniowe, z reguły tak do 40 linijek tekstu źródłowego) a i tak większość zapłaciła ludziom z informatyki za napisanie programików. Ja postanowiłem że zrobię sam i jak na razie to trochę mnie to przerosło bo w moim programie i tak jest już wiele spoza tego co mieliśmy na zajęciach. Jak na razie to mam czas do poniedziałku żeby to ogarnąć ale nie wiem czy dam rade ale jeśli ty byś to skończył to ja tez chętnie bym chciał zerknąć na twoje dzieło. Dużo już zrobiłem ale zostało najważniejsze czyli samo konwertowanie. Masz tu dużo wskazówek jak stworzyć funkcje konwertujące, ja osobiście (jako początkujacy) wielu rzeczy nie rozumiem ale od czego jest internet i google jeżeli dam rade to w weekend skończe ten program ale i tak na gotowe nie masz co liczyć. Jak chcesz to napisz na gadu: 2066414 to podam ci link gdzie znajdziesz jeszcze troche informacji jak skończyć ten program. Także życzę powodzenia w pisaniu Konwertera. PZDR

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