Internal error c1091

Internal error: C1091. Ошибка в процедуре вычисления факториала числа Delphi, Delphi 6-7 Решение и ответ на вопрос 2841742

LimboRTX

0 / 0 / 0

Регистрация: 02.03.2021

Сообщений: 16

1

Delphi 6-7

01.06.2021, 15:57. Показов 1268. Ответов 5

Метки нет (Все метки)


Здравствуйте. Подскажите пожалуйста как исправить не известную мне ошибку Internal error: C1091. Она появилась с момента написания кнопки по вычисления факториала числа(BitBtn26).
Проект «Калькулятор».

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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
unit Unit1;
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls, Buttons, xpman;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    BitBtn1: TBitBtN;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    BitBtn6: TBitBtn;
    BitBtn7: TBitBtn;
    BitBtn8: TBitBtn;
    BitBtn9: TBitBtn;
    BitBtn10: TBitBtn;
    BitBtn11: TBitBtn;
    BitBtn12: TBitBtn;
    BitBtn13: TBitBtn;
    BitBtn14: TBitBtn;
    BitBtn15: TBitBtn;
    BitBtn16: TBitBtn;
    BitBtn19: TBitBtn;
    BitBtn20: TBitBtn;
    BitBtn21: TBitBtn;
    BitBtn22: TBitBtn;
    BitBtn23: TBitBtn;
    BitBtn24: TBitBtn;
    Image1: TImage;
    BitBtn3: TBitBtn;
    BitBtn17: TBitBtn;
    BitBtn18: TBitBtn;
    BitBtn25: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn26: TBitBtn;
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn17Click(Sender: TObject);
    procedure BitBtn19Click(Sender: TObject);
    procedure BitBtn12Click(Sender: TObject);
    procedure BitBtn13Click(Sender: TObject);
    procedure BitBtn14Click(Sender: TObject);
    procedure BitBtn7Click(Sender: TObject);
    procedure BitBtn8Click(Sender: TObject);
    procedure BitBtn9Click(Sender: TObject);
 
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn24Click(Sender: TObject);
    procedure BitBtn18Click(Sender: TObject);
    procedure BitBtn20Click(Sender: TObject);
    procedure BitBtn15Click(Sender: TObject);
    procedure BitBtn23Click(Sender: TObject);
    procedure BitBtn10Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn25Click(Sender: TObject);
    procedure BitBtn21Click(Sender: TObject);
    procedure BitBtn6Click(Sender: TObject);
    procedure BitBtn11Click(Sender: TObject);
    procedure BitBtn16Click(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn26Click(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Math: char;
  x, y, z, i:real;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'1'
end;
 
procedure TForm1.BitBtn17Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'2'
end;
 
procedure TForm1.BitBtn19Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'3'
end;
 
procedure TForm1.BitBtn12Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'4'
end;
 
procedure TForm1.BitBtn13Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'5'
end;
 
procedure TForm1.BitBtn14Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'6'
end;
 
procedure TForm1.BitBtn7Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'7'
end;
 
procedure TForm1.BitBtn8Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'8'
end;
 
procedure TForm1.BitBtn9Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'9'
end;
 
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
edit1.Clear
end;
 
procedure TForm1.BitBtn24Click(Sender: TObject);
begin
if edit1.Text<>'' then
x:=strtofloat(edit1.text);
Math := '+';
edit1.Clear;
end;
 
procedure TForm1.BitBtn18Click(Sender: TObject);
begin
if edit1.Text<>'' then
x:=strtofloat(edit1.text);
Math := '-';
edit1.Clear;
end;
 
procedure TForm1.BitBtn20Click(Sender: TObject);
begin
if edit1.Text<>'' then
x:=strtofloat(edit1.text);
Math := '/';
edit1.Clear;
end;
 
procedure TForm1.BitBtn15Click(Sender: TObject);
begin
if edit1.Text<>'' then
x:=strtofloat(edit1.text);
Math := '*';
edit1.Clear;
end;
 
procedure TForm1.BitBtn23Click(Sender: TObject);
var k, y1:integer;
begin
if edit1.Text<>'' then
y:=strtofloat(edit1.text);
    case Math of
    '+': z:=x+y;
    '-': z:=x-y;
    '*': z:=x*y;
    '/': z:=x/y;
    end ;
edit1.Text:=floattostr(z)
end;
 
procedure TForm1.BitBtn10Click(Sender: TObject);
begin
x:=strtofloat( edit1.Text);
edit1.clear;
z:=sqrt(x);
edit1.Text:=floattostr(z)
end;
 
//sin
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
x:=strtofloat(edit1.Text);
//x:=(x*3.14)/180;
edit1.Clear;
z:=sin(x);
edit1.Text:=floattostr(z)
end;
 
procedure TForm1.BitBtn25Click(Sender: TObject);
begin
if Length (Edit1.Text) > 0 then
Edit1.Text := copy (Edit1.Text, 1, Length (Edit1.Text) - 1);
if Length (Edit1.Text) = 0 then
Edit1.Text := '0';
end;
 
procedure TForm1.BitBtn21Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+','
end;
 
//cos
procedure TForm1.BitBtn6Click(Sender: TObject);
begin
x:=strtofloat(edit1.Text);
//x:=(x*3.14)/180;
edit1.Clear;
z:=cos(x);
edit1.Text:=floattostr(z)
end;
 
//ctg
procedure TForm1.BitBtn11Click(Sender: TObject);
begin
x:=strtofloat(edit1.Text);
//x:=(x*3.14)/180;
x:= sin(x)/cos(x);
z:= 1.0 / x;
edit1.Clear;
edit1.Text:=floattostr(z)
end;
 
//tg
procedure TForm1.BitBtn16Click(Sender: TObject);
begin
x:=strtofloat(edit1.Text);
//x:=(x*3.14)/180;
edit1.Clear;
z:= sin(x)/cos(x);
edit1.Text:=floattostr(z)
end;
 
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
Close
end;
 
 
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
edit1.Text:=floattostr(strtofloat(edit1.Text)*(-1));
end;
 
procedure TForm1.BitBtn26Click(Sender: TObject);
begin
x:=strtofloat(edit1.Text);
edit1.Clear;
for i:= 1 to x do
z:= x * i;
edit1.Text:=floattostr(z);
end;
 
END.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



mr-Crocodile

2802 / 1481 / 594

Регистрация: 19.03.2019

Сообщений: 4,907

01.06.2021, 17:20

2

Лучший ответ Сообщение было отмечено LimboRTX как решение

Решение

Цитата
Сообщение от LimboRTX
Посмотреть сообщение

x:=strtofloat(edit1.Text);

ты реально можешь найти факториал от вещественного числа?
напомни, пожалуйста, факториал от 0.5 чему равен? )

по сути — бери целую часть числа:

Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.BitBtn26Click(Sender: TObject);
var i, tmp : integer;
begin
  tmp := trunc( strtofloat(edit1.Text) );
  z := 1.0;
  for i:= 1 to tmp do
     z:= z * i;
  edit1.Text:=floattostr(z);
end;



1



0 / 0 / 0

Регистрация: 02.03.2021

Сообщений: 16

01.06.2021, 18:16

 [ТС]

3

Спасибо огромное! Сглупил не по человечески



0



0 / 0 / 0

Регистрация: 02.03.2021

Сообщений: 16

02.06.2021, 15:34

 [ТС]

4

Дружище не подскажешь как организовать к примеру сложение трёх чисел. 2+2+3 то есть подряд прописать. И после третьего, четвертого и т.д на знак + последнее число стиралось и выводился результат. На сколько я понял это реализуется через массив.



0



Модератор

8255 / 5477 / 2249

Регистрация: 21.01.2014

Сообщений: 23,578

Записей в блоге: 3

02.06.2021, 16:01

5

Цитата
Сообщение от LimboRTX
Посмотреть сообщение

как организовать к примеру сложение трёх чисел.

Объявить переменную, инициализировать ее нулем, а дальше прибавлять к этой переменной какие-нибудь значения. В итоге будет сумма всех значений.



1



0 / 0 / 0

Регистрация: 02.03.2021

Сообщений: 16

02.06.2021, 16:52

 [ТС]

6

Это нужно реализовать в отдельной процедуре или конкретно кнопку + подправить?



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

02.06.2021, 16:52

Помогаю со студенческими работами здесь

Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k
Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала…

Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k
Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала…

500 (Internal Server Error). Это ошибка моего сайта или ошибка хостера?
Одна из страний сайта перестала работать — не отображает информацию

Смотрю в отладчик, он…

Ошибка: internal check error
Добрый день,
использую rio 10.3
Пытаюсь установить стили через GetIt, но безуспешно, что бы я…

Ошибка: Internal Server Error
Ребятки , подсобите с ошибкой:

The server encountered an internal error or misconfiguration…

Отчего может возникать ошибка «Error: Internal CPS Error»
Привет, недавно появилась такая ошибка. В настройках нигде не лазил, ничего не перенастраивал….

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

Или воспользуйтесь поиском по форуму:

6


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

Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Internal error: C1091, WTF? Help! 

:(

   

Опции темы

ClickCLK
Дата 24.11.2008, 19:17 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.11.2008

Репутация: нет
Всего: нет

Что это за ошибка такая? Помогите пожалуйста.
Я писал курсак по мат. методам, вроде все сделал по формулам, сделал, сохранил, давай проверять и тут эта ошибка

Цитата
[Fatal Error] Unit1.pas(82): 

Я не могу понять в чем проблема.
вот исходник

Код

var
  Form1: TForm1;
  kan,zay,sob,ro,rostp,nfakt,Pn,q,A,k,step,fakt:real;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
    kan:=StrToFloat(labeledEdit1.Text);
    zay:=StrToFloat(labeledEdit2.Text);
    sob:=StrToFloat(labeledEdit3.Text);
    //Находим вероятность отказа Pn
    ro:=zay/sob;
    Memo1.Lines.Add('Тестовые данные: Число Ро равно '+FloatToStr(Ro));
    step:=1;
    for step:=1 to kan do
    rostp:=rostp*ro;
    end;
    Memo1.Lines.Add('Тестовые данные: Число Ро В степени '+FloatToStr(kan)+' равно '+FloatToStr(Rostp));
    fakt:=1;
    nfakt:=1;
    for fakt:=1 to kan do
    nfakt:=nfakt*fakt;
    end;
    Memo1.Lines.Add('Тестовые данные: Факториал N равен '+FloatToStr(nfakt));
    Pn:=rostp/nfakt;
    Memo1.Lines.Add('Начало процесса рассчета.');
    Memo1.Lines.Add('Вероятность отказа равна '+FloatToStr(Ro));
    //Находим относительную пропускную способность
    q:=1-Pn;
    Memo1.Lines.Add('Относительная пропускная способность равна '+FloatToStr(q));
    //Находим абсолютную пропускную способность
    A:=zay*q;
    Memo1.Lines.Add('Абсолютная пропускная способность равна '+FloatToStr(A));
    //Находим среднее число занятых каналов
    k:=A/sob;
    Memo1.Lines.Add('Среднее число занятых каналов равно '+FloatToStr(k));
    Memo1.Lines.Add('Среднее число заявок в системе равно '+FloatToStr(k));
    Memo1.Lines.Add('Процесс вычисления завершен.');
end;

Заранее спасибо.

Это сообщение отредактировал(а) ClickCLK — 24.11.2008, 19:46

PM MAIL   Вверх
Данкинг
Дата 24.11.2008, 20:04 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Yersinia pestis
****

Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130

Дельфи перегружал?

———————

There’s nothing left but silent epitaphs.

PM MAIL WWW   Вверх
Riply
Дата 24.11.2008, 21:05 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32

Цитата(ClickCLK @  24.11.2008,  19:17 Найти цитируемый пост)
Что это за ошибка такая? Помогите пожалуйста.

Если не помогает чистка проекта (dcu и т.д.), то начинаю искать эту ошибку
методом половинного деления smile  сначала юнитов, а потом процедур в «неправильных» юнитах. 
И т. д., пока не нахожу строчку. Перенабираю ее заново. Если не помогло — то внимательно ее изучаю.

Это сообщение отредактировал(а) Riply — 24.11.2008, 21:07

———————

Решение задач под заказ

PM MAIL   Вверх
Alexeis
Дата 24.11.2008, 21:12 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Амеба
Group Icon

Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459

Internal error: это глюк среды. Т.е. неадекватное поведение. Сначала перегрузить среду, если не помогает поставить апдейты, потом поудалять сторонние компоненты и расширители типа кинепаков или спидапов. Если ничего не помогло, то попробовать переустановить среду.

———————

Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать

PM ICQ Skype   Вверх
Riply
Дата 25.11.2008, 04:35 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32

Цитата(Alexeis @  24.11.2008,  21:12 Найти цитируемый пост)
Internal error: это глюк среды

Это ответственное заявление ?  smile

Я вот к чему спрашиваю:
Мой проект (Delphi 2006)  не компилировался у другого человека под Delphi 2009, 
а сыпал самыми разнообразными Internal error-ми smile
Сидела, исправляла их вручную. С грехом попалам удалось скомпилировать. 
Наиболее часто встречалась ошибка, примерно, такого плана (писала по памяти, могут быть неточности):

Код

_MY_REC = packed record
  ....
  Byffer: array[0..0] of WCHAR

 AnyFunction(@_MY_REC.Buffer, ....) <------  ошибка
если изменить на AnyFunction(@_MY_REC.Buffer[0], ....) - порядок. 

Что мне говорить ему: 
«Извините, у меня еще нет достаточного опыта для решения Ваших задач»
или
«пацан, у тя глюкавая дельфя. и не рисуйся тута пока не перезагрузишся»  ?  smile  (с) ( в одной из Питерских контор ) smile

———————

Решение задач под заказ

PM MAIL   Вверх
ClickCLK
Дата 25.11.2008, 05:12 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.11.2008

Репутация: нет
Всего: нет

Нашел следующее: 
http://coding.derkeiler.com/Archive/Delphi…1/msg00107.html
и вот еще:
http://groups.google.com/group/alt.comp.la…e46b0467bef3bc7
только я совршенно не понимаю что мне с этим делать…

PM MAIL   Вверх
Mayk
Дата 25.11.2008, 09:57 (ссылка)
|    (голосов:1)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

^аВаТаР^ сообщение>>
****

Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134

Цитата(Riply @  25.11.2008,  08:35 Найти цитируемый пост)
Это ответственное заявление ?  smile

Internal error’ов быть не должно по определению. На то они и internal’ы. Хуже internal error может быть только вылет IDE.

———————

 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.

PM MAIL WWW ICQ   Вверх
Alexeis
Дата 25.11.2008, 10:15 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Амеба
Group Icon

Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459

Цитата(Riply @  25.11.2008,  03:35 Найти цитируемый пост)
Это ответственное заявление ? 

  Ну сама подумай «Internal error:» — внутренняя ошибка. На любое даже самое неадекватное действие программа должна реагировать адекватно. Если она реагирует неадекватно пусть даже не неадекватные действия то это глюк. Глюк может пораждаться не только одним действием, а последовательностью действий. При другой последовательности глюка может и не появиться, потому перезагрузка часто помогает, но, конечно, не решает саму проблему, потому дальше я посоветовал ставить последний апдейт, вдруг косяк уже исправили.

Добавлено через 1 минуту и 47 секунд

Цитата(Riply @  25.11.2008,  03:35 Найти цитируемый пост)
Мой проект (Delphi 2006)  не компилировался у другого человека под Delphi 2009, 
а сыпал самыми разнообразными Internal error-ми 

  Очень даже вероятно учитывая что среда новая и очень сырая smile , другое дело если бы компилировали под 2007ю с последними апдейтами…

———————

Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать

PM ICQ Skype   Вверх
CodeMonkey
Дата 25.11.2008, 10:42 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89

Цитата(ClickCLK @  25.11.2008,  05:12 Найти цитируемый пост)
только я совршенно не понимаю что мне с этим делать…

Нужно просто «перемешать» код или использовать другую версию Delphi. У вас, кстати, какая версия? Попробуйте 6-7, 2007-2009.
Под перемешиванием понимается перестановка строк, выделение кода в процедуры или замена инструкций на их аналоги (например, for на while).

Цитата(Riply @  25.11.2008,  04:35 Найти цитируемый пост)
Это ответственное заявление ?

Угу, это сам CodeGear говорит — посмотри справку по Internal Error:

Цитата
The error message, Internal Error: X1234 indicates that the compiler has encountered a condition, other than a syntax error, that it cannot successfully process. 

Tip: Internal error numbers indicate the file and line number in the compiler where the error occurred. This information may help Technical Support services track down the problem. Be sure to record this information and include it with your internal error description. 

To resolve an internal error

If the error occurs immediately after you have modified code in the editor, go back to the place where you made your changes and make a note of what was changed. 
If you can undo or comment out the change and then recompile your application successfully, it is possible that the programming construct that you introduced exposed a problem with the compiler. If so, follow the procedure on reviewing code below. 

If the problem still exists

Delete all of the .dcuil files associated with your project. 
Close your project completely using FileClose All. 
Reopen your project. This will clear the unit cache maintained in the IDE. Alternatively, you can close the IDE and restart. 
Another option is to try and recompile your application using the ProjectBuild option so that the compiler will regenerate all of your dcuils. 
If the error is still present, exit the IDE and try to compile your application using the command line version of the compiler (dccil.exe) from a command prompt. This will remove the unit caching of the IDE from the picture and could help to resolve the problem. 

Review your code at the last modification point

If the problem still exists, go back to the place where you last made modifications to your file and review the code. Typically, most internal errors can be reproduced with only a few lines of code and frequently the code involves syntax or constructs that are rather unusual or unexpected. If this is the case, try modifying the code to do the same thing in a different way. For example, if you are typecasting a value, try declaring a variable of the cast type and do an assignment first. 

begin
    if Integer(b) = 100 then…
end;
var
 a: Integer;
begin
  a := b;
  if a = 100 then…
end;        
Here is an example of unexpected code that you can correct to resolve the error: 

var
    A : Integer;
begin
 { Below the second cast of A to Int64 is unnecessary; removing it can avoid the Internal Error. }
 if Int64(Int64(A))=0 then
end;

In this case, the second cast of A to an Int64 is unnecessary and removing it corrects the error. If the problem seems to be a while…do loop, try using a for…do loop instead. Although this does not actually solve the problem, it may help you to continue work on your application. If this resolves the problem, it does not mean that either while loops or for loops are broken but more likely it means that the manner in which you wrote your code was unexpected. 
Once you have identified the problem, we ask that you create the smallest possible test case that still reproduces the error and submit it to Borland. 

Other techniques for resolving internal errors

If error seems to be on code contained within a while…do loop try using a for…do loop instead or vice versa. 
If it uses a nested function or procedure (a procedure/function contained within a procedure/function) try unnesting them. 
If it occurs on a typecast look for alternatives to typecasting like using a local variable of the type you need. 
If the problem occurs within a with statement try removing the with statement altogether. 
Try turning off compiler optimizations under Project OptionsCompiler. 

When all else fails

Typically, there are many different ways to write any single piece of code. You can try and resolve an internal error by changing the code. While this may not be the best solution, it may help you to continue to work on your application. If this resolves the problem, it does not mean that either while loops or for loops are broken but perhaps that the manner in which you have written your code was unexpected and therefore resulted in an error. 
If you’ve tried your code on the latest release of the compiler and it is still reproducible, create the smallest possible test case that will still reproduce the error and submit it to CodeGear. If it is not reproducible on the latest version, it is likely that the problem has already been fixed. 

Configuring the IDE to avoid internal errors

Create a single directory where all of your .dcpil files (precompiled package files) are placed. For example, create a directory called C:DCPIL and under Tools Environment Options select the Library tab and set the DCPIL output directory to C:DCPIL. This setting will help ensure that the .dcpil files the compiler generates are always up-to-date. This is useful when you move a package from one directory to another. You can create a .dcuil directory on a per-project basis using ProjectOptionsDirectories/ConditionalsUnit output directory. 
The key is to use the most up-to-date versions of your .dcuil and .dcpil files. Otherwise, you may encounter internal errors that are easily avoidable. 

Для тех, у кого туго с англ.:

Цитата
Сообщение об ошибке Internal Error: X1234 указывает на то, что компилятор столкнулся с некоторой ситуацией, отличной от синтаксической ошибки, и он не может продолжить компиляцию. 

Подсказка: в коде ошибки Internal error зашифрован файл и строка в исходниках компилятора, где возникла ошибка. Эта информация может помочь технической поддержке выявить проблему. Не забудьте записать эту информацию и прикрепить её к своему отчёту об ошибке. 

Как избавится от Internal error

Если ошибка возникла сразу же после внесения вами каких-либо изменений в проект — откатитесь назад, до того момента, как вы начали менять код. Отметьте, что вы при этом меняли. 
Если вы закомментарили/удалили свои изменения и после этого ваш проект успешно скомпилировался, то возможно, что программный код, который вы написали, выявил глюк в компиляторе. Если это так, выполните перечисленные ниже через один пункт действия. 

Если проблема ещё существует

Удалите все .dcu(il) файлы, связанные с вашим проектом. 
Полностью закройте ваш проект (File/Close all). 
Заново откройте свой проект. Это очистит кэш модулей в IDE. Как вариант — вы можете перезапустить IDE. 
Ещё вариант — попробовать перекомпилировать приложения используя команду Build (а не Compile) — при этом компилятор пересоздаст все dcu(il) файлы. 
Если ошибка не уходит, закройте IDE и попробуйте перекомпилировать приложение, используя компилятор командной строки (dcc(il).exe). Это исключит из рассмотрения кэшиование юнитов в IDE. 

Проанализируйте свой код от последнего изменения

Если проблема ещё актуальна, вернитесь к тому месте в коде, где вы последний раз что-то меняли и просмотрите свой код. Обычно, большинство ошибок internal error могут быть воспроизведены всего несколькими строками кода и часто при этом код использует синтаксические конструкции, которые используются довольно редко. В этом случае, попробуйте модифицировать код, чтобы он выполнял свою работу, но другим способом. Например, если вы используете приведение типа в выражении, попробуйте объявить переменную нужного типа и сначала присвоить ей значение, а уж потом использовать её в выражении:

Код
begin
    if Integer(b) = 100 then...
end;
var
 a: Integer;
begin
  a := b;
  if a = 100 then...
end;

А вот пример неожиданного кода, который вы можете исправить для избавления от ошибки: 

Код
var
    A : Integer;
begin
 { Второе преобразование A в Int64 не нужно; если вы уберёте его, это может избавить вас и от Internal Error. }
 if Int64(Int64(A))=0 then
end;

Если проблема связана с циклом while…do — попробуйте заменить его на for…do. Хотя эти изменения не исправляют глюк компилятора, они могут помочь вам продолжать работать над своим приложением. Если ваши изменения избавляют вас от ошибки, это не значит, что все while или for циклы глючат — скорее вы используете их несколько необычным образом. 
Как только вы смогли изолировать проблему — было бы не плохо сделать минимально возможный тестовый пример-проект, который демонстрирует возникновение вашей ошибки и выслать его на Quality Central (qc.codegear.com). 

Другие техники для избавления от ошибок internal error

— Если проблема связана с циклами — попробуйте поменять for на while/repeat или наоборот. 
— Если проблема возникает во вложенных функциях — попробуйте сделать их глобальными. 
— Если проблема возникает в приведении типов — попробуйте воспользоваться другим, аналогичным по смыслу приведением или используйте временные переменные. 
— Если проблема возникает в операторе with — попробуйте его убрать и расписать явно. 
— Попробуйте выключить оптимизацию (Project/Options/Compiler). 

Когда ничего не получилось

Обычно есть множество различных кусков кода, которые могут добиться нужной вам цели. Вы можете попробовать избавиться от ошибки, меняя код. Может быть, выбранное решение и не будет оптимальным, но по-крайней мере вы сможете продолжать работу над своим приложением. 
Если у вас есть последняя версия компилятора — проверьте свой код в ней. Если проблема воспроизводится — отправьте, как и ранее, в Quality Central минимальную демку проблемы. Если же проблемы нет — то значит, этот глюк компилятора уже был исправлен. 

Конфигурация IDE для минимизации шанса возникновения internal error

Создайте один каталог, где будут лежать все ваши файлы .dcp(il). Например, создайте каталог C:DCPIL ив Tools Environment/Options/Library установите DCP(IL) output directory в C:DCPIL. Эта настройка гарантирует, что все .dcp(il) файлы, генерируемые компилятором пойдут в одну папку и, таким образом, будут самыми свежими. Это полезная опция, если вы перемещаете пакет из одного каталога в другой. Вы можете создать каталог и для .dcu(il) файлов, используя Project/Options/Directories/Conditionals/Unit output directory. 
Смысл этих изменений в том, чтобы всегда использовать самые свежие версии ваших .dcu(il) и .dcp(il). В противном случае, вы можете встретиться с ошибками internal error. 

Добавлено через 4 минуты и 13 секунд
ClickCLK, у тебя как раз, похоже вариант с циклами… Посмотри внимательнее — по-моему, у тебя нет begin к end-ам у циклов for.

———————

Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Riply
Дата 25.11.2008, 10:50 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32

Век живи — век учись smile
Спасибо всем большое.
P.S.
 Просто, у меня уже рефлекс прежде чем заявить, что глючит среда, система, и т.д. и т.п.
 548 раз попытаться найти ошибку у себя и не разом меньше smile

———————

Решение задач под заказ

PM MAIL   Вверх
ClickCLK
Дата 25.11.2008, 18:55 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.11.2008

Репутация: нет
Всего: нет

А ларчик просто открывался…
Там в циклах for to do в описаниях использовались переменные вещественного типа. заменив их на целые и немного изменив алгоритм возведения в степень все стало работать правильно. До этих изменений данная ошибка появлялась на любой машине. Среда была везде одна и та-же Delphi 7.

PM MAIL   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Delphi: Общие вопросы»
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »

>
Как создать длинные константные строки в исходном файле?
, имеется большой текстовый файл, как его вставить в исходник?

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему



Сообщ.
#1

,
05.02.09, 09:54

    Junior

    *

    Рейтинг (т): нет

    Здраствуйте!
    Подскажите пожалуйста, кто знает, как создать длинную константную тектовую строку в исходном файле?
    Проблема заключается в следующем:
    имеется строка содержащая текстовые символы: A-Z, a-z, 0-9, А-Я, а-я, += большой длины, около 100 тысяч символов.
    Как впихнуть этот файл себе в исходник?
    Пытался делать так:

    ExpandedWrap disabled

      CHAR strFile[] = «sfsdfsdfsdf

                          gdfgdfgdfg

                          rtertertertertterterttertertrwerwerwtrwetSASDGDfg»;

    но компилятор ругается: «error C2026: string too big, trailing characters truncated»

    Сообщение отредактировано: VictorRT — 05.02.09, 10:14


    trainer



    Сообщ.
    #2

    ,
    05.02.09, 10:02

      Как обычно

      ExpandedWrap disabled

        CHAR strFile[] = «sfsdfsdfsdf»

                            «gdfgdfgdfg»

                            «rtertertertertterterttertertrwerwerwtrwetSASDGDfg»;

      P.S. Вот насчет 100000 символов — сильно не уверен.

      Сообщение отредактировано: trainer — 05.02.09, 10:04


      Relaxander



      Сообщ.
      #3

      ,
      05.02.09, 10:03

        CHAR strFile[] = «sfsdfsdfsdf»
        «gdfgdfgdfg»
        «rtertertertert\tertert\tertert\rwerwerwtrwetSASDGDfg\»;


        VictorRT



        Сообщ.
        #4

        ,
        05.02.09, 10:15

          Junior

          *

          Рейтинг (т): нет

          Цитата Relaxander @ 05.02.09, 10:03

          CHAR strFile[] = «sfsdfsdfsdf»
          «gdfgdfgdfg»
          «rtertertertert\tertert\tertert\rwerwerwtrwetSASDGDfg\»;

          окей, щас попробуем этот вариант!

          Добавлено 05.02.09, 10:30
          Вот, что показал эксперемент:
          если создавать строки способом:

          ExpandedWrap disabled

            CHAR strFile[] = «sfsdfsdfsdf»

            «gdfgdfgdfg»

            «rtertertertert\tertert\tertert\rwerwerwtrwetSASDGDfg\»;

          то при относительно небольшой длине всё работает, а при большой длине выдается ошибка:
          «fatal error C1091: compiler limit: string exceeds 65535 bytes in length»
          Отсюда вывод: создать строку больше 65535 байт невозможно.
          Может использовать массив строк?

          Сообщение отредактировано: VictorRT — 05.02.09, 10:32


          Мяут



          Сообщ.
          #5

          ,
          05.02.09, 10:31

            VictorRT, Relaxander бред говорит — используйте вариант trainer’а

            Добавлено 05.02.09, 10:32

            Цитата VictorRT @ 05.02.09, 10:15

            а большой длине выдается ошибка:

            Что естественно, учитывая, что размер сегмента в x86 — 64K


            Relaxander



            Сообщ.
            #6

            ,
            05.02.09, 10:40

              Цитата Мяут @ 05.02.09, 10:31

              VictorRT, Relaxander бред говорит

              доказательства?


              ЫукпШ



              Сообщ.
              #7

              ,
              05.02.09, 10:55

                Цитата VictorRT @ 05.02.09, 09:54

                Пытался делать так:

                ExpandedWrap disabled

                  CHAR strFile[] = «sfsdfsdfsdf

                                      gdfgdfgdfg

                                      rtertertertertterterttertertrwerwerwtrwetSASDGDfg»;

                но компилятор ругается: «error C2026: string too big, trailing characters truncated»

                Попробуй так:

                ExpandedWrap disabled

                  CHAR strFile[] = «sfsdfsdfsdf

                  gdfgdfgdfg

                  rtertertertert\tertert\tertert\rwerwerwtrwetSASDGDfg\»;

                -Added 05.02.09, 11:01

                Цитата VictorRT @ 05.02.09, 09:54

                Проблема заключается в следующем:
                имеется строка содержащая текстовые символы: A-Z, a-z, 0-9, А-Я, а-я, += большой длины, около 100 тысяч символов.
                Как впихнуть этот файл себе в исходник?

                Напрашивается вариант :»Вставить этот файл в ресурсы».

                Еще интереснее — упаковать zip-ом, вставить в ресурсы,
                перед использованием unzip-ить.

                Сообщение отредактировано: ЫукпШ — 05.02.09, 11:02


                VictorRT



                Сообщ.
                #8

                ,
                05.02.09, 11:11

                  Junior

                  *

                  Рейтинг (т): нет

                  to ЫукпШ: спасибо, интересная идея! Сам стал к этому склоняться )


                  KILLER



                  Сообщ.
                  #9

                  ,
                  05.02.09, 11:37

                    Цитата VictorRT @ 05.02.09, 09:54

                    Подскажите пожалуйста, кто знает, как создать длинную константную тектовую строку в исходном файле?

                    Именно для этого и были придуманы динамические массивы ;)
                    Не проще ли патом вычитать этот массив из файла и юзать ???


                    miksayer



                    Сообщ.
                    #10

                    ,
                    05.02.09, 11:45

                      Цитата KILLER @ 05.02.09, 11:37

                      Именно для этого и были придуманы динамические массивы
                      Не проще ли патом вычитать этот массив из файла и юзать ???

                      а вдруг топикстартеру нужно, чтобы простой смертный не смог изменить этот файл?


                      KILLER



                      Сообщ.
                      #11

                      ,
                      05.02.09, 11:48

                        Цитата miksayer @ 05.02.09, 11:45

                        а вдруг топикстартеру нужно, чтобы простой смертный не смог изменить этот файл?

                        Тогда пусть юзает шифрование, и кстати при компиляции текст строковых массивов остаеться как и был, т.е. не компилируеться ин е шифруеться, можно фаром открыть *.ехе файл и втупую изменить его, главное не увиличить длинну массива.
                        Но чтобы 100кб данных хранить в исходном файле, это уже похоже на маразм, ибо есть сколько угодно вариантов чтобы это обойти.


                        pan2004



                        Сообщ.
                        #12

                        ,
                        05.02.09, 13:45

                          Senior Member

                          ****

                          Рейтинг (т): 63

                          VictorRT, если есть Qt, прогони свой файл через утилиту uic. Она тебе C++ный массив сделает)


                          VictorRT



                          Сообщ.
                          #13

                          ,
                          05.02.09, 14:03

                            Junior

                            *

                            Рейтинг (т): нет

                            Всем спасибо! Я выбрал вариант с хранением файла в ресурсах!

                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                            0 пользователей:

                            • Предыдущая тема
                            • C/C++: Общие вопросы
                            • Следующая тема

                            [ Script execution time: 0,0348 ]   [ 16 queries used ]   [ Generated: 9.02.23, 20:19 GMT ]  

                            Итак, уважаемые Свифтоводы, кто-нибудь сталкивался с ошибкой С1091? Когда на приборке загорается значок ESP и горит до момента выключения зажигания.
                            Ошибка непостоянная, возникает время от времени.

                            Пробег: 138 000 км

                            Комментарии
                            22

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

                            никогда не было такой ошибки.

                            Дополню: появляется через 30-60 секунд после запуска двигателя. В движении не появляется. Р0101 ошибка датчика массового расхода воздуха. Ставил другой оригинальный датчик для эксперимента, но ситуация не изменилась. С1091 что-то связанное с АБС(не помню точное описание ошибки).

                            Для размышления: ошибка может быть связана с закисанием тормозного поршня? Переборку суппортов не пробовали?

                            Думаю нет. Была версия связанная с дроссельной заслонкой, но она не проверялась.


                            Fingerhole

                            Для размышления: ошибка может быть связана с закисанием тормозного поршня? Переборку суппортов не пробовали?

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


                            goga04187

                            Дополню: появляется через 30-60 секунд после запуска двигателя. В движении не появляется. Р0101 ошибка датчика массового расхода воздуха. Ставил другой оригинальный датчик для эксперимента, но ситуация не изменилась. С1091 что-то связанное с АБС(не помню точное описание ошибки).

                            Ошибка по массовому расходу — чистите дроссель.

                            Да, эту версию озвучивали знакомые электроники. Буду чистить.

                            Мне, к сожалению, эту версию озвучить никто не смог, допер сам.
                            Искал инфу, читал, что такое ещё может быть из-за клапана егр, но он на евро 5 машинах, а у меня евро 4. И ошибок с ним больше.

                            Есть такое. Около года уже катаюсь с этой фигнёй. Появляется не всегда. Можно неделю кататься и всё отлично, а может два-три раза за день появиться, при запуске двигателя. У меня появляется вместе с ошибкой Р0101. Иногда С1091 не появляется. В поведении машины ничего не меняется(возможно зимой не работает ESP, но это не точно). Купил обд и при появлении ошибки, глушу двигатель, стираю ошибки и еду. До официалов доехать пока не получается, а свои знакомые ничего внятного не говорят.

                            Тоже ездил с горящей есп, прочитал ошибки, почистил маф, не помогло. Только чистка дроссельной заслонки, из-за нагара идут некорректные данные по открытию и кол-ва воздуха, блок АБС получает некорректные данные отсюда ошибка.
                            Чистил хренатой от ликви для дроссельных заслонок. 2 года, нет ошибки

                            Подскажи, какая-либо адаптация потом необходима или просто чистки достаточно?

                            Я нашел в интернете какой-то мануал, где просто надо было включить зажигание, подождать, выключить. Она пощелкает и на этом вся адаптация заканчивается.

                            В субботу снял заслонку и офигел от количества грязи на ней и вокруг. Щель была только сверху, снизу забито наглухо. Промыл всё очистителем, собрал. Включил зажигание, заслонка пожужжала маленько и затихла. Выключил. Запустил двигатель, холостой ход плавал в пределах 650-900об/мин. По приезду домой заглушил, запустил снова- холостой ход перестал плавать. С субботы катаюсь, ошибка не появлялась, расход топлива снизился примерно на литр(по показаниям бк). Доволен))) спасибо за подсказку и помощь.

                            Не за что!
                            У меня была такая на 140+ ткм, не особо что-то грязная, но ошибочка торчала.

                            Не могу прикрепить фото, но у меня грязь располагалась и количеством была в точности так! Прямо точно моё фото))
                            Пробег 76000

                            Нашел ещё кусочек, это с обратной стороны.

                            Все комментарии

                            Понравилась статья? Поделить с друзьями:
                          • Internal error b109 13 cannot decompress setup program
                          • Internal error an error just occurred transport fever 2
                          • Internal error an active directory domain services error has occurred
                          • Internal error 8027
                          • Internal error 36000 ghost