Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2008, 14:31   #1
Holodok
Пользователь
 
Регистрация: 02.05.2008
Сообщений: 10
По умолчанию Помогите разобраться!

Добрый день!
Помогите, пожалуйста - вот такой вот код:
procedure TForm1.N2Click(Sender: TObject);
Var a,b:integer;
i:integer;
y:array[0..50] of double;
begin
a:=strtoint(Edit1.Text);
b:=strtoint(Edit2.Text);

for i := a to b do
begin
y[i]:=0.0095*48*sqrt(i)-0.0035;
Form2.StringGrid1.Cells[0,i]:=floattostr(y[i]);
end;
end;

При компиляции выдается ошибка:
Project xxxx raised exception class yyyyy with message 'zzzzzz'.
Process stopped. Use Step or Run to continue.

Подскажите, что сделано не так?
Holodok вне форума Ответить с цитированием
Старый 02.05.2008, 14:40   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

При компиляции ошибки быть не должно.
А при работе программы скорее всего в Edit2 вводите число больше 50, а массив у вас [0..50].
Или же в эдитах не цифры.

Последний раз редактировалось _Dmitry; 02.05.2008 в 14:43.
_Dmitry вне форума Ответить с цитированием
Старый 02.05.2008, 14:49   #3
Holodok
Пользователь
 
Регистрация: 02.05.2008
Сообщений: 10
По умолчанию

большое спасибо!
затупил - действительно, вводил числа больше 50...
Holodok вне форума Ответить с цитированием
Старый 02.05.2008, 15:24   #4
Holodok
Пользователь
 
Регистрация: 02.05.2008
Сообщений: 10
По умолчанию

Сорри за безграмотность - не заполняется таблица... Исправил Form2.StringGrid1.Cells[0,i]:=floattostr(y[i]); на Form2.StringGrid1.Cells[0,j]:=floattostr(y[i]);
заполняется только одна ячейка...
Знаю, что где-то ошибся, но не могу сообразить где. Не подскажете?
Holodok вне форума Ответить с цитированием
Старый 02.05.2008, 16:07   #5
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

над просто расставить брекпоинты и посмотреть.
Судя по всему j осаётся неизменной... Проще говоря если раньше переменная i была связанна с циклом For, то переменая j никак несвязанна с ним.

for i := a to b do
begin

y[i]:=0.0095*48*sqrt(i)-0.0035;

Form2.StringGrid1.Cells[0,j]:=floattostr(y[i]);

end;
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 02.05.2008, 16:24   #6
Holodok
Пользователь
 
Регистрация: 02.05.2008
Сообщений: 10
По умолчанию

Действительно...Большое спасибо.
Исправил:
Form2.StringGrid1.Cells[0,i]:=floattostr(i);
Form2.StringGrid1.Cells[1,i]:=floattostr(y[i]);

Работает только если цикл сделать, к примеру: for i := 0 to 10 do
Если запись for i := a to b do , то снова ничего не происходит...Нужен цикл именно от a до b. Может быть у меня это как-то некорректно описывается?
Holodok вне форума Ответить с цитированием
Старый 02.05.2008, 16:35   #7
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Всё должно работать. Поставьте на какаюнибудь строку цикла брекпоинт и проверьте сколько раз прокрутится цикл.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 02.05.2008, 16:41   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Если не надо оставлять пустые строки вначале, то лучше сделать так
Код:
Var a,b:integer;
i, k:integer;
y:array[0..50] of double;
begin
a:=strtoint(Edit1.Text);
b:=strtoint(Edit2.Text);
k:=0;
Form2.StringGrid1.ColCount:=b-a+1; // это если верхняя строчка как заголовок
for i := a to b do
begin
y[k]:=0.0095*48*sqrt(i)-0.0035;
inc(k);
Form2.StringGrid1.Cells[0,k]:=floattostr(y[k]);
end;
end;
Вводить можно любые числа, но так чтобы b-a<=51 было
eoln вне форума Ответить с цитированием
Старый 02.05.2008, 17:03   #9
Holodok
Пользователь
 
Регистрация: 02.05.2008
Сообщений: 10
По умолчанию

eoln, ваш вариант почему-то вообще не работает...
Holodok вне форума Ответить с цитированием
Старый 02.05.2008, 17:13   #10
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Извиняюсь - писал прямо в форуме, строчки попутал.
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var a,b:integer;   
i, k:integer;
y:array[0..50] of double;
begin
a:=strtoint(Edit1.Text);
b:=strtoint(Edit2.Text);   
k:=0;
Form2.StringGrid1.RowCount:=b-a+1; // это если верхняя строчка как заголовок
for i := a to b do
begin
y[k]:=0.0095*48*sqrt(i)-0.0035;
Form2.StringGrid1.Cells[0,k]:=floattostr(y[k]);
inc(k);
end;   
end;
Вот проверил - это работает
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите разобраться Tanuska___:) БД в Delphi 1 04.09.2008 14:56
Помогите разобраться с С++ igroman Общие вопросы C/C++ 1 03.08.2008 23:15
Помогите разобраться! SerSasha Помощь студентам 4 09.06.2008 10:00
Помогите разобраться! Кот Microsoft Office Excel 3 14.08.2007 19:48