Перейти к содержанию
    

2 вопроса по паскалю

Я, конечно, понимаю, что Паскакаль дебильнй язык, но про эти "функции" всегда думал, что это не функции и не процедуры, а лишь указание компилятору считать аргументы другим типом. То есть, оператор преобразования типа.

 

Во, чувствуется знаток паскаля:)

 

Если же это действительно реальные функции, которым что-то передается и они генерируют вызов - то какие еще могут быть разговоры о паскале? Нахрена он это все делает?

 

Чтобы преобразовать численное значение в строку и обратно. Как atoi/itoa в Си.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Во, чувствуется знаток паскаля:)

Я отюдь не знаток паскаля и, к счастью, никогда на нем не писал.

Чтобы преобразовать численное значение в строку и обратно. Как atoi/itoa в Си.

Значит я спутал с другими "функциями" одна из них называлась кажется ord() а обратная не помню. Ну хоть они-то не функции, а операторы языка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я отюдь не знаток паскаля и, к счастью, никогда на нем не писал.

 

Почему же тогда вы считаете, что можете судить о нём?

 

понимаю, что Паскакаль дебильнй язык

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот у меня есть функция tip в нее экспортируется 1 параметр и 1 массив... выходное значение функции - integer....

как мне в главное программе какой то переменной присвоить значение этой функции?!?!? все время в этой строке пишет ошибку напишите пример плс...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот у меня есть функция tip в нее экспортируется 1 параметр и 1 массив... выходное значение функции - integer....

как мне в главное программе какой то переменной присвоить значение этой функции?!?!? все время в этой строке пишет ошибку напишите пример плс...

Так, что ли ?

type
Tbuffer= array[1..100] of integer;
var 
work,index:integer;
buffer: Tbuffer;

function tip(param1: integer; var param2: Tbuffer)
begin
tip := param2[lo(param1)] mod param1; (* хз чего сделали *)
end;

(* THE MAIN PROGRAM *)
BEGIN
(*Заполнили случайными числами буфер сюда можно не смотреть*)
randomize;
for index := 1 to 100 do buffer[index]:=random(65535);

(* а сюда уже смотреть надо*)
for index := 1 to 60000 do
  begin
   work := tip(index,buffer)
   writeln ('сделали еще ХЗ чего с индексом ',index, ' и оно равно ', work );
  end;
END.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так, что ли ?

type
Tbuffer= array[1..100] of integer;
var 
work,index:integer;
buffer: Tbuffer;

function tip(param1: integer; var param2: Tbuffer)
begin
tip := param2[lo(param1)] mod param1; (* хз чего сделали *)
end;

(* THE MAIN PROGRAM *)
BEGIN
(*Заполнили случайными числами буфер сюда можно не смотреть*)
randomize;
for index := 1 to 100 do buffer[index]:=random(65535);

(* а сюда уже смотреть надо*)
for index := 1 to 60000 do
  begin
   work := tip(index,buffer)
   writeln ('сделали еще ХЗ чего с индексом ',index, ' и оно равно ', work );
  end;
END.

В последний раз на Pascal писал лет 20 назад, но все равно до сих пор помню, что тип значения, возвращаемого функцией, надо указывать:

 

  function tip(param1: integer; var param2: Tbuffer) : integer;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

до сих пор помню, что тип значения, возвращаемого функцией, надо указывать:

Эт точно. :) Очепядко.

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо все работает

а еще вопрос - может ли функция возвращать массив

ну типа в главное программе написать tip...???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а еще вопрос - может ли функция возвращать массив

 

Можно только два варианта:

 

function tip(param1: integer; var param2: Tbuffer):integer;
                                                     ^
                                                      через параметр по ссылке

 

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

function tip2(param1: integer): Tbuffer;
(**********************************)

(*основная программа *)
var 
mass1: Tbuffer;
param:integer;

begin
mass1:=tip2(param);
end.

 

А это - бессмыслица.

var param1,param2 :integer;
begin
param1 := tip2(param2)[1];
end;

Зачем городить кучу данных, если надо что-то одно ?

После вызова функции ее результат доступен ведь только один раз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

гы, дошел до файлов...

у меня блокнот видит иероглифы если я записал прогой файл...

команда записывает русскую строку в файл - такое можно?

и как чтоб не было иероглифов?

кодировку менял

файл текстовый...

и еще как записать в типизированный файл кучу чисел(массив) а потом этот же массив прочитать(конечно с виду это извращения - но препод говорит что это его правила игры... и я с ним согласен)

заранее благодарен за ответы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня блокнот видит иероглифы если я записал прогой файл...

Каким паскалем пользуетесь? Старым BP7 ? Если да - то ничем не могу помочь, пользуюсь FPC. Подробностей с кракозябрами не помню.

 

и еще как записать в типизированный файл кучу чисел(массив)

const
MaxElement = 9000;
var
f: file of integer;
map: array[1..MaxElement] of integer;
i: integer;
begin
assign(f,'temp.bin');(*назначили имя файла - он будет там же, где и файл программы, т.е. ЕХЕ-шник *)
rewrite(f); (* открыли файл на вывод*)
for i:= 1 to MaxElement do  write(f,map[i]); (*записали все,что надо из массива*)
close(f);(*закрыли файл, но в данном случае это необязательно*)
reset(f);(*открыли файл для чтения, но можно и по-другому, через процедуру seek();*)

(*прочитать можно таким же образом, как и записали но можно и так, если вспомнить
    о том, что в реальном мире размер файла может содержать другое число элементов, 
    поэтому проверим условия конца файла и выхода за пределы массива.
*)
i:=1;
repeat
read(f,map[i]);
i := i+1;
until eof(f) or (i > MaxElement);
close(f);
end.

 

Надеюсь, кто-нить поправит, если допустил ошибку.

:) вместо того чтоб флудить в ветке "Pascal для AVR"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

СПАСИБО ВАМ ОГРОМНОЕ!!!! СДЕЛАЛ С ВАШЕЙ ПОМОЩЬЮ ВСЕ РАБОТАЕТ!!! ЗАВТРА ПОЙДУ ПОЛУЧАТЬ ЗАЧЕТ!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...