0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 14
1

Изменить код программы так чтобы работа происходила с консолью а не с файлом

02.03.2015, 21:11. Показов 687. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите изменить код программы так чтобы работа происходила с консолью а не с файлом.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
USES Crt;
TYPE
path = STRING[14];
Stroca = STRING;
Simvol = array [1..6, 1..6] of CHAR;
MATR = array [1..255] of RECORD
STROK, STOLB: Byte;
END;
CONST INDEX: Simvol = (('А', 'Ж', 'Б', 'М', 'Ц', 'В'),
('Ч', 'Г', 'Н', 'Ш', 'Д', 'О'),
('Е', 'Щ', ',', 'Х', 'У', 'П'),
('.', 'З', 'Ъ', 'Р', 'И', 'Й'),
('С', 'Ь', 'К', 'Э', 'Т', 'Л'),
('Ю', 'Я', ' ', 'Ы', 'Ф', '-'));
VAR
Var_file1 ,Var_file2: Text;
Name1, Name2: path;
ALFAVIT: MATR;
Str: Stroca;
K: Char;
PROCEDURE SHIFR_PLEYFER(Var ALFAVIT: MATR; INDEX: Simvol);
VAR I, J: Byte; {I, J - счетчики циклов}
BEGIN {Начало основного блока ПП SHIFR_PLEYFER}
FOR I:= 1 TO 6 DO for J:= 1 to 6 do
WITH ALFAVIT[Ord(INDEX[I, J])] DO
begin
STROK:= I; {строка символа}
STOLB:= J; {столбец символа}
end;
END; {Конец основного блока ПП SHIFR_PLEYFER}
{Производится шифрование строки открытого текста}
FUNCTION SHIFR_TXT(Str: Stroca; Alfavit: MATR; INDEX: Simvol): Stroca;
VAR {Объявление переменных}
SIM1, SIM2: Char;
New: STRING;
I, Dlina_str, Dlina_new: Byte; {I - счетчик цикла}
BEGIN {Начало основного блока ПФ SHIFR_TXT}
{В открытом тексте вставляется спец. знак "-" между одинаковыми символами}
New:= '';
Dlina_str:= Length(Str);
FOR I:= 1 TO Dlina_str DO IF (Str[I] = Str[I+1]) THEN New:= (New + Str[I] + '-') ELSE New:= (New + Str[I]);
{Добавление спец. знака "-" в конец открытого текста в случае нечетного количества символов в строке }
IF Odd(Length(Str)) = TRUE THEN New:= New + '-';
{Шифрование открытого текста по матрице алфавита Плейфейра}
Str:= '';
Dlina_new:= Length(New)div 2;
FOR I:= 1 TO Dlina_new DO
begin
SIM1:= New[2*I - 1];
SIM2:= New[2*I];
IF (ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK) THEN
{Пара символов находятся в одной строке матрицы}
Str:= Str + INDEX[(ALFAVIT[Ord(SIM1)].STROK), ((ALFAVIT[Ord(SIM1)].STOLB mod 6) + 1)]
+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), ((ALFAVIT[Ord(SIM2)].STOLB mod 6) + 1)]
ELSE
IF (ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB) THEN
{Пара символов находятся в одном столбце матрицы}
Str:= Str + INDEX[((ALFAVIT[Ord(SIM1)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]
+ INDEX[((ALFAVIT[Ord(SIM2)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]
ELSE
{Пара символов находятся в разных строках и столбцах матрицы}
Str:= Str + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]
+ INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)];
end;
SHIFR_TXT:= Str;
END; {Конец основного блока ПФ SHIFR_TXT}
{Производится расшифрация строки }
FUNCTION DESHIFR_TXT(Str: Stroca; Alfavit: MATR; INDEX: Simvol): Stroca;
VAR {Объявление переменных}
SIM1, SIM2: Char;
NEW: STRING;
I, Dlina_str, Dlina_new: Byte;
BEGIN {Начало основного блока ПФ DESHIFR_TXT}
{Дешифрование открытого текста по матрице алфавита Плейфейра}
New:= '';
Dlina_str:= Length(Str)div 2;
FOR I:= 1 TO Dlina_str DO
begin
SIM1:= Str[2*I - 1];
SIM2:= Str[2*I];
IF (ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK) THEN
{Пара символов находятся в одной строке матрицы}
New:= New + INDEX[(ALFAVIT[Ord(SIM1)].STROK), (((ALFAVIT[Ord(SIM1)].STOLB + 4) mod 6) + 1)]
+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), (((ALFAVIT[Ord(SIM2)].STOLB + 4) mod 6) + 1)]
ELSE
IF (ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB) THEN
{Пара символов находятся в одном столбце матрицы}
New:= New + INDEX[(((ALFAVIT[Ord(SIM1)].STROK + 4) mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]
+ INDEX[(((ALFAVIT[Ord(SIM2)].STROK + 4) mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]
ELSE
{Пара символов находятся в разных строках и столбцах матрицы}
New:= New + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]
+ INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)];
end;
Str:= '';
Dlina_new:= Length(New);
FOR I:= 1 TO Dlina_new DO IF (New[I] <> '-') THEN Str:= (Str + New[I]);
DESHIFR_TXT:= Str;
END; {Конец основного блока ПФ DESHIFR_TXT}
BEGIN
ClrScr;
{Выбор шифрование или дешифрование файла}
WriteLn ('Выбери: (S)ШИФРОВАТЬ или (D)ДЕШИФРОВАТЬ ?');
REPEAT
K:= ReadKey;
UNTIL (UpCase(K) = 'S') OR (UpCase(K) = 'D');
{Определение файла ввода}
REPEAT
Write ('Путь к файлу: ');
ReadLn (Name1);
Assign (Var_file1, Name1);
{$I-} reset(Var_file1);{$F+}
if IOResult<>0 then writeln('Неверное имя или путь к файлу, повторите ввод')
else Reset (Var_file1);
UNTIL IOResult=0;
{Определение файла вывода}
REPEAT
Write ('Сохранить как: ');
ReadLn (Name2);
 
UNTIL (Length(Name2) <> 0);
Assign (Var_file2, Name2);
Rewrite(Var_file2);
{Обращение к ПП SHIFR_PLEYFER}
SHIFR_PLEYFER(ALFAVIT, INDEX);
{Цикл перебора строк открытого текста}
WHILE NOT EOF(Var_file1) DO
begin
ReadLn (Var_file1, Str);
{Обращение к ПФ SHIFR_TXT либо ПФ DESHIFR_TXT}
IF UpCase(K) = 'S' THEN Str:= SHIFR_TXT(Str, Alfavit, INDEX) ELSE Str:=DESHIFR_TXT(Str, Alfavit, INDEX);
WriteLn (Var_file2, Str);
end;Close (Var_file2);
Close (Var_file1);
END.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2015, 21:11
Ответы с готовыми решениями:

Как сделать так, чтобы обработка нажатия происходила только в одной определённой процедуре?
Как сделать так, чтобы обработка нажатия не происходила в определённой процедуре? Допустим чтобы...

Как изменить код чтобы результат программы выводился отделным текстовым файлом?
n = 15; atext: array of char = ('0','1','2','3','4','5','6','7','8','9'); acode: array of...

Переделать код, чтобы происходила запись в файл
Было задание: В столовой предлагается N комплексных обедов из Q блюд. Известна стоимость и...

Изменить код так, чтобы генерировались сочетания
Просьба помочь именно с моим кодом(что-то добавить,исправить,удалить). Свой писать не нужно. ...

3
5084 / 2655 / 2350
Регистрация: 10.12.2014
Сообщений: 10,034
03.03.2015, 09:11 2
Начиная со строки 100 подставь следующие строки:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
begin
  ClrScr;
  {Выбор шифрование или дешифрование файла}
  WriteLn('Выбери: (S)ШИФРОВАТЬ или (D)ДЕШИФРОВАТЬ ?');
  repeat
    K := ReadKey;
  until (UpCase(K) = 'S') OR (UpCase(K) = 'D');
  {Обращение к ПП SHIFR_PLEYFER}
  SHIFR_PLEYFER(ALFAVIT, INDEX);
  {Цикл перебора строк открытого текста}
  Write('Вводи: '); ReadLn(Str);
  {Обращение к ПФ SHIFR_TXT либо ПФ DESHIFR_TXT}
  if UpCase(K) = 'S' THEN Str := SHIFR_TXT(Str, Alfavit, INDEX) ELSE Str := DESHIFR_TXT(Str, Alfavit, INDEX);
  WriteLn('Результат: ', Str);
end.
0
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 14
03.03.2015, 22:09  [ТС] 3
Программа работает а само шифрование и дешифрование не осуществляется.Можете помочь с программой????
0
Эксперт Pascal/Delphi
6811 / 4568 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
08.03.2015, 19:48 4
Mister1945, все замечательно работает. Возможно, вы некорректно скомпоновали программу.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
 USES Crt;
TYPE
path = STRING[14];
Stroca = STRING;
Simvol = array [1..6, 1..6] of CHAR;
MATR = array [1..255] of RECORD
STROK, STOLB: Byte;
END;
CONST INDEX: Simvol = (('А', 'Ж', 'Б', 'М', 'Ц', 'В'),
('Ч', 'Г', 'Н', 'Ш', 'Д', 'О'),
('Е', 'Щ', ',', 'Х', 'У', 'П'),
('.', 'З', 'Ъ', 'Р', 'И', 'Й'),
('С', 'Ь', 'К', 'Э', 'Т', 'Л'),
('Ю', 'Я', ' ', 'Ы', 'Ф', '-'));
VAR
Var_file1 ,Var_file2: Text;
Name1, Name2: path;
ALFAVIT: MATR;
Str: Stroca;
K: Char;
PROCEDURE SHIFR_PLEYFER(Var ALFAVIT: MATR; INDEX: Simvol);
VAR I, J: Byte; {I, J - счетчики циклов}
BEGIN {Начало основного блока ПП SHIFR_PLEYFER}
FOR I:= 1 TO 6 DO for J:= 1 to 6 do
WITH ALFAVIT[Ord(INDEX[I, J])] DO
begin
STROK:= I; {строка символа}
STOLB:= J; {столбец символа}
end;
END; {Конец основного блока ПП SHIFR_PLEYFER}
{Производится шифрование строки открытого текста}
FUNCTION SHIFR_TXT(Str: Stroca; Alfavit: MATR; INDEX: Simvol): Stroca;
VAR {Объявление переменных}
SIM1, SIM2: Char;
New: STRING;
I, Dlina_str, Dlina_new: Byte; {I - счетчик цикла}
BEGIN {Начало основного блока ПФ SHIFR_TXT}
{В открытом тексте вставляется спец. знак "-" между одинаковыми символами}
New:= '';
Dlina_str:= Length(Str);
FOR I:= 1 TO Dlina_str DO IF (Str[I] = Str[I+1]) THEN New:= (New + Str[I] + '-') ELSE New:= (New + Str[I]);
{Добавление спец. знака "-" в конец открытого текста в случае нечетного количества символов в строке }
IF Odd(Length(Str)) = TRUE THEN New:= New + '-';
{Шифрование открытого текста по матрице алфавита Плейфейра}
Str:= '';
Dlina_new:= Length(New)div 2;
FOR I:= 1 TO Dlina_new DO
begin
SIM1:= New[2*I - 1];
SIM2:= New[2*I];
IF (ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK) THEN
{Пара символов находятся в одной строке матрицы}
Str:= Str + INDEX[(ALFAVIT[Ord(SIM1)].STROK), ((ALFAVIT[Ord(SIM1)].STOLB mod 6) + 1)]
+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), ((ALFAVIT[Ord(SIM2)].STOLB mod 6) + 1)]
ELSE
IF (ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB) THEN
{Пара символов находятся в одном столбце матрицы}
Str:= Str + INDEX[((ALFAVIT[Ord(SIM1)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]
+ INDEX[((ALFAVIT[Ord(SIM2)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]
ELSE
{Пара символов находятся в разных строках и столбцах матрицы}
Str:= Str + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]
+ INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)];
end;
SHIFR_TXT:= Str;
END; {Конец основного блока ПФ SHIFR_TXT}
{Производится расшифрация строки }
FUNCTION DESHIFR_TXT(Str: Stroca; Alfavit: MATR; INDEX: Simvol): Stroca;
VAR {Объявление переменных}
SIM1, SIM2: Char;
NEW: STRING;
I, Dlina_str, Dlina_new: Byte;
BEGIN {Начало основного блока ПФ DESHIFR_TXT}
{Дешифрование открытого текста по матрице алфавита Плейфейра}
New:= '';
Dlina_str:= Length(Str)div 2;
FOR I:= 1 TO Dlina_str DO
begin
SIM1:= Str[2*I - 1];
SIM2:= Str[2*I];
IF (ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK) THEN
{Пара символов находятся в одной строке матрицы}
New:= New + INDEX[(ALFAVIT[Ord(SIM1)].STROK), (((ALFAVIT[Ord(SIM1)].STOLB + 4) mod 6) + 1)]
+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), (((ALFAVIT[Ord(SIM2)].STOLB + 4) mod 6) + 1)]
ELSE
IF (ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB) THEN
{Пара символов находятся в одном столбце матрицы}
New:= New + INDEX[(((ALFAVIT[Ord(SIM1)].STROK + 4) mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]
+ INDEX[(((ALFAVIT[Ord(SIM2)].STROK + 4) mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]
ELSE
{Пара символов находятся в разных строках и столбцах матрицы}
New:= New + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]
+ INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)];
end;
Str:= '';
Dlina_new:= Length(New);
FOR I:= 1 TO Dlina_new DO IF (New[I] <> '-') THEN Str:= (Str + New[I]);
DESHIFR_TXT:= Str;
END; {Конец основного блока ПФ DESHIFR_TXT}
begin
  ClrScr;
  {Выбор шифрование или дешифрование файла}
  WriteLn('Выбери: (S)ШИФРОВАТЬ или (D)ДЕШИФРОВАТЬ ?');
  repeat
    K := ReadKey;
  until (UpCase(K) = 'S') OR (UpCase(K) = 'D');
  {Обращение к ПП SHIFR_PLEYFER}
  SHIFR_PLEYFER(ALFAVIT, INDEX);
  {Цикл перебора строк открытого текста}
  Write('Вводи: '); ReadLn(Str);
  {Обращение к ПФ SHIFR_TXT либо ПФ DESHIFR_TXT}
  if UpCase(K) = 'S' THEN Str := SHIFR_TXT(Str, Alfavit, INDEX) ELSE Str := DESHIFR_TXT(Str, Alfavit, INDEX);
  WriteLn('Результат: ', Str);
end.
0
08.03.2015, 19:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.03.2015, 19:48
Помогаю со студенческими работами здесь

Изменить код так, чтобы в результате выполнения программы выводились цифры, которые чаще всего встречаются
Изменить код так, чтобы в результате выполнения программы выводились цифры, которые чаще всего...

Как сделать так чтобы при нажатии на кнопку происходила отправка данных?
У меня есть файл *срр.В нём код iSent = send(Socket, sendbuf, (int) strlen(sendbuf), 0); Добавляю...

Работа с файлом (корректный код, некорректная работа программы)
Для записи и чтения файла использую разные функции. По одиночке они работают нормально. Вставляю...

Как сделать так, чтобы при каждом клике происходила одна итерация цикла?
Надо, чтобы при каждом нажатии на лейбл происходила итерация цикла: public void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru