[ Passwd @ 08.04.2005. 12:24 ] @
Opet ja....;)

Muci me jedan problem,nemam uopce ideje kako napraviti program (turbo pascal)
koji ce:
-zamijeniti slova abecede sa skupom znakova+brojeva

npr.:
slovo a=wqgstw62674384jzufe
slovo b=z53hf67454jhu78f45iu
slovo c=jdjfd73e6r7647fuzfu647

Znaci ja mu napisem abc,a on kao rezultat izbaci:wqgstw62674384jzufez53hf67454jhu78f45iujdjfd73e6r7647fuzfu647
[ peromalosutra @ 08.04.2005. 12:32 ] @
nije da se nesto razumijem u paskal, ali to bi trebalo da izgleda otprilike ovako:

while znak<>'.' do
begin
znak:=readkey;
case znak of
'a': write ('dfdfdfdk83487594');
'b': write ('8rg9ue9r87t09w7t');
'c': write ('dfiosueoiuetoutrov');
{ pa onda nabrojis cijelu abecedu}
end;
end;

program bi se zavrsavao unosenjem tacke, a varijabla znak bi trebalo da je iz
char-a.
[ Toyo @ 08.04.2005. 13:14 ] @
Code:

function Zamena(s:String): String;
const
  Duzina =3;
  C: array[1..Duzina] of Char = ('a','b','c');
  Z: array[1..Duzina] of String =('nesto', 'neko', 'bilo sta');
var
  i:Integer;
  Nadjen: Boolean;
begin
  if length(s)=0 then
    zamena :=''
  else
    begin
      i := 1;
      Nadjen := False;
      while i <=Duzina do
        begin
          if c[i]=s[1] then
            begin
              Zamena := z[i]+Zamena(copy(s,2,length(s)-1));
              nadjen :=True;
            end;
          inc(i);
        end;
      if not Nadjen then
        Zamena := s[1]+Zamena(copy(s,2,length(s)-1))
    end;
end;


funkciju zoves sa zamena('abc') ili zamena('aabcxxxxxabxxxc'); Ako nema znaka za zamenu (kao sto je ovde slucaj sa 'x') onda se znak prosto prepisuje.

Glavni program bi bio:
Code:

var s:String;
begin
    readln(s);
    writeln(zamena(s));
end.
[ sasas @ 08.04.2005. 13:31 ] @
Toyo, nadam se da se ne ljutiš, malo sam izmenio tvoju f-ju:

Code:

function Zamena2(s:String): String;
const
  Duzina = 3;
  C: array[1..Duzina] of Char = ('a','b','c');
  Z: array[1..Duzina] of String =('nesto', 'neko', 'bilo sta');
var
  i, j: Integer;
  cc: string;
begin
  for i := 1 to length(s) do
  begin
    cc := s[i];
    for j := 1 to Duzina do
      if c[j] = s[i] then cc := z[j];     
    result := result + cc;
  end;
end;


Malo elegantnije rešenje...

ss.
[ Passwd @ 08.04.2005. 13:36 ] @
To je to,napravio sam za sada od permalosutra (jednostavniji je),al da svijet nije tako lijep evo opet problema:
-zelim da ta slova koja sam napisao budu spremljena u fajl sifrat.txt,al evo nesto nevalja:

Code:

program sifrat;
uses crt;
type data=record
          znak:char;
          end;
     sifrat=file of data;

var  znak:char;
     b:data;
     a:sifrat;
begin
clrscr;
writeln('Upisi:');
readln(znak);
assign(a,'sifrat.txt');
rewrite(a);
write(a,b);
while znak<>'.' do
begin
znak:=readkey;
case znak of
'a': writeln('001');
'b': writeln('002');
'c': writeln('003');
'd': writeln('004');
'e': writeln('005');
'f': writeln('006');
'g': writeln('007');
'h': writeln('008');
'i': writeln('009');
'j': writeln('0010');
'k': writeln('0011');
'l': writeln('0012');
'm': writeln('0013');
'n': writeln('0014');
'o': writeln('0015');
'p': writeln('0016');
'r': writeln('0017');
's': writeln('0018');
't': writeln('0019');
'u': writeln('0020');
'v': writeln('0021');
'z': writeln('0022');
' ':writeln('0101');
',':writeln('0202');
'.':writeln('0303');
end;
end;
readln;
end.
[ Toyo @ 08.04.2005. 13:46 ] @
@sasas

Naravno da se ne ljutim :))))

Prvo sam mislio da cu rekurzijom to da sredim u 2-3 reda, pa je ispalo 6.
Zatim sam video da bi trebalo uzeti u obzir i karaktere koji nemaju zamenu, pa je sve to ispalo tako robusno i glupo.

Evo dokaza da koriscenje rekurzije u nekim primerima i nije bas najbolje resenje.

Decko sad ima 2 resenja koja rade istu stvar, pa moze nesto i da nauci.

Pozdrav!
[ Toyo @ 08.04.2005. 13:55 ] @
@Passwd
sa najmanje prepravki:
Obrisi write(a,b)
prepravi znak:=readkey u b.znak:=readkey; a ispod toga stavi write(a,b);
i umeto case znak stavi case b.znak

I zatvori fajl na kraju programa.
[ Passwd @ 08.04.2005. 14:06 ] @
Al mislio sam da zapisuje u obliku onih zamijenjenih slova,jer sad zapisuje prava slova
[ Toyo @ 08.04.2005. 14:18 ] @
Eee, onda stavi umesto b:data, b:text;

Zatim umeto svakog writeln('xxx') moras da stavis write(a,'xxx'); i da izbacis ono write(a,b.znak);
[ Passwd @ 08.04.2005. 14:45 ] @
Sad je OK,da je meni sve to znati..........;;))))

Posjeti jos tu i tamo ovu temu,mozda se jos negdje izgubim..:)