Turbo pascal

Programovacie jazyky, rady, poradňa...
Retne
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3513
Registrovaný: 01 aug 2004, 8:33

Turbo pascal

Príspevok od používateľa Retne »

Zdravim potrebujem do programu zakomponovat takuto vec, chcem aby mi vztupny retazec prepisalo v opacnom poradi, cize zadam napr. krava a vypise mi avark, vopred dik!
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

function odzadu(text:string; pismeno:integer);
var p:char;
begin
  if pismeno>length(text) then exit else begin 
    p:=text[pismeno];        
    odzadu(text,pismeno+1);  
  end;
  result:=slovo+p;           
end;
v programe to zavolas ako noveslovo:=odzadu('nejake slovo alebo veta',1);
Retne
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3513
Registrovaný: 01 aug 2004, 8:33

Príspevok od používateľa Retne »

Diky uz to mam :D
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

alebo by sa dalo aj bez rekurzie v cykle:

Kód: Vybrať všetko

for I:=length(slovo) downto 1 do write slovo[i];
Retne
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3513
Registrovaný: 01 aug 2004, 8:33

Príspevok od používateľa Retne »

Takto som to urobil ja, este mi poradte ako to efektivnejsie urobit, na to baziruju v skole :?
  • Program Slovo;
    uses Grafika,crt;
    var
    retazec : String;
    pocitadlo : Integer;
    znak : Char;
    retazec_naopak : String;

    begin
    clrscr;
    WriteLn('Zadaj retazec :');
    read (retazec);
    retazec_naopak := '';
    for pocitadlo := 1 to Length(retazec) do begin
    znak := retazec[pocitadlo];
    retazec_naopak := znak + retazec_naopak
    end;
    WriteLn('Retazec naopak je :', retazec_naopak)
    end.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Vymeníš prvý znak s posledným, druhý z predposledným... ;)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

ak ide o efektivitu, tak jednoznačne moje druhé riešenie. Rekurzia určite nie, ty používaš znak a retaze_naopak ktoré netreba a chronové riešenie by si tiež pýtalo pomocnú premennú na výmenu (alebo bez nej, ale komplikovanejšie ako jeden riadok cyklu)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

záleží na tom, čo chápu pod pojmom efektívnosť. Pri reťazcoch v Pascale je viac-menej jedno ako sa to urobí (pri dnešných PC). Rozdiel bude možno v mikrosekundách.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

ja som to analyzoval skôr z pohladu pamäťovej ako časovej efektivity :)
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

chronove riesenie, s vymenou pismen je najefektivnejsie, pretoze ti na vypisanie N pismenoveho slova v opacnom poradi, staci N/2 iteracii
Retne
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3513
Registrovaný: 01 aug 2004, 8:33

Príspevok od používateľa Retne »

Tak dnes som sa s tym opat pohral a urobil to opacnym sposobom a myslim ze je to o dost jednoduchsie nie ? :)
program slovo;
uses grafika;
var s:string;
var i: integer;
begin
write('zadaj retazec ');
read(s);
for i:=length(s) downto 1 do begin
write(s);
end;
end.
no a ešte begin a end môžeš vynachať, lebo sa v tom cykle robí iba jeden príkaz (vypísanie znaku)
Napísať odpoveď