|
2 вопроса по паскалю, всего 2... |
|
|
|
Nov 17 2008, 06:20
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(777777 @ Nov 17 2008, 11:31)  Я, конечно, понимаю, что Паскакаль дебильнй язык, но про эти "функции" всегда думал, что это не функции и не процедуры, а лишь указание компилятору считать аргументы другим типом. То есть, оператор преобразования типа. Во, чувствуется знаток паскаля  Цитата Если же это действительно реальные функции, которым что-то передается и они генерируют вызов - то какие еще могут быть разговоры о паскале? Нахрена он это все делает? Чтобы преобразовать численное значение в строку и обратно. Как atoi/itoa в Си.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Nov 18 2008, 09:31
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(_Pasha @ Nov 17 2008, 14:47)  Так, что ли ? Код 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;
|
|
|
|
|
Nov 21 2008, 07:18
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(_Ivan_33 @ Nov 21 2008, 10:53)  а еще вопрос - может ли функция возвращать массив Можно только два варианта: Код 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; Зачем городить кучу данных, если надо что-то одно ? После вызова функции ее результат доступен ведь только один раз.
|
|
|
|
|
Dec 11 2008, 12:32
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(_Ivan_33 @ Dec 9 2008, 23:48)  у меня блокнот видит иероглифы если я записал прогой файл... Каким паскалем пользуетесь? Старым 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"
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|