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

rudyD

0 / 0 / 0

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

Сообщений: 26

1

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

07.12.2016, 18:12. Показов 4822. Ответов 4

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


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

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

Pascal
1
2
3
4
5
6
7
8
9
10
11
uses crt;
var a,b:real;   
procedure prm(a,b:real;var p:real);
begin
p:=2*a+2*b;
writeln('Периметр=',p:0:2);
end;
begin 
Write('Введите длину прямоугольника а и ширину b : ');readln(a,b);
writeln(prm(a,b):0:2);
end.



0



Puporev

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

64286 / 47585 / 32739

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

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

07.12.2016, 18:18

2

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

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
uses crt;
procedure prm(a,b:real;var p:real);
begin
p:=2*a+2*b;
writeln('Периметр=',p:0:2);
end;
var a,b,p:real;
begin
Write('Введите длину прямоугольника а и ширину b : ');
readln(a,b);
prm(a,b,p); //это процедура, а не функция и у нее 3 параметра
end.



1



Cyborg Drone

Модератор

9583 / 4904 / 3243

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

Сообщений: 15,325

07.12.2016, 19:18

3

После 11 строки нужно, наверное

Pascal
1
2
write(p);
end.



0



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

64286 / 47585 / 32739

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

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

07.12.2016, 19:24

4

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

нужно, наверное

Не нужно, вывод есть в процедуре.



0



Модератор

9583 / 4904 / 3243

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

Сообщений: 15,325

07.12.2016, 19:31

5

Ох, да, что-то слона не заметил…



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

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

07.12.2016, 19:31

5

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(‘Задача решена’);
НО теперь цвета не работают 😀

Сообщение отредактировано: 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

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
program proga;
uses crt;
const m=8; n=10; f=15;
type raz=1..f;
     mas=array[raz] of real;
var x,y,z,w,x1,y1,z1,w1:mas;
    m1,n1,f1,i:integer;
procedure nmas(a:mas;n:integer;var y:mas; var j:integer);
var i:integer;
begin
j:=0;
for i:=1 to n do
if a[i]>0 then
  begin
   j:=j+1;
   y[j]:=a[i];
  end;
if j=0 then writeln('Положительных элементов нет')
else writeln('Массив положительных элементов');
for i:=1 to j do
write(y[i]:0:2,' ');
writeln;
end;
begin
writeln('Massiv X');
for i:=1 to m do
 begin
  x[i]:=4*sqr(i)-9*(5-i);
  write(x[i]:0:2,' ');
 end;
writeln;
nmas(x,m,x1,m1);
writeln('Massiv Y');
for i:=1 to m do
 begin
  y[i]:=6*sin(2*i)+5*exp(i-5);
  write(y[i]:0:2,' ');
 end;
writeln;
nmas(y,m,y1,m1);
writeln('Massiv Z');
for i:=1 to n do
 begin
  z[i]:=6*(i-4)+5*sqr(sin(1.5*i));
  write(z[i]:0:2,' ');
 end;
writeln;
nmas(z,n,z1,n1);
writeln('Massiv W');
for i:=1 to f do
 begin
  w[i]:=6*ln(0.1*i)+10*cos(i-2.5)*cos(i-2.5)*cos(i-2.5);
  write(w[i]:0:2,' ');
 end;
writeln;
nmas(w,f,w1,f1);
end.

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

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

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

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

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

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

Неверное количество параметров процедуры
Помогите! На строке с командой «close(f)» мне выдаёт ошибку: «Неверное количество параметров.

Неверное число параметров процедуры
uses graphABC; var x0,y0,d,n,gd,gm,i,x,y:integer; begin d:=10; gd:=0; write(‘Kolichestvo.

Неверное число параметров процедуры
Проблема:program zavd_9_1; uses crt; const N=7; type TMatrix=array of integer; var.

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

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

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

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

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

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

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

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

Вложения

Неверное количество фактических параметров паскаль Ujdyj.txt (1.2 Кб, 4 просмотров)

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

Источник

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

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

Неверное количество параметров процедуры
Помогите! На строке с командой «close(f)» мне выдаёт ошибку: «Неверное количество параметров.

Неверное количество фактических параметров паскальОшибка. Неверное количество параметров функции
Вышла такая ошибка в строке 13 (Неверное кол-во параметров функции); Учусь работать с функциями.

Использовать устаревшие конструкции Паскалей вперемешку с PABC.Net выглядит так себе кстати.
а ещё свой код заключайте в теги конкретного языка, что бы было видно номера строк

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

Неверное количество фактических параметров
Program laba6; var tip:array of string; har:array of string; ind:array of string; dvi:array of.

Неверное количество фактических параметров
неверное количество фактических параметров pascal abc program p4; const n=5; type mas=array.

Ошибка: неверное количество фактических параметров
Помогите пожалуйста! Не получается. Я не понимаю ничего в паскаль а делать нужно. Дважды.

Неверное количество фактических параметров паскальОшибка: неверное количество фактических параметров
uses crt; var ch1,ch2: char; k: integer; const glasnye = ; begin clrscr;.

Ошибка: неверное количество фактических параметров
Я не пойму что здесь не так! в 42 строчке эта самая ошибка! program proga; const m=8; n=10;.

Источник

(179) : Неверное количество параметров функции

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

Неверное количество фактических параметров паскальДля различных значений n проверить справедливость формулы: 1³+3³+5³+. +(2n-1)³=n²(2n²-1)
для различных значений n проверить справедливость формулы: 13+33+53+. +(2n-1)3=n2(2n2-1)

Неверное количество фактических параметров
function dv(x:integer):string; var a,b:string; begin a:=’0′;b:=’1′; while x<>0 do.

Неверное количество фактических параметров
неверное количество фактических параметров pascal abc program p4; const n=5; type mas=array.

Решение

Приведите полный код программы. Если файл уже создан, то приложите его в тему.

почему мне не удается закрыть фаил? простите если надоел вам, но мне очень трудно дается программирование. Я смотрю статьи, а в них не написаны эти ошибки. И вы хорошо объясняете, спасибо

Добавлено через 7 минут
я исправил это передвинув close чуть выше одного end

Добавлено через 10 минут
Я все написал, но в конце у меня пишет ошибку Program2.pas(175) : Встречено ‘.’, а ожидалось ‘;’
Хотя я все закрыл. Из-за чего происходит эта ошибка и как ее исправть?

Добавлено через 7 минут
Я исправил ошибку выше и теперь у меня пишет ошибку Program2.pas(139) : Неверное количество параметров функции
Что написать в этой строчке?

Источник

Ошибка. Неверное количество параметров функции

Вышла такая ошибка в строке 13 (Неверное кол-во параметров функции); Учусь работать с функциями, сам пока не нашел ответа на интересующий вопрос.

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

График функции и ошибка «Неверное число параметров функции»
Program aaa; Uses GraphABC; Var x,y:integer; Begin For x:=0 to 360 do Begin Y:=Round(.

Неверное количество параметров процедуры
Помогите! На строке с командой «close(f)» мне выдаёт ошибку: «Неверное количество параметров.

Решение

Как видно, функция в данном случае улучшает чтение программы, а не усложняет его.

Более того, данную программу можно ещё упростить:

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

Неверное число параметров функции
В чем может быть дело? исправьте пожалуйста function z(x,a,b,x1,x2:real):real; var t,w:real;.

Ошибка в коде «неверное число параметров процедуры»
Выдает ошибку в 29 строке: «неверное число параметров процедуры». Помогите пожалуйста с этой.

Подсчитать количество элементов массива, больших 3 (ошибка: «Неверное число параметров функции»)
Написать программу, которая создает массив из N целых чисел и с помощью функции подсчитывает.

Неверное количество фактических параметров паскаль(179) : Неверное количество параметров функции
<-555555—-функция обработки файла по условию——>function.

Ошибка: неверное количество фактических параметров.
Очень прошу помочь исправить ошибку в моей программе. Program Hord; var xn,xk,eps:real;.

Источник

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

56.9k22 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

Добавить комментарий