| 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.
Если есть вопросы - не стесняйтесь - учиться не стыдно!
   
 
   
   |  |  |  |  |