Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

program zmieniajacy wyrazy na kod morsa

jankmich 05 Maj 2010 19:23 1965 19
  • #1 05 Maj 2010 19:23
    jankmich
    Poziom 8  

    udalo mi sie za pomoca w delphi instrukcji if stworzyc program ktory umieszcza znaki wpisane w oknie edit1 i zamienia je po kliknieciu na buton1 na kod mors'a.

    chcialbym napisac podobny program zamieniajacy cale slowa na kod mors'a.
    znaczy sie ciagi literowe czy takie cos da sie zrobic?

    dziekuje za pomoc ,moze byc jakas drobna pomoc w formie funkcji ktora doda znaki i jednoczesnie wyswietli dodane znaki morsa.
    dodam ze podejrzewam iz mozna to zrobic za pomoca instrukcji case ale jaki farunek musi on spelniac niemam zielonego pojecia.

    0 19
  • #3 05 Maj 2010 20:24
    jankmich
    Poziom 8  

    mam prosbe
    czy moglbys napisac to w kodzie poniewaz nie bardzo rozumiem twoj przepis na ta strone,
    z gory dzieki

    0
  • #5 06 Maj 2010 12:51
    A520
    Poziom 9  

    Ja zrobiłem to tak przy użyciu dwóch Edit oraz RichEdit ale może być Memo :)

    Code:

    {
    #include <vcl.h>
    #include <iostream.h>
    /*
    ....
    */
     Edit2->Text="";
     tekst=Edit1->Text;
     strcpy(tekst2, tekst.c_str());
     //for (int i=0;i<=100;i++)
     for (int i=0; tekst2[i]!=NULL;i++)   //NULL oznacza pusty znak :)
     {
      if (isalpha(tekst2[i]))
      {
       if (tekst2[i]=='a') Form4->Edit2->Text=Form4->Edit2->Text+".- ";
       if (tekst2[i]=='A') Form4->Edit2->Text=Form4->Edit2->Text+".- ";
       if (tekst2[i]=='b') Form4->Edit2->Text=Form4->Edit2->Text+"-... ";
       if (tekst2[i]=='B') Form4->Edit2->Text=Form4->Edit2->Text+"-... ";
       if (tekst2[i]=='c') Form4->Edit2->Text=Form4->Edit2->Text+"-.-. ";
       if (tekst2[i]=='C') Form4->Edit2->Text=Form4->Edit2->Text+"-.-. ";
       if (tekst2[i]=='d') Form4->Edit2->Text=Form4->Edit2->Text+"-.. ";
       if (tekst2[i]=='D') Form4->Edit2->Text=Form4->Edit2->Text+"-.. ";
       if (tekst2[i]=='e') Form4->Edit2->Text=Form4->Edit2->Text+". ";
       if (tekst2[i]=='E') Form4->Edit2->Text=Form4->Edit2->Text+". ";
       if (tekst2[i]=='f') Form4->Edit2->Text=Form4->Edit2->Text+"..-. ";
       if (tekst2[i]=='F') Form4->Edit2->Text=Form4->Edit2->Text+"..-. ";
       if (tekst2[i]=='g') Form4->Edit2->Text=Form4->Edit2->Text+"--. ";
       if (tekst2[i]=='G') Form4->Edit2->Text=Form4->Edit2->Text+"--. ";
       if (tekst2[i]=='h') Form4->Edit2->Text=Form4->Edit2->Text+".... ";
       if (tekst2[i]=='H') Form4->Edit2->Text=Form4->Edit2->Text+".... ";
       if (tekst2[i]=='i') Form4->Edit2->Text=Form4->Edit2->Text+".. ";
       if (tekst2[i]=='I') Form4->Edit2->Text=Form4->Edit2->Text+".. ";
       if (tekst2[i]=='j') Form4->Edit2->Text=Form4->Edit2->Text+".--- ";




       if (tekst2[i]=='J') Form4->Edit2->Text=Form4->Edit2->Text+".--- ";
       if (tekst2[i]=='k') Form4->Edit2->Text=Form4->Edit2->Text+"-.- ";
       if (tekst2[i]=='K') Form4->Edit2->Text=Form4->Edit2->Text+"-.- ";
       if (tekst2[i]=='l') Form4->Edit2->Text=Form4->Edit2->Text+".-.. ";
       if (tekst2[i]=='L') Form4->Edit2->Text=Form4->Edit2->Text+".-.. ";
       if (tekst2[i]=='m') Form4->Edit2->Text=Form4->Edit2->Text+"-- ";
       if (tekst2[i]=='M') Form4->Edit2->Text=Form4->Edit2->Text+"-- ";
       if (tekst2[i]=='n') Form4->Edit2->Text=Form4->Edit2->Text+"-. ";
       if (tekst2[i]=='N') Form4->Edit2->Text=Form4->Edit2->Text+"-. ";
       if (tekst2[i]=='o') Form4->Edit2->Text=Form4->Edit2->Text+"--- ";
       if (tekst2[i]=='O') Form4->Edit2->Text=Form4->Edit2->Text+"--- ";
       if (tekst2[i]=='p') Form4->Edit2->Text=Form4->Edit2->Text+".--. ";
       if (tekst2[i]=='P') Form4->Edit2->Text=Form4->Edit2->Text+".--. ";
       if (tekst2[i]=='q') Form4->Edit2->Text=Form4->Edit2->Text+"--.- ";
       if (tekst2[i]=='Q') Form4->Edit2->Text=Form4->Edit2->Text+"--.- ";
       if (tekst2[i]=='r') Form4->Edit2->Text=Form4->Edit2->Text+".-. ";
       if (tekst2[i]=='R') Form4->Edit2->Text=Form4->Edit2->Text+".-. ";
       if (tekst2[i]=='s') Form4->Edit2->Text=Form4->Edit2->Text+"... ";
       if (tekst2[i]=='S') Form4->Edit2->Text=Form4->Edit2->Text+"... ";
       if (tekst2[i]=='t') Form4->Edit2->Text=Form4->Edit2->Text+"- ";
       if (tekst2[i]=='T') Form4->Edit2->Text=Form4->Edit2->Text+"- ";
       if (tekst2[i]=='u') Form4->Edit2->Text=Form4->Edit2->Text+"..- ";
       if (tekst2[i]=='U') Form4->Edit2->Text=Form4->Edit2->Text+"..- ";
       if (tekst2[i]=='v') Form4->Edit2->Text=Form4->Edit2->Text+"...- ";
       if (tekst2[i]=='V') Form4->Edit2->Text=Form4->Edit2->Text+"...- ";
       if (tekst2[i]=='w') Form4->Edit2->Text=Form4->Edit2->Text+".-- ";
       if (tekst2[i]=='W') Form4->Edit2->Text=Form4->Edit2->Text+".-- ";
       if (tekst2[i]=='x') Form4->Edit2->Text=Form4->Edit2->Text+"-..- ";
       if (tekst2[i]=='X') Form4->Edit2->Text=Form4->Edit2->Text+"-..- ";
       if (tekst2[i]=='y') Form4->Edit2->Text=Form4->Edit2->Text+"-.-- ";
       if (tekst2[i]=='Y') Form4->Edit2->Text=Form4->Edit2->Text+"-.-- ";
       if (tekst2[i]=='z') Form4->Edit2->Text=Form4->Edit2->Text+"--.. ";
       if (tekst2[i]=='Z') Form4->Edit2->Text=Form4->Edit2->Text+"--.. ";
      }
       if (tekst2[i]==' ') Form4->Edit2->Text=Form4->Edit2->Text+"  ";
     }
     Form4->RichEdit1->Lines->Add(Edit2->Text);
    }

    Troche toporne ale ze switch miałem problemy i sprawdzał tylko pierwszy znak więc darowałem to sobie :)
    Edit2 jest ustawiony jako ukryty i czyszczony kiedy naciskamy przycisk do tłumaczenia ;)

    0
  • #6 06 Maj 2010 19:21
    jankmich
    Poziom 8  

    dzieki za zrobienie tego programu,tobie napewno tez sie moze sie przyda ale chodzilo mi o taki program ale napisany w delphi a nie w c.
    czy potrafil bys zrobic jego na delphi to by mi ulatwilo sprawe poniewaz obecnie uzywam tego srodowiska

    0
  • #7 06 Maj 2010 20:11
    Dżyszla
    Poziom 42  

    C | Delphi
    == | =
    = | :=
    -> | .
    for(i=a;i<=c;i++) | for i:=a to c do

    Pomijasz kopiowanie do talbicy znaków - odwołujesz się do stringa jak do takowej talbicy
    Radzę zastosować case, po przedstawione rozwiązanie jest wysoce nieefektywne.

    0
  • #8 06 Maj 2010 20:16
    Samuraj
    Poziom 35  

    Można pozbyć się połowy If'ów zmieniając pobrane znaki na jednakowej wielkości. Pozbywamy się w ten sposób konieczności sprawdzania osobno małych jak i dużych znaków.

    0
  • #9 06 Maj 2010 21:02
    jankmich
    Poziom 8  

    czy ma to wygladac tak ,chyba cos niebardzo,probowalem zamienic kod kolegi ale cos tu niegra.

    procedure TForm1.Button1Click(Sender: TObject);
    var i,a,c:string;
    text2,text:string;
    begin
    edit2.text:='';
    text:=edit1.Text;
    for i:= a to c do
    if (text2[i]='a'
    form1.Edit2.text:=form1.edit2.text+'.-';

    end;




    panowie help
    end.

    0
  • #11 06 Maj 2010 22:24
    A520
    Poziom 9  

    Jeżeli to było do mnie ;)
    to ja pętli umiem używać i zaznaczałem że próbowałem użyć switch'a lecz nie szło bo blokowało się na i=0 i niestety inaczej jak if'ami nie poszło;/
    Samuraj dzięki za podpowiedź nie pomyślałem o tym ;)

    0
  • #12 06 Maj 2010 22:29
    jankmich
    Poziom 8  

    zalamka totalna.chce sie zabrac za ten program ale w delphi i normalnie nadzwyczajnie zaczynam dopiero przygode z programowaniem niemajac przy tym pojecia bladego.fakt,troche wiem ale nawet po podpowiedzach szanownych kolegow niewiem co do czego wstawic.mam kilka ksiazek o delphi ale one sprawy nie zalatwiaja szukam patrze czasem jakas wiadomosc i mysl przyjdzie,ale to nie wszystko.o petlach poczytam i moze cos wymysle.a tymczasem dzieki za rady

    0
  • #13 06 Maj 2010 22:35
    Dżyszla
    Poziom 42  

    A520 - nie, nie do Ciebie ;)

    jankmich - tekst w Delphi możesz traktować jak tablicę znaków (czyli teskt[ i ] da znak i-ty w tym tekście). Pętla ma zaś przeskanować całą długość tekstu czyli od znaku 1 do znaku ostatniego, a więc równego długości tekstu, a więc Length(tekst).

    BTW - poza pętlami to radzę też pomysleć i zastosować wiedzę o funkcjach warunkowych. Kopiuj-wklej i ew. zamień nie nauczy programowania.

    0
  • #14 07 Maj 2010 06:16
    A520
    Poziom 9  

    Tak samo jest w C++ ale nie wiem czemu nie umie odwołać się dalej tylko do i=0 może jak bym przepisał to na inną zmienną dało by radę :)

    0
  • #15 07 Maj 2010 11:15
    Xitami
    Poziom 29  

    program zmieniajacy wyrazy na kod morsa

    Code:
    const t:array [0..65] of  char=' TEMNAIOGKDWRUS-.QZYCXBJP L-FVH2 ';
    

    //kreski i kropki generowane od tyłu

    pocedure  koder(c:char);
    var p:integer;
    begin
        t[65]:=c;
        p=1;
        while t[p]<>c do
            p=p+1;
        while p>0 do
            if p mod 2 <> 0 then begin   
                 kropka;
                 p= (p-1)/2
            end else begin
                 kreska;
                 p:= (p-2)/2
            end
    end;

    0
  • #16 08 Maj 2010 16:51
    jankmich
    Poziom 8  

    czy mogl by ktorys z was napisac ten program;chodzi o kod w calosci dla delph

    moze byc to kod do przycisku przytym znajdujace sie tam dwa okna edit;zazanaczam calosc dla obiektowego Delphi

    dzieki

    0
  • #17 08 Maj 2010 17:56
    Dżyszla
    Poziom 42  

    Nie istnieje "nieobiektowe Delphi" ;) Delphi = Object Pascal.

    A co do kodu.. Eh... Ramy dam (z głowy):

    Code:

    var
      i: Integer;
    begin
       Edit2.Text:='';
       for i:=1 to Length(Edit1.Text) do
          case AnsiUpperCase(Edit1.Text[i]) of
             'A': with Edit2 do Text:=Text+'.- ';
             ...
          end;
    end;

    0
  • #18 08 Maj 2010 18:02
    utak3r
    Poziom 25  

    A520 napisał:
    próbowałem użyć switch'a lecz nie szło bo blokowało się na i=0


    Dobrą zasadą w switchu jest posortowanie opcji case. Dalej - po każdym case powinieneś dać break - nie zapomniałeś może o tym?

    0
  • #19 08 Maj 2010 18:08
    arnoldziq
    Moderator Programowanie

    Do autora tematu:
    Widzę, że temat nieuchronnie idzie na kolizję z 16-tym punktem regulaminu.
    Temat zamykam.
    Temat pozostaje na forum, tylko dlatego, że zawiera kawał rzetelnej wiedzy, należącej do innych użytkowników.

    -1
  • #20 08 Maj 2010 22:25
    Dżyszla
    Poziom 42  

    utak3r - posortowanie nie ma wpływu na wykonywanie. Owszem, może dla niektórych kompilatorów przyczynić się do wzrostu wydajności, lecz nic ponadto. Co więcej - temat zasadniczo jest o Delphi, tak więc te uwaga nie ma tu zupełnie znaczenia, gdyż kompilator sam dokonuje sortowania instrukcji case w celu przeszukiwania binarnego podczas wykonywania. Tak samo w Delphi nie ma potrzeby używania instrukcji break.
    A już pomijając - zarówno kolejność case'a jak i występowanie bądź nie instrukcji break nie ma w standardowym przypadku żadnego znaczenia w kontekście "blokowani się na i=0".

    Temat do zamknięcia po tym moim sprostowaniu ;) Dzięki arnoldziq.

    0