Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 31.01.2012
Сообщений: 30
1

Не могу разобраться в чём ошибка

18.03.2012, 18:34. Показов 1173. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста, разобраться в чём ошибка
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button1Click(Sender: TObject);
var St:extended;
N:array [0..30] of integer; // пробовал менять на extended, хотя не склонен считать что это необходимо тут
a,b:extended; // пробовал менять на integer 
r,i:integer;
begin
N[0]:=StrToInt(Edit1.text);
R:=StrToInt(Edit2.text);
A:=StrToInt(Edit3.text);
B:=StrToInt(Edit4.text);
St:=Power((a*n[i]),b);
for i:=1 to 29 do
  begin
N[i+1]:=r*N[i]/(1+St); // тут показывает ошибку, положение курсора сразу же после ";"
  end;
for i:=0 to 29 do
StringGrid1.Cells[i, 0]:=IntToStr(N[i]);
end;
 
end.
выдаёт следующее: [Ошибка] Unit1.pas(49): Incompatible types: 'Integer' and 'Extended'

суть программы в том, что реализовать следующую формулу: N[i+1]=(r*N[i])/(1+(a*N[i])^b)
и вывести в StringGrid в строку результат,
а после построить график зависимости N от i (но там мне всё пока что понятно - помощь не требуется)
ранее создавал подобную программу, но без необходимости возведения в степень, там всё было нормально, программа работала правильно, может я просто упустил из виду что-то элементарное.

Добавлено через 40 минут
так как в самом задании не обязательно чтобы пользователь вводил N[0], r, a, b, то я решил задать их как константы и внёс ещё кое-какие изменения, вот переделанный вариант:
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
function step(x,y:real):real;
begin
step:=Exp(y*ln(x));
end;
 
procedure TForm1.Button1Click(Sender: TObject);
const
r=20;
a=0.015;
b=3.6;
var N:array [0..30] of real;
i:integer;
begin
N[0]:=20;
{R:=StrToInt(Edit2.text);
A:=StrToInt(Edit3.text);
B:=StrToInt(Edit4.text);}
for i:=1 to 29 do
  begin
  N[i+1]:=r*N[i]/(1+step((a*n[i]),b));
  end;
for i:=0 to 29 do
StringGrid1.Cells[i, 0]:=FloatToStr(N[i]);
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2012, 18:34
Ответы с готовыми решениями:

Не могу разобраться в чём ошибка
Массив заполнен с помощью генератора случайных чисел. Разности (1-2,3-4,..,19-20) отсортировать по...

В чем ошибка? не могу разобраться
В чем ошибка? не могу разобраться. Вот задание: Три устройства обрабатывают заявки в течении 690...

Не могу разобраться в чем ошибка
import math family = input('Здравствуйте, как вас зовут? ') print(family + ', мы рады представить...

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

16
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
18.03.2012, 18:36 2
если делим, то число автоматически уже не Int, а Float, массив Int а значения получаются Float нужно так сделать
Delphi
1
N[i+1]:=Round(r*N[i]/(1+St));
0
0 / 0 / 1
Регистрация: 31.01.2012
Сообщений: 30
18.03.2012, 18:47  [ТС] 3
теперь программа запускается, но выдаёт ошибки при нажатии на кнопку:
Проект Project2.exe вызвал исключение класса EOverflow с сообщением 'Floating point overflow'

Добавлено через 2 минуты
Цитата Сообщение от Arcor Посмотреть сообщение
если делим, то число автоматически уже не Int, а Float, массив Int а значения получаются Float нужно так сделать
Код Delphi
1
N[i+1]:=Round(r*N[i]/(1+St));
сейчас попробую, вернув старый вариант, спс.

Добавлено через 6 минут
Arcor, теперь программа запускается, но выдаёт ошибку при нажатии на кнопку:
access violation at address 0045e3b5 in module 'project2.exe' Read of address 011dc050
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
18.03.2012, 19:00 4
у тебя массив 0..30, а ты циклом берешь 1..29
0
0 / 0 / 1
Регистрация: 31.01.2012
Сообщений: 30
18.03.2012, 19:07  [ТС] 5
Arcor, N[0] должен задаваться пользователем, ну или константой, что допускает условие задачи
если вы про задание массива, то там, даже исправив на 0..29, в вычислении беру i от 1 до 29, ошибка при компиляции не выдаётся но при попытке задать а=0,015 выдаёт ошибку конвертирования, хотя A:=StrTofloat(Edit3.text);
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
18.03.2012, 19:12 6
вот тут почему он должен со второго элемента стартовать?
Delphi
1
N[i+1]
где тогда первый (1) элемент?
0
0 / 0 / 1
Регистрация: 31.01.2012
Сообщений: 30
18.03.2012, 19:18  [ТС] 7
Arcor, N[0] должен задаваться пользователем, ну или константой, что допускает условие задачи, N[0] - 1й эл-т массива

Добавлено через 2 минуты
Arcor, теперь в вычислении беру i от 0 до 29, ошибка при компиляции не выдаётся но при попытке задать а=0,015 выдаёт ошибку конвертирования, хотя A:=StrTofloat(Edit3.text);
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
18.03.2012, 19:23 8
так а константа, ее менять нельзя в течении программы
0
0 / 0 / 1
Регистрация: 31.01.2012
Сообщений: 30
18.03.2012, 19:26  [ТС] 9
Arcor,
в общем сейчас программа выглядит так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.Button1Click(Sender: TObject);
var St:extended;
N:array [0..29] of integer; 
a,b,r:real; 
i:integer;
begin
N[0]:=StrToInt(Edit1.text);
R:=StrTofloat(Edit2.text);
A:=StrTofloat(Edit3.text);
B:=StrTofloat(Edit4.text);
St:=Power((a*n[i]),b);
for i:=0 to 29 do
  begin
N[i+1]:=Round(r*N[i]/(1+St)); 
  end;
for i:=0 to 29 do
StringGrid1.Cells[i, 0]:=IntToStr(N[i]);
end;
контрольные значения: n[0]=20, r=4.0, a=0.015, b=3.6
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
18.03.2012, 19:28 10
я бы 18 строку вставил бы сразу за 15, и выкинул бы второй цикл
0
0 / 0 / 1
Регистрация: 31.01.2012
Сообщений: 30
18.03.2012, 19:39  [ТС] 11
Arcor,
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button1Click(Sender: TObject);
var St:extended;
N:array [0..29] of integer;
a,b,r:real;
i:integer;
begin
N[0]:=StrToInt(Edit1.text);
R:=StrToFloat(Edit2.text);
A:=StrTofloat(Edit3.text);
B:=StrTofloat(Edit4.text);
St:=Power((a*n[i]),b);
for i:=0 to 29 do
  begin
N[i+1]:=Round(r*N[i]/(1+St)); 
  StringGrid1.Cells[i, 0]:=IntToStr(N[i]);
  end;
end;
 
end.
программа стала выглятеть лишь немного более эргономичной, но ошибка осталась при вводе контрольных значений n[0]=20, r=4.0, a=0.015, b=3.6
Проект Project2.exe вызвал исключение класса EConvertError с сообщением '0.015' is not valid floating point value'
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
18.03.2012, 19:44 12
ты с точкой или запятой вводишь? наверно нужно с запятой вводить, это так стандартно в Windows'е настроен децимальный разделитель
а то что с точкой, это уже сама особенность языка дельфи
0
0 / 0 / 1
Регистрация: 31.01.2012
Сообщений: 30
18.03.2012, 19:52  [ТС] 13
Цитата Сообщение от Arcor Посмотреть сообщение
ты с точкой или запятой вводишь? наверно нужно с запятой вводить, это так стандартно в Windows'е настроен децимальный разделитель
а то что с точкой, это уже сама особенность языка дельфи

Arcor, раскладка "EN", ввожу если с "," то выдаёт: access violation at address 0045e2b2 in module 'project2.exe' Read of address 011dc170
ввожу если с "." то выдаёт: Проект Project2.exe вызвал исключение класса EConvertError с сообщением '0.015' is not valid floating point value'
предложения, варианты?
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
18.03.2012, 19:55 14
Delphi
1
St:= Power((a*n[i]),b);
в этой строке i, может эту строку поместить в цикл
1
0 / 0 / 1
Регистрация: 31.01.2012
Сообщений: 30
18.03.2012, 20:09  [ТС] 15
Цитата Сообщение от Arcor Посмотреть сообщение
в этой строке i, может эту строку поместить в цикл
выдаёт: Проект Project2.exe вызвал исключение класса EConvertError с сообщением '0.015' is not valid floating point value'


Добавлено через 2 минуты
Arcor, с "." выдало нормально!!!!!!!!!!!!!!!!
спасибо огромное
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
18.03.2012, 20:12 16
вот так работает
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
var St:extended;
    N:array [0..29] of integer;
    a,b,r:real;
    i:integer;
begin
  N[0]:=StrToInt(Edit1.text);
  R:=StrToFloat(Edit2.text);
  A:=StrTofloat(Edit3.text);
  B:=StrTofloat(Edit4.text);
  for i:=0 to 29 do
    begin
      St:=Power((a*n[i]),b);
      N[i+1]:=Round(r*N[i]/(1+St));
      StringGrid1.Cells[i, 0]:=IntToStr(N[i]);
    end;
end;
1
0 / 0 / 1
Регистрация: 31.01.2012
Сообщений: 30
18.03.2012, 20:14  [ТС] 17
Arcor, спасибо огромное :dance3:
0
18.03.2012, 20:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.03.2012, 20:14
Помогаю со студенческими работами здесь

Не могу разобраться в чем ошибка
Ребят, посмотрите пожалуйста эту програмку: Не работает 13 строчка, пишет нельзя считывать данные...

Не могу разобраться, в чём ошибка в движке
Добрый день, уважаемые кодеры! Вопрос вот в чём, есть сайт, движок самопис, после переноса на...

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

Работа со строкой. Не могу разобраться, в чём ошибка.
Есть такой код: HANDLE Search;//Объявляем хендл WIN32_FIND_DATAA FileSearch;//Создаем структуру...

Не могу разобраться в чём ошибка(инфиксная и постфиксная запись выражения)
на вход для простоты подаю коротенько выражение меньше 10 символов цифры во входе тоже от 0 до 10...

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru