|
2 вопроса по паскалю, всего 2... |
|
|
|
Nov 14 2008, 14:00
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(_Ivan_33 @ Nov 14 2008, 17:35)  a:=b[i]1000 + b[i+x]; Смотря что у Вас стоИт между b[i] и 1000  Пропустили знак какой ? Цитата 2) препод говорил про функции приводящие символьную переменную в число и наоборот - подскажите что за ф-ции? Процедуры (не функции - это не Си) val() и str()
|
|
|
|
|
Nov 14 2008, 14:18
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(MrYuran @ Nov 14 2008, 18:09)  Как раз-таки функции, раз значение возвращают. Апядь холевара  Оне ж не так возвращают Код MyVar := val(...); а в параметрах по ссылке. Стало быть как функция они не возвращают ничего. Неча развращать студентов
|
|
|
|
|
Nov 15 2008, 16:39
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(_Ivan_33 @ Nov 15 2008, 19:55)  между 1000 и b[i] стоит умножение * тогда Код a:= b[i]*1000 + b[i+x]; не нуждается в "ручном" приведении типов, т.к. выражение справа тоже будет типа longint Компилер это видит благодаря тому, что в выражении присутствует константа. Раз так - сразу понятно, что в случае если b[i] будет равно максимально представимому целому (MAXINT), результат выражения никогда не станет больше максимально возможного longint Вот если бы Код var a:longint; b:megatype; i,x,m:integer;
begin m:= func; // здесь мы получили значение m хз откуда и хз какое a:= b[i]*m + b[i+x]; // то здесь нормальный компилер должен матюкнуццо "invalid type cast" end;
|
|
|
|
|
Nov 15 2008, 20:45
|

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

|
Цитата(_Pasha @ Nov 16 2008, 02:13)  Ниасилил. Кто куда должен писать ? Дык, компилятор, в сурец! :-) Видимо так: Код const MyName : string = '_Ivan_33'; (Не помню, поймёт bp7 такое, или надо var)
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Nov 15 2008, 21:06
|

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

|
Цитата(_Pasha @ Nov 16 2008, 02:54)  Понять-то поймет, тока это уже не просто в сурец пойдет, а и в ехешник  Дык! И препод сможет увидеть, что автор изготовил программу самолично, а не взял у товарища Цитата(_Pasha @ Nov 16 2008, 02:54)  Но, подозреваю, что суровый препод мог "предложить" написать программу, которая открывает свой собственный сурец и добавляет туда эти самые ФИО. Вот поэтому и не понял  Неужели бывают такие жестокие преподы?!  ))
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Nov 17 2008, 05:31
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(_Pasha @ Nov 14 2008, 17:18)  Апядь холевара  Оне ж не так возвращают Код MyVar := val(...); а в параметрах по ссылке. Стало быть как функция они не возвращают ничего. Неча развращать студентов  Я, конечно, понимаю, что Паскакаль дебильнй язык, но про эти "функции" всегда думал, что это не функции и не процедуры, а лишь указание компилятору считать аргументы другим типом. То есть, оператор преобразования типа. Если же это действительно реальные функции, которым что-то передается и они генерируют вызов - то какие еще могут быть разговоры о паскале? Нахрена он это все делает? Есть символьная переменная, какие проблемы сложить ее с int? Сложи младший байт, затем к старшим прибавь 0 с переносом. Неужели паскаль вызывает функцию, которая возвращает то же число, но с добавлением нулевых байтов, и только это число можно использовать для сложения с int?
Сообщение отредактировал 777777 - Nov 17 2008, 05:33
|
|
|
|
|
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
|
|
|