Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578

Работы над ошибками

04.09.2012, 17:15. Показов 5056. Ответов 64
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Delphi
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
a, b: string;
i: integer;
begin
a:=memo1.Text;
if a='' then
ShowMessage('Введите данные шифрования')
else
begin
memo1.Text:='';
b:='';
for i:=1 TO length(a) Do
begin
if a[i]='а' then b:=b + '0001011';
if a[i]='б' then b:=b + '0001111';
if a[i]='в' then b:=b + '0001100';
if a[i]='г' then b:=b + '0001110';
if a[i]='д' then b:=b + '0011111';
if a[i]='е' then b:=b + '0010111';
if a[i]='ё' then b:=b + '0010011';
if a[i]='ж' then b:=b + '0010111';
if a[i]='з' then b:=b + '0010001';
if a[i]='и' then b:=b + '0010100';
if a[i]='й' then b:=b + '0011000';
if a[i]='к' then b:=b + '0011010';
if a[i]='л' then b:=b + '0011011';
if a[i]='м' then b:=b + '0011101';
if a[i]='н' then b:=b + '0011100';
if a[i]='о' then b:=b + '1010101';
if a[i]='п' then b:=b + '1000000';
if a[i]='р' then b:=b + '1100000';
if a[i]='с' then b:=b + '1110000';
if a[i]='т' then b:=b + '1111000';
if a[i]='у' then b:=b + '1111100';
if a[i]='ф' then b:=b + '1111110';
if a[i]='х' then b:=b + '1001111';
if a[i]='ц' then b:=b + '1000111';
if a[i]='ч' then b:=b + '1000011';
if a[i]='ш' then b:=b + '1000001';
if a[i]='щ' then b:=b + '1001011';
if a[i]='ъ' then b:=b + '1001101';
if a[i]='ы' then b:=b + '1000100';
if a[i]='ь' then b:=b + '1000110';
if a[i]='э' then b:=b + '1000101';
if a[i]='ю' then b:=b + '0100000';
if a[i]='я' then b:=b + '0010111';
if a[i]='1' then b:=b + '1111111';
if a[i]='2' then b:=b + '0000001';
if a[i]='3' then b:=b + '0000011';
if a[i]='4' then b:=b + '0100000';
if a[i]='5' then b:=b + '0000111';
if a[i]='6' then b:=b + '0100001';
if a[i]='7' then b:=b + '0100011';
if a[i]='8' then b:=b + '0010000';
if a[i]='9' then b:=b + '0011010';
if a[i]='0' then b:=b + '0000000';
end;
memo2.Text:=b;
end;
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
a, b: string;
i: integer;
begin
a:=memo2.Text;
if a='' then
ShowMessage('Введите данные шифрования')
else
begin
memo2.Text:='';
b:='';
for i:=1 TO length(a) DO
begin
if a[i]='0001011' then b:=b + 'а';
if a[i]='0001111' then b:=b + 'б';
if a[i]='0001100' then b:=b + 'в';
if a[i]='0001110' then b:=b + 'г';
if a[i]='0011111' then b:=b + 'д';
if a[i]='0010111' then b:=b + 'е';
if a[i]='0010011' then b:=b + 'ё';
if a[i]='0010111' then b:=b + 'ж';
if a[i]='0010001' then b:=b + 'з';
if a[i]='0010100' then b:=b + 'и';
if a[i]='0011000' then b:=b + 'й';
if a[i]='0011010' then b:=b + 'к';
if a[i]='0011011' then b:=b + 'л';
if a[i]='0011101' then b:=b + 'м';
if a[i]='0011100' then b:=b + 'н';
if a[i]='1010101' then b:=b + 'о';
if a[i]='1000000' then b:=b + 'п';
if a[i]='1100000' then b:=b + 'р';
if a[i]='1110000' then b:=b + 'с';
if a[i]='1111000' then b:=b + 'т';
if a[i]='1111100' then b:=b + 'у';
if a[i]='1111110' then b:=b + 'ф';
if a[i]='1001111' then b:=b + 'х';
if a[i]='1000111' then b:=b + 'ц';
if a[i]='1000011' then b:=b + 'ч';
if a[i]='1000001' then b:=b + 'ш;
if a[i]='1001011' then b:=b + 'щ';
if a[i]='1001101' then b:=b + 'ъ';
if a[i]='1000100' then b:=b + 'ы';
if a[i]='1000110' then b:=b + 'ь';
if a[i]='1000101' then b:=b + 'э';
if a[i]='0100000' then b:=b + 'ю';
if a[i]='0010111' then b:=b + 'я';
if a[i]='1111111' then b:=b + '1';
if a[i]='0000001' then b:=b + '2';
if a[i]='0000011' then b:=b + '3';
if a[i]='0100000' then b:=b + '4';
if a[i]='0000111' then b:=b + '5';
if a[i]='0100001' then b:=b + '6';
if a[i]='0100011' then b:=b + '7';
if a[i]='0010000' then b:=b + '8';
if a[i]='0011010' then b:=b + '9';
if a[i]='0000000' then b:=b + '0';
end;
memo2.Text:=b;
end;
end;
 
end.
Код такой. Но есть проблема! Задача уменьшить кол-во повторений цикла до length(a)/7 как это сделать? + исправте ошибки плиз
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2012, 17:15
Ответы с готовыми решениями:

Работа над ошибками
По сути, мне надо чтобы система дешифровала предложения и вроде бы вчера работала а сегодня глючит весь день и все тут unit Unit1;...

Обработка символьных строк (данных типа String).Работа над ошибками
Не помогли бы вы мне с моими ошибками в таком задании: Дано строку символов, который состоит из отдельных слов, разделенных интервалом....

Результат работы над ошибками по поводу глобальных переменных на с++
Данная статья выйдет в топ. По теме как делать глобальные переменные. Так как имею опыт в написание статей под нужды людей. Хочу...

64
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
06.09.2012, 21:05
Студворк — интернет-сервис помощи студентам
Попробуй фигурные, они симпатичнее.
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
06.09.2012, 21:13  [ТС]
Цитата Сообщение от Ev1l Посмотреть сообщение

Не по теме:


проверил, компилятор ругается матом, кричит что разумнее поделить на 0:)

я проверил цыкл:
Delphi
1
2
3
4
5
6
7
8
9
10
11
var
i, c, a: integer;
begin
a:=1;
c:=1;
for i:=c TO 50 DO 
begin
a:=a+6; 
Label1.Caption:=inttostr(a); 
c:=c+4; 
end;
И всё прошло удачно. Что я это продумать не мог, сам не пойму. Взял цыкл как для примера и проверки.

Добавлено через 5 минут
походу скоро я сам решу свою задачу, но с вашей помощью.

Добавлено через 1 минуту
минуту.. А если берутся все семь символов в строке значит надо снова применять length(a), да?
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
06.09.2012, 21:16  [ТС]
Цитата Сообщение от Ev1l Посмотреть сообщение
да это правильно, если а у тебя 7ми мерный массив строк

Не по теме:

Delphi
1
2
Ev1l.Free;
Application.Terminate;

Не по теме:

типо я тебя обошел



Добавлено через 42 секунды
0
06.09.2012, 21:22

Не по теме:

санек.... дам совет... если ты пишешь такую программу которая запутанная.... раздели ее на части, если нужно циклически что-то найти еще в паре циклов... напиши это нахождение в отдельной функции.... и вот таким образом ты избавишь себя и других от страданий.... потом другую часть в функцию взять, и вот так по кусочкам... и потом получится программа работающая... а вот как я прочел эти 5 страниц... вникать трудно в написанное.......... что ты там сравниваешь с текстом.... этот текст вынеси вообще в файл.. чтобы он не загромождал тебе место .. чтобы ты видел весь код от начала и до конца.. я знаю что если мышкой скролить вниз по коду... от того что он не влазит в моник, код одной функции имею ввиду, теряется обзор... нужно снова скролить вверх и смотреть что там написано сверху..... после этого теряется не только обзор, но и логика.. что потом сидишь и не знаешь как снова начать

0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
06.09.2012, 21:34  [ТС]
я всё уже понял:
Delphi
1
2
3
4
5
6
i:=1;
while i<=length(a) div 7 DO //будет делать пока i меньше или равно длине по деленой на 7(кол-во символов в зашифровке). 
begin
if a[i, i+1, i+2, i+3, i+4, i+5, i+6]=... then ...; //условие
... //остальной код
end;
Добавлено через 1 минуту
но то же проблема со строками, ведь i увеличивается на 1 а нам надо на 7, как это имитировать?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
06.09.2012, 21:42
Delphi
1
if a[i, i+1, i+2, i+3, i+4, i+5, i+6]=... then ...; //условие
а как у тебя массив объявлен? и как он заполнен, если ты при таком коде его проверяешь?

уже писалось сверху что это 7ми мерный массив.... т.е.
Delphi
1
var Massiv: Array of Array of Array of Array of Array of Array of Array of String;
заполнять его примерно так.. я бы не желал этого делать......

Delphi
1
Mаssiv[0][0][0][0][0][0][0] := 'Тра-ля-ля';

Не по теме:


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

0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
06.09.2012, 21:48
Цитата Сообщение от саша40 Посмотреть сообщение
но то же проблема со строками, ведь i увеличивается на 1 а нам надо на 7, как это имитировать?
Может дробью?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
06.09.2012, 21:58
Цитата Сообщение от саша40 Посмотреть сообщение
но то же проблема со строками, ведь i увеличивается на 1 а нам надо на 7, как это имитировать?
циклы
while do
repeat until
да даже и fo'ом можно.... если вложить туда переменную и инкрементировать ее не на 1 а на 7..
0
134 / 133 / 22
Регистрация: 29.08.2012
Сообщений: 353
06.09.2012, 22:14
Саша, налей себе кофе, сядь спокойно и прочитай.

Твои идеи обращения к нескольким символам строки не могут быть воплощены в связи с тем что ты пытаешься сделать примерно следующее:
a[i]{1 символ}='ххххххх'{7 символов}
a[i][i+1][i+2].... вызывает конфликт в обозначениях потому как так обозначается элемент k-мерного массива, и компилятор не может это обработать потому как он пытается найти ячейку к-мерного массива но переменная в программе записана как строка(одномерный массив символов)

дальше я прокоментировал свой код, чтобы ты мог понять что и для чего, мой код не является оптимальным, есть более простые способы шифрования, но я просто пытался написать его максимально приближенно к твоему коду.
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);//процедура декодирования текста
var//список переменных далее
s,a,b:string;//переменные типа строка, строка это масив символов
sa,i: integer;//целые числа
begin//начинаем работу
a:=memo1.text;//считываем в строковую переменную текст из мемо
b:='';//обнуляем строку в которую будем записывать расшифрованую информацию
sa:=1;//это счетчик который будет указывать на начало расшифровываемого кусочка [B]строки[/B]
for i := 1 to length(a)div 7 do//тут мы уже сократили наш цикл в 7 раз, как и просилось в первоначальной задаче
   begin//цикл начинается
   s:=copy(a,sa,sa+7);{копируем кусочек строки из 7 символов который мы будем расшифровывать в строковую переменную, где a - наш текст, sa - позиция в строке с которой мы начинаем копирование текста, sa+7 конечная позиция копируемого кусочка, при первом заходе в цикл мы получим примерно следующее s:=copy(НАШ Текст,1,7), и s будет выглядеть примерно так 'ХХХХХХХ')}
   if s='0000001' then b:=b+'а';//тут мы выполняем расшифровк, дальше ты вписываешь свои условия для каждого символа
   sa:=7*i+1;//сдвигаем указатель начала нового кусочка текста на 7(кол-во символов в кусочке)*i(шаг в цикле)+1 символ для того, чтобы мы считывание начали не с того символа на котором остановились а со следующего
   end;//цикл закончился текст расшифрован
Memo1.Text:=b;//записываем расшифрованый текст в мемо
end; //расшифровали
 
procedure TForm1.Button2Click(Sender: TObject);//процедура шифрования, если нужно напиши, я ее прокоментирую также.
var
a,b:string;
i: integer;
begin
b:='';
a:=Memo1.Text;
for i := 1 to length(a) do
   begin
   case a[i] of
   'а': b:=b+'0000001'//лень искать какой там у тебя шифр, но надеюсь суть ясна.
   end;
   end;
Memo1.Text:=b;
end;
0
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 615
06.09.2012, 22:33
Ev1l, Уже хорошо, осталось прочитать как пользоваться функцией copy.
А вообще мне кажется Саша тролит нас, потому что таким тупым быть невозможно.
1
134 / 133 / 22
Регистрация: 29.08.2012
Сообщений: 353
06.09.2012, 22:38
да, конечно же не последний символ а кол-во символов, пойду ка я спать а то еще чего напишу
12 строка должна быть такая
s:=copy(a,sa,7);{копируем кусочек строки из 7 символов который мы будем расшифровывать в строковую переменную, где a - наш текст, sa - позиция в строке с которой мы начинаем копирование текста, 7 количество символов копируемого кусочка, при первом заходе в цикл мы получим примерно следующее s:=copy(НАШ Текст,1,7), и s будет выглядеть примерно так 'ХХХХХХХ')}
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
06.09.2012, 22:51
Цитата Сообщение от Nutserus Посмотреть сообщение
А вообще мне кажется Саша тролит нас, потому что таким тупым быть невозможно.

Не по теме:

возможно.. ты посмотри годов ему сколько... хотя если бы мне показали в 14 лет комп.. я бы в нем не быстро, но разобрался бы :)))) я комп в первый раз увидел в глаза в 17 лет :( в 20 уже начал программировать.. хотя даже раньше.. но программированием это назвать трудно :D

0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
07.09.2012, 12:32  [ТС]
Пока мы болтали у меня была уже ночь и я сидел тут перед сном и мне пришла в голову такая идея:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var
a, b: string;
i, c: integer;
begin
a:=memo2.Text; 
if a='' then
ShowMessage('Введите текст шифрования') 
else  
begin
memo2.Text:=''; 
b:=''; 
c:=1; 
for i:=1 TO length(a) div 7 DO
begin
if a[c][c+1][c+2][c+3][c+4][c+5][c+6]='нолики и единички' then b:=b+'буква или цыфра'; //условие
//если это не правильно тогда у a будут одни квадратные скопки
...//условия шифрования
c:=c+7; //увеличиваем переменую для того, чтобы оно пирикидывалось на первый символ другой буквы
end;
memo1.Text:=b; //выводим переменую
end;
end;
Есть проблема, какой должен быть массив или переменая правильно?
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
07.09.2012, 13:02
Используй CompareMem
c:=c+7;
Наконец-то дошло. Теперь замени for на while или repeat - переменная i не нужна.
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
07.09.2012, 13:44  [ТС]
Цитата Сообщение от murderer Посмотреть сообщение
Используй CompareMem

Наконец-то дошло. Теперь замени for на while или repeat - переменная i не нужна.
цыкл менять бесполезно, мне нужно написать как-то этот массив

Добавлено через 1 минуту
Цитата Сообщение от Arcor Посмотреть сообщение
уже писалось сверху что это 7ми мерный массив.... т.е.Код Delphi
1 var Massiv: Array of Array of Array of Array of Array of Array of Array of String;
заполнять его примерно так.. я бы не желал этого делать......
Код Delphi
1 Mаssiv[0][0][0][0][0][0][0] := 'Тра-ля-ля';
а это подойдет для нового кода?
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
07.09.2012, 14:24
Delphi
1
2
if CompareMem(@a[c],PChar('нолики и единички'),7) then
  b:=b+'буква или цыфра';
1
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
07.09.2012, 14:25  [ТС]
здесь зависит от того как посмотреть. Вроде осталось одно-надо, чтобы все 7 цыфр брались при расшифровке и превращались в зависимости от раскадировки в буквы или цыфры, но тут ещё не всё. Надо чтобы уже брались следующие 7 цыфр( от восьмого до 14) как это ваще реализовать?

Добавлено через 35 секунд
Цитата Сообщение от murderer Посмотреть сообщение
Delphi
1
2
if CompareMem(@a[c],PChar('нолики и единички'),7) then
  b:=b+'буква или цыфра';
и где это примненять?
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
07.09.2012, 21:06  [ТС]
Цитата Сообщение от murderer Посмотреть сообщение
Delphi
1
2
if CompareMem(@a[c],PChar('нолики и единички'),7) then
  b:=b+'буква или цыфра';
это чтоли функция, которая приобразует одну строку в другую?

Добавлено через 6 часов 37 минут
Цитата Сообщение от murderer Посмотреть сообщение
Код Delphi
1
2 if CompareMem(@a[c],PChar('нолики и единички'),7) then
b:=b+'буква или цыфра';
ладно попробую её в цыкле
0
07.09.2012, 23:21

Не по теме:

цЫфра пишется через букву И !!!!!!!!как читаю, аж на стуле подпрыгиваю, от таких ошибок.......

0
191 / 29 / 8
Регистрация: 15.09.2011
Сообщений: 430
08.09.2012, 12:10
Решили вопрос то? Что он сделать хочет вообще....

Не по теме:

Всё-таки я дочитал до конца эту тему XD

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.09.2012, 12:10
Помогаю со студенческими работами здесь

работа с ошибками над ошибками из-за ошибок
Ребят схематично покажу. нужно сослаться на путь в сети.....беда в том, что не знаю букву диска. надо, чтобы если путь не найден,...

Работа над ошибками
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { double a,b,c; bool x; cout &lt;&lt;...

Работа над ошибками
Что не так с кодом? #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; int...

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

работа над ошибками rss
Привет! млин, не могу создать заголовок для темы :( Хотел назвать - &quot;вопросы по rss&quot; - но стоит ограничение на слово...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru