Пятница, 29 Марта 2024, 18:12

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Pascal помогите в учении) (Здесь буду выкладывать свои первые программки на растерзание)
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
vicu2010Дата: Вторник, 15 Января 2013, 22:47 | Сообщение # 2
Сейчас нет на сайте
Ну заполнение массива буквами можно было по проще, а дальше смотреть уже не стал.

for i:=1 to 26 do abc[i]:=chr(64+i);
for i:=1 to 26 do abc_[i]:=chr(96+i);

Вроде так, но в паскале не проверял... даже если работать не будет, нужно придумать другой алгоритм загрузки массива.



Программист Ruby on Rails / COBOL | Веб-дизайнер(Bootstrap, HTML5, JS) | Викверс на Construct 2 / Classic
DestroyДата: Среда, 16 Января 2013, 14:33 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
блин кошмар какой, сколько быдлокодерства. уже в начале перестал понимать о чем идет речь
6P0H9Дата: Суббота, 19 Января 2013, 16:59 | Сообщение # 4
частый гость
Сейчас нет на сайте
Ну... Откровенно... это 80% быдлокод cranky Я сейчас напишу прогу короткую и рабочую(опыт с паскалем 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.

Если есть вопросы - не стесняйтесь - учиться не стыдно! prof



Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Pascal помогите в учении) (Здесь буду выкладывать свои первые программки на растерзание)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг