4 / 3 / 0
Регистрация: 28.02.2019
Сообщений: 18

Неправильно строится гистограмма

24.03.2019, 20:20. Показов 1169. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Помогите, пожалуйста, разобраться, почему при построении гистограммы все значения пишутся только в элемент массива для последнего столбца.
Исходя из дебага, сортировка правильная, как и значения interval и intervals, проблема где-то в вычислении частот, но не пойму где.
Дано:
Массив А: real; он динамический, как и все остальные. В него пишутся числа, считываемые из текстового файла.
Массив B: real; для отсортированных значений из массива А (отдельный массив - так надо )
Массив C: integer; хранит в себе значения эмпирических частот.
Массив D: real; хранит в себе значения рассчитанных границ интервалов.
Переменная interval: real; хранит значение величины интервала
Переменная intervals: integer; хранит значение количества интервалов.

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
procedure TForm2.Button4Click(Sender: TObject);
begin
  If Round(sqrt(Length(A))) mod 2=0 then
  begin
    Intervals:=Round(sqrt(Length(A)))+1;
  end;
  If Round(sqrt(Length(A))) mod 2=1 then
  Begin
  Intervals:=Round(sqrt(Length(A)));
  end;
 
  Min:=B[0];
  Max:=B[Length(B)-1];
  Interval:=(Max-Min)/Intervals;
  Label1.Caption:=Floattostr(Min);
  Label2.Caption:=Floattostr(Max);
  Setlength(D,Intervals-1);
  Setlength(C,Intervals-2);
  For i:=0 to Length(D)-1 do
  begin
    If i=0 then D[i]:=Min-1;
    D[i]:=D[i-1]+Interval;
    If i=Length(D)-1 then D[i]:=Max+1;
 
    end;
  For i:=0 to Length(C)-1 do
  begin
    C[i]:=0;
    end;
  For i:=0 to Length(A)-1 do
  begin
    For g:=0 to Intervals-3 do
    begin
      If ((A[i]> D[g]) and (A[i]<D[g+1])) then
      begin
         C[g]:=C[g]+1;
        end;
      end;
    end;
  Chart1BarSeries1.Clear;
  For i:=0 to Length(C)-1 do
  begin
    Chart1BarSeries1.Add(C[i],Inttostr(i+1),clRed);
    end;
end;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2019, 20:20
Ответы с готовыми решениями:

Не строится гистограмма
Добрый день, 1) Не получается построить гистограмму. Она строится на интервале , а должна строится на интервале . Как ее построить...

Не строится гистограмма при проведении эксперимента Монте-Карло
Подскажите пожалуйста еще. В этой же модели у меня из блока source выходит одна заявка. Время прохождения ее по модели фиксируется...

Неправильно строится график
Получаю значения с датчика температуры (значения int), данная программа обрабатывает их и записывает в текстовый файл. Ось Х - дата и время...

9
454 / 178 / 31
Регистрация: 04.08.2018
Сообщений: 723
25.03.2019, 05:37
Цитата Сообщение от woleku Посмотреть сообщение
все значения пишутся только в элемент массива для последнего столбца.
Не понял что-куда пишется.
woleku, я не смог понять код, но строки 19-23 кажутся ошибочными. Если вы при значениях i, равными граничным хотите иначе присваивать значение массиву D, то так и указывайте в 19-ой строке другой интервал. Т.е. строка 21 выглядит D[0]:=Min-1; и стоит выше 19-ой строки. Дальше цикл с 19-ой строки но не с нуля, а с единицы и заканчивается to Length(D)-2. В цикле только строка 22. После цикла D[Length(D)-1]:=Max+1;
Возможно, то что я написал - полная фигня.
Ещё чуть лучше будет поправить строку 6. Там указать else, т.к. если чётное, то вторая проверка не нужна. А если первая проверка дала "не чётное", то опять вторая проверка не нужна, т.е. убрать строку 7.
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
25.03.2019, 13:51
Маленький рефакторинг:
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
procedure TForm1.Button4Click(Sender: TObject);
begin
  if not Odd(Round(sqrt(Length(A)))) then
    Intervals := Round(sqrt(Length(A))) + 1
  else
    Intervals := Round(sqrt(Length(A)));
 
  Min := B[0];
  Max := B[Length(B) - 1];
  Interval := (Max - Min) / Intervals;
 
  Label1.Caption := Floattostr(Min);
  Label2.Caption := Floattostr(Max);
 
  Setlength(D, Intervals - 1);   // может, Setlength(D, Intervals)?
  Setlength(C, Intervals - 2);
 
  for i := 0 to Length(D) - 1 do
    if i = 0 then
      D[i] := Min - 1
    else if i = Length(D) - 1 then
      D[i] := Max + 1
    else
      D[i] := D[i - 1] + Interval;
 
  for i := 0 to Length(C) - 1 do
    C[i] := 0;
 
  for i := 0 to Length(A) - 1 do
    for g := 0 to Length(C) - 1 do
      if ((A[i] > D[g]) and (A[i] < D[g + 1])) then
        C[g] := C[g] + 1;
 
  Chart1BarSeries1.Clear;
 
  for i := 0 to Length(C) - 1 do
    Chart1BarSeries1.Add(C[i], Inttostr(i + 1), clRed);
end;
Сортировку не увидел, начальные размеры массива не увидел, полного кода не увидел и каким боком здесь
Цитата Сообщение от woleku Посмотреть сообщение
для последнего столбца
,учитывая, что массивы одномерны, тоже загадка..
0
25.03.2019, 20:58

Не по теме:

Цитата Сообщение от Matan! Посмотреть сообщение
Delphi
1
2
3
if i = 0 then
* * * D[i] := Min - 1
* * else if i = Length(D) - 1
А зачем проверки внутри цикла, если можно случаи, когда проверки дают true, вынести за цикл?
Точнее даже не проверки, а просто случаи отработать отдельно от цикла, без всяких проверок.

0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
26.03.2019, 09:38
Цитата Сообщение от Rayvenor Посмотреть сообщение
А зачем проверки внутри цикла, если можно случаи, когда проверки дают true, вынести за цикл?
Можно сделать десятью разными способами и будет правильно. С другой стороны Ваш способ будет не проще и не сложнее моего.

Добавлено через 10 минут
А касательно безопасности.. Всё-таки лучше не делать, как Вы, Rayvenor, предлагаете. Поясню: если изначально размер массива забудут зарезервировать - Ваш способ выдаст ошибку ввиду отрицательного индекса, а также при обращении к 0-му элементу, которого не существует.
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
27.03.2019, 04:39
Цитата Сообщение от Matan! Посмотреть сообщение
for i := 0 to Length(D) - 1 do
if i = 0 then D[i] := Min - 1 else
if i = Length(D) - 1 then D[i] := Max + 1 else
D[i] := D[i - 1] + Interval;
Цитата Сообщение от Matan! Посмотреть сообщение
также при обращении к 0-му элементу
У вас тоже идет обращение к 0 элементу, цикл с 0 начинается. А в этом случае D[i] := D[i - 1], так вообще к -1 элементу
Условия конечно не должны сработать коду, но ведь идет речь об безопасном коде.

Delphi
1
2
3
4
D[Low(D)]:=Min - 1;
D[High(D):=Max + 1;
for i:= Low(D)+1 to High(D)-1 do
 D[i] := D[i - 1] + Interval;
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
27.03.2019, 05:10
Цитата Сообщение от ZfoxAK Посмотреть сообщение
У вас тоже идет обращение к 0 элементу, цикл с 0 начинается. А в этом случае D[i] := D[i - 1], так вообще к -1 элементу
Возьмите слова обратно!

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

Добавлено через 3 минуты
С другой стороны, вот этот кусок кода опасный(в плане массива D)
Цитата Сообщение от Matan! Посмотреть сообщение
Delphi
1
2
3
4
for i := 0 to Length(A) - 1 do
  for g := 0 to Length(C) - 1 do
    if ((A[i] > D[g]) and (A[i] < D[g + 1])) then
      C[g] := C[g] + 1;
Но это изьян начальной архитектуры кода. Написал ведь
Цитата Сообщение от Matan! Посмотреть сообщение
Маленький рефакторинг
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
27.03.2019, 11:03
Цитата Сообщение от Matan! Посмотреть сообщение
А по факту - если верхняя граница цикла меньше нижней, то мы в цикл вообще не заходим.
Причем тут нижний и верхний? Вы не последовательны в своих высказываниях.
Цитата Сообщение от Matan! Посмотреть сообщение
А касательно безопасности.. Всё-таки лучше не делать, как Вы, Rayvenor, предлагаете. Поясню: если изначально размер массива забудут зарезервировать - Ваш способ выдаст ошибку ввиду отрицательного индекса, а также при обращении к 0-му элементу, которого не существует.
Вот ваши слава о 0-ом элементе. Однако в ВАШЕМ коде хоть и отредактированном присутствует как уже показа код с индекс = 0.
0
 Аватар для Matan!
1882 / 1016 / 228
Регистрация: 31.05.2013
Сообщений: 6,645
Записей в блоге: 6
27.03.2019, 12:13
Цитата Сообщение от ZfoxAK Посмотреть сообщение
Однако в ВАШЕМ коде хоть и отредактированном присутствует как уже показа код с индекс = 0.
А если проследите выше предложение ТСа, то увидите, что он предлагал вынести проверку из цикла:
Цитата Сообщение от Rayvenor Посмотреть сообщение
А зачем проверки внутри цикла, если можно случаи, когда проверки дают true, вынести за цикл?
В моём же случае при пустом массиве мы в цикл даже не зайдем.
0
 Аватар для ZfoxAK
670 / 560 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
28.03.2019, 04:02
Цитата Сообщение от Matan! Посмотреть сообщение
В моём же случае при пустом массиве мы в цикл даже не зайдем.
В этом вы правы!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.03.2019, 04:02
Помогаю со студенческими работами здесь

Неправильно строится график
При построении графика Q(x) возникла ошибка, маткад почему то строит его по своему

Неправильно строится ЛФЧХ
Не пойму в чём дело, вроде всё правильно делаю, а график не тот, что должен быть.

Неправильно строится график
Написал программу которая строит график по точкам из файла, но помоему она строит график не так. Он берёт центр с верхнего левого угла, и...

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

Неправильно строится график гиперболической спирали
Здравствуйте, пытаюсь построить график гиперболической спирали: С графикой первый раз работаю, строил по учебнику,...


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

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

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru