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

Вниз

Почему не работает программа?   Найти похожие ветки 

 
Учащийся   (2010-04-21 14:01) [0]

Здравствуйте при компиляции довольно простой программы у меня вылазит ошибка, что отсутствует ";". В чём проблема, понять не могу...Несколько раз код на ошибку проверял, вот:

program Project2;

{$APPTYPE CONSOLE}

uses
 SysUtils;

var Ar:array[1..2048] of byte;//массив с элементами
   Ea:array[1..512] of integer;//массив с указателями
   ArLen:integer;// эффективная длина массива

procedure ChangeString(i:integer;NewString:string);
procedure PutString(n:integer;s:string);
function CountDifferent(i:integer;l:integer):integer;
procedure OutElements(n:integer;_N:integer);
procedure InElements(n:integer;_N:integer);

procedure ChangeString(i:integer;NewString:string);
var cd:integer;
begin
  cd:=CountDifferent(i, length(NewString));
  if cd<0 then
  begin
    OutElements(ea[i],length(NewString))
  end
  else
  begin
    InElements(ea[i],length(NewString));
  end;
  Ar[ea[i]]:=length(NewString);
  PutString(ea[i]+1,Newstring);
end;

procedure PutSring(n:integer;s:string);
var i:integer;
begin
  for i:=1 to length(s) do
  begin
    Ar[ea[n]+i-1]:=byte(s[i]);
  end;
end;

function CountDifferent(i:integer;l:integer):integer;
begin
  Result:=l-Ea[i];
end;

procedure OutElements(n:integer;_N:integer);
var i:integer;
begin
  ArLen:=ArLen-_N;
  for i:=(n+1) to ArLen do
  begin
    Ar[i]:=Ar[i+_N];
  end;
end;

procedure InElements(n:integer;_N:integer);
var i1:integer;
begin
  ArLen:=ArLen+_N;
  for i1:=ArLen downto n+1 do
  begin
     Ar[i1]:=Ar[i1-n];
  end;
end;

begin
 { TODO -oUser -cConsole Main : Insert code here }
end.


 
Учащийся   (2010-04-21 14:03) [1]

или я заголовки функций неправильно оформляю?


 
DVM ©   (2010-04-21 14:06) [2]

procedure ChangeString(i:integer;NewString:string);
procedure PutString(n:integer;s:string);
function CountDifferent(i:integer;l:integer):integer;
procedure OutElements(n:integer;_N:integer);
procedure InElements(n:integer;_N:integer);

убери


 
Плохиш ©   (2010-04-21 14:13) [3]

Читать про директиву forward.


 
Учащийся   (2010-04-21 14:30) [4]


> procedure ChangeString(i:integer;NewString:string);
> procedure PutString(n:integer;s:string);
> function CountDifferent(i:integer;l:integer):integer;
> procedure OutElements(n:integer;_N:integer);
> procedure InElements(n:integer;_N:integer);
>
> убери
>

убрал!

> Плохиш ©   (21.04.10 14:13) [3]
>
> Читать про директиву forward.
>

Слушаюсь!


 
Ega23 ©   (2010-04-21 14:41) [5]


> Читать про директиву forward.


А также что такое interface и implementation


 
Ins ©   (2010-04-21 15:31) [6]


> А также что такое interface и implementation


Это не unit, а program ;-)


 
Ega23 ©   (2010-04-21 15:37) [7]


> Это не unit, а program ;-)


опс... Не обратил внимания...


 
12 ©   (2010-04-21 15:56) [8]

//procedure ChangeString(i:integer;NewString:string);

function CountDifferent(i:integer;l:integer):integer; forward;
procedure OutElements(n:integer;_N:integer); forward;
procedure InElements(n:integer;_N:integer); forward;
procedure PutString(n:integer;s:string); forward;

procedure ChangeString(i:integer;NewString:string);
var cd:integer;
begin
 cd:=CountDifferent(i, length(NewString));
 if cd<0 then
 begin
   OutElements(ea[i],length(NewString))
 end
 else
 begin
   InElements(ea[i],length(NewString));
 end;
 Ar[ea[i]]:=length(NewString);
 PutString(ea[i]+1,Newstring);
end;

procedure PutS_t_ring(n:integer;s:string);


 
oldman ©   (2010-04-21 16:57) [9]


> Здравствуйте при компиляции довольно простой программы у
> меня вылазит ошибка, что отсутствует ";". В чём проблема, понять не могу...
> begin
>   cd:=CountDifferent(i, length(NewString));
>   if cd<0 then
>   begin
>     OutElements(ea[i],length(NewString))
>   end
>   else


Мдя...


 
turbouser ©   (2010-04-21 17:39) [10]


> oldman ©   (21.04.10 16:57) [9]


> Мдя...

Здесь нет ошибки. Перед end-ом допустимо опускать ;


 
oldman ©   (2010-04-21 17:43) [11]


> turbouser ©   (21.04.10 17:39) [10]
> Здесь нет ошибки. Перед end-ом допустимо опускать ;


А после?


 
oldman ©   (2010-04-21 17:45) [12]

Здравствуйте при компиляции довольно простой программы у меня вылазит ошибка, что отсутствует ";".

И не пишет где??????????????


 
Ins ©   (2010-04-21 17:51) [13]


> А после?


И после, если там else


 
oldman ©   (2010-04-21 17:55) [14]


> Ins ©   (21.04.10 17:51) [13]


пусть автор ответит на [12]
компилятор не идиот


 
Юрий Зотов ©   (2010-04-21 17:59) [15]


> oldman ©   (21.04.10 17:45) [12]

При этой ошибке компилятор запросто может очень сильно соврать.


 
12 ©   (2010-04-21 18:05) [16]


> пусть автор ответит на [12]

не компилятор, но ругается на то место, где end.
видимо считает что функция сверху еще не кончена


 
PZ   (2010-04-21 19:18) [17]

Вот в таком виде ошибки нет:

program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

var Ar:array[1..2048] of byte;//iannea n yeaiaioaie
  Ea:array[1..512] of integer;//iannea n oeacaoaeyie
  ArLen:integer;// yooaeoeaiay aeeia ianneaa

//procedure ChangeString(i:integer;NewString:string); Forward;
//procedure PutString(n:integer;s:string);   // Forward;
function CountDifferent(i:integer;l:integer):integer; Forward;
procedure OutElements(n:integer;_N:integer); Forward;
procedure InElements(n:integer;_N:integer); Forward;

//procedure PutSring(n:integer;s:string);
procedure PutString(n:integer;s:string);
var i:integer;
begin
 for i:=1 to length(s) do
 begin
   Ar[ea[n]+i-1]:=byte(s[i]);
 end;
end;

procedure ChangeString(i:integer;NewString:string);
var cd:integer;
begin
 cd:=CountDifferent(i, length(NewString));
 if cd<0 then
 begin
   OutElements(ea[i],length(NewString))
 end
 else
 begin
   InElements(ea[i],length(NewString));
 end;
 Ar[ea[i]]:=length(NewString);
 PutString(ea[i]+1,Newstring);
end;

{
//procedure PutSring(n:integer;s:string);
procedure PutString(n:integer;s:string);
var i:integer;
begin
 for i:=1 to length(s) do
 begin
   Ar[ea[n]+i-1]:=byte(s[i]);
 end;
end;
}

function CountDifferent(i:integer;l:integer):integer;
begin
 Result:=l-Ea[i];
end;

procedure OutElements(n:integer;_N:integer);
var i:integer;
begin
 ArLen:=ArLen-_N;
 for i:=(n+1) to ArLen do
 begin
   Ar[i]:=Ar[i+_N];
 end;
end;

procedure InElements(n:integer;_N:integer);
var i1:integer;
begin
 ArLen:=ArLen+_N;
 for i1:=ArLen downto n+1 do
 begin
    Ar[i1]:=Ar[i1-n];
 end;
end;

begin
{ TODO -oUser -cConsole Main : Insert code here }
end.


 
Ins ©   (2010-04-21 20:20) [18]


> oldman ©   (21.04.10 17:55) [14]


> компилятор не идиот


Конечно не идиот. Компьютер вообще никогда не ошибается


 
Демо ©   (2010-04-21 20:22) [19]


> Ins ©   (21.04.10 20:20) [18]
> > oldman ©   (21.04.10 17:55) [14]> компилятор не идиотКонечно
> не идиот. Компьютер вообще никогда не ошибается


Думаешь?-)))
Бывает и ошибается;)


 
Leonid Troyanovsky ©   (2010-04-21 21:39) [20]


> Демо ©   (21.04.10 20:22) [19]

> Бывает и ошибается;)

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

Короче: машина - она железная, а бумага из дерева.

--
Regards, LVT.


 
Демо ©   (2010-04-21 22:56) [21]


> Leonid Troyanovsky ©   (21.04.10 21:39) [20]
> > Демо ©   (21.04.10 20:22) [19] > Бывает и ошибается;)Ну,
>  допустим, ошибся. Но, нет у него осознания оного.


А ещё есть интеллектуалы, эрудиты, и идиоты-)

Статейка тут попалась забавная:
Шапиро Максим. "Как распознать идиота во время дискуссии"
http://flibusta.net/b/187190/read

PS.
Только ради бога не надо не надо воспринимать как намёки на что-то. Просто поделиться захотелось.


 
Германн ©   (2010-04-22 00:32) [22]


> Просто поделиться захотелось.

Спасибо.


 
Ins ©   (2010-04-22 11:27) [23]


> Шапиро Максим. "Как распознать идиота во время дискуссии"


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


 
Плохиш ©   (2010-04-22 12:40) [24]


> oldman ©   (21.04.10 17:43) [11]
>
>
> > turbouser ©   (21.04.10 17:39) [10]
> > Здесь нет ошибки. Перед end-ом допустимо опускать ;
>
>
> А после?

А после, в данном случае, вообще её ставить недопускает стандарт языка.


 
Anatoly Podgoretsky ©   (2010-04-23 07:44) [25]

> Плохиш  (22.04.2010 12:40:24)  [24]

После тоже можно, а иногда и нужно, смотрим случай с else


 
Плохиш ©   (2010-04-23 10:30) [26]


> Anatoly Podgoretsky ©   (23.04.10 07:44) [25]
>
> > Плохиш  (22.04.2010 12:40:24)  [24]
>
> После тоже можно, а иногда и нужно, смотрим случай с else
>

твоё моя не понимайт...


 
Anatoly Podgoretsky ©   (2010-04-23 12:26) [27]

> Плохиш  (23.04.2010 10:30:26)  [26]

end end
end; end

а вот

end; else

нельзя.


 
Дмитрий Белькевич   (2010-04-23 12:34) [28]


> Бывает и ошибается;)


Пока что не видел... Если железо исправное.


> Шапиро Максим. "Как распознать идиота во время дискуссии"


Интересно. Правда, большинство сказанного можно отнести не к идиотизму собеседника, но к известным приёмам демагогии.


 
oldman ©   (2010-04-23 12:57) [29]


> Anatoly Podgoretsky ©   (23.04.10 12:26) [27]


А
if условие then
begin
 оператор(причем только один);
end;

нормально? :)


 
turbouser ©   (2010-04-23 13:02) [30]


> oldman ©   (23.04.10 12:57) [29]

Только если

var a:TProcedure;

begin
 a
end;


 
Плохиш ©   (2010-04-23 14:09) [31]


> Anatoly Podgoretsky ©   (23.04.10 12:26) [27]

А в [24] о чём речь?


 
Anatoly Podgoretsky ©   (2010-04-23 19:06) [32]

> oldman  (23.04.2010 12:57:29)  [29]

Нормально, при этом точка с запятой не обязательно.
Лично я не стесняюсь использовать begin end для одиночного оператора, мне так легче читать код.


 
Anatoly Podgoretsky ©   (2010-04-23 19:06) [33]

> Плохиш  (23.04.2010 14:09:31)  [31]

Про точку с запятой там.


 
Плохиш ©   (2010-04-23 19:26) [34]


> Anatoly Podgoretsky ©   (23.04.10 19:06) [33]
>
> > Плохиш  (23.04.2010 14:09:31)  [31]
>
> Про точку с запятой там.
>

А ещё про то, что после end перед else её ставить нельзя.


 
Anatoly Podgoretsky ©   (2010-04-23 19:28) [35]

> Плохиш  (23.04.2010 19:26:34)  [34]

Мне казалось, что ты знаешь где можно, а где нельзя. А не объяснение почему нельзя где не можно.


 
Плохиш ©   (2010-04-24 01:06) [36]


> Anatoly Podgoretsky ©   (23.04.10 19:28) [35]

Вообще-то я там отвечал на типо-выпендривание [11]


 
мимопроходил   (2010-04-26 10:01) [37]

> if условие then
> begin   
>    оператор(причем только один);
> end;

Всегда обозначаю одиночные операторы begin-end или парой {}, только begin/{ ставлю на той же строке, что и условие, чтобы не путаться и по отступам было видно, что закрывается тем или иным end/}


 
timekiller ©   (2010-04-26 17:54) [38]

Сорри за оффтоп...

> Статейка тут попалась забавная:
> Шапиро Максим. "Как распознать идиота во время дискуссии"
> http://flibusta.net/b/187190/read


ААаафигенная статья! Спасибо!!! :)))



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

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

Наверх




Память: 0.54 MB
Время: 0.063 c
2-1267971766
pavel_guzhanov
2010-03-07 17:22
2010.08.27
как сравнить содержимое двух TImage?


15-1270110574
12
2010-04-01 12:29
2010.08.27
Загадка. Что в имени тебе моем?


2-1266564186
oleg1963lora
2010-02-19 10:23
2010.08.27
Как маскировать исключение EDatabaseError?


2-1274643123
RWolf
2010-05-23 23:32
2010.08.27
Выполнить код при завершении программы


15-1265559467
Riply
2010-02-07 19:17
2010.08.27
Как расщепляют мгновение





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский