Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Анна99777
1 / 1 / 1
Регистрация: 23.09.2015
Сообщений: 106
1

Сделать проверку, присутствует ли введенный код в массиве

23.10.2016, 20:47. Просмотров 826. Ответов 5
Метки нет (Все метки)

Помогите пожалуйста . Нужно сделать проверку (выходит ли введенный код в массив или нет, если нет то нужно заново запросить ввести код)

Вот программа:

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
var 
q, h: array of integer; 
 
Text, Text_1, Text_2, text_3, S: String; 
 
i, j, kolsimvolov: integer; 
key1: array of Byte; 
key2: array of Byte; 
p, m,t: Boolean; 
r, b: integer; 
Textmatr: Array of array of Char; 
c:char; 
 
begin 
 
repeat 
writeln('Выберите действие'); 
writeln('1-зашифровать текст'); 
writeln('2-расшифровать текст'); 
writeln('другое - выход'); 
readln(c); 
 
write('введите кол-во строк в матрице : '); 
readln(r); 
write('введите кол-во столбцов в матрице : '); 
readln(b); 
//--— 
setlength(q, r); 
setlength(h, b); 
setlength(key1, r); 
setlength(key2, b); 
setlength(Textmatr, r, b); 
 
 
repeat 
Write('введите текст для кодировки: '); 
Readln(Text); 
kolsimvolov:=Length(text); 
m := (kolsimvolov <= r * b); 
if not(m) then 
writeln('Кол-во символов не должно привышать r*b '); 
until m; 
 
Repeat 
Writeln('Введите ключ 1 , состоящий из ',r,' символов, через "Enter"'); 
for i:=0 to r-1 do 
Readln(key1[i]); 
p:=true; 
for i:=0 to r-1 do 
for j:=i+1 to r-1 do 
if (key1[i] = key1[j]) then 
p := False; 
If Not(p) then 
writeln('Все символы должны быть различны!'); 
Until p; 
Repeat 
Writeln('Введите ключ 2, состоящий из ',b,' символов, через "Enter"'); 
for i:=0 to b-1 do 
Readln(key2[i]); 
t:=true; 
 
for i:=0 to b-1 do 
for j:=i+1 to b-1 do 
if (key2[i]=key2[j]) then 
t:=false; 
If Not(t) then 
writeln('Все символы должны быть различны!'); 
 
Until t; 
 
Writeln; 
//----------------------------------------------------— 
for i := 0 to r - 1 do 
for j := 0 to b - 1 do 
begin 
//OutPutDebugString(PWideChar(inttostr(i)+' '+inttostr(j))); 
if i * b + j + 1 <= Length(Text) then 
Textmatr[key1[i] - 1, j] := Text[(i) * b + j + 1] 
else 
Textmatr[key1[i] - 1, j] := ' '; 
end; 
Writeln(' k1\k2 '); 
For i:=0 to r-1 do 
begin 
Write(' ',i,' '); 
For j:=0 to b-1 do 
write(' ',textmatr[i,j],' '); 
Writeln; 
end; 
case c of 
'1': 
begin 
//----------------------------------------------------— 
Text_1:=''; 
For j:=0 to b-1 do 
for i:=0 to r-1 do 
begin 
S:=textmatr[i,key2[j]-1]; 
Text_1:=Text_1+S; 
end; 
Writeln('Закодированный текст:',' ',text_1); 
end; 
//-----------------------------------------------------— 
'2': 
begin 
Text_2:=''; 
For j:=0 to b-1 do 
begin 
S:=Copy(Text_1,(key2[j]-1)*r+1,r); 
Text_2:=Text_2+S; 
end; 
Text_3:=''; 
For i:=0 to r-1 do 
For j:=0 to b-1 do 
begin 
S:=Copy(Text_2,(j)*r+key1[i],1); 
Text_3:=Text_3+S; 
end; 
Writeln('Раскодированный текст:',' ',Text_3); 
//-----------------------------------------------------— 
write('Нажмите Enter'); 
Readln; 
End; 
else 
begin 
writeln('Программа завершена'); 
//exit; 
end; 
end; 
until not (c in ['1', '2']); 
end.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2016, 20:47
Ответы с готовыми решениями:

Определить присутствует ли заданная последовательность элементов в массиве
Написать программу, определяющую присутствует ли заданная последовательность...

Вычислить сколько раз встречается введенный элемент в массиве
1. Заменить минимальные элементы на противоположный -2 на +2, если 0 то...

Как сделать проверку ?
Алгоритм Хаффмана . При при кодировании, если ввожу такую строку &quot;kkkkkkk&quot;, то...

Сделать проверку и составить алгоритм
Нужно сделать проверку и составить алгоритм! VAR x,y,Xn,Xk,dX: REAL; BEGIN...

Как сделать проверку на ввод символов
program zadacha1; uses crt; var A:array of real; i, j, n, m: integer;...

5
Cyber_Monster_
128 / 116 / 150
Регистрация: 22.03.2016
Сообщений: 475
23.10.2016, 20:50 2
Цитата Сообщение от Анна99777 Посмотреть сообщение
Нужно сделать проверку
Где? В каком массиве?
0
Анна99777
1 / 1 / 1
Регистрация: 23.09.2015
Сообщений: 106
23.10.2016, 20:52  [ТС] 3
В этом
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
Repeat 
Writeln('Введите ключ 1 , состоящий из ',r,' символов, через "Enter"'); 
for i:=0 to r-1 do 
Readln(key1[i]); 
p:=true; 
for i:=0 to r-1 do 
for j:=i+1 to r-1 do 
if (key1[i] = key1[j]) then 
p := False; 
If Not(p) then 
writeln('Все символы должны быть различны!'); 
Until p;
0
Cyber_Monster_
128 / 116 / 150
Регистрация: 22.03.2016
Сообщений: 475
23.10.2016, 21:21 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
begin
  var NotRepetedElementsFlag: boolean;
  repeat
    NotRepetedElementsFlag:= true;
    var key1:= ReadString('Введите ключ №1, состоящий из '{ + r.ToString() + }'символов: ').Select(x -> byte.Parse(x)).ToArray();
    var buff:= key1.Select(x -> key1.Where(y -> y = x).Count() > 1);
    foreach var x in buff do
    begin
      if x = true
        then
          begin
            NotRepetedElementsFlag:= false;
            Writeln('Повторите ввод. Все символы должны бить различны.');
            break;
          end;
    end;
  until NotRepetedElementsFlag;
end.
0
Анна99777
1 / 1 / 1
Регистрация: 23.09.2015
Сообщений: 106
23.10.2016, 22:07  [ТС] 5
Cyber_Monster_, извините, но я не поняла , что вы тут написали ...попробовала ввести в программе , но одни ошибки выдает

Добавлено через 36 минут
Я сделала вот так,но теперь программа неправильно расшифровывает


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
Repeat
Writeln('Введите ключ 1 , состоящий из ',r,' символов, через "Enter"');
f:=[];
for i:=0 to r-1 do
begin
repeat
   write('key1[', i, ']=');
readln(ch);
val(ch, z, v);
  until(v = 0) and (z in [1..r]) and not (z in f);
key1[i] := z;
f := f + [z];
end;
    p:=true;
Until p;
Repeat
Writeln('Введите ключ 2, состоящий из ',b,' символов, через "Enter"');
 
f:=[];
for i:=0 to b-1 do
begin
repeat
   write('key2[', i, ']=');
readln(ch);
val(ch, z, v);
  until(v = 0) and (z in [1..b]) and not (z in f);
key2[i] := z;
f := f + [z];
end;
  t:=true;
Until t;
0
Cyber_Monster_
128 / 116 / 150
Регистрация: 22.03.2016
Сообщений: 475
23.10.2016, 22:32 6
var key1:= ReadString('Введите ключ №1, состоящий из '{ + r.ToString() + }'символов: ').Select(x -> byte.Parse(x)).ToArray();
Читаем строку символов, и преобразовываем их в тип byte.
var buff:= key1.Select(x -> key1.Where(y -> y = x).Count() > 1);
Формируем массив buff, преобразуя каждый элемент key1 в true, если символ не уникален(есть повторения) и в false иначе
Pascal
1
2
3
4
5
6
7
8
9
10
foreach var x in buff do
    begin
      if x = true
        then
          begin
            NotRepetedElementsFlag:= false;
            Writeln('Повторите ввод. Все символы должны бить различны.');
            break;
          end;
    end;
Выводим строку, если есть хотя бы один повторяющийся символ.

Добавлено через 17 минут
Сделал по другому(т.к. byte.parse() чет не оч. в select()). У меня, когда я в ваш код интегрирую, ошибка компиляции вылетает.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Writeln('Введите ключ 1 , состоящий из ',r,' символов, через "Enter"');
    var NotRepetedElementsFlag: boolean;
    repeat
      NotRepetedElementsFlag:= true;
      for var Counter:= 0 to key1.Length - 1 do
        begin
          Writeln('Введите элемент №' + Counter.ToString() + ': ');
          read(key1[Counter]);
        end;
      if (key1.Select(x -> key1.Where(y -> y = x).Count() > 1).Where(x -> x = true).Count() > 0)
        then
          begin
            NotRepetedElementsFlag:= false;
            Writeln('Повторите ввод. Все символы должны бить различны.');
          end;
    until NotRepetedElementsFlag;
0
23.10.2016, 22:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2016, 22:32

Как сделать проверку деления на ноль?
program lab1zadanie1; var a,b,c,SomeVar:integer; z,x,v,min:real; ...

Необходимо сделать проверку для считывания типизированного файла
Трудно как-то объяснить. Процедура может: - Выдавать ошибку, если файл пустой...

Сделать проверку на одинаковые символы в строках одним циклом
Есть задача. Помогите сделать проверку на одинаковые символы одним циклом...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru