Помощь - Поиск - Пользователи - Календарь
Полная версия: Присвоение записей
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
sheka
Собственно вопрос - в названии темы.
Пример:
type rec = record 
x, y: integer;
end;
var
a, b: rec;
begin
a :=b;
//a.x := b.x;
//a.y := b.y;
end.

Будет ли работать и в каких версиях? Просто препод доказывал, что так записи присваивать нельзя, а нужно только поочередно присваивать поля.
PS: TP, FPC, Delphi - ест как миленький.
ЗЗЫ: Или препод как обычно мороз сморозил lol.gif ?
TarasBer
Присваивать можно, если они одного типа. То есть совсем одного.
А вот сравнивать - нельзя.
И если

var a: rec;
b: record
x, y: integer;
end;

то тоже нельзя - компилятор думает, что они разного типа.
volvo
Цитата
Будет ли работать и в каких версиях?
В любых. Эта возможность закладывалась в язык изначально, еще Виртовский Паскаль умел присваивать записи.

Главное - чтобы выполнялись правила Совместимости по присваиванию (в частности, запись не должна содержать файловых переменных). Ну, и аккуратно работать с записями, содержащими поля-указатели, можно нарваться на ошибку. Для простых типов языка такой способ (присваивание записи целиком) гораздо предпочтительнее, чем по отдельным полям, ибо позволяет очень сильно разгрузить программу.
Lapp
Конечно можно, в этом приличная такая часть сути языка. Учитывая, конечно, что сказано выше. Шек, а тебе не пришло в голову просто прогнать ту прогу, что ты привел, через компайлер и найти ответ на свой вопрос за 6 миллисекунд? smile.gif
Не забывый, что у тебя всегда есть этот способ под рукой: экспериментировать.

Цитата(sheka @ 7.11.2010 1:10) *
препод как обычно мороз сморозил lol.gif ?
Вот тут поподробнее.. Это серьезное обвинение. Если это правда - такого препа нужно срочно гнать в шею. Но я допускаю, что тут какое-то ндопонимание друг друга. Напиши, пожалуйста, точно, что он сказал.
sheka
Цитата
Напиши, пожалуйста, точно, что он сказал.
"-В реализации Паскаля 95 года такого не было. Вернешься домой посмотришь.
-Но...
-Вернешься - посмотришь.
-Да, конечно, но в 95й год я уж точно не вернусь" lol.gif


Добавлено через 1 мин.
Цитата
Шек, а тебе не пришло в голову просто прогнать ту прогу, что ты привел, через компайлер и найти ответ на свой вопрос за 6 миллисекунд?

PS: TP, FPC, Delphi - ест как миленький.
А на пару, как на зло, никто ноут не принес..
Lapp
Цитата(sheka @ 7.11.2010 2:33) *
"-В реализации Паскаля 95 года такого не было. ..."

Это только конец диалога. Вопрос стоял действмтельно о присвоении значений переменных типа запись?

Но если так - кошмар..
Мое мнение по этому поводу остается прежним (выше, выделено жирным). Когда у нас в школе был учитель математики, который.. мм.. не очень хорошо ее знал.. - мы собрались и пошли к завучу. Через неделю его поперли. Мне кажется, что в ВУЗе, да еще в нынешние времена (то было при советской власти) это более чем возможно. Найди несколько человек, которые тебя поддержат (но не двоечников)), и пойдите в деканат. Такое нельзя спускать с рук. Ссылаться на то, что НЕ ЗНАЛ в 95 году - и при этом учить студентов?? У меня слов не хватает..
sheka
Потепление.

Понедельник:
- Уточните, пожалуйста, вопрос на счет записей, ведь завтра все таки кр. Я проверил, вроде работает.
- Конечно все возможно ... Все зависит от реализации ... А вот классический Паскаль ... строгий язык ... (вместо точек - куча каких-то объяснений типа "вода" продолжительностью 30-60 секунд)
- Извините что прерываю, ТП где-то 90го года компилирует нормально. Или это не классический паскаль?
- Классический, это тот, который Вирт сделал ... Как он это объяснял студентам ... Все как можно проще ... для обучения ...
- Ну хорошо, а где я тогда могу встретить этот "классический паскаль"?
- Оо. Ну он был еще на машинах, когда были еще такие машины (показал руками), как комнаты, где-то 65й -75й год...
- (я обнаглел) Т.е. во всех реализациях после средины 70х это присутствует?
- Ну это удобнее ... поэтому новые веения ... современные студенты законодатели моды ...
- Т.е. я могу в кр так написать?
- Но только с пометкой "в ТП реализовано".

Вторник:
Контрольной не дал. Уже без агрессии сам начал говорить что записи присваивать можно ... студенты ... мода ... так им проще ...

Что-то этот рассказ напомнил мне как описывали рождение Полиграфа Полиграфовича Шарикова lol.gif

Цитата
Эта возможность закладывалась в язык изначально, еще Виртовский Паскаль умел присваивать записи.
volvo, защищайтесь!
Lapp
Цитата(sheka @ 10.11.2010 23:58) *
Все зависит от реализации ... А вот классический Паскаль ... строгий язык ...
В таком присвоении содержится, как я уже говорил, львиная доля понятия переменной. При чем тут реализация? какая еще простота? СТРОГОСТЬ от этого абсолютно не страдает, а только выигрывает..
капец, приехали..
ГНАТЬ В ТРИ ШЕИ

я еще понял бы, если бы он признал ошибку и извинился бы - за это честь и хвала. Но если начинает юлить и оправбываться - ГНАТЬ В ТРИ ШЕИ.
sheka
А можете это предоставить в виде цитаты из книги?
(я не нашел ничего)
volvo
Цитата
volvo, защищайтесь!
lol.gif

От кого защищаться? От твоего преподавателя, что-ли? Так пусть откроет книгу "К.Йенсен, Н.Вирт: Паскаль. Руководство для пользователя и описание языка" на страницах 22-23 и прочтет буквально следующее (цитирую)
Цитата("Глава 4.1 @ Оператор присваивания")
Оператор имеет такой вид:
<переменная> := <выражение>

<cut>

Допустимо присваивание переменных любого типа, за исключением файлов. Однако переменная (или функция) и выражение должны быть идентичного типа: как исключение допускается использование переменной вещественного типа с выражением целого типа. Если речь идет об ограниченном типе, то правомочность присваивания определяется его базовым скалярным типом; см. разд. 5.2.


Или твой преподаватель лучше автора знает, что может язык Вирта, а что - нет? smile.gif Так что пускай он теперь защищается...
sheka
Вот блин.. А я 12ю страницу читал smile.gif
Lapp
Цитата(sheka @ 11.11.2010 1:29) *
А можете это предоставить в виде цитаты из книги?
(я не нашел ничего)
Я боюсь, что именно такую цитату: "записи можно присваивать" - ты и не найдешь никогда. Это же просто неотделимо от самой КОНЦЕПЦИИ ПЕРЕМЕННОЙ. А иначе половина ее смысла теряется. Формально же следует из общих принципов и определения а) оператора присваивания; б) совместимости типов.

Например, берем вот это описание стандарта Pascal ISO 7185 :1990. Читаем описание оператора присваивания:
Цитата
6.8 .2.2 Assignment-statements
An assignment-statement shall attribute the value of the expression of the assignment-statement either to the variable denoted by the variable-access of the assignment-statement or to the activation result that is denoted by the function-identifier of the assignment-statement ; the value shall be assignment-compatible with the type possessed, respectively, by the variable or by the activation result. The function-block associated (see 6 .6.2) with the function-identifier of an assignment-statement shall contain the assignment-statement.

assignment-statement = ( variable-access | function-identifier ) ` :=' expression .

Главное я выделил, вот перевод: "значение должно быть совместимым по присваиванию". Заметим, что других ограничений не наложено.
Про "совместимость по присваиванию" читаем ранее:
Цитата
6.4.6 Assignment-compatibility
A value of type T2 shall be designated assignment-compatible with a type T1 if any of the following five statements is true:
a) T1 and T2 are the same type ...
...

Ч., как говорится, и Т.Д.

ГНАТЬ В ШЕЮ

Добавлено через 1 мин.
Блин, долго я писал, однако.. ))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.