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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2008, 17:26   #1
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
Лампочка ошибки при компиляции

При компиляции программы возникает ошибка

[DCC Error] Unit1.pas(57): F2084 Internal Error: C1264

и показивает на end; процедуры.

Кто знает что это означает или где взять перечень с кодами ошибок и обьяснениями к ним(желательно рус.)

Заранее спасибо!
|{ot вне форума Ответить с цитированием
Старый 03.07.2008, 17:33   #2
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

возможно не закрыл begin. Попробуй поставить ещё онин end; (или наоборот лишний end)
beegl вне форума Ответить с цитированием
Старый 03.07.2008, 17:45   #3
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Показывай код...

Цитата:
Кто знает что это означает или где взять перечень с кодами ошибок и обьяснениями к ним(желательно рус.)
F1.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 03.07.2008, 23:50   #4
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

С end; там все нормально( все по парам ).
А на счет F1 то у меня в инет просится( а причину ошибки не показывает )
|{ot вне форума Ответить с цитированием
Старый 04.07.2008, 09:11   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Пока нет ни кода ни результатов трасировки тема - флуд.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 05.07.2008, 02:58   #6
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
Лампочка

Вот код:

Код:
unit Unit1;

interface

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

type
  Tmail = class(TForm)
    Edit1: TEdit;
    memo: TMemo;
    Label1: TLabel;
    Button1: TButton;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  mail: Tmail;

implementation

{$R *.dfm}

const mn=11; // макс разрядность вводимого числа

var
  mas : array [1..1000000] of byte; // значение факториала
  j ,n : int64;  // j,k счетчик циклов, n количество цифр в mas
  i ,k : longint;   //вводимое число факториала
  st : string[mn];
  p ,dp ,pi ,ji : byte; // счетчики процентов

procedure mx( a : longint ); // основная процедура
 var                       // считает факториал
   buf ,zaluwok : longint;
 begin
    for j := n  downto mn do
     begin
       buf:=mas[j];
       buf:=buf*a+zaluwok;
       zaluwok:=buf div 10;
       buf:=buf mod 10;
       mas[j]:=buf;
     end;
      mas[10]:=zaluwok mod 10;
    for j := 9  downto 1 do begin
                          zaluwok:=round(zaluwok/10-0.5);
                          mas[j]:=zaluwok mod 10;
                         end;
  end;

 procedure nol( p : byte );
  begin          // заполняет первые mn-элэментов масива нулями
    if mas[p]<>0 then begin
      for j := n to p do mas[j+1]:=mas[j];
      mas[p]:=0;
      inc(n);
    end;
  end;

procedure Tmail.Button1Click(Sender: TObject);
begin

  i:=strToInt(Edit1.Text);
  n:=length(intToStr(i));

  p:=0;
  pi:=0;
  label3.Caption:=intToStr(pi)+'%';
  dp:=round(i/100);

  mas[1]:=1;

  for ji:=1 to mn do nol(ji);

  for k := 2 to i do
    begin
       if k>p then begin
                     p:=p+dp;
                     inc(pi);
                     label3.Caption:=intToStr(pi)+'%';
                   end;
      mx(k);
     for ji:=1 to mn do nol(ji);
    end;

  memo.Enabled:=true;
 for j := 11 to n do memo.Lines.Add(intToStr(mas[j]));

end;

procedure Tmail.FormShow(Sender: TObject);
begin
 memo.Lines.Clear;
end;

end.

и весь проект:
Вложения
Тип файла: rar факториал.rar (342.8 Кб, 18 просмотров)
|{ot вне форума Ответить с цитированием
Старый 05.07.2008, 04:11   #7
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Вообщем судя из того что написанно в справке эту проблему решить можно, но довольно непонятным образом. Удалять файлы, перезагружать IDE и т.п...... Там чёрт ногу сломит, что в ней написанно.
Кароче говоря: алгоритм записан криво, компилятор запутался и сам непонял что за фигня.

Как звучит задание? Проще будет написать новый алгорит чем пытаться отладит старый.....
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 05.07.2008, 18:15   #8
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Задание ни как не звучит, это я для себя писал. А вообще программа считает факториал.
Сначало эту программу я писал на Pascal'e (там все работает отлично) но поскольку там ограничение стека ( 64 кб ) то она могла посчитать где то (точно не помню) 18000! и я ее просто перенес в Делфи.
|{ot вне форума Ответить с цитированием
Старый 05.07.2008, 18:25   #9
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

18000! - 0_o

Чтото с трудом вериться..... Какой тип данных возвращала функция факториала?

Вот один из вариантов нахождения факториала....

Код:
var
  Form1: TForm1;
  Function factorial(n : Integer) : Int64;

implementation

{$R *.dfm}

Function factorial(n : Integer) : Int64;
Var i : Integer;
Begin
  Result := 1;
  For i := 2 To n Do Result := Result * i;
End;

Procedure TForm1.Button1Click(Sender: TObject);
Begin
Edit2.Text := IntToStr(Factorial(StrToInt(Edit1.Text)));
End;

End.
Гарантированно считает до 20!. Дальше нужно применять другии типы данных и прочее....

адд: вижу вы применили массив для записи значения.... Неплохо но алгоритм кривой.... поэтому и косяки были / :
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...

Последний раз редактировалось Карась; 05.07.2008 в 18:34.
Карась вне форума Ответить с цитированием
Старый 05.07.2008, 18:59   #10
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
Стрелка

Вот програмка на Паскале про которую говорил, для Делфи я немного упростил код,
правда немного ошибся она считает максимум 16992! ( у меня за 3 мин. )
Код:
{AAA}
       (*vu4islenie faktoriala*)
 uses crt,dos;

 var mas : array [1..64514] of byte;
     i ,j ,n ,k ,p ,pp : longint;
     b : byte;
     T : text;
     ch : char;
     st : string[15];
     h ,m ,s ,ml ,
     hh ,mm ,ss ,mls :word;

 procedure mx ( a : longint );
  var buf : longint;
      zaluwok : longint;
  begin
   zaluwok:=0;
   for j:=n downto 3 do begin
    buf:=mas[j];
    buf:=buf*a+ zaluwok;
    zaluwok:=buf div 10;
    buf:=buf mod 10;
    mas[j]:=buf;
   end;
   mas[1]:=zaluwok div 10;
   mas[2]:=zaluwok mod 10;
  end;

 procedure nol;
  begin
   if mas[1]<>0 then begin
     for j:=n downto 1 do mas[j+1]:=mas[j];
    mas[1]:=0;
    inc(n);
   end;
   if mas[2]<>0 then begin
     for j:=n downto 2 do mas[j+1]:=mas[j];
    mas[2]:=0;
    inc(n);
   end;
   if mas[3]<>0 then begin
     for j:=n downto 3 do mas[j+1]:=mas[j];
    mas[3]:=0;
    inc(n);
   end;
   if mas[4]<>0 then begin
     for j:=n downto 4 do mas[j+1]:=mas[j];
    mas[4]:=0;
    inc(n);
   end;
   if mas[5]<>0 then begin
     for j:=n downto 5 do mas[j+1]:=mas[j];
    mas[5]:=0;
    inc(n);
   end;
   if mas[6]<>0 then begin
     for j:=n downto 6 do mas[j+1]:=mas[j];
    mas[6]:=0;
    inc(n);
   end;
   if mas[7]<>0 then begin
     for j:=n downto 7 do mas[j+1]:=mas[j];
    mas[7]:=0;
    inc(n);
   end;
   if mas[8]<>0 then begin
     for j:=n downto 8 do mas[j+1]:=mas[j];
    mas[8]:=0;
    inc(n);
   end;
   if mas[9]<>0 then begin
     for j:=n downto 9 do mas[j+1]:=mas[j];
    mas[9]:=0;
    inc(n);
   end;
   if mas[10]<>0 then begin
     for j:=n downto 10 do mas[j+1]:=mas[j];
    mas[10]:=0;
    inc(n);
   end;
  end;

 function kol ( a : longint ) : longint;
  var st : string[11];
  begin
   str(a,st);
   kol:=length(st);
  end;

 procedure timer;
  begin
   if hh<h then hh:=24-(h-hh) else hh:=hh-h;
   if mm<m then begin mm:=60+mm-m; dec(hh); end
           else mm:=mm-m;
   if ss<s then begin ss:=60+ss-s; dec(mm); end
           else ss:=ss-s;
   if mls<ml then begin mls:=100+mls-ml; dec(ss); end
             else mls:=mls-ml;
   if (hh=0)and(mm=0)and(ss=0)and(mls=0) then mls:=1;
  end;

 begin

   h:=0;  hh:=0;
   s:=0;  ss:=0;
   m:=0;  mm:=0;
   ml:=0; mls:=0;
   p:=0;  pp:=0;  b:=0;

   clrscr;
   write('rekomenduetc9 ne bolwe 16992  :-)');
   write(#10,#13,'vvedite 4islo: ');
   read(i);

   str(i,st);

   n:=kol(i);

   p:=round(i/100);

   mas[1]:=1;

   nol;

   getTime(h,m,s,ml);

   textColor(10);

   for k:=2 to i do
                    begin                   {
                    gotoXY(15,7);write('n=',n);
                    gotoXY(15,6);write('k=',k);}
                     if k>pp then begin
                                   gotoXY(10,4);write('vupolneno: ',b,'%');
                                   pp:=pp+p;
                                   b:=b+1;
                                  end;
                     mx(k);
                     nol;
                    end;

   gotoXY(1,4);
   delLine;
   delLine;
   delline;
   delline;

   getTime(hh,mm,ss,mls);

   timer;

   if i>=10 then n:=n-1;

   textColor(14);writeln('koli4estvo cifr:',n-10);readkey;
   textColor(white);write(st,'!=');

   for k:=11 to n do {begin} write(mas[k]); {readkey; end; }

   textColor(4);writeln(#10,#13,'Sohranit rezultat v fail???');
                writeln;
                writeln('     [y - YES, n - NO]:');
                REPEAT
                 ch:=readkey;
                UNTIL (ch='y')or(ch='n')or(ch=#13)or(ch=#27);

   if (ch='y')or(ch=#13) then begin
                               assign(T,st+'!.txt');
                               reWrite(T);
                               for k:=11 to n do write(T,mas[k]);
                               write(T,#13,#10);
                               write(T,#10,#13,'koli4estvo cifr:',n-10);
                               write(T,#10,#13,'vrem9 vu4isleni9  ',hh,':',mm,':',ss,':',mls);
                               close(T);
                              end;

   textColor(6);writeln(#10,#13,'vrem9 vu4isleni9  ',hh,':',mm,':',ss,':',mls);
   readkey;

  end.
Скомпилированый файл так же прилогается:
Вложения
Тип файла: zip Факториал.zip (6.2 Кб, 13 просмотров)

Последний раз редактировалось |{ot; 05.07.2008 в 19:11.
|{ot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Директивы компиляции joker Общие вопросы Delphi 3 10.06.2008 09:41
Warning при компиляции... nighthack Общие вопросы C/C++ 3 06.06.2008 00:46
Ошибка при компиляции [QY]'~''LeK1[ee] Помощь студентам 2 28.05.2008 20:46
Автоинкремент при компиляции _SERGEYX_ Общие вопросы Delphi 4 11.07.2007 01:24
Ошибки компиляции. У кого есть =*=|/|MM0PT@/\=*= Паскаль, Turbo Pascal, PascalABC.NET 4 02.04.2007 06:10