Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.07.06;
Скачать: [xml.tar.bz2];

Вниз

Не работает Int64   Найти похожие ветки 

 
Kaer   (2008-06-05 12:18) [0]

Необходимо сделать пограмму для построения таблички значений(довольно больших) и дальнейшее сравнение 2 и 3 строки. Значение большие и выходят за пределы граница обычных типов данных. Пробую испльзовать Int64. программа отказыватеся компилится. что не так? мож потому что у меня винда 32 разрядная? И какой тип вообще лучше использовать тип данных тогда, если Edit1.text:="1000". Получается по формуле 3-ей подстроки(где самые большие значения) - с=b^4+a^4, это получается 1 000 000 000 000(!!!). Чем можно работать с таким значением?

Ошибка такая выскакивает: [Fatal Error] Unit1.pas(69): Internal error: C1091
На форме 1 Edit и 1 кнопка

Код программы

var
 Form1: TForm1;
 x, y, a, b, i : Int64;
 ar  : array of array of array of Int64;
 f,d: TextFile;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 AssignFile(f,"Таблица.txt");
 ReWrite(f);
 AssignFile(d,"Пов_числа.txt");
 ReWrite(d);
 i:= StrToInt(Edit1.Text);
 SetLength(ar,i+1,i+1,3);

 //заполняю массив
 for b := 1 to i do
   for a := b to i do
   begin
     ar[b,a,0] := Int64(2*a*b);
     ar[b,a,1] := Int64(a*a*a*a-b*b*b*b);
     ar[b,a,2] := Int64(b*b*b*b+a*a*a*a);
   end;
 //создаю таблицу
 for a:= 1 to i do
 begin
   for b:=1 to a do if b=a then Writeln(f, IntToStr(ar[b,a,0])) else Write(f, IntToStr(ar[b,a,0])+" ");
   for b:=1 to a do if b=a then Writeln(f, IntToStr(ar[b,a,1])) else Write(f, IntToStr(ar[b,a,1])+" ");
   for b:=1 to a do if b=a then Writeln(f, IntToStr(ar[b,a,2])) else Write(f, IntToStr(ar[b,a,2])+" ");
 end;
 CloseFile(f);
 //произвожу сравнение
 for y := 1 to i do
   for x := y to i do
     for b:= 1 to i do
       for a:= b to i do
         if (ar[y,x,1]=ar[b,a,2]) then
         begin
           Writeln(d, IntToStr(ar[y,x,1]));
           Writeln(d,"Строка "+IntToStr(a)+" столбец "+IntToStr(b)+" - 3");
           Writeln(d,"Строка "+IntToStr(x)+" столбец "+IntToStr(y)+" - 2");
           Writeln(d," ");
         end;

 CloseFile(d);
 ShowMessage("Расчет закончен");
end;


 
Palladin ©   (2008-06-05 12:24) [1]


>      ar[b,a,0] := Int64(2*a*b);
>      ar[b,a,1] := Int64(a*a*a*a-b*b*b*b);
>      ar[b,a,2] := Int64(b*b*b*b+a*a*a*a);

Var
a_4,b_4:Int64;
...
a_4:=a*a*a*a;
b_4:=b*b*b*b;
ar[b,a,0] := 2*a*b;
ar[b,a,1] := a_4-b_4;
ar[b,a,2] := b_4+a_4;


так попробуй


 
Thrasher ©   (2008-06-05 15:28) [2]

Все динамические массивы индексируются с 0! Иначе они просто не заполняются.

for b := 0{(!)} to i do
  for a := b to i do
  begin
    ar[b,a,0] := Int64(2*a*b);
    ar[b,a,1] := Int64(a*a*a*a-b*b*b*b);
    ar[b,a,2] := Int64(b*b*b*b+a*a*a*a);
  end;


 
MBo ©   (2008-06-05 15:48) [3]

>Thrasher
У него SetLength с i + 1, так что нулевой индекс можно и не использовать


 
McSimm ©   (2008-06-05 16:51) [4]


> Internal error: C1091

Если не ошибаюсь, это ошибка IDE, а не времени исполнения или синтаксиса.
Тут надо шаманить


 
Ляпа   (2008-06-05 17:06) [5]

В D6 попытка компиляции кода (см. ниже) приводит к
Internal Error C1051


nit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 b,i:int64;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
for b := 1 to i do begin end;
end;

end.


 
Игорь Шевченко ©   (2008-06-05 17:08) [6]

McSimm ©   (05.06.08 16:51) [4]


> Тут надо шаманить


например компилятор не может сгенерировать код для многомерных динамических массивов с индексами типа int64
первое шаманство, которое бы я сделал - объявил переменные для индексов типа Integer


 
Ляпа   (2008-06-05 17:21) [7]


> Игорь Шевченко ©   (05.06.08 17:08) [6]

Не только для индексов.
Если сделать переменные b,i в предыдущем коде не глобальными, а локальными, сообщение об ошибке будет более вразумительным...

[Error] Unit1.pas(30): For loop control variable must have ordinal type


 
Ляпа   (2008-06-05 17:24) [8]

Help:
You may see this error if a FOR loop uses an Int64 or Variant control variable. This results from a limitation in the compiler which you can work around by replacing the FOR loop with a WHILE loop.


 
Anatoly Podgoretsky ©   (2008-06-05 19:01) [9]

> McSimm  (05.06.2008 16:51:04)  [4]

Это ошибка компилятора, строка 1091


 
incm   (2008-06-06 15:52) [10]

Какой смысл делать индексы массивов, еще и многомерных, 64 битные ?
Кажись даже 2007 дельфя не умеет генерить 64 битный код (в смысле использовать 64 битные комманды проца). Так что больше 2Гб массива данных не возможно адресовать. А для этого обычного Integer хватит.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.07.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.044 c
8-1164287214
Змей
2006-11-23 16:06
2008.07.06
общение по микрофону через сеть


2-1212838230
redlord
2008-06-07 15:30
2008.07.06
почему на двух компах Tbitbtn и tbutton отображаются по разному


2-1212738752
tey
2008-06-06 11:52
2008.07.06
знак &


15-1211296805
buzb
2008-05-20 19:20
2008.07.06
А есть ли возможность в Делфи 7 сворачивать функции как в 2007


15-1211528405
Дмитрий С
2008-05-23 11:40
2008.07.06
irq





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский