- •Алгоритм.
- •Множественный выбор switch.
- •Оператор do … while ( с постусловием ).
- •Do оператор ;
- •Оператор цикла for.
- •Использование операторов break и continue в циклах.
- •Функции ввода-вывода.
- •Общий вид программы.
- •Вложенные циклы.
- •Адреса и указатели.
- •Массивы.
- •Int a[10] ; // целочисленный вектор из 10 элементов.
- •Векторы.
- •Сортировка вектора.
- •Матрицы.
- •Строки.
- •Подпрограммы.
- •Директива препроцессора #define .
- •Области видимости.
- •Классы памяти.
- •Рекурсия.
- •Подготовка к зачету.
- •Структуры.
- •Int ball [4] ; // описание третьего поля – оценки.
- •Очередь.
- •Линейные списки.
- •Деревья.
- •Int n, k ; // ее размерности
- •Void print ( void ) // печать матрицы
- •Определение методов вне класса.
- •Частные и общие данные.
- •Конструктор.
- •Перегрузка операторов.
- •Неявный указатель *this.
- •Дружественные функции.
- •Класс множество.
- •Наследование.
- •Объекто-ориентированное программирование.
- •Список вопросов к экзамену.
- •Литература.
КОНСПЕКТ ЛЕКЦИЙ ПО КУРСУ «ИНФОРМАТИКА».
ИСТОРИЯ РАЗВИТИЯ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ (ВТ).
Придумывать машины и механизмы, помогающие производить вычисления, ученые начали давно, в 1641 году Паскаль создал первую вычислительную машину, которая могла производить все четыре арифметические операции. В 1833 году Ч. Беббидж разработал вычислительный механизм, хранивший до 1000 чисел по 50 знаков каждое. Ассистенткой Беббиджа была Ада Лора Ловлейс, дочь Байрона, первая женщина программист, в честь нее и назвали известный язык программирования АДА. В середине прошлого века широко распространены были арифмометры, механические вычислительные устройства. Но все эти устройства назвать компьютерами еще было нельзя.
Главный толчек к развитию ВТ дали разработка ядерного оружия и космоса, две эти отрасли влекли за собой такое огромное количество расчетов и, главное, нужно было строить прогнозы, математические, а не практические эксперименты.
Так в 50-е годе ХХ века появились вычислительные машины
I – поколения - ламповые машины.
Вычислительная машина была размером с дом, вся состояла из стеклянных электронных ламп, и осуществляла явно идею 0 – « нет сигнала», лампа выключена, 1 – «есть сигнал» лампа горит. Такая ВТ больше грела пространство, чем производила вычисления. Никаких языков программирования еще не было, работали только в машинных кодах.
Совершенствовалась элементная база, появились транзисторы.
II – поколение – транзисторные машины.
Размеры вычислительных машин уменьшились, быстродействие и объем памяти увеличились. Появились первые языки программирования. К этому поколению можно отнести советские машины БЭСМ, вычислительные устройства высокого уровня, сделанные не зависимо от заокеанского влияния и ничуть не хуже их.
III – поколение – интегральные схемы.
С этого поколения началось наше безнадежное отставание от американской ВТ, так было принято решение не развивать наши уникальные разработки, а скопировать сделанную в США машину IBM, а копия, как известно, хуже оригинала и очень отстает от него во времени. В результате получили вычислительные машины серии ЕС. Это поколение дало огромный толчок развитию языков программирования высокого уровня, таких как FORTRAN, PASCAL, а далее и С.
Современное поколение ВТ
IV – поколение – БИСы (большие интегральные схемы).
ВТ сегодня разделилось на два полюса - персональный компьютер и СУПЕРЭВМ. Первое направление буквально заполонило мир. Без второго направления не может развиваться наука, космические, ядерные исследования и метеорология. Принципиального различия в элементной базе нет, есть ее постоянное совершенствование. Колоссальное увеличение быстродействия и объемов оперативной памяти. От языков высокого уровня перешли к операционным системам типа WINDOWS, что перестраивает большую армию программистов в еще большую армию пользователей. Наша страна превратилась в крупнейшего импортера ВТ и потребителя программного продукта.
Будущее поколение ВТ
V – поколение - интеллектуальные машины.
Ведутся разработки, как в США, так и в Японии.
СИСТЕМЫ СЧИСЛЕНИЯ.
Как известно внутренняя система счисления компьютера двоичная, состоящая из нулей и единиц. Распространены и другие системы связанные с двоичной – восьмеричная и шестнадцатиричная. А вот, привычная нам, десятичная система очень не удобна и связана только с исторической привычкой человека считать по пальцам. 10 пальцев – 10 цифр.
ТАБЛИЦА ЧИСЕЛ В РАЗЛИЧНЫХ СИСТЕМАХ СЧИСЛЕНИЯ.
десятичная |
восьмеричная |
шестнадцатиричная |
двоичная |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
2 |
2 |
2 |
10 |
3 |
3 |
3 |
11 |
4 |
4 |
4 |
100 |
5 |
5 |
5 |
101 |
6 |
6 |
6 |
110 |
7 |
7 |
7 |
111 |
8 |
10 |
8 |
1000 |
9 |
11 |
9 |
1001 |
10 |
12 |
A |
1010 |
11 |
13 |
B |
1011 |
12 |
14 |
C |
1100 |
13 |
15 |
D |
1101 |
14 |
16 |
E |
1110 |
15 |
17 |
F |
1111 |
16 |
20 |
10 |
10000 |
17 |
21 |
11 |
10001 |
18 |
22 |
12 |
10010 |
19 |
23 |
13 |
10011 |
Как же осуществлять переход из одной системы счисления в другую?
Рассмотрим на примере, возьмем число 59 и переведем его во все системы счисления.
59 |_2_
58 29 |_2_
1 28 14 |_2_
1 14 7 |_2_
0 6 3 |_2_
1 2 1
1
59 |16
48 3
11
59 |_8
56 7
3
Выделенные цифры размещаются в обратном порядке, 11 изображается в шестнадцатиричной системе символом В. Индексы означают - основание системы счисления.
= = =
Проверим правильность перевода:
Интересно, что перевод из двоичной в восьмеричную и шестнадцатиричную очень прост, нужно только разделить двоичное число соответственно по три и четыре двоичных цифры начиная с младшей и записать их в этих системах. (см. таблицу).
111 | 011 11 | 1011
7 3 3 В
Алгоритм.
Основой любой программы является алгоритм. Это точная последовательность действий позволяющих решить задачу. Изображение алгоритма может быть словесное, в виде блок-схемы и на языке программирования.
Алгоритм кипячения чайника.
Налить в чайник воды.
Поставить на включенную плиту.
Если закипел, то выключить и снять с плиты.
Иначе ждать пока закипит.
Алгоритм решения квадратного уравнения.
Ввести a, b, c.
Вычислить D= .
Если D>=0 , то вычислить , .
Иначе «нет действительных корней».
Такое представление алгоритма очень близко к записи на языке программирования.
Языковые выражения в любом языке программирования запишутся операторами присваивания, цикла, ввода, вывода и так далее, изучению такого изложения алгоритма и будет посвящен наш курс.
ЛОГИЧЕСКАЯ СХЕМА ЭВМ.
Любой современный компьютер имеет ОП – оперативную память, ЦП – центральный процессор, ВП – внешнюю память и У В/В – устройства ввода вывода.
ОП – хранит информацию в процессе выполнения задачи.
ЦП – выполняет действия.
ВП – долговременно хранит информацию (жесткие диски, гибкие диски).
У В/В – сервисные устройства для ввода и вывода информации ( клавиатура, монитор, принтер).
СТРУКТУРА ПАМЯТИ.
Наименьшая единица памяти 1 бит – один двоичный разряд.
8 бит=1Б (байт) самая маленькая единица обмена памяти, которую можно достать.
1 ячейка (машинное слово) – 4Б для 32-х разрядного компьютера.
- 2Б для 16-ти разрядного компьютера.
Память ЭВМ можно представить как вытянутую в ленту последовательность ячеек, перенумерованных подряд. Каждый байт имеет свой адрес. В памяти хранятся программы и данные. Объем ОП измеряется в КБ (килобайтах) и МБ (мегабайтах).
1КБ=1024Б
1МБ=1024КБ
ВИДЫ И ТИПЫ ДАННЫХ.
Виды данных – константы, переменные, структуры данных ( массивы, списки, структуры).
Константа – часть памяти, иногда именованная, не изменяющая свое значение.
Переменная – именованная часть памяти способная изменять свое значение.
Любая переменная имеет кроме имени еще и адрес.
Имя переменной – любая последовательность символов (латинских букв, цифр и подчерка), первая обязательно буква. Причем различаются только первые 8 символов.
Примеры правильных имен переменных: adc a11 Get Key a_a.
Венгерская анатация – правило, по которому переменная содержит префикс, определяющий ее тип.
Примеры: cname – имя класса.
Тип переменной определяет ее внутреннее представление в памяти.
ТАБЛИЦА ОСНОВНЫХ ТИПОВ ДАННЫХ.
Ключевое слово |
Тип |
Внутреннее представление |
Длина |
Int Long Short Unsigned
Char
Float Double |
Целый Целый длинный Целый короткий Целый без знака
Текстовый или символьный
Вещественный Вещественный длинный
|
0 32 + 10100010011
01010101110101
0 7
+ мантисса + порядок
|
4Б 4Б 2Б 4Б
1Б
4Б 8Б
|
Описание типов переменных производится с помощью оператора описания типа:
int a, b ;
char tt ;
Тип явно указанных констант определяется по их записи:
5 -273 2Е10 - целые константы, последняя означает , если к записи константы добавляется символ L, то она целая длинная. Например 123567L.
В записи вещественных констант присутствует «точка» - 5.012 134.99 -5.5Е-12, последняя означает - .
Восьмеричные константы всегда начинаются с 0 – 0537, шестнадцатиричные начинаются с 0х – 0х12FE1. Текстовые константы изображаются явно в апострофах – ‘s’ ‘1’.
ОПЕРАТОРЫ ЯЗЫКА С.
Программа состоит из операторов, в конце каждого оператора ставится точка с запятой. Cложный оператор – последовательность операторов, заключенная в фигурные скобки {}.
ОПЕРАТОР ПРИСВАИВАНИЯ.
Общий вид оператора присваивания а=в ; где а – переменная или элемент массива, в – выражение. Оператор присваивания работает строго справа на лево, то есть вычисляется выражение справа и его значение присваивается переменной стоящей слева. На пример
А=250 ;
m=2+3/b ;
d=m=b+s ;
Выражения справа состоят из операндов – переменные и константы и операций.
Операции:
+ - сложение,
- - вычитание,
* - умножение,
/ - деление,
% - взятие остатка ( только для целых),
++ - увеличение на единицу,
-- - уменьшение на единицу,
(тип) – преобразование типа.
Операция деления для объектов целого и вещественного типа производится по разному.
int f ; float s ;
f=10/3 ; s= 10./3. ;
переменная f будет равна 3, а переменная s – 3.333, то есть в первом случае остаток будет отброшен. При целочисленном делении нужно быть очень осторожным, так как 1/3 даст 0, остаток отбросится, целое число не может стать дробным.
Оператор i=i+1 ; можно записать короче i++ ;
В языке С принята укороченная запись операторов переприсваивания:
a=a+i ; a+=i ;
a=a-i ; a-=i ;
a=a*i ; a*=i ;
a=a/i ; a/=i ;
Рассмотрим решение задачи – задано двухзначное число, получить его цифры.
int a=57, b, c ;
b=a/10 ; // старшая цифра числа а.
c=a%10 ; // младшая цифра числа а.
Комментарии в языке C пишутся двумя способами:
// любой текст до конца строки, не будет восприниматься транслятором.
/* любые слова на произвольное
количество строк, не воспринимаются транслятором
до следующей */
УСЛОВНЫЙ ОПЕРАТОР.
Для записи условия используются операции отношения:
== проверка равенства;
!= не равны;
> больше;
< меньше;
>= больше и равно;
<= меньше и равно.
Значение логического выражения ИСТИНА или ЛОЖЬ.
Логические выражения можно объединять используя логические связки && логичесое И, || логическое ИЛИ. Логическое выражение, объединенное связкой || истино, когда истино хотя бы одно из выражений. Логическое выражение, объединенное связкой && истино, когда истино каждое из логических выражений. Например, математическая запись a<b<c, запишется
(a<b)&&(b<c).
Общий вид сокращенного условного оператора:
if( условие) оператор ;
Работает он следующим образом, если истинно условие в скобках, то выполняется оператор стоящий справа, в противном случае переходим к следующему оператору.
if (a>0) b=10 ; Если а положительное b будет присвоено 10.
Общий вид полного условного оператора:
if ( условие) оператор1 ;
else оператор2 ;
Работает он следующим образом, если истинно условие в скобках, то выполняется оператор1, в противном случае выполняется оператор2.
Рассмотрим пример:
Записать фрагмент программы на языке С можно несколькими различными способами.
Самый простой:
if (x<=a) x=a ;
if ( x>=b) x=b ;
if ( (a<x)&&(x<b)) x=0 ;
еще один способ:
if (x<= a) x=a ;
else if ( x>=b) x=b ;
else x=0 ;
Наиболее интересен такой способ:
x=0 ;
if (x<=a) x=a ;
if (x>=b) x=b ;
Внимание: при неправильной записи условия не будет сообщения об ошибке, а и d не будут сравниваться.
If( a=d) b=10 ; должно быть так if ( a==d) b=10 ;
При сравнении с нулем можно не писать знаки сравнения:
If (a) b=0 ; Что означает, если а равно 0, то b присвоить 0. Используя это свойство, можно писать всегда истинные, (любое не нулевое выражение в скобках), или всегда ложные условные операторы.
If ( -100) a=100; всегда истина, все равно, что написать а=100 ;
If ( 0) a=100 ; всегда ложь, а=100 никогда не присвоится.
Рассмотрим еще несколько примеров с использованием условного оператора.
Задано целое число, определить делится ли оно на 5.
int a ;
Ввод а ;
if (a%5==0) вывод «число делится на 5» ;
еlse вывод « число не делится на 5» ;
Из трех заданных чисел определить максимальное.
Int a, b, c, max ;
Ввод a, b, c ;
max=a ;
if (b>max) max=b ;
if (c>max) max=c ;
вывод max ;
без ввода дополнительной переменной max алгоритм будет менее наглядным и более трудным.
int a, b, c ;
Ввод a, b, c ;
if ((a>=b)&&(a>=c)) вывод а ;
if ((b>=a)&&(b>=c)) вывод b ;
if ((c>=a)&&(c>=b)) вывод с ;
Примечание. В случае равенства двух или трех переменных результат будет печататься несколько раз.