Newsgroup: it.comp.lang.delphi
Titolo: leggermente ot

ciao ragazi
sto facendo un programma i pascal, e' un esercizio per l'universita, per
fare la codifica a chiave;
ora ho un problema devo distinguere le maiuscole dalle minuscole.
come posso fare?
avevo pensato in base al coodice asci ma esiste una funzione che mi
restituisca il codice asci e viceversa?
avete qualche idea da suggerirmi?
grazie mille
mi date un giudizio sul codice che ho scritto?
program Project1;
Type Alfabeto = Array ['a'..'z'] of char;
     MyString = String;
Var AB,Abcodificato : Alfabeto;
    Parolachiave :MyString;
    Indice, inizio, fine:char;
    testo:text;
procedure Stampa( Ab: Alfabeto); {procedure per la stampa dell''alfabeto }
var indice1:char;
begin
     for indice1 := 'a' to 'z' do
         write( ab[indice1],' ');
     writeln;
end;{fine procedure stampa}
Procedure CodificaAlfabeto(var AbCodificato:Alfabeto; AB:Alfabeto;
                             ParolaChiave:Mystring);{procedura per la
creazione
dell''alfabeto}
Var
   indice1,indice2:char;
   controllo,i:integer;
procedure CompletaAB (var AbCodificato:Alfabeto; inizio,fine:char;
                      var indice1:char);
var
   indice2, indice3:char;
   controllo:integer;
begin
     for  indice3:=inizio to fine do
         begin
              controllo:=0;
              for indice2:='a' to indice1 do
                  begin
                       if indice3=AbCodificato[indice2] then
                          controllo:=1;
                  end;
              if controllo=0 then
                 begin
                      Abcodificato[succ(indice1)]:=indice3;
                      indice1:=succ(indice1);
                 end;
         end;
end;{fine procedora completa alfabeto}
Begin
     for i:=1 to length(ParolaChiave) do
         if i=1 then
            begin
                 AbCodificato['a']:=ParolaChiave[i];
                 indice1:='a';
            end else
            if ParolaChiave[i]<>' ' then
               begin
                    controllo:=0;
                    for indice2 :='a' to indice1 do
                        begin
                             if ParolaChiave[i]=AbCodificato[indice2]then
                                controllo:=1;
                        end;
                    if controllo =0   then
                       Begin
                            indice1:=succ(indice1);
                            AbCodificato[indice1]:=ParolaChiave[i];
                       end;
               end;
inizio:=AbCodificato[indice1];
fine:='z';
CompletaAB(AbCodificato, inizio, fine, indice1);
fine:=inizio;
inizio:='a';
CompletaAB(AbCodificato, inizio, fine, indice1);
end;{fine procedure codifica alfabeto}
procedure Codifica(AbCodificato: Alfabeto);
var
   testo, testocodificato:text;
   c:char;
begin
     assign(testo,'file1.txt');
     reset(testo);
     assign(testocodificato,'file2.txt');
     reset(testocodificato);
     rewrite(testocodificato);
     while not eof(testo) do
       begin
           while not eoln(testo)do
                 begin
                      read(testo,c);
                      if c= ' ' then
                            write(testocodificato,c)else
                            begin
                                 c:=AbCodificato[c];
                                 write(testocodificato,c);
                            end;
                  end;
           readln(testo);
           writeln(testocodificato);
       end;
     close(testo);
     close(testocodificato);
end;{fine procedure codifica}
procedure stampafile (Var testo:text);
Var
   c:char;
begin
     while not eof(testo) do
       begin
           while not eoln(testo)do
                 begin
                      read(testo,c);
                      write(c);
                 end;
           readln(testo);
           writeln;
       end;
end;{fine procedure stampa file}
procedure decodifica (AbCodificato:Alfabeto);
var
   testo, testocodificato:text;
   c,indice1:char;
begin
     assign(testo,'file3.txt');
     reset(testo);
     rewrite(testo);
     assign(testocodificato,'file2.txt');
     reset(testocodificato);
     while not eof(testocodificato) do
       begin
           while not eoln(testocodificato)do
                 begin
                      read(testocodificato,c);
                      if c= ' ' then
                            write(testo,c)else
                            begin
                                 indice1:='a';
                                 while c <>AbCodificato[indice1] do
                                       indice1:=succ(indice1);
                                 c:=indice1;
                                 write(testo,c);
                                 end;
                  end;
           readln(testocodificato);
           writeln(testo);
       end;
     close(testo);
     close(testocodificato);
end;{fine procedure decodifica}
begin
{inizzializzo le variabili}
     for Indice:='a' to 'z' do
     Begin
          AB[indice]:=indice;
          Abcodificato[indice]:=indice;
     end;
ParolaChiave:='la mia citta e bellissima';
{fine inizializzazione}
writeln('la parola chiave è: ',ParolaChiave);{stampa la parola chiave}
writeln ;
writeln('l''afabeto non codificato e''');
stampa(AB);{stampa l'afabeto}
writeln;
CodificaAlfabeto(AbCodificato,AB,ParolaChiave);{richiamo la procedura per la
                         codifica dell'alfabeto la variabile AbCodificata e'
                         passata per indirizzo perche non devo perdere le
                         modifiche che subbisce }
Writeln('l''afabeto codificato e''');
Stampa(Abcodificato);{stampa l'afabeto codificato}
writeln;
Assign(testo,'file1.txt');{Associo al nome fisico file.txt il nome logico
testo}
reset(testo); {Preparo il file ad operazioni di lettura e scrittura}
writeln('il testo di partenza e''');
stampafile(testo);{Richiamo la procedura per stampare il file la variabile
                            testo va passata per indirizo}
close(testo);{chiudo il file }
writeln;
codifica (AbCodificato); {codifico il testo}
Assign(testo,'file2.txt');
reset(testo);
writeln('il testo codificato e''');
stampafile(testo);
close(testo);
writeln;
decodifica(AbCodificato); {decodifico il testo}
Assign(testo,'file3.txt');
reset(testo);
writeln('il testo decodificato e''');
stampafile(testo);
close(testo);
readln;{serve per rendere visibile il risultao}
end.
--
  cià Caspar
Bisogna avere in sé il caos
per partorire una stella che danzi.
Home Page 
http://caspar.interfree.it/caspar.htm

restituisca il codice asci e viceversa?
function isupper( x : Char ) : Boolean ;
begin
  Result := x in ['A'..'Z'] ;
end ;
function islower( x : Char ) : Boolean ;
begin
  Result := not isupper( x ) ;
end ;
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."


grazie.
Questa mi restituisce i valori vero o falso
a me serve  se e' maiuscola convertirla in minuscola  per codificarla e poi
ri trasformafla in maiuscola.
ad esempio se e' maiuscola io rocavo il codice asci gli sottraggo 26 (dovrei
avere la corrispondente minuscola vero?)
poi codifico e ritrasformo in maiscola.

ri trasformafla in maiuscola.
if ( islower( x ) ) then 
  y := Chr( Ord( x ) - 32 ) ;



grazie della disponibilita
perche 32
mi illustri precisamente la funzione islower

mi illustri precisamente la funzione islower
E' quella del messaggio precedente.


 maiuscola.
queste "cavolate" mi piacciono :)),
ti propongo la mia soluzione
function InvertCase(C: char): char;
begin
 if C in ['a'..'z']
  then Result := UpperCase(C)[1]
  else Result := LowerCase(C)[1]
end;
se passi 'a' restituisce 'A' e viceversa...
Ciao! :)
Alan Solo

 Alan Solo
Grazie
dell'aiuto sia te che Andrea
ciao

  y := Chr( Ord( x ) - 32 ) ;
Mi sembra tutto giusto ma nello sfortunato caso in cui
x valga '1' l'algoritmo fallisce clamorosamente...
(non si parlava di codice sicuro una volta ? ;-)

(non si parlava di codice sicuro una volta ? ;-)
Non esageriamo, il codice d'esempio serve a risolvere cio' che e'
stato chiesto. I controlli d'errore si possono aggiungere.


Convertimi in minuscolo '1'.
ops! ho fatto confusione sulla tabella ascii!!!
chiedo venia ! :-)
(prometto mettere un link sul desktop alla tabella
dei codici ascii...)