Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2012, 21:53   #1
aleksskay
Форумчанин
 
Регистрация: 20.12.2011
Сообщений: 102
По умолчанию обнуление переменной

не могли бы вы сказать при каких случаях нужно обнулять переменную
например если такая программа
uses crt;
var i, j:integer;
s:string;
begin
clrscr;
s:='reding';
i:=2;
delete(s,i,j);
Здесь я хочу чтобы переменная j была равной 0,но я ее не обнулил
удовлетворившиеся тем ,что она по умолчанию равна нулю ,так можно делать в турбо паскале 7.0?
aleksskay вне форума Ответить с цитированием
Старый 14.05.2012, 21:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
так можно делать в турбо паскале 7.0?
Да. Глобальные переменные нулятся, это загрузчик программы делает а не паскаль.
Впрочем если не ошибаюсь локальные переменные в паскале тоже предусмотрительно обнуляются.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2012, 23:35   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> локальные переменные в паскале тоже предусмотрительно обнуляются

только строки, динамические массивы и подобные типы. В остальных переменных будет мусор.


> так можно делать

можно, но правила хорошего тона звучат так:

Код:
var
  j: Integer = 0;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 15.05.2012, 07:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
j: Integer = 0;
В паскале это не пройдет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.05.2012, 09:55   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

А чем вас принудительная инициализация переменных не устраивает? Согласен, лишний код, но зато точно известно, что и где находится, не полагаясь на прихоти компилятора. Вы потратите лишние 10 секунд, но выиграете несколько минут при отладке такой ошибки, когда она проявится.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 15.05.2012, 10:21   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я КАТЕГОРИЧЕСКИ за предварительную иницилизацию переменных.
Мой первый учитель программирования говорил, всегда, любую переменную, прежде чем прочитать/использовать, обязательно нужно записать (проиницилизировать!). Обязательно!


иначе бёрем предложенный код. помещаем его в функцию. и оп-па. "подарочек" - результаты функции становятся НЕПРЕДСКАЗУЕМЫМИ!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2012, 11:15   #7
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
иначе бёрем предложенный код. помещаем его в функцию. и оп-па. "подарочек" - результаты функции становятся НЕПРЕДСКАЗУЕМЫМИ!
Это, конечно, верно, но вряд ли это такой уж весомый довод.. Ну, надо следить за инициализацией при переносе кода в процедуру - что такого? Один из моментов, которые надо учитывать.
Я очень долго приделживался правила обязательной инициализации. Но чисто объективно - зачем делать дважды одно и то же? Так что с некоторых пор полагаюсь на системное обнуление (в глобальных переменных и при динамической аллокации). Не вижу смысла в такой перестраховке.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 15.05.2012, 11:59   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

TinMan, а мне импонирует подход компиляторов .NET
попробуйте написать что-то вроде:
Код:
int i;
int j;
i = j;
код не будет скомпилирован. Ибо это ОШИБКА!
и это, имхо, правильно!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2012, 13:31   #9
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
Это, конечно, верно, но вряд ли это такой уж весомый довод..
Хорошо, есть и другой:
Паскаль - язык, специально придуманный для обучению программировать.
И вполне естественно, если после обучения человек будет программировать на каком-то другом языке.
И в этом случае полученная в период обучения привычка НЕ инициализировать переменные может сыграть с ним злую шутку.

И еще: при реальном программировании львиная доля кода приходится на подпрограммы, а в демонстрационном примере обычно код для простоты находится внутри основной программы. Если при перенесении кода из демонстрационного примера в реальную программу его приходится "допиливать", - это плохой код.
s-andriano вне форума Ответить с цитированием
Старый 15.05.2012, 13:44   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я КАТЕГОРИЧЕСКИ за предварительную иницилизацию переменных.
Мой первый учитель программирования говорил, всегда, любую переменную, прежде чем прочитать/использовать, обязательно нужно записать (проиницилизировать!). Обязательно!


иначе бёрем предложенный код. помещаем его в функцию. и оп-па. "подарочек" - результаты функции становятся НЕПРЕДСКАЗУЕМЫМИ!
Я даже на c# по привычке делаю . Как раз после подарочков в Дельфи. И перед уничтожением объектов всегда все данные зануляю.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти значение переменной y в зависимости от значения переменной х Rishi Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 11.05.2011 20:25
обнуление kuzjaca Microsoft Office Access 7 24.02.2011 10:03
gcc inline assembler - обнуление переменной gvf Помощь студентам 1 13.06.2010 19:33
Обнуление переменной [MI_nor] Общие вопросы C/C++ 3 05.11.2008 18:01
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 20:47