Muffle 0 / 0 / 0 Регистрация: 06.04.2019 Сообщений: 18 |
||||
1 |
||||
Неверное количество параметров процедуры07.04.2019, 20:39. Показов 8249. Ответов 30 Метки нет (Все метки)
В строке 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 минуту
0 |
0 / 0 / 0 Регистрация: 06.04.2019 Сообщений: 18 |
|
07.04.2019, 21:00 [ТС] |
3 |
Sun Serega, Спасибо, работает Добавлено через 15 минут
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’ не найден );
Миниатюры
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 |
|||||||
0 |
2178 / 1307 / 497 Регистрация: 07.04.2017 Сообщений: 4,567 |
|
08.04.2019, 16:08 |
11 |
все равно не работает Ну, Puporev, вам уже подсказал, но я вам сразу сказал — посмотрите на файл который вы пытались прочитай из программы, после того как выключите ту фигню. Теперь вам в папке показывает что он на самом деле называется
0 |
Muffle 0 / 0 / 0 Регистрация: 06.04.2019 Сообщений: 18 |
||||
13.04.2019, 13:44 [ТС] |
12 |
|||
По моей идее он должен вместо 1 рисовать блок, а вместо 0 ничего не рисовать, ну либо синий блок. В итоге вместо 0 он рисует, а 1 он не видит. Что делать?
Миниатюры
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 |
|||
Пздц конеш говнокод… Но вот так работает:
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 его можно менять только после запуска). Но в том что вы выбрали А так, чтоб было 60фпс — нельзя использовать стандартные модули. Они только для баловство и годятся. Хотя с небольшим кол-во объектов — GraphWPF мог бы дать 60фпс. Но опять же, без умения оптимизировать программу вы их не выжмите.
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 писал(а):Подумайте получше, что важнее — удобно при разработке или надежно при эксплуатации. Потратить минуты при разработке сейчас или потратить часы при отладке потом. Не исключаю, что у вас сугубо одноразовый демонстрационный проект, вроде тестового задания, где важнее сделать быстро, чем качественно.
О надежности и думаю, поэтому и поднял тут тему. И в релиз проекта эту фичу не запущу, пока не найду подтверждения, что это безопасно. Либо не найду и тогда откачу до предыдущей, крайне многословной версии. Хоть и не хочется.
Прочтите прежде чем задавать вопрос!
1. Заголовок темы должен быть информативным. В противном случае тема удаляется …
2. Все тексты программ должны помещаться в теги [code=pas] … [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. «FAQ«, если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение — только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы — на PM!
6. Одна тема — один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Помогите новичку решить простенькую задачку) |
17.09.2011 13:07 Сообщение |
|
Группа: Пользователи Репутация: 0
|
Задача: Напишите программу, которая выдает сообщение в текстовое окно.Координаты окна и координаты для сообщения вводиться с клавиатуры.Цвет экрана и цвет символов задайте с помощью датчика случайных чисел. program okno; Пишу в программе Pascal ABC..В конце программы я уверен написано совсем не то,что нужно,там я совсем запутался…Подскажите пожалуйста! Сообщение отредактировано: SpeedFire — 17.09.2011 13:22 |
|
|
IUnknown |
17.09.2011 13:31 Сообщение |
Гуру
Группа: Пользователи Репутация: 627
|
Цитата Пишу в программе Pascal ABC.Она ругается на процедуру window.(Ошибка: неверное количество фактических параметров) Какая разница где? Процедура Window всегда принимает 4 параметра, а не 2 (разница — только в смысле параметров, скажем, в Турбо Паскале подразумеваются координаты X и Y левого верхнего и правого нижнего окна, а в PascalABC — координаты (X, Y) верхнего левого угла и ширина/высота). Ну, а вообще — не самая хорошая идея писать программы для PascalABC, использующие модуль CRT… Тот компилятор, который был написан не для .NET, уже давно не поддерживается, последние версии компилятора написаны именно под .NET, и программу, написанную с использованием CRT просто не удастся отладить, потому что запустить ее в режиме отладки PascalABC не даст. Так что тут надо подумать, продолжать пользоваться PABC и мучаться со старым модулем (даже если программа успешно откомпилируется — я совсем не уверен, что она будет адекватно себя вести), или брать какой-то другой компилятор. P.S. Не надо в самом начале делать TextColor(A); , это приведет к тому, что и цвет фона и цвет выводимых символов будут черными (и A и B автоматически инициализируются нулем, а это именно черный цвет), и ты элементарно ничего не увидишь. Либо установи какие-то конкретные цвета, либо не меняй ничего вообще. Сообщение отредактировано: IUnknown — 17.09.2011 13:32 |
|
|
SpeedFire |
17.09.2011 13:57 Сообщение |
Группа: Пользователи Репутация: 0
|
C window разобрался!Просто учебник отсканированый,я думал там точка,а там запятая!)Теперь понятно, спасибо |
|
|
SpeedFire |
17.09.2011 14:23 Сообщение |
Группа: Пользователи Репутация: 0
|
program sdfl; Вот написал все получилось, кроме конечного сообщения «задача решена!»,оно почему то не появляется. Добавлено через 9 мин. Сообщение отредактировано: SpeedFire — 17.09.2011 14:26 |
|
|
IUnknown |
17.09.2011 14:34 Сообщение |
Гуру
Группа: Пользователи Репутация: 627
|
Делаешь так: program sdfl; , компилируешь, жмешь Shift+F9 (чтоб запустить), вводишь координаты, и внимательно читаешь ответ программы. А теперь еще раз прочитай, что я тебе написал выше, особенно во втором абзаце. |
|
|
SpeedFire |
17.09.2011 14:57 Сообщение |
Группа: Пользователи Репутация: 0
|
|
|
|
IUnknown |
17.09.2011 15:34 Сообщение |
Гуру
Группа: Пользователи Репутация: 627
|
Так все-таки, PascalABC или FreePascal? С FPC проблем как раз нет, тут все будет работать как положено: uses Crt; P.S. Откуда у тебя там SVN взялся? Ты откуда FPC качал? Сообщение отредактировано: IUnknown — 17.09.2011 15:34 |
|
|
SpeedFire |
17.09.2011 15:52 Сообщение |
Группа: Пользователи Репутация: 0
|
После того как ты сказал что Цитата не самая хорошая идея писать программы для PascalABC, использующие модуль CRT… скачал Free Pascal отсюда |
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
Связь с администрацией: 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.
Связь с администрацией: 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
57k23 gold badges137 silver badges165 bronze badges
asked May 14, 2021 at 19:39
5
USE PASCAL PROCEDURE INSTEAD OF FUNCTION for suitability
answered Sep 9, 2022 at 11:00
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
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
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
changed the title
extensionmethod криво работает в инициализаторе поля
Вызов метода расширения внутри наследника класса не работает, если вызывать не через self
Jan 12, 2020
ibond84
changed the title
Вызов метода расширения внутри наследника класса не работает, если вызывать не через self
Неверное количество параметров функции при вызове метода расширения внутри наследника класса не через self
Jan 12, 2020
Copy link
Contributor
Author
@ibond84 а разве можно вызывать через self
? self
при инициализации полей вообще не видит.
Инициализаторы полей здесь непричем. Здесь не работает вызов метод расширения без self.
У нас методы расширения вызываются только через переменную. Считайте это особенностью языка.
Copy link
Contributor
Author
Ну ошибка всё равно неправильная. Надо давать что то типа «неизвестное имя», раз f1
не должно быть видно.
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
added a commit
that referenced
this issue
Jun 26, 2020