Форум программистов, компьютерный форум, киберфорум
Наши страницы
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
MOCHET
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 40
1

Не работает перенос в другой массив

05.02.2018, 16:29. Просмотров 368. Ответов 11
Метки нет (Все метки)

алгоритм должен переводить данные по очереди в массивы по 10 элементов, но вместо этого он всё пишет в первый, в чём проблема? (естессно, кроме моей криворукости )
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
 var
 cha,zn:real;
a: array [0..9,0..200] of char;
low,high,wei,lown,highn,lowo,higho: array [0..9,0..200] of Extended;
stro,strok,tes:string;
dl,i,fl,ft,k,sch,te, no,st, s :integer;
p,o:char;
begin
{te:=Random(2);
tes:=tes+IntToStr(te);
outputSH.Text:=tes;}
k:=0;
fl:=0;
ft:=0;
no:=-1;
stro:=input.Text;
strok:=stro;
//не трогать
st:=0;
 
  while stro<>'' do begin
//определение веса на один символ
dl:=length(strok);
if dl>=10 then cha:=0.1
 else cha:=1/dl;
p:=stro[1];
//начало
while (stro<>'') and (ft=0)  do begin
if ((no mod 10) = 0) and(no<>0) then  begin
i:=-1;
no:=no+1;
ft:=1;
end;
// заполнение массивов
for k:=0 to i do
if p=a[k,no div 10] then fl:=1;
 //если находится такой же элемент
if fl=0 then begin
a[i+1,no div 10]:=p;
wei[i+1,no div 10]:=cha;
i:=i+1;
        end
//иначе
else begin
k:=0;
while a[k,no div 10]<>p do
k:=k+1;
wei[k,no div 10]:=wei[k,no div 10]+cha;
      end;
delete(stro,1,1);
if stro<>'' then p:=stro[1];
fl:=0;
    end;
//заполнение границ
 for k:=0 to i do begin
 low[k,no div 10]:=high[k-1,no div 10];
 high[k,no div 10]:=low[k,no div 10]+wei[k,no div 10];
 end;
 //дублирование границ для вычислений
for k:=0 to i do begin
lowo[k ,no div 10]:=low[k,no div 10];
higho[k ,no div 10]:=high[k,no div 10];
    end;
zn:=0;
//начало алгоритма кодирования
while  (strok<>'') and (st<=i) do begin
p:=strok[1];
st:=st+1;
sch:=0;
//алгоритм кодирования
while p<>a[sch,no div 10] do
sch:=sch+1;
for k:=0 to i do begin
highn[k,no div 10]:=lowo[sch,no div 10]+(higho[sch,no div 10]-lowo[sch,no div 10])*high[k,no div 10];
lown[k,no div 10]:=lowo[sch,no div 10]+(higho[sch,no div 10]-lowo[sch,no div 10])*low[k,no div 10];
  end;
//обновление границ
for k:=0 to i do begin
higho[k,no div 10]:=highn[k,no div 10];
lowo[k,no div 10]:=lown[k,no div 10];
    end;
delete(strok,1,1);
zn:=0;
//проверка на окончание очередной десятки и изменения значения являющегося ответом в случае успеха
if (no mod 10 = 9) or (strok='') then begin
zn:=zn+lowo[sch,no div 10];
  end;
  //дебагингг+вывод значений
for k:=0 to i do
label1.Caption:=label1.Caption+' '+ a[k,no div 10]+ ' '+ FloatToStr(wei[k,no div 10])+ ' '+ FloatToStr(low[k,no div 10])+ ' '+ FloatToStr(high[k,no div 10]);
label2.Caption :=FloatToStr(zn);
output.Text:=''+FloatToStr(zn)+#13+#10;
ft:=0;
for k:=0 to i do
output.Text:=output.Text+a[k,no div 10]+' '+ FloatToStr(wei[k,no div 10]) +#13+#10;
        end;  end;
  end;
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2018, 16:29
Ответы с готовыми решениями:

Перенос рваного массива в другой рваный массив
Нужно в задании. Удалить из рваного массива все строки в которых есть хотя бы два нуля. Размер...

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

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

Перенос данных с одного листа одной книги на другой лист другой книги с константой
Добрый вечер, товарищи! Есть прайс-лист, который содержит в себе много колонок и строк. На...

Перенос введенных данных из Edit в другой Edit на другой форме (MFC)
Имеется: проект MFC в котором есть IDC_DIALOG1 и IDC_DIALOG2. Нужно: после нажатия кнопки на...

11
Shamil1
Модератор
2447 / 1658 / 368
Регистрация: 26.03.2015
Сообщений: 6,066
05.02.2018, 17:35 2
Цитата Сообщение от MOCHET Посмотреть сообщение
алгоритм должен переводить данные по очереди в массивы по 10 элементов
У Вас 100 строк кода и 25 переменных. В какой строке кода пишет не в тот массив? В какой массив должен писать? В какой массив пишет вместо этого?

Цитата Сообщение от MOCHET Посмотреть сообщение
алгоритм должен переводить данные по очереди в массивы по 10 элементов
ИМХО Ваш код должен содержать функцию, которая принимает один массив элементов и возвращает массив 10-элементных массивов. Всё остальное - мусор, мешающий разобраться в проблеме. Причём, плохо оформленный - даже без отступов - и это тоже мешает разобраться в проблеме.
0
MOCHET
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 40
06.02.2018, 14:59  [ТС] 3
эта функция по идее должна быть до 53-й строки, прошу прощения...

Добавлено через 1 минуту
в input задаётся текст любых размеров

Добавлено через 11 минут
в двумерные массивы должно писать по десять элементов в первую "меру" затем сдвигать и снова десять символов и так повторять пока всё не соберёт...
0
Shamil1
Модератор
2447 / 1658 / 368
Регистрация: 26.03.2015
Сообщений: 6,066
06.02.2018, 15:14 4
MOCHET,
Python
1
2
3
4
5
6
7
8
9
10
11
def split_arr(items, n):
    result = []
    i, current = 0, [0]*n
    for item in items:
        if i == n:
            result.append(current)
            i, current = 0, [0]*n
        current[i] = item
        i += 1
    result.append(current)
    return result
1
06.02.2018, 15:14
MOCHET
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 40
06.02.2018, 15:23  [ТС] 5
спасибо
0
Shamil1
Модератор
2447 / 1658 / 368
Регистрация: 26.03.2015
Сообщений: 6,066
06.02.2018, 15:32 6
Цитата Сообщение от MOCHET Посмотреть сообщение
в двумерные массивы должно писать по десять элементов в первую "меру"
Если у Вас есть готовый двумерный массив, то ещё проще:
Delphi
1
a[i mod n, i div n] := b[i];
Добавлено через 2 минуты
Здесь
Delphi
1
2
3
b: array [2000] of char:
a: array [0..9,0..200] of char;
n = 10
1
MOCHET
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 40
06.02.2018, 15:36  [ТС] 7
смысл не в том чтобы распихать элементы по 10 штук,а в том что 10 элементов нужно превратить в массив соответствия веса (1/число) и букв. таких массивов столько ((сколько всего символов) div 10 +1);
0
Shamil1
Модератор
2447 / 1658 / 368
Регистрация: 26.03.2015
Сообщений: 6,066
06.02.2018, 15:38 8
Цитата Сообщение от MOCHET Посмотреть сообщение
нужно превратить в массив соответствия веса (1/число) и букв. таких массивов столько ((сколько всего символов) div 10 +1)
Напишите, что на входе и что на выходе.
0
MOCHET
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 40
06.02.2018, 15:47  [ТС] 9
вход:
input
выход:
0,062336
i 0,2
n 0,2
p 0,2
u 0,2
t 0,2

Добавлено через 38 секунд
ну это для коротких
если длиннее 10 символов, то такой массив не один

Добавлено через 1 минуту
вход:
введите
выход:
0,0394976340033246
в 0,285714285714286
е 0,285714285714286
д 0,142857142857143
и 0,142857142857143
т 0,142857142857143
что-то вроде такого

Добавлено через 5 минут
т е в массивах на десять символов не обязательно должно быть по 10 элементов, т к некоторые элементы могут повторятся ==> количество элементов уменьшается, но увеличиваются веса отдельных элементов в текущей десятке..
0
Shamil1
Модератор
2447 / 1658 / 368
Регистрация: 26.03.2015
Сообщений: 6,066
06.02.2018, 16:09 10
Цитата Сообщение от MOCHET Посмотреть сообщение
0,062336
Цитата Сообщение от MOCHET Посмотреть сообщение
0,0394976340033246
Это как вычисляется?
0
MOCHET
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 40
06.02.2018, 16:11  [ТС] 11
алгебраическое кодирование это

Добавлено через 35 секунд
в общем то неважно, к массивам оно не относится
0
Shamil1
Модератор
2447 / 1658 / 368
Регистрация: 26.03.2015
Сообщений: 6,066
06.02.2018, 16:58 12
До сих пор не совсем представляю, что Вам нужно. И, к тому же, не знаю, какие стандартные типы-контейнеры есть в дельфи.

Видимо, алгоритм будет примерно таким:
1. Создаём вектор/список/массив. Создаём словарь dic для хранения промежуточных данных. Создаём счётчик i.
2. Пока счётчик не вырос до 10, добавляем в словарь символы из входного потока/строки (ключ словаря - символ, значение - сколько раз добавили).
3. На основе словаря создаём объект пользовательского типа и добавляем его в вектор/список/массив. Обнуляем счётчик i. Очищаем словарь dic. Переходим к пункту 2.
4. После выхода из цикла (пункты 2-3) по всем элементам на основе словаря создаём объект пользовательского типа и добавляем его в вектор/список/массив. Удаляем словарь dic.

В пользовательском типе данных будет два поля:
1. загадочное число 0,062336
2. вектор/список пар (символ, частота)
1
06.02.2018, 16:58
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2018, 16:58

Перенос на другой ПК
Доброго времени суток, столкнулся с проблемой переноса проекта на другой пк. WinForm приложение....

Перенос бд на другой пк
Создал бд данных. Пытаюсь открыть в среде sql server ее на другом компе - ошибка, нет прав доступа....

Перенос на другой хостинг
Ранее пользовался бесплатным хостингом prdi.ru, но из-за того, что сайт половину времени лежал,...


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

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

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