Программирование все в большей степени становится
занятием лишь для профессионалов. Объявленный в середине 1980-х гг. лозунг
«Программирование — вторая грамотность» остался в прошлом. В понятие
«компьютерная грамотность» сегодня входит прежде всего навык использования
многообразных средств информационных технологий. Решая ту или иную
информационную задачу, необходимо выбрать адекватное программное средство. Это
могут быть электронные таблицы, системы управления базами данных,
математические пакеты и т.п. И только в том случае, когда подобные средства не
дают возможности решить задачу, следует прибегать к универсальным языкам
программирования.
Принято различать программистов двух категорий:
прикладных и системных. Системные программисты — это разработчики базовых
программных средств ЭВМ (операционных систем, трансляторов, сервисных средств и
т.п.). Они являются профессионалами высочайшего уровня в программировании.
Прикладные программисты разрабатывают средства прикладного программного
обеспечения ЭВМ, предназначенные для решения задач из различных областей
(наука, техника, производство, сфера обслуживания, обучение и т.п.). Требования
к качеству как прикладных программ, так и системных сегодня очень высоки.
Программа должна не только правильно решать задачу, но и иметь современный
интерфейс, быть высоконадежной, дружественной по отношению к пользователю и
т.д. Только такие программы могут выдерживать конкуренцию на мировом рынке
программных продуктов. Программирование на любительском уровне сегодня никому не
нужно.
По мере развития компьютерной техники развивались
также и методика, и технология программирования. Сначала возникает командное и
операторное программирование, в 1960-х гг. бурно развивается структурное
программирование, появляются линии логического и функционального
программирования, а в последнее время — объектно-ориентированное и визуальное
программирование.
Задача, которую следует ставить при первоначальном
изучении программирования, — освоение основ структурной методики
программирования. Для указанной цели наиболее подходящим средством является
язык программирования Паскаль. Автор языка Паскаль — швейцарский профессор
Никлаус Вирт — создавал его именно для этого. Структурная методика остается
основой программистской культуры. Не освоив ее, человек, взявшийся изучать
программирование, не имеет никаких шансов стать профессионалом.
Реализации Паскаля в версиях фирмы
Borland
для IBM, известных под названием Турбо Паскаль, значительно
расширили язык по сравнению с вариантом Вирта. Начиная с версии 5.5 Турбо
Паскаль становится также и языком объектного программирования.
Содержание третьей главы настоящего учебника
ориентировано на глубокое освоение студентами базовых понятий языков
программирования высокого уровня в их реализации на Паскале. Такая подготовка
облегчает изучение других языков программирования. Изложение основ языков
Си/Си++ в четвертой главе опирается на знания и навыки, полученные учащимися
при изучении Паскаля.
При изучении данного курса студентам понадобятся
знания основ алгоритмизации в рамках школьного базового курса информатики.
Обычно в школе алгоритмизация изучается с использованием учебных исполнителей,
с помощью которых можно успешно освоить основы структурной методики, а именно:
-
построение
алгоритмов из базовых структур;
-
применение
метода последовательной детализации.
Желательным является знакомство с архитектурой ЭВМ на
уровне машинных команд (достаточно на модельных примерах учебных компьютеров,
изучаемых в школьной информатике; совсем' не обязательно изучение реальных
языков команд или ассемблера). Эти знания позволяют освоить основные понятия
программирования, такие как переменная, присваивание; «входить в положение
транслятора» и благодаря этому не делать ошибок, даже не помня каких-то деталей
синтаксиса языка; предвидеть те «подводные камни», на которые может
«напороться» ваша программа в процессе выполнения. По существу, все эти
качества и отличают профессионального программиста от дилетанта.
Еще одно качество профессионала — способность
воспринимать красоту программы, получать эстетическое удовольствие оттого, что
она хорошо написана. Нередко это чувство помогает интуитивно отличить
неправильную программу от правильной. Однако основным критерием правильности
является, безусловно, не интуиция, а грамотно организованное тестирование.
Процесс изучения и практического освоения
программирования делится на три части:
-
изучение
методов построения алгоритмов;
-
изучение
языка программирования;
-
изучение
и практическое освоение определенной системы программирования .
Решению первой задачи посвящены вторая и пятая главы
учебника. Во второй главе даются основные, базовые понятия и принципы
построения алгоритмов работы с величинами. В пятой главе излагаются некоторые
известные методики полного построения алгоритмов, обсуждаются проблемы тестирования
программ, оценки сложности алгоритмов.
Языки программирования Турбо Паскаль и Си/Си++
излагаются в третьей и четвертой главах учебника соответственно. Подчеркнем,
что данная книга — это прежде всего учебник по программированию, а не по языкам
Паскаль и Си. Поэтому исчерпывающего описания данных языков вы здесь не
найдете. Языки излагаются в том объеме, который необходим для начального курса
программирования. Более подробное описание языков можно найти в книгах,
приведенных в списке литературы.
В учебнике нет инструкций по работе с конкретными
системами программирования для изучаемых языков. С ними студенты должны
познакомиться в процессе практики на ЭВМ, используя другие источники.
Шестая глава представляет собой достаточно большой
задачник по программированию. Этот задачник можно использовать для организации
практических и лабораторных занятий по любому из изучаемых языков.
Навигация :
Этапы
решения задачи на ЭВМ. Работа по решению любой задачи с использованием компьютера делится на
следующие этапы:
1. Постановка задачи.
2. Формализация задачи.
3. Построение алгоритма.
(читать далее...)
стр.
0 1 2
Основным элементарным действием в вычислительных
алгоритмах является присваивание значения
переменной величине. Если значение константы определено видом ее
записи, то переменная величина получает конкретное значение только в результате
присваивания.
(читать далее...)
стр.
3 4
Составим алгоритм решения квадратного уравнения
Задача хорошо знакома из математики. Исходными данными
здесь являются коэффициенты а, b, с.
Решением в общем случае будут два корня x1
и х2, которые вычисляются по формуле:
Все используемые в этой программе величины
вещественного типа.
(читать далее...)
стр.
5 6 7
В теории алгоритмов известно понятие вспомогательного алгоритма.
Вспомогательным называется алгоритм решения некоторой подзадачи из основной
решаемой задачи. В таком случае алгоритм решения исходной задачи называется основным алгоритмом.
(читать далее...)
стр.
8 9
Язык программирования — это способ записи программ
решения различных задач на ЭВМ в понятной для компьютера форме. Процессор
компьютера непосредственно понимает язык машинных команд (ЯМК). Программы на
ЯМК программисты писали лишь для самых первых ламповых машин — ЭВМ первого поколения.
(читать далее...)
стр.
10 11 12 13
Во всяком языке программирования определены способы
организации данных и способы организации действий над данными. Кроме того,
существует понятие «элементы языка», включающее в себя множество символов
(алфавит), лексемы и другие изобразительные средства языка программирования.
(читать далее...)
стр.
14 15
Структура
программы на Паскале. По определению стандартного Паскаля программа
состоит из заголовка программы и тела программы (блока), за которым
следует
точка — признак конца программы.
В свою очередь, блок содержит разделы описаний
и раздел операторов.
(читать далее...)
стр.
16 17 18 19
Название Турбо Паскаль обычно воспринимается в двух
смыслах:
• как диалект языка Паскаль, представляющий собой
расширение стандартного Паскаля;
• как система программирования Турбо Паскаль,
являющаяся совокупностью системных программ, предназначенных для создания,
отладки и выполнения Паскаль-программ.
(читать далее...)
стр.
20 21 22
Алфавит. Алфавит языка состоит из множества
символов, включающих в себя буквы, цифры
и специальные символы.
Латинские
буквы: от A до Z (прописные) и от а до z. (строчные).
Цифры: 0, 1, 2, 3, 4,
5, 6, 7, 8, 9.
(читать далее...)
стр.
23
Концепция типов данных является одной из центральных в
любом языке программирования. С типом
величины связаны три ее свойства: форма внутреннего представления, множество
принимаемых значений и множество допустимых операций.
(читать далее...)
стр.
24 25
К арифметическим типам данных относятся группы вещественных
и целых типов. К ним применимы арифметические операции и операции отношений.
Операции над данными бывают унарными (применимые к одному операнду) и бинарными (применимые к двум операндам).
(читать далее...)
стр.
26 27
Ввод данных — это передача информации от
внешних устройств в оперативную память. Вводятся, как правило, исходные данные
решаемой задачи. Вывод — обратный
процесс, когда данные передаются из оперативной памяти на внешние носители
(принтер, дисплей, магнитные устройства и т.д
(читать далее...)
стр.
28 29
Использование для вывода на экран только процедур Write
и WriteLn дает программисту очень слабые
возможности для управления расположением на экране выводимого текста. Печать
текста может производиться только сверху вниз, слева направо.
(читать далее...)
стр.
30 31 32
Прямое отношение к программированию имеет дисциплина,
которая называется математической логикой.
Основу математической логики составляет алгебра
логики, или исчисление высказываний. Под высказыванием понимается
любое утверждение, в отношении которого можно однозначно сказать, истинно оно
или ложно.
(читать далее...)
стр.
33 34
В табл. 3.6 приводится список стандартных функций,
обеспечивающих связь между различными типами данных.
Таблица 3.6
Функции ord,
pred и succ применимы только к порядковым типам.
(читать далее...)
стр.
35 36
Алгоритмическая структура ветвления программируется в
Паскале с помощью условного оператора.
Раньше мы его описывали в таком виде:
If
<условие> Then
<оператор 1> Else
<о
(читать далее...)
стр.
37 38
Рассмотрим следующую простую задачу: требуется
вычислить сумму целых чисел от M до N путем
прямого суммирования. Здесь М и N — целые числа. Задачу можно сформулировать
так:
Алгоритм и программа решения этой задачи с
использованием структуры цикл-пока представлены на рис.
(читать далее...)
стр.
39 40
Числовые расчеты могут производиться на множестве
целых чисел или на множестве вещественных чисел. С математической точки зрения
целые числа являются подмножеством множества вещественных чисел.
(читать далее...)
стр.
41 42 43
С понятием вспомогательного алгоритма вы уже знакомы
(см. разд. 1.4). В языках программирования вспомогательные алгоритмы называются
подпрограммами. В Паскале
различаются две разновидности подпрограмм: процедуры
и функции.
(читать далее...)
стр.
44 45 46 47 48 49
Рекуррентная
последовательность.
Из курса математики известно понятие рекуррентной
последовательности. Это понятие вводится так: пусть известно k чисел a1, ..., аk.
Эти числа являются первыми числами числовой последовательности.
(читать далее...)
стр.
50 51 52 53
До сих пор мы использовали экран компьютера только для
вывода символьной информации — чисел, текстов. Однако Турбо Паскаль позволяет
выводить на экран рисунки, чертежи, графики функций, диаграммы и т.п
(читать далее...)
стр.
54 55 56 57 58 59 60
Теперь мы познакомимся с типом данных, который
относится к числу структурированных. Это строковый тип данных (строка). Следует
заметить, что строковый тип данных есть в Турбо Паскале и отсутствует в
стандартном Паскале.
(читать далее...)
стр.
61 62 63 64
В повседневной и научной практике часто приходится
встречаться с информацией, представленной в табличной форме. Вот, например,
таблица, содержащая среднемесячные значения температуры, °С, за определенный
год:
Такую таблицу называют линейной.
(читать далее...)
стр.
65 66 67 68 69
Одним из фундаментальных разделов математики является
теория множеств. Некоторые моменты математического аппарата этой теории
реализованы в Паскале через множественный
тип данных (множества).
(читать далее...)
стр.
70 71 72 73
С термином «файл» вам уже приходилось встречаться.
Прежде всего это понятие обычно связывают с информацией на устройствах внешней
памяти. В Паскале понятие файла употребляется в двух смыслах:
• как поименованная информация на внешнем устройстве
(внешний файл);
(читать далее...)
стр.
74 75 76 77 78 79
Все структурированные типы данных, с которыми мы уже
познакомились, представляют собой совокупности однотипных величин. Комбинированный тип данных — это
структурированный тип, состоящий из фиксированного числа компонент (полей)
разного типа.
(читать далее...)
стр.
80 81 82
До сих пор мы рассматривали программирование,
связанное с обработкой только статических данных. Статическими называются такие величины, память под которые выделяется
во время компиляции и сохраняется в течение всей работы программы.
(читать далее...)
стр.
83 84 85 86 87 88 89
Стандартный Паскаль не располагает средствами
разработки и поддержки библиотек программиста (в отличие, скажем, от Фортрана и
других языков программирования высокого уровня), которые компилируются отдельно
и в дальнейшем могут быть использованы не только самим разработчиком.
(читать далее...)
стр.
90 91 92 93
Основные
понятия объектно-ориентированного программирования (ООП). Основополагающей идеей одного из
современных подходов к программированию — объектно-ориентированному — является
объединение данных и обрабатывающих их процедур в единое целое — объекты.
(читать далее...)
стр.
94 95 96 97 98 99 100
Объекты
в динамической памяти. При работе с объектами довольно типичной является ситуация, когда
сложный метод приходится создавать заново для каждого типа объекта, хотя
различия в поведении объектов могут быть небольшими.
(читать далее...)
стр.
101 102 103
История
языка программирования C++. Вторым языком программирования, который предлагается для изучения
в данном пособии, является язык Си (в английском варианте его название
обозначается одной заглавной буквой латинского алфавита — С).
(читать далее...)
стр.
104 105 106
Алфавит.
В алфавит языка
Си++ входят:
• латинские буквы: от а
до z
(строчные) и от A до Z (прописные);
• десятичные цифры: 0,
1, 2, 3, 4, 5, 6, 7, 8, 9;
• специальные символы: "
(читать далее...)
стр.
107
Концепция типов данных является важнейшей стороной
любого языка программирования. Особенность Паскаля состоит в большом
разнообразии типов, схематически представленном в разд. 3.4 на рис. 9.
(читать далее...)
стр.
108 109 110 111
Во всех языках программирования под выражением
подразумевается конструкция, составленная из констант, переменных, знаков
операций, функций, скобок. Выражение определяет порядок вычисления некоторого
значения.
(читать далее...)
стр.
112 113 114 115 116 117
Структура
программы. Общая
структура программы на Си/Си++ следующая:
директивы_препроцессора
определение_функции_1
определение_функции_2
определение_функции_N
Среди функций обязательно присутствует главная функция
с именем main.
(читать далее...)
стр.
118 119 120 121 122
Для программирования ветвящихся алгоритмов в языке Си
имеется несколько различных средств. К ним относятся рассмотренная выше
операция условия ?:, условный оператор if и оператор выбора switch.
(читать далее...)
стр.
123 124
В Си, как и в Паскале, существуют все три типа
операторов цикла: цикл с предусловием, цикл с постусловием и цикл с параметром.
Цикл с
предусловием.
Формат оператора цикла с предусловием:
while
(выражение) оператор;
(читать далее...)
стр.
125 126 127
А теперь нам предстоит разобраться с вопросом о том,
как в Си/Си++ реализуется механизм подпрограмм. Вспомним о том, что в Паскале
существуют две разновидности подпрограмм: подпрограммы-процедуры и
подпрограммы-функции.
(читать далее...)
стр.
128 129 130 131 132 133
Понятие массива знакомо из Паскаля. Массив — это структура однотипных элементов,
занимающих непрерывную область памяти. С массивом связаны следующие
его свойства: имя, тип, размерность, размер.
(читать далее...)
стр.
134 135 136
Понятие указателя знакомо читателю из разд. 3.21, в
котором описывается ссылочный тип данных в Паскале. Смысл этого понятия в
Си/Си++ остается тем же: указатель — это
адрес поля памяти, занимаемого программным объектом.
(читать далее...)
стр.
137 138 139 140
В языках Си/Си++ нет специально определенного
строкового типа данных, как в Турбо Паскале. Символьные строки организуются как
массивы символов, последним из которых является символ \0, внутренний код
которого равен нулю.
(читать далее...)
стр.
141 142 143
В языках Си/Си++ понятие структуры аналогично понятию
записи (record) в Паскале. Это структурированный тип
данных, представляющий собой поименованную совокупность разнотипных элементов.
Тип структура обычно используется при разработке информационных
систем, баз данных.
(читать далее...)
стр.
144 145 146
Под вводом-выводом в программировании понимается
процесс обмена информацией между оперативной памятью и внешними устройствами:
клавиатурой, дисплеем, магнитными накопителями и т. п. Ввод — это занесение
информации с внешних устройств в оперативную память, а вывод — вынос информации
из оперативной памяти на внешние устройства.
(читать далее...)
стр.
147 148 149 150 151 152
Основным отличием языка Си++ от Си является наличие в
нем средств объектно-ориентированного программирования (ООП). Часто в
литературе язык Си++ определяют именно как язык объектно-ориентированного
программирования.
(читать далее...)
стр.
153 154 155 156 157
Для организации ввода-вывода в Си++ можно использовать
средства языка Си (conio.h).
Однако в Си++ существует стандартная библиотека классов, ориентированная на
организацию потокового ввода-вывода.
(читать далее...)
стр.
158 159
Прошло уже более полувека со времени появления первой
ЭВМ. Все это время вычислительная техника бурно развивалась. Менялась
элементная база ЭВМ, росли быстродействие, объем памяти, менялись средства
взаимодействия человека с машиной.
(читать далее...)
стр.
160 161 162 163
Суть метода была описана выше. Сначала анализируется
исходная задача. В ней выделяются подзадачи. Строится иерархия таких подзадач
(рис. 48).
Затем составляются алгоритмы (или программы), начиная
с основного алгоритма (основной программы), далее — вспомогательные алгоритмы
(подпрограммы) с последовательным углублением уровня, пока не получим
алгоритмы, состоящие из простых команд.
(читать далее...)
стр.
164 165 166
Суть рекурсивных методов — сведение задачи к самой
себе. Вы уже знаете, что как в Паскале, так и в Си существует возможность
рекурсивного определения функций и процедур. Эта возможность представляет собой
способ программной реализации рекурсивных алгоритмов.
(читать далее...)
стр.
167 168
В данном разделе мы рассмотрим некоторые задачи,
связанные с проблемой поиска информации. Это огромный класс задач, достаточно
подробно описанный в классической литературе по программированию (см.,
(читать далее...)
стр.
169 170 171 172
Под эвристическими понимаются такие методы,
правильность которых строго не доказывается. Они выглядят правдоподобными; кажется,
что в большинстве случаев они должны давать верные решения. На уровне
экспертной оценки алгоритма часто не удается придумать контрпример,
доказывающий ошибочность или неуниверсальность метода.
(читать далее...)
стр.
173
Традиционно принято оценивать степень сложности
алгоритма по объему используемых им основных ресурсов компьютера: процессорного
времени и оперативной памяти. В связи с этим вводятся такие понятия, как
временная сложность алгоритма и объемная сложность алгоритма.
(читать далее...)
стр.
174 175
Существует традиционное деление алгоритмов на
численные и нечисленные. Численные алгоритмы предназначены для математических
расчетов: вычисления по формулам, решения уравнений, статистической обработки
данных и т.п
(читать далее...)
стр.
176 177 178
В этой главе представлена большая подборка задач,
которые могут быть использованы для организации практических занятий по
программированию как на Паскале, так и на Си++.
Задачи систематизированы по конструкциям языка,
охватывают 17 тем и сгруппированы в разделы.
(читать далее...)
стр.
179 180 181 182 183
6.2.1. Текстовые задачи
А
1. Даны три действительных числа. Возвести в квадрат
те из них, значения которых неотрицательны, и в четвертую степень —
отрицательные.
2. Даны две точки А(х1, у1) и В(х2, у2).
(читать далее...)
стр.
184 185 186 187
1. Написать программу, которая по номеру дня недели
(целому числу от 1 до 7) выдает в качестве результата количество уроков в вашем
классе в этот день.
2. Написать программу, позволяющую по последней цифре
числа определить последнюю цифру его квадрата.
(читать далее...)
стр.
188 189
6.4.1. Цикл с параметром
1. Имеется серия измерений элементов треугольника.
Группы элементов пронумерованы. В серии в произвольном порядке могут
встречаться такие группы элементов треугольника:
1) основание и высота;
(читать далее...)
стр.
190 191 192
А
1. Дано натуральное число п. Найти сумму первой и последней цифры этого числа.
2. Дано натуральное число п. Переставить местами первую и последнюю цифры этого числа.
3. Даны два натуральных числа т и п
(т ≤
(читать далее...)
стр.
193 194 195 196 197
6.6.1. Нерекурсивные процедуры и функции
А
1. Треугольник задан координатами своих вершин.
Составить программу для вычисления его площади.
2. Составить программу для нахождения наибольшего
общего делителя и наименьшего общего кратного двух натуральных чисел .
(читать далее...)
стр.
198 199 200 201
А
1. В массив A[N] занесены натуральные числа. Найти сумму
тех элементов, которые кратны данному К.
2. В целочисленной последовательности есть
нулевые элементы. Создать массив из номеров этих элементов.
(читать далее...)
стр.
202 203 204 205 206 207 208
6.8.1. Задачи на формирование массивов
В задачах 1—12 сформировать квадратную матрицу порядка
n
по заданному образцу:
13. Построить квадратную матрицу порядка 2n:
14.
(читать далее...)
стр.
209 210 211 212 213
1. Дана строка, заканчивающаяся точкой. Подсчитать,
сколько слов в строке.
2. Дана строка, содержащая английский текст. Найти
количество слов, начинающихся с буквы b.
3. Дана строка. Подсчитать, сколько в ней букв r, k, t.
(читать далее...)
стр.
214 215 216 217
1. Составить программу для сравнения двух n-значных чисел (п > 20).
2. Составить программу, суммирующую два натуральных n-значных числа, где п > 20.
3. Составить программу для вычисления степеней чисел
вида аn, если а >
(читать далее...)
стр.
218 219
1. Известны сорта роз, выращиваемых тремя цветоводами:
«Анжелика», «Виктория», «Гагарин», «Ave Maria», «Катарина», «Юбилейная». Определить те сорта,
которые имеются у каждого из цветоводов, которые есть хотя бы у одного из
цветоводов, которых нет ни у одного из цветоводов.
(читать далее...)
стр.
220 221
1. Распечатать список учеников, фамилии которых
начинаются на букву В, с
указанием даты их рождения.
2. Из данного списка спортсменов распечатать сведения
о тех из них, кто занимается плаванием.
(читать далее...)
стр.
222 223 224
6.13.1. Типизированные файлы целых чисел
1. Заполнить файл последовательного доступа f
целыми числами, полученными с помощью генератора случайных чисел. Получить в
файле g те компоненты файла f, которые являются четными.
(читать далее...)
стр.
225 226 227 228
I. Реализовать в виде модуля набор подпрограмм для
выполнения следующих операций над комплексными числами:
1) сложения;
2) вычитания;
3) умножения;
4) деления;
5) модуля комплексного числа;
(читать далее...)
стр.
229 230 231
1. Составить программу, которая вставляет в список L новый элемент F за каждым вхождением элемента Е.
2. Составить программу, которая вставляет в список L новый элемент F перед первым вхождением элемента Е, если Е
входит в L.
(читать далее...)
стр.
232 233 234
Построить чертежи к следующим задачам.
1. В треугольной пирамиде построить сечение,
параллельное основанию.
2. В треугольной пирамиде построить сечение,
проходящее через боковое ребро и медиану основания.
(читать далее...)
стр.
235 236
1. Построить систему классов для описания плоских
геометрических фигур: круга, квадрата, прямоугольника. Предусмотреть методы для
создания объектов, перемещения на плоскости, изменения размеров и поворота на
заданный угол.
(читать далее...)
стр.
237 238 239 240 241
1.
Волчий остров
(Ван Тассел Д. Стиль, разработка, эффективность, отладка и испытание программ.
— М.: Мир, 1981)
Волчий остров размером 20х20 заселен дикими кроликами,
волками и волчицами.
(читать далее...)
стр.
242 243 244 245
Таблица П1.1. Константы режимов работы
Таблица П1.2. Константы цветов
Таблица П1.3. Процедуры и функции
(читать далее...)
стр.
246
Таблица П2.1. Коды драйверов графических
устройств
Таблица П2.2. Константы графических режимов
Примечание. Палитра С0 включает в себя следующие
цвета: светло-зеленый, розовый и желтый;
(читать далее...)
стр.
247
Таблица П3.1. Предельные значения для
целостных типов — файл limits.h
Таблица П3.2. Константы для вещественных
типов — файл float.h
(читать далее...)
стр.
248
Таблица П4.1. Математические функции — файл math.h
Таблица П4.2. Функция проверки и
преобразования символов — файл ctype.h
Таблица П4.3. Функции ввода-вывода для
стандартных файлов — файл stdio.h
(читать далее...)
стр.
249
Таблица П4.7. Функции для управления графической
системой
Таблица П4.8. Функции для получения
изображения на экране
Таблица П4.9. Функции для получения
параметров изображения
(читать далее...)
стр.
250
1. Абрамов
В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. —
М.: Наука, 1988.
2. Березин
Б.И., Березин С.Б. Начальный курс С и
C++. — М.: ДИАЛОГ-МИФИ, 1996.
3. Бондарев
В.М
(читать далее...)
стр.
251 252