Ошибка в паскале неверное количество параметров процедуры

Muffle

0 / 0 / 0

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

Сообщений: 18

1

Неверное количество параметров процедуры

07.04.2019, 20:39. Показов 8249. Ответов 30

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


Студворк — интернет-сервис помощи студентам

Pascal
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
program Dashs;
uses 
  GraphABC, ABCObjects;
  const WidthMap=30;
  const HeightMap=20;
var
  x,y, Dashx, Dashy, key: integer;
  Dash: SquareABC;
  C: Color;
  f: text;
  map: array [1..WidthMap, 1..HeightMap] of integer;
  sizeBlock:=20;
  
procedure files(i,j: integer);  
begin
  Assign(f, 'C:UsersUserUjdyj');
  Reset(f);
  i := 0;
  while not Eof(f) do 
  begin
    j := 0;
    while not Eoln(f) do 
    begin
      Read(f, map[i, j]);
      Inc(j);
    end;
    ReadLn(f);
    Inc(i);
  end;
  Close(f);
end;
 
begin
  begin
    if key = VK_a then x := x - 10;
    if key = VK_d then x := x + 10;
    if key = VK_w then y := y - 50;
    if key = VK_s then y := y + 50;
    Dash.MoveTo(x,y);
  end;
  files;
end.

В строке files пишет «неверное количество параметров процедуры». Что делать? Заранее спасибо.



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

07.04.2019, 20:39

30

Sun Serega

2178 / 1307 / 497

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

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

07.04.2019, 20:43

2

Ну а чему вы удивляетесь? Посмотрите на объявление этой процедуры и ещё раз на текст ошибки. Параметров в объявлении 2, а в вызове 0, то есть неправильное кол-во.

Добавлено через 1 минуту
Я так понимаю, вам надо было чтоб у процедуры внутри были свои локальные переменные. Тогда сделайте так:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure files;
begin
  Assign(f, 'C:UsersUserUjdyj');
  Reset(f);
  var i := 0;
  while not Eof(f) do 
  begin
    var j := 0;
    while not Eoln(f) do 
    begin
      Read(f, map[i, j]);
      Inc(j);
    end;
    ReadLn(f);
    Inc(i);
  end;
  Close(f);
end;



0



0 / 0 / 0

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

Сообщений: 18

07.04.2019, 21:00

 [ТС]

3

Sun Serega, Спасибо, работает

Добавлено через 15 минут
Sun Serega, Теперь он не может файл найти, хотя весь путь описан правильно



0



2178 / 1307 / 497

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

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

08.04.2019, 01:00

4

Дайте текст ошибки.



0



Muffle

0 / 0 / 0

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

Сообщений: 18

08.04.2019, 11:22

 [ТС]

5

Ошибка времени выполнения. Файл ‘C:UsersUserDesktopDashsUjdyj’ не найден

);

Pascal
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
  Reset(f);
  var i := 0;
  while not Eof(f) do 
  begin
    var j := 0;
    while not Eoln(f) do 
    begin
      Read(f, map[i, j]);
      Inc(j);
    end;
    ReadLn(f);
    Inc(i);
  end;
  Close(f);
end;
 
procedure dashmove;
begin
Dashx := 50;
Dashy := 452;
Dash := SquareABC.Create(Dashx,Dashy,48,clred);
end;
 
begin
files;
dashmove;
  begin
    if key = VK_a then x := x - 10;
    if key = VK_d then x := x + 10;
    if key = VK_w then y := y - 50;
    if key = VK_s then y := y + 50;
    Dash.MoveTo(x,y);
  end;
end.

Миниатюры

Неверное количество параметров процедуры
 



0



2178 / 1307 / 497

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

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

08.04.2019, 12:31

6

Зайдите в:
Панель управления>>(мелкие значки) Параметры проводника>>Вид

Прокрутите вниз, там увидите настройку:
Скрывать расширения для зарегестрированных типов файлов
Вот отрубите её нафиг.

Это защита от юзверов, программисту это только мешать может.
Как отключите — посмотрите ещё раз на файл который вы пытались открыть, сразу увидите что не так.



0



0 / 0 / 0

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

Сообщений: 18

08.04.2019, 13:32

 [ТС]

7

Sun Serega, Ну вроде вот, но он все равно не работает

Миниатюры

Неверное количество параметров процедуры
 



0



Почетный модератор

64288 / 47587 / 32739

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

Сообщений: 115,182

08.04.2019, 13:45

8

Assign(f, ‘C:UsersUserUjdyj.txt’);



0



0 / 0 / 0

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

Сообщений: 18

08.04.2019, 13:52

 [ТС]

9

Я посчитал, размер массива в файле правильный. Мдэ, программист из меня хороший

Миниатюры

Неверное количество параметров процедуры
 



0



Puporev

Почетный модератор

64288 / 47587 / 32739

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

Сообщений: 115,182

08.04.2019, 14:06

10

Pascal
1
map: array [1..HeightMap, 1..WidthMap] of integer;//heigt счетчик строк матрицы, width-столбцов
Pascal
1
2
3
4
5
6
7
8
9
procedure files();
begin
  Assign(f, 'C:UsersUserUjdyj.txt');
  Reset(f);
  for var i:=1 to HeightMap do
  for var j:=1 to WidthMap do
  Read(f, map[i, j]);
  Close(f);
end;



0



2178 / 1307 / 497

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

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

08.04.2019, 16:08

11

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

все равно не работает

Ну, Puporev, вам уже подсказал, но я вам сразу сказал — посмотрите на файл который вы пытались прочитай из программы, после того как выключите ту фигню. Теперь вам в папке показывает что он на самом деле называется Ujdyj.txt а не Ujdyj



0



Muffle

0 / 0 / 0

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

Сообщений: 18

13.04.2019, 13:44

 [ТС]

12

По моей идее он должен вместо 1 рисовать блок, а вместо 0 ничего не рисовать, ну либо синий блок. В итоге вместо 0 он рисует, а 1 он не видит. Что делать?

Pascal
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
program Dashs;
uses 
  GraphABC, ABCObjects;
  const WidthMap=30;
  const HeightMap=20;
var
  x,y, Dashx, Dashy, speed: integer;
  Dash: SquareABC;
  Block: SquareABC;
  f: text;
  map: array [0..WidthMap-1, 0..HeightMap-1] of integer;
  
procedure files;  
begin
  Assign(f, 'C:UsersUserDesktopDashsUjdyj.txt');
  Reset(f);
  var i, j:integer;
  repeat
    repeat
      Readln(f, map[i, j]);
      Inc(j);
    until not Eoln(f);
    //ReadLn(f);
    Inc(i);
    until not Eof(f);
  //end;
  Close(f); 
begin
  for i:=0 to WidthMap-1 do
  for  j:=0 to HeightMap-1 do
  begin
    if map[i, j] = 0 then
    Block:=SquareABC.Create(0+20*i, 0+20*j, 20, clBlue);
    if map[i, j] = 1 then
    Block:=SquareABC.Create(0+20*i, 0+20*j, 20, clBrown);
  end;
end;
end;
 
procedure dashpos;
begin
Dashx := 20;
Dashy := 360;
Dash := SquareABC.Create(Dashx,Dashy,20,clred);
end;
 
procedure moveto (key: integer);
begin
  if key = VK_a then Dashx := Dashx - 20;
  if key = VK_d then Dashx := Dashx + 20;
  if key = VK_w then Dashy := Dashy - 50;
  if key = VK_s then Dashy := Dashy + 50;
  Dash.MoveTo(Dashx,Dashy);
end;
 
procedure Gravity; 
begin 
  
end;
 
begin
files;
dashpos;
 
Gravity;
OnKeyDown:=moveto;
 
 
end.

Миниатюры

Неверное количество параметров процедуры
 



0



2178 / 1307 / 497

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

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

13.04.2019, 14:01

13

Приложите .txt файл



0



0 / 0 / 0

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

Сообщений: 18

13.04.2019, 14:08

 [ТС]

14

Sun Serega,



0



Sun Serega

2178 / 1307 / 497

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

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

13.04.2019, 14:19

15

Пздц конеш говнокод… Но вот так работает:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure files;
begin
  Assign(f, 'Ujdyj.txt');
  Reset(f);
  var i, j: integer;
  repeat
    repeat
      map[j, i] := ReadInteger(f);
      Inc(j);
    until Eoln(f);
    j := 0;
    Inc(i);
  until Eof(f);
  Close(f);
  
  for i := 0 to WidthMap - 1 do
    for  j := 0 to HeightMap - 1 do
    case map[i, j] of
      0: Block := SquareABC.Create(0 + 20 * i, 0 + 20 * j, 20, clBlue);
      1: Block := SquareABC.Create(0 + 20 * i, 0 + 20 * j, 20, clBrown);
    end;
end;



0



0 / 0 / 0

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

Сообщений: 18

13.04.2019, 14:47

 [ТС]

16

Sun Serega, Индекс находился вне границ массива



0



2178 / 1307 / 497

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

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

13.04.2019, 14:54

17

хз у меня норм. Не пашет — юзайте отладчик.



0



0 / 0 / 0

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

Сообщений: 18

15.04.2019, 10:22

 [ТС]

18

Sun Serega, А ты знаешь, как на windows forms платформер написать? А то в обычном сложно



0



2178 / 1307 / 497

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

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

15.04.2019, 10:43

19

WinForms может помочь избавится от некоторой кривоты (как то, что нельзя заранее заставить окно запустится в первоэкранном режиме, в GraphABC его можно менять только после запуска).

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

А так, чтоб было 60фпс — нельзя использовать стандартные модули. Они только для баловство и годятся. Хотя с небольшим кол-во объектов — GraphWPF мог бы дать 60фпс. Но опять же, без умения оптимизировать программу вы их не выжмите.
Из более продвинутых вариантов — есть OpenGL и DirectX, но там без понимания что делаете — можно словить что то хуже лагов. Как утечки памяти.



0



0 / 0 / 0

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

Сообщений: 18

15.04.2019, 10:52

 [ТС]

20

Sun Serega, То есть на паскале что-то адекватное нельзя написать?



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

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

15.04.2019, 10:52

20

zub писал(а):А почему в procedure x(a:integer;b:real); не обявить все параметры и неиспользовать их? если это не ваша процедура, запускать ее через прокладку с объявлеными всеми параметрами

Потому-что процедуру объявляет конечный пользователь моего проекта, а я ее только вызываю. Говорить юзеру «Объяви процедуру со 100500 параметрами, потомучто» — не есть правильно. И я не знаю, сколько конкретно параметров объявит юзер. Поэтому максимум что я фиксирую, это устанавливаю верхнюю границу кол-ва параметров и требую для них всех тип variant. Либо только один параметр в виде константного массива (с этим вопросов нет, все работает штатно). После чего юзер передет мне указатель на эту процедуру.

Когда приходит время вызывать юзеровскую процедуру, то вызываю ее с максимальным кол-м аргументов, вне зависимости, сколько аргументов в ней было заявлено. И, блин, это работает! Я не верил в это, когда проверял, ждал проблем со стеком, сегфолта или утечек памяти, но работает все без проблем, debian 8,9, altlinux 7,8, fpc 2.6.4. 3.0.0, 3.0.2.

Вопрос только в одном: не эксплуатирую-ли я некий редкий баг, который с успехом и фанфарами исправят в новой версии fpc, поломав мне весь код?

serbod писал(а):Подумайте получше, что важнее — удобно при разработке или надежно при эксплуатации. Потратить минуты при разработке сейчас или потратить часы при отладке потом. Не исключаю, что у вас сугубо одноразовый демонстрационный проект, вроде тестового задания, где важнее сделать быстро, чем качественно.

О надежности и думаю, поэтому и поднял тут тему. И в релиз проекта эту фичу не запущу, пока не найду подтверждения, что это безопасно. Либо не найду и тогда откачу до предыдущей, крайне многословной версии. Хоть и не хочется.

IPB

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется …
2. Все тексты программ должны помещаться в теги [code=pas][/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. «FAQ«, если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение — только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы — на PM!
6. Одна тема — один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Помогите новичку решить простенькую задачку)

сообщение 17.09.2011 13:07

Сообщение
#1


Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +



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

program okno;
uses Crt;
var
A, B, X, Y, K, L:integer;
begin
TextColor(A);
TextBackGround(B);
ClrScr;
Randomize;
A:=Random(16);
B:=Random(16);
writeln('Введите координаты окна');
readln(X, Y);
Window(X, Y);
writeln('Введите координаты сообщения');
GotoXY(K, L);
read(K, L);
writeln ('Задача решена');
end.

Пишу в программе Pascal ABC..В конце программы я уверен написано совсем не то,что нужно,там я совсем запутался…Подскажите пожалуйста!

Сообщение отредактировано: SpeedFire — 17.09.2011 13:22

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

IUnknown

сообщение 17.09.2011 13:31

Сообщение
#2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +



Цитата

Пишу в программе Pascal ABC.Она ругается на процедуру window.(Ошибка: неверное количество фактических параметров)

Какая разница где? Процедура Window всегда принимает 4 параметра, а не 2 (разница — только в смысле параметров, скажем, в Турбо Паскале подразумеваются координаты X и Y левого верхнего и правого нижнего окна, а в PascalABC — координаты (X, Y) верхнего левого угла и ширина/высота).

Ну, а вообще — не самая хорошая идея писать программы для PascalABC, использующие модуль CRT… Тот компилятор, который был написан не для .NET, уже давно не поддерживается, последние версии компилятора написаны именно под .NET, и программу, написанную с использованием CRT просто не удастся отладить, потому что запустить ее в режиме отладки PascalABC не даст. Так что тут надо подумать, продолжать пользоваться PABC и мучаться со старым модулем (даже если программа успешно откомпилируется — я совсем не уверен, что она будет адекватно себя вести), или брать какой-то другой компилятор.

P.S. Не надо в самом начале делать

TextColor(A);
TextBackGround(B);
ClrScr;

, это приведет к тому, что и цвет фона и цвет выводимых символов будут черными (и A и B автоматически инициализируются нулем, а это именно черный цвет), и ты элементарно ничего не увидишь. Либо установи какие-то конкретные цвета, либо не меняй ничего вообще.

Сообщение отредактировано: IUnknown — 17.09.2011 13:32

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

SpeedFire

сообщение 17.09.2011 13:57

Сообщение
#3


Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +



C window разобрался!Просто учебник отсканированый,я думал там точка,а там запятая!)Теперь понятно, спасибо
IUnknown,сейчас попробую дописать программу

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

SpeedFire

сообщение 17.09.2011 14:23

Сообщение
#4


Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +



program sdfl;
uses crt;
var
A, B, W, X, Y, Z, O, P : integer;
begin
Randomize;
A:=Random(16);
B:=Random(16);
write('Введите координаты окна:');
readln(W, X, Y, Z);
window(W, X, Y, Z);
write ('Введите координаты сообщения:');
readln(O,P);
GotoXY(O,P);
write('Задача решена!');
TextColor(A);
TextBackGround(B);
ClrScr;
end.

Вот написал все получилось, кроме конечного сообщения «задача решена!»,оно почему то не появляется.

Добавлено через 9 мин.
Получилось написать «задача решена»,поставил readln после строчки write(‘Задача решена’);
НО теперь цвета не работают :D

Сообщение отредактировано: SpeedFire — 17.09.2011 14:26

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

IUnknown

сообщение 17.09.2011 14:34

Сообщение
#5


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +



Делаешь так:

program sdfl;
uses crt;
var
A, B, W, X, Y, Z, O, P : integer;
begin
//Randomize;
//A:=Random(16);
//B:=Random(16);
write('Введите координаты окна:');
readln(W, X, Y, Z);
window(W, X, Y, Z);
write ('Введите координаты сообщения:');
readln(O,P);
GotoXY(O,P);
write('Задача решена!');
//TextColor(A);
//TextBackGround(B);
//ClrScr;
end.

, компилируешь, жмешь Shift+F9 (чтоб запустить), вводишь координаты, и внимательно читаешь ответ программы. А теперь еще раз прочитай, что я тебе написал выше, особенно во втором абзаце. smile.gif

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

SpeedFire

сообщение 17.09.2011 14:57

Сообщение
#6


Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +



Прикрепленное изображение

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

IUnknown

сообщение 17.09.2011 15:34

Сообщение
#7


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +



Так все-таки, PascalABC или FreePascal? С FPC проблем как раз нет, тут все будет работать как положено:

uses Crt;
var
X1, X2, Y1, Y2,
pX1, pY1 : Integer;
begin
ClrScr;
write ('Введите координаты окна:');
ReadLn (X1, Y1, X2, Y2);
write ('Введите координаты сообщения:');
ReadLn (PX1, PY1);

Window (X1, Y1, X2, Y2); // Создаем окно
Randomize;

TextColor (Random (15) + 1); // Не черный цвет текста
TextBackGround (Random (7) + 1); // Не черный цвет фона
ClrScr; // Очищаем ОКНО

GotoXY (X1, Y1); // и внутри окна выводим сообщение
write ('Задача решена!');
readln;
Window (1, 1, 80, 25); // Восстанавливаем нормальное окно
end.

P.S. Откуда у тебя там SVN взялся? Ты откуда FPC качал?

Сообщение отредактировано: IUnknown — 17.09.2011 15:34

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

SpeedFire

сообщение 17.09.2011 15:52

Сообщение
#8


Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +



После того как ты сказал что

Цитата

не самая хорошая идея писать программы для PascalABC, использующие модуль CRT…

скачал Free Pascal отсюда
что такое svn понятия не имею smile.gif
За программу спасибо,теперь все понятно)

 Оффлайн  Профиль  PM 

 К началу страницы 

+ Ответить 

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

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

500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают

Связь с администрацией: bu_gen в домене octagram.name

When creating a procedural data type, Free Pascal throws a strange error. But I’m passing one parameter, why is the number of parameters incorrect?

Type
    Func = Function (x:Real):Real;
    
Function middlfunc(a, b:Real; n:Integer; f:Func): Real;
Var
    x,s,d: Real; k:Integer;
Begin
    d:=(b-a)/n;
    s:=0;
    For k:=0 To n Do
    Begin
        x:=a+k*d;
        s:=s+f(x);
    End;
    middlfunc:=s/(n+1);
End;

Function f1(x:Real):Real; {There is the error}
Begin
    f1:=x*x;
End;

Var
    mf1:Real;
    a, b: real;
    n: integer;
    
Begin
    a := 0;
    b := 3.1415;
    n := 100;
    mf1 := middlfunc(a,b,n,f1); {ERROR :((((((((}
    WriteLn(mf1)
End.

desertnaut's user avatar

500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают

Связь с администрацией: bu_gen в домене octagram.name

When creating a procedural data type, Free Pascal throws a strange error. But I’m passing one parameter, why is the number of parameters incorrect?

Type
    Func = Function (x:Real):Real;
    
Function middlfunc(a, b:Real; n:Integer; f:Func): Real;
Var
    x,s,d: Real; k:Integer;
Begin
    d:=(b-a)/n;
    s:=0;
    For k:=0 To n Do
    Begin
        x:=a+k*d;
        s:=s+f(x);
    End;
    middlfunc:=s/(n+1);
End;

Function f1(x:Real):Real; {There is the error}
Begin
    f1:=x*x;
End;

Var
    mf1:Real;
    a, b: real;
    n: integer;
    
Begin
    a := 0;
    b := 3.1415;
    n := 100;
    mf1 := middlfunc(a,b,n,f1); {ERROR :((((((((}
    WriteLn(mf1)
End.

desertnaut's user avatar

desertnaut

57k23 gold badges137 silver badges165 bronze badges

asked May 14, 2021 at 19:39

GumBlor's user avatar

5

USE PASCAL PROCEDURE INSTEAD OF FUNCTION for suitability

answered Sep 9, 2022 at 11:00

Sri Tamal Chakraborty's user avatar

2

If you want to use a Function as a parameter to another function, then you have to do it like this:

Type
    TFunctionParameter = function(x: Real): Real;
    
Function middlfunc(a, b:Real; n:Integer; f:TFunctionParameter): Real;
Var
    x,s,d: Real; k:Integer;
Begin
    d:=(b-a)/n;
    s:=0;
    For k:=0 To n Do
    Begin
        x:=a+k*d;
        s:=s+f(x);
    End;
    middlfunc:=s/(n+1);
End;

function RaiseToSecondPower(x: Real): Real;
begin
  result := x*x;
end;

Var
    mf1:Real;
    a, b: real;
    n: integer;
Begin
    a := 0;
    b := 3.1415;
    n := 100;
    mf1 := middlfunc(a,b,n,RaiseToSecondPower);
    WriteLn(mf1)
End.

answered Sep 14, 2022 at 7:02

George Betsis's user avatar

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Closed

SunSerega opened this issue

Jan 12, 2020

· 6 comments

Comments

@SunSerega

type
  t1 = class end;
  
function f1(self: t1; x: integer): integer; extensionmethod;
begin
  Writeln(self);
  Result := x.Println;
end;

type
  t2 = class(t1)
    procedure test;
    begin
      writeln(f1(4));
      writeln(self.f1(4)); // так работает
    end;
  end;

begin
end.

@ibond84
ibond84

changed the title
extensionmethod криво работает в инициализаторе поля

Вызов метода расширения внутри наследника класса не работает, если вызывать не через self

Jan 12, 2020

@ibond84
ibond84

changed the title
Вызов метода расширения внутри наследника класса не работает, если вызывать не через self

Неверное количество параметров функции при вызове метода расширения внутри наследника класса не через self

Jan 12, 2020

@SunSerega



Copy link


Contributor


Author

@ibond84 а разве можно вызывать через self? self при инициализации полей вообще не видит.

@ibond84

Инициализаторы полей здесь непричем. Здесь не работает вызов метод расширения без self.

@miks1965

У нас методы расширения вызываются только через переменную. Считайте это особенностью языка.

@SunSerega



Copy link


Contributor


Author

Ну ошибка всё равно неправильная. Надо давать что то типа «неизвестное имя», раз f1 не должно быть видно.

@SunSerega



Copy link


Contributor


Author

И вообще, это @ibond84 так код изменил. Мой изначальный код не выглядит как будто это должно работать:

type
  t1 = class end;
  
function f1(self: t1; x: integer): integer; extensionmethod;
begin
  Writeln(self);
  Result := x.Println;
end;

type
  t2 = class(t1)
//    n1 := f1(5); //Ошибка: Неверное количество параметров функции
    n2 := f1(nil, 5); // работает, хотя не должно
  end;

begin
  new t2; // выводит nil и 5
end.

Он как раз показывает что неправильная ошибка при f1(5) + то что f1(nil, 5) не должно работать.

@miks1965

miks1965

added a commit
that referenced
this issue

Jun 26, 2020

@miks1965

Понравилась статья? Поделить с друзьями:
  • Ошибка в параметре ip адрес
  • Ошибка в папке local temp
  • Ошибка в панели управления nvidia доступ запрещен
  • Ошибка в пайтоне invalid syntax
  • Ошибка в падежной форме существительного с предлогом егэ