Логин:     Забыли пароль?
 
Пароль:   Регистрация

Форум / Программирование - Вопрос по коду  

Вопрос по коду

Frolov Dima
Frolov Dima
Посетитель
Сообщения: 5
[Сообщение #1] 12 мая 2012, 15:05
PokazResult: TListBox;
ZnacheniePriznaka: TListBox;
Chastota: TListBox;
var
Form1: TForm1;
k,i,a,count:Integer;
x,y:Extended;

k:=0;
a:=0;
count:=PokazResult.Items.Count;
While k <> count Do Begin
i:=1;
x:=strtofloat(PokazResult.Items[k]);
y:=strtofloat(PokazResult.Items[k+1]);
While x=y Do Begin
Inc(i);
Inc(k);
y:=strtofloat(PokazResult.Items[k+1]);
End;
ZnacheniePriznaka.Items[a]:=floattostr(x);
Chastota.Items[a]:=inttostr(i);
Inc(a);
Inc(k);
End;

Суть кода: создать таблицу частот из отсортированного списка, который находиться в PokazResult листбоксе. В цикле While пишет ошибку, как эту ошибку ликвидировать? Заранее спасибо!

Frolov Dima
Frolov Dima
Посетитель
Сообщения: 5
[Сообщение #2] 12 мая 2012, 15:06
конкретно ошибка в строке
y:=strtofloat(PokazResult.Items[k+1]);

Ерёмин А.А.
Ерёмин А.А.
*Администратор
Сообщения: 435
[Сообщение #3] 12 мая 2012, 15:19
Текст ошибки какой?

puporev
puporev
2-ой класс
Сообщения: 3
[Сообщение #4] 12 мая 2012, 15:38
может нужно
count:=PokazResult.Items.Count-1;

Frolov Dima
Frolov Dima
Посетитель
Сообщения: 5
[Сообщение #5] 12 мая 2012, 21:34
Ерёмин А.А.: [Warning] Unit2.pas(85): For loop control variable must be simple local variable

puporev: нет, ошибка не в этом

min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #6] 12 мая 2012, 22:36
PokazResult:       TListBox;
ZnacheniePriznaka: TListBox;
Chastota:          TListBox;
 
var
  Form1: TForm1;
  k, i, a, count:  Integer;
  x, y:            Extended;
// а где "begin"?
  k:= 0;
  a:= 0;
  count:= PokazResult.Items.Count;
 
  While k <> count Do // из-за отсутствия "Continue" значение k
                      // может перескочить через "Count" (надо k < Count)
    Begin
      i:= 1;
      x:= strtofloat(PokazResult.Items[k]);
      y:= strtofloat(PokazResult.Items[k + 1]);
 
      While x = y Do
        Begin
          Inc(i);
          Inc(k); // k++ !!!
          y:= strtofloat(PokazResult.Items[k + 1]);
        End;
 
      ZnacheniePriznaka.Items[a]:= floattostr(x);
      Chastota.Items[a]:= inttostr(i);
      Inc(a);
      Inc(k); // k++ !!!
    End;
 
// Транслит - ацтой! Пора уже выучить немного english! Ненавижу транслит!!!
// Неформатированный код - ацтой! Полез только от нефиг делать.
// И не надо писать идентификаторы в нижнем регистре, ибо
// StrToFloat читается лучше, чем strtofloat!
// А также, имена переменных должны быть информативными!
// a, b, c, x, y, й, z - ФТОПКУ!
// Да! Комментарии в коде - это наше ВСЁ!

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Frolov Dima
Frolov Dima
Посетитель
Сообщения: 5
[Сообщение #7] 12 мая 2012, 23:17
прошу прощения, было со всеми отступлениями, но при создании темы уравнилось...правильно создавать не научился, на Вашем сайте новичок
над переменными и английским задумаюсь, спасибо))
что Вы имели в виду под // k++ !!! ?
увеличить k не на один, а на два?

min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #8] 13 мая 2012, 09:41

Цитата (Frolov Dima):

на Вашем сайте новичок

Бывает.

Цитата (Frolov Dima):

над переменными и английским задумаюсь, спасибо))

Прогресс очевиден! :)

Цитата (Frolov Dima):

что Вы имели в виду под // k++ !!! ? увеличить k не на один, а на два?

Нет. Операторы "++" и "--" - увеличение и уменьшение переменной на 1 соответственно в Си-подобных языках. Я думал, это все знают. Этими комментариями я просто хотел показать, что внутри цикла While k <> count Do переменная k за одну итерацию может увеличиться больше чем на 1, и, тем самым, условие k = count может не наступить (перескочить), образуется бесконечный цикл. Я это и написал в комментарии.

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Frolov Dima
Frolov Dima
Посетитель
Сообщения: 5
[Сообщение #9] 13 мая 2012, 15:16
Суть ясна. То есть ошибка в строке y:= strtofloat(PokazResult.Items[k + 1]);
происходит именно из-за этого?

min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #10] 13 мая 2012, 22:06
Да не знаю я. Указал на то, что резало глаз.

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Всего сообщений: 10 (сейчас показаны: с 1 по 10)

Перейти в раздел:


 © 2004 - 2017, Delphi.int.ru
Версия форума: 1.10 (19.01.2010)
RSS Delphi.int.ru Expert Код
Выполнено за 0.03 сек.
Обратная связь  
Рейтинг@Mail.ru Majordomo.ru - надёжный хостинг