Newsgroup: it.comp.lang.delphi
Titolo: Conversione da lettera a morse

:-((((((((((((( lo avevo già fatto ma me so perso il sorgente e nn mi
ricordo come avevo risolto il problema...................
Dunque il quesito è questo, scrivo su una edit una frase e mediante un
button mi traduce la frase in morse, leggendo lettera per lettera il
contenuto della edit.
Come posso fare?
Eppoi il contrario eseguo ._ e lui la codifica in lettera in questo caso la
A.
Ho gia realizzato l'interfaccia hardware la quale ho collegato il tasto
telegrafico alla suddetta interfaccia e la stessa alla seriale. Funzione
egregiamente alla pressione del tasto il programmino mi esegue il tono. Ho
utilizzato il tool TComPort di Dejan Crnila 2.64, e qui devo far si in modo
che quando premo il tasto sullo schermo mi compaiano il punto o la linea. Ho
utilizzato la seguente stringa per farlo sounare
procedure TForm1.ComLed1Change(Sender: TObject; AState: TLedState);
begin
  if ComLed1.State=(lsOff) then
 ttoneGen11.Stop;
 if ComLed1.State=(lsOn) then
ttoneGen11.Play;
end;
come risolvo i problemi sopra elencati?
P.S.
come evento della seriale ho utilizzato il segnale CTS il quale cambia stato
alla pressione del tasto, e tramite l'oggetto ComLed1 rilevo se nel CTS c'è
segnale o meno.
Grazie....

ricordo come avevo risolto il problema...................
Ho cercato e trovato per te questa pagina in internet:
http://www.giangrandi.ch/jack/radio/morse-i.shtml#files
(sara' che mi sento in colpa per aver sparato quella cazzata del corriere
della scienza??)
8-)
Ciao
-- 
Morde. 
(morde at programmer dot net)

 ha scritto nel messaggio
news:hbeinvs9r6qdl61m9...@4ax.com...


del NG ed sopratutto il tuo interessamento ;-))
troppo gentile... grazie. :)


 Quello che avevo letto sul corriere era riferito al 31 gennaio 1999..
[CUT]

Morde... te la sei presa proprio a cuore eh?
si, ma in senso positivo, non permaloso :)
Cioe' quello che non vorrei e' di dare informazioni fuorvianti in un ng
pubblico, letto da tante altre persone che qui cercano infos attendibili.
E' il mio cruccio: dare piu' informazioni corrette possibili!
Ciao, ora chiudiamo davvero questo thread!


Come posso fare?
const
  MorseLetter: array ['A'..'Z'] of String =
  ('.-', '-...', '-.-.', '-..', '.', '..-.',
   '--.', '....', '..', '.---', '-.-', '.-..',
   '--', '-.', '---', '.--.', '--.-', '.-.',
   '...', '-', '..-', '...-', '.--', '-..-',
   '-.--', '--..');
  MorseDigit: array ['0'..'9'] of String =
  ('-----', '.----', '..---', '...--',
   '....-', '.....', '-....', '--...',
   '---..', '----.');
function ASCII_to_Morse(const S: String): String;
var
  I, L: Integer;
begin
  Result := '';
  L := Length(S);
  for I := 1 to L do
  begin
    if S[I] in ['0'..'9'] then
    begin
      Result := Result + MorseDigit[S[I]];
    end
    else
    if S[I] in ['A'..'Z'] then
    begin
      Result := Result + MorseLetter[S[I]];
    end
    else
      raise Exception.CreateFmt('Cannot convert to Morse code ("%s")',
[S[I]]);
    if I <> L then Result := Result + ' ' ;
  end;
end;
function Morse_to_ASCII(S: String): String;
var
  T: String;
  C: Char;
  Found: Boolean;
begin
  Result := '';
  while (S <> '') do
  begin
    while ((S <> '') and (S[1] = ' ')) do Delete(S, 1, 1);
    if S <> '' then
    begin
      T := '';
      while ((S <> '') and (S[1] <> ' ')) do
      begin
        T := T + S[1];
        Delete(S, 1, 1);
      end;
      Found := False;
      for C := 'A' to 'Z' do
      begin
        if MorseLetter[C] = T then
        begin
          Result := Result + C;
          Found := True;
          Break;
        end;
      end;
      if not Found then
      begin
        for C := '0' to '9' do
        begin
          if MorseDigit[C] = T then
          begin
            Result := Result + C;
            Found := True;
            Break;
          end;
        end;
      end;
      if not Found then
       raise
        Exception.CreateFmt('Cannot convert to ASCII ("%s")', [T]);
    end;
  end;
end;

 ha scritto nel messaggio
news:fdsinvcl0i74rb1qv...@4ax.com...


breve ed un tono lungo.
Se vuoi riprodurre anche i toni, devi saper manipolare i tempi e
sapere le durate dei toni e dei silenzi, che sono stabiliti in modo
preciso dal linguaggio Morse.
Per esempio imposti un intervallo di tempo di tua scelta, abbastanza
breve. ( T ).
A questo punto basterà ricordare che: 
il punto è un tempo cioè T; 
la linea è il doppio di un punto cioè 2 * T; 
(cioè, non è che puoi mettere toni brevi e lunghi a tua scelta: il
tono lungo deve essere esattamente il doppio di quello breve)
tra ogni segno (linea o punto) di una lettera ci va un silenzio di
durata pari a quella di un punto (sempre T).
tra ogni lettera di una parola ci va un silenzio pari alla durata di
una linea (2 * T);
tra ogni parola un silenzio di durata doppia a quella di una linea
cioè 4 * T;
A questo punto userai il codice di Laforgia ricordandoti però che tra
ogni segno ci va uno spazio e tra ogni lettera ci vanno due spazi:
Quindi questa struttura
const
  MorseLetter: array ['A'..'Z'] of String =
  ('.-', '-...', '-.-.', '-..', '.', '..-.',
  //ecc..
 
diventa:
const
  MorseLetter: array ['A'..'Z'] of String =
  ('. - ', '- . . . ', '- . - . ', '- . . ', '. ', '. . - . ',
  //ecc..
e tra ogni parola devi aggiungere tre spazi (uno è già presente alla
fine di ogni lettera) per ottenere 4 spazi = 2 linee.
Dopo che avrai tradotto l'intera stringa te la percorri con un ciclo e
quando incontri il carattere:
'.' suoni un tono di durata T
'-' un suono di durata 2*T
' ' un silenzio di durata T.
-- 
---====§§§====----
www.provailtuoprovider.org
zrgny...@atv.vg
[rot13]