Pascal помогите в учении)
|
|
CrystalZ | Дата: Вторник, 15 Января 2013, 22:23 | Сообщение # 1 |
уже был
Сейчас нет на сайте
| Здраствуйте дорогие форумчане, довольно таки недавно начал изучать ЯП Pascal. Буду выкладывать здесь плоды моих трудов, хочется наставлений от более опытных в программировании на Pascal людей, чтобы как говорится тыкнули носом в те места которые нужно дороботать и как эти места можно дороботать. Первое за что я взялся, это небольшой шифратор текста, поддержывает пока правда только англ, но все впереди) Шифруется текст по методу Цезаря, тобиш считывается символ, получаем его порядковый номер по алфавиту, затем прибавляем три к номеру и заменяем символом под этим порядковым номером. Вот текст программы:
PROGRAM file_code; USES crt; TYPE BLiters='A'..'Z'; SLiters='a'..'z'; crypt = object f_pars();
end;
VAR VFI,VFO:text;//file's vars in_file,out_file,SFE:string;//in and out filenames iFt_k:boolean; i:integer; procedure text_cript(var SFE:string); var ABC: array [1..26] of char; abc_: array [1..26] of char; j:integer; begin ABC[1]:='A'; ABC[2]:='B'; ABC[3]:='C'; ABC[4]:='D'; ABC[5]:='E'; ABC[6]:='F'; ABC[7]:='G'; ABC[8]:='H'; ABC[9]:='I'; ABC[10]:='J'; ABC[11]:='K'; ABC[12]:='L'; ABC[13]:='M'; ABC[14]:='N'; ABC[15]:='O'; ABC[16]:='P'; ABC[17]:='Q'; ABC[18]:='R'; ABC[19]:='S'; ABC[20]:='T'; ABC[21]:='U'; ABC[22]:='V'; ABC[23]:='W'; ABC[24]:='X'; ABC[25]:='Y'; ABC[26]:='Z'; ABC_[1]:='a'; ABC_[2]:='b'; ABC_[3]:='c'; ABC_[4]:='d'; ABC_[5]:='e'; ABC_[6]:='f'; ABC_[7]:='g'; ABC_[8]:='h'; ABC_[9]:='i'; ABC_[10]:='j'; ABC_[11]:='k'; ABC_[12]:='l'; ABC_[13]:='m'; ABC_[14]:='n'; ABC_[15]:='o'; ABC_[16]:='p'; ABC_[17]:='q'; ABC_[18]:='r'; ABC_[19]:='s'; ABC_[20]:='t'; ABC_[21]:='u'; ABC_[22]:='v'; ABC_[23]:='w'; ABC_[24]:='x'; ABC_[25]:='y'; ABC_[26]:='z'; for i:=1 to Length(SFE) do begin if(SFE[i] in ['A'..'Z']) then begin for j:=1 to 26 do begin if ABC[j]=SFE[i] then begin if j+3>26 then begin Delete(SFE,i,1); Insert(ABC[j+3-26],SFE,i);
end else begin Delete(SFE,i,1); Insert(ABC[j+3],SFE,i);
end; break;
end;
end; end; if(SFE[i] in ['a'..'z']) then begin for j:=1 to 26 do begin if ABC_[j]=SFE[i] then begin if j+3>26 then begin Delete(SFE,i,1); Insert(ABC_[j+3-26],SFE,i);
end else begin Delete(SFE,i,1); Insert(ABC_[j+3],SFE,i); end; break;
end;
end; end;
end;
writeln(VFO,SFE);
end;
BEGIN clrscr; writeln('Программа шифрует текстовый файл.'); writeln('Внимание!! Файл должен находится в одной директории с программой!');
repeat iFt_k:=true; {$I-} writeln('Введите имя входного файла!'); readln(in_file); assign(VFI,in_file); reset(VFI); {$I+} if (IOResult<>0) or (in_file='') then begin writeln('Не удалось открыть файл ',in_file,' нажмите Enter для завершения'); iFt_k:=false; end;
until iFt_k=true; {$I-} writeln('Введите имя выходного файла!'); readln(out_file); assign(VFO,out_file); rewrite(VFO); {$I+} while (not Eof(VFI)) do begin readln(VFI,SFE);
text_cript(SFE); end; close(VFO); readln();
END.
Сообщение отредактировал CrystalZ - Вторник, 15 Января 2013, 22:26 |
|
| |
|
Destroy | Дата: Среда, 16 Января 2013, 14:33 | Сообщение # 3 |
постоянный участник
Сейчас нет на сайте
| блин кошмар какой, сколько быдлокодерства. уже в начале перестал понимать о чем идет речь
|
|
| |
6P0H9 | Дата: Суббота, 19 Января 2013, 16:59 | Сообщение # 4 |
частый гость
Сейчас нет на сайте
| Ну... Откровенно... это 80% быдлокод Я сейчас напишу прогу короткую и рабочую(опыт с паскалем 4 года), только вопросик:"Z=>C или как?"
Сообщение отредактировал 6P0H9 - Суббота, 19 Января 2013, 17:00 |
|
| |
Andrey_M | Дата: Суббота, 19 Января 2013, 17:14 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| CrystalZ, нужно уметь писать компактный код.
Цитата (CrystalZ) Шифруется текст по методу Цезаря, тобиш считывается символ, получаем его порядковый номер по алфавиту, затем прибавляем три к номеру и заменяем символом под этим порядковым номером. Ты по какому учебнику учишь? Просто очень похоже на "Песни о Паскале", которые я почти не читаю.
Цитата (CrystalZ) ABC[1]:='A'; ABC[2]:='B'; ABC[3]:='C'; ABC[4]:='D'; ABC[5]:='E'; ABC[6]:='F'; ABC[7]:='G'; ABC[8]:='H'; ABC[9]:='I'; ABC[10]:='J'; ABC[11]:='K'; ABC[12]:='L'; ABC[13]:='M'; ABC[14]:='N'; ABC[15]:='O'; ABC[16]:='P'; ABC[17]:='Q'; ABC[18]:='R'; ABC[19]:='S'; ABC[20]:='T'; ABC[21]:='U'; ABC[22]:='V'; ABC[23]:='W'; ABC[24]:='X'; ABC[25]:='Y'; ABC[26]:='Z'; ABC_[1]:='a'; ABC_[2]:='b'; ABC_[3]:='c'; ABC_[4]:='d'; ABC_[5]:='e'; ABC_[6]:='f'; ABC_[7]:='g'; ABC_[8]:='h'; ABC_[9]:='i'; ABC_[10]:='j'; ABC_[11]:='k'; ABC_[12]:='l'; ABC_[13]:='m'; ABC_[14]:='n'; ABC_[15]:='o'; ABC_[16]:='p'; ABC_[17]:='q'; ABC_[18]:='r'; ABC_[19]:='s'; ABC_[20]:='t'; ABC_[21]:='u'; ABC_[22]:='v'; ABC_[23]:='w'; ABC_[24]:='x'; ABC_[25]:='y'; ABC_[26]:='z'; Блин, кажется, для этого есть множества (сейчас посмотрю, как реализовать). Хотя кажется тут не поможет.Добавлено (19.01.2013, 17:14) ---------------------------------------------
Цитата (CrystalZ) ['A'..'Z'] Вот вножества.
Цитата (CrystalZ) ABC[1]:='A'; Цитата (CrystalZ) ABC_[1]:='a'; Я туплю, или это можно сделать так (уже забыл ЯП, и компилера нету под рукой) Код ABC[1..26]: ['A'..'Z']
ЪЪЪЪ! Лучшая благодарность - плюс в репутацию :-)
|
|
| |
6P0H9 | Дата: Суббота, 19 Января 2013, 17:20 | Сообщение # 6 |
частый гость
Сейчас нет на сайте
| Ну в общем я написал, оно работает: Код var s:string; i:longint; begin readln(s); for i:=1 to length(s)do if ((ord(s[i])>87)and(ord(s[i])<91))or((ord(s[i])>119)and(ord(s[i])<123)) then write(chr(ord(s[i])-23)) else write(chr(ord(s[i])+3)); writeln; end. Если есть вопросы - не стесняйтесь - учиться не стыдно!
|
|
| |