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

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

23.10.2016, 20:47. Просмотров 842. Ответов 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
Ответы с готовыми решениями:

Как сделать проверку по имени в массиве
Доброго времени суток! Подскажите как организовать проверку имен система такая (&quot;Если в массиве...

Как сделать проверку элемента в массиве?
Нужно чтобы if проверял есть ли в массиве такой-то элемент. Если нету, то выполняется код. Как это...

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

Как объединить код и сделать проверку!!!
Здравствуйте. Нужна помощь. Необходимо объединить код и сделать проверку куда было введено число...

Как сделать проверку, есть ли совпадение в тексте и в массиве
Здравствуйте, подскажите пожалуйста, как сделать проверку, есть ли совпадение в тексте и в массиве...

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

Необходимо сделать проверку на отсутствие цифр и повторений букв в массиве
Пожалуйста прошу вашей помощи необходимо сделать проверку чтобы не было цифр в массиве и повторение...

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

Как сделать проверку есть ли на сайте такой код
Помогите сделать проверку, допустим у нас есть сайт www.lalala.com/qwazoc.txt, и как проверить что...


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

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

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