Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 25

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 19 20 21 22 23 24 < 25 > 26 27 28 29 30 31 .. 316 >> Следующая

• register — регистрове переменные. Это те переменные, которе для оптимизации вчислений размеа тся в специальных (бстрых) регистрах процессора (если это возможно). Во всем остальном они полностью аналогичны автоматическим переменным.
1.5.
67
онятие класса памяти подтвердает тот факт, что С создавался как язк программирования для вычислителя вполне определенной архитектуры. Сейчас язык C++ реализован практически для всех архитектур. о для них, с одной сторон , некоторые из конкретнх средств С оказались избточн -ми (например, регистрове переменне на архитектуре Intel), с другой стороны, для некоторх из ценнх качеств, предоставляемых архитектурно, в С++ нет средств для их эффективного использования (примером является те-гирование). В целом в языке C и его наследниках догматизируется принцип однородности памяти.
собенно вредной догматизация этого принципа оказалась в случае констант. оскольку с точки зрения процессора традиционной архитектуры контейнер, содержащий константу, ничем не отличается от контейнера, в котором находится переменная того же типа, сам язык С дает возможность использования только литералов. днако с помоь препроцессора мо но приписать константам имена, что ироко применяется на практике. Соответствующий пример показан в программе 1.5.1.
Программа 1.5.1
/* Вычисление среднего арифметического значения
двух вводимх чисел */ #include <stdio.h> #define two 2 int X, Y; int main (void) {
scanf ("%d, %d ", &X, &Y);
printf ("\n average of %d and %d is %d\n", X, Y, (X + Y) / two ); return 0; }
оскольку логически понятие констант весьма полезно и ничему не противоречит, в С++ оператор описания константывведен и имеетобчну форму (показанную в фрагменте (1.4)).
Тому, чему в Алголе 68 соответствовали значения типа ref ref type и так далее, в С соответству т указатели, например: int **a; и ссылки: int &r;
68
1.
Задания для самопроверки
1. Возьмите книгу по программированию на неизвестном вам языке (же-лательно выбрать первый доступный из списка Ada, Perl, Modula, Java, FORTRAN) и, не читая текста, поймите некоторые из приведенных в ней программ. Повторяйте это упражнение раз в несколько месяцев по мере овладения новыми понятиями программирования.
2. Перепишите одну из понравившихся вам программ, прочитанных в ходе преддуего контрольного упранения, на используемый вами язк программирования.
3. Приведите пример программы, в которой выражения вида
(A + B) + C и B + (C + A) дают различные результаты.
4. Приведите пример предложения естественного языка, которое выглядит замкнутым в себе, но интерпретация которого полностью меняется в зависимости от контекста.
5. Постройте трансляцию формы условного оператора из п. 1 на стр. 56 в команды фон Неймановского вычислителя.
6. Постройте программу вычисления значения ex при целых значениях x в диапазоне от — 1 000 000 000 до 1 000 000 000, выдающую порядок числа и 10 точных значащих цифр. Проверьте свою программу, вос-пользовавись какой-либо математической системой всокого уровня (например, Maple).
Глава 2
Синтаксис, семантика и прагматика языка программирования
азначение этой главы — дать введение в проблему точного определения языка программирования. Эта проблема имеет много аспектов, укажем лишь некоторе из них, имеие прямое отноение к обучени программиста.
a) Нужно иметь уверенность в том, что составленная программа будет члениться на составне части и пониматься именно так, как предполагалось при ее написании, а не иначе. оэтому ну но точное и доступное для программиста определение структуры конструкций языка.
b) Нужно понимать, как представлены средствами языка сущности, закодированные в программе. Это вкл чает в себя ясное понимание того, как будут исполняться предусмотренные нами действия над данными сущностями.
c) Знание конкретных команд вычислителя необязательно, но требуется понимание того, какие ограничения вносит конкретное представление с тем, чтобы не оказаться в ситуации, когда, казалось б , технические детали су-
ественно влия т на реение и полность сбива т нас с толку.1
1 В качестве примера здесь можно упомянуть непредсказуемость результатов действий над целыми числами при превышении их диапазона. Со следствиями обычно явно не диагностируемого переполнения диапазона целых чисел сталкиваются не только программисты. Например, во многих играх это — одна из самых коварных ошибок.
69
70
ГЛАВА 2. ССП
d) Все вышеизложенные аспекты соединяются воедино в проблеме переносимости программ, возникающей перед каждым профессиональным программистом. Например, Вы написали программу для Windows, а использовать ее оказалось необходимо для маин с операционной системой Unix, и так далее. Эта задача является очень сложной и в практически важных случаях почти всегда теоретически неразрешимой.2 Hекоторое время мировое программистское сообщество интенсивно занималось проблемой переносимости, но затем, так и не добившись серьезных результатов, пе-рело на «более интересные» темы освоения новых архитектур маин и новых операционных систем, тем более, что фирма Sun объявила проблему решенной, представив язык Java. Тем не менее, проблема стоит, и новое поколение программистов столкнется с ней уже в гораздо более запущенном состоянии. Связь данной проблемы со всеми сторонами строгого и точного определения язка очевидна. ля ее успеного ре-ения, в частности, необходимо вработать четкое понимание абстрактных и конкретнх аспектов системы программирования. а нынений момент единственно практичное решение проблемы переносимости — с самого начала писать программу так, чтобы она была переносимой. Дополнительные затраты труда при этом обычно в пределах 5-10%, а перенос непереносимой программы часто требует ее полного переписывания с самого начала, что означает не менее чем 100% дополнительных затрат.
Предыдущая << 1 .. 19 20 21 22 23 24 < 25 > 26 27 28 29 30 31 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100