- •3 Базовые структуры алгоритмов — это определенный набор блоков и стандартных способов их соединения для выполнения типичных последовательностей действий.
- •4) Линейный алгоритм
- •5) Разветвляющийся алгоритм
- •6) Циклический алгоритм
- •Смысловые имена переменных
- •10) Функция стандартного вывода printf()
- •Функция стандартного ввода scanf()
- •13) Вложенные циклы
- •14) Массивы. Общие сведения
- •Описание массивов
- •1. Объявление массива
- •2. Инициализация массивов
- •16) Вычисление суммы элементов массива
- •Пример 2.3.
- •17) Перестановка двух элементов массива
- •18) Поиск минимального и максимального элемента массива и его порядкового номера (индекса)
- •Объявление функции
- •20) Понятие указателя
- •Адрес переменной и значение переменной по адресу
- •Применение указателей
- •Сбор информации
- •Хранение информации
- •Процесс передачи
- •Обработка информации
- •24) Архитектура эвм
- •25) Структурная схема и устройства пк
- •Микропроцессор
- •Оперативная память
- •Контроллеры
- •Системная магистраль
- •Внешняя память. Классификация накопителей
- •Дополнительные устройства
- •Десятичная система счисления
- •Двоичная система счисления
- •Из двоичной в десятичную систему счисления
- •Из десятичной в двоичную систему счисления
- •Заключение
Адрес переменной и значение переменной по адресу
Рассмотрим две переменные: целочисленную переменную x и указатель на целочисленную переменную.
int x;
int *p;
Чтобы получить адрес переменной, нужно перед ее именем написать амперсанд.
p = &x;
Данная конструкция будет выполняться справа налево. Сначала с помощью оператора &, примененного к переменной x, будет получен адрес x. Затем адрес x будет сохранен в указателе p.
Есть и обратная операция. Чтобы получить значение переменной по ее адресу, следует написать звездочку перед именем указателя.
int y = *p;
Такая операция в русском языке называется не слишком благозвучным словом «разыменование». В английском — dereference.
В данном примере с помощью оператора * мы получим то значение, которое находится в памяти по адресу p. Затем мы сохраним его в переменную y. В итоге получится, что значения x и y совпадают.
Применение указателей
Обычно функция возвращает одно значение. А как вернуть больше одного? Рассмотрим код функции, которая меняет местами две переменные.
int swap(double a, double b) {
double temp = a;
a = b;
b = temp;
}
Пусть есть переменные x и y с некоторыми значениями. Если выполнить функцию, передав в нее x и y, окажется, что никакого обмена не произошло. И это правильно.
При вызове этой функции в стеке будут сохранены значения x и y. Далее a и b получат значения x и y. Будет выполнена перестановка. Затем функция завершится и значения x и y будут восстановлены из стека. Все по-честному.
Чтобы заставить функцию работать так, как нужно, следует передавать в нее не значения переменных x и y, а их адреса. Но и саму функцию тогда нужно адаптировать для работы с адресами.
void swap(double* a, double* b) {
double temp = *a;
*a = *b;
*b = temp;
}
Не стоить забывать о том, что и вызов функции теперь должен выглядеть иначе.
swap(&x, &y);
Теперь в функцию передаются адреса. И работа ведется относительно переданных адресов.
Если функция должна вернуть несколько значений, необходимо передавать в нее адреса.
Если функция должна менять значение переменной, нужно передавать ей адрес этой переменной.
У тех, кто только начинает программировать на C, есть одна распространенная ошибка. При вводе с клавиатуры с помощью функции scanf() они передают значение переменной, а не ее адрес. А ведь scanf() должна менять значение переменной.
Еще один важный случай, когда указатели крайне полезны — это передача большого объема данных.
Немного посчитаем.
Пусть нам нужно передать в функцию целое число типа int. Таким образом мы передаем в функцию sizeof(int) байт. Обычно это 4 байта (размер будет зависеть от архитектуры компьютера и компилятора). 4 байта — не так много. 4 байта уйдут в стек. Потому что имеет место передача по значению.
Теперь нам нужно передать 10 таких переменных. Это уже 40 байт. Тоже невелика задача.
Вообразим себя проектировщиками Большого Адронного Коллайдера. Вы отвечаете за безопасность системы. Именно вас окружают люди с недобрыми взглядами и факелами. Нужно показать им на модели, что конца света не будет. Для этого нужно передать в функцию collaiderModel(), скажем, 1 Гб данных. Представляете, сколько информации будет сохранено в стек? А скорее всего программа не даст вам стек такого объема без специальных манипуляций.
Когда нужно передать большой объем данных, его передают не копированием, а по адресу. Все массивы, даже из одного элемента, передаются по адресу.
Указатели — это мощный инструмент. Указатели эффективны и быстры, но не слишком безопасны. Потому как вся ответственность за их использования ложится на разработчика. Разработчик — человек. А человеку свойственно ошибаться.
Ссылки
В языке C++ появился новый механизм работы с переменными — ссылки. Функция swap() была хороша, только не слишком удобно применять разыменование. С помощью ссылок функция swap() может выглядеть аккуратнее.
#include <stdio.h>
void swap(double& a, double& b) {
double temp = a;
a = b;
b = temp;
}
А вызов функции тогда будет уже без взятия адреса переменных.
swap(x, y);
Конструкция double& объявляет ссылку на переменную типа double. При таком объявлении функции в стек будут положены не значения переменных, а их адреса.
Ссылка — это указатель, с которым можно работать, как с обычной переменной.
Ссылка не может быть равна NULL. Указатель может. Ссылка не может быть непроинициализирована. Указатель может.
Для взятия адреса переменной и для объявления ссылки используется одинаковый символ — амперсанд. Но в случае взятия адреса & стоит в выражении, перед именем переменной. А в случае объявления ссылки — в объявлении, после объявления типа.
Использование ссылок и указателей — это очень широкая тема. Описание основ на этом закончим.
21) Информа́тика (от информация и автоматика) — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации, обеспечивающих возможность её использования для принятия решений[1]. Также, под информатикой понимают научно-практический подход к вычислению и его применениям, базирующийся на систематическом изучении целесообразности, структуры, выражения и механизации методических процедур (или алгоритмов), которые лежат в основе приобретения, представления, обработки, хранения, передачи и доступа к информации, будь то информация, кодируемая в виде битов в памяти компьютера или записанная в генах и белковых структурах в биологической клетке[2]. Она включает дисциплины, относящиеся к обработке информации в вычислительных машинах и вычислительных сетях: как абстрактные, вроде анализа алгоритмов, так и конкретные, например разработка языков программирования и протоколов передачи данных.
Информатизация общества – это процесс, затрагивающий все сферы общества (социальную, экономическую, техническую и научную) и направленный на создание лучших условий для удовлетворения информационных потребностей всех видов организации и людей.
Информатизация была отмечена в первую очередь в странах Запада и США, а также в Японии (60-80-е годы XX века). Производству требовалось информационно обслуживание, направленное на обработку большого количества информации.
Информатизация стала возможной благодаря появлению компьютеров, которые представляют собой универсальное средство для работы с информацией и обеспечивают широкие возможности для коммуникации. Социальный прогресс на сегодняшний день не возможен без информатизации, а, следовательно, и без компьютеров. Поэтому часто говорят о компьютеризации общества, где особое место уделяют развитию и внедрению вычислительных машин. Однако информатизация общества – это не то же самое, что компьютеризация общества. При информатизации на первый план выходит комплекс мероприятий, целью которых является использование знания и данных во всех сферах цивилизации. Поэтому информатизация – это более широкое понятие, чем компьютеризация. Информатизация – это как бы надстроечный процесс, происходящий на базе компьютеризации, процесс формирования новой, автоматизированной среды зарождения знаний, их переработки, распространения и превращения в силу, в материальный фактор.
Появление компьютеров и сетей оказало влияние на производительность труда. Поэтому во многих странах мира уделяется особое внимание процессу информатизации, т.к. ее игнорирование может привести к потере рынков труда и сбыта, резкому снижению конкурентоспособности страны.
На государственном уровне могут приниматься такие решения как увеличение инвестиций в исследования, улучшение образования, повышение качества труда и т.п. Особое внимание информационным технологиям уделяют еще и потому, что они лежат в основе развития всех других отраслей.
Развитие информатизации может потребовать от государства отказа от стремления во чтобы то ни стало обеспечить экономический рост страны, активное внедрение наукоемких технологий, развитие новых форм инфраструктуры, использование научных достижений, затрат значительных средств на информатизацию.
Говоря о сегодняшнем дне, отмечают переход общества от индустриального к информационному типу, где главными ценностями становятся знания, а не материальные ресурсы.
При этом следует помнить, что бездумная и слишком активная информатизация общества может привести к социальному регрессу, подорвав устоявшиеся веками коммуникационные связи. Поэтому следует уделять внимание и информационной культуре, т.е. умению работать с информацией и техникой, осуществляющей ее обработку.
Альтернативы информатизации нет. Это объективный этап социального прогресса во всех областях, прежде всего в экономике, управлении, науке и технологии.
К первоочередным проблемам информатизации следует отнести психологическую проблему готовности населения к переходу в информационное общество. Этот переход в настоящее время затрудняется низким уровнем информационной культуры населения, недостаточной компьютерной грамотностью, а отсюда и низкими информационными потребностями и отсутствием желания их развивать. Наблюдается невосприимчивость экономики к достижениям в инфосфере.
22) Информация - это настолько общее и глубокое понятие, что его нельзя объяснить одной фразой. В это слово вкладывается различный смысл в технике, науке и в житейских ситуациях.
В обиходе информацией называют любые данные или сведения, которые кого-либо интересуют, например сообщение о каких-либо событиях, о чьей-либо деятельности и т. п. «Информировать» в этом смысле означает «сообщить нечто, неизвестное раньше».
|
Информация — сведения об объектах и явлениях окружающей среды, их параметрах, свойствах и состоянии, которые воспринимают информационные системы (живые организмы, управляющие машины и др.) в процессе жизнедеятельности и работы. |
Одно и то же информационное сообщение (статья в газете, объявление, письмо, телеграмма, справка, рассказ, чертеж, радиопередача и т. п.) может содержать разное количество информации для разных людей в зависимости от их накопленных знаний, от уровня понимания этого сообщения и интереса к нему. Так, сообщение, составленное на японском языке, не несет никакой новой информации человеку, не знающему этого языка, но может быть высокоинформативным для человека, владеющего японским. Никакой новой информации не содержит и сообщение, изложенное на знакомом языке, если его содержание непонятно или уже известно.
Информация есть характеристика не сообщения, а соотношения между сообщением и его потребителем. Без наличия потребителя, хотя бы потенциального, говорить об информации бессмысленно.
В случаях, когда говорят об автоматизированной работе с информацией посредством каких-либо технических устройств, обычно в первую очередь интересуются не содержанием сообщения, а тем, сколько символов это сообщение содержит.
Применительно к компьютерной обработке данных под информацией понимают некоторую последовательность символических обозначений (букв, цифр, закодированных графических образов и звуков и т. п.), несущую смысловую нагрузку и представленную в понятном компьютеру виде. Каждый новый символ в такой последовательности символов увеличивает информационный объем сообщения.
Информация может существовать в виде:
текстов, рисунков, чертежей, фотографий;
световых или звуковых сигналов;
радиоволн;
электрических и нервных импульсов;
магнитных записей;
жестов и мимики;
запахов и вкусовых ощущений;
хромосом, посредством которых передаются по наследству признаки и свойства организмов, и т. д.
Накопление информации Принятую информацию получатель может использовать неоднократно. С этой целью он должен зафиксировать ее на материальном носителе (магнитном, фото, кино и др.). Процесс формирования исходного, несистематизированного массива информации называется накоплением информации. Среди записанных сигналов могут быть такие, которые отражают ценную или часто используемую информацию. Часть информации в данный момент времени особой ценности может не представлять, хотя, возможно, потребуется в дальнейшем. Накопление и хранение информации вызвано многократным ее использованием, применением постоянной информации, необходимостью комплектации первичных данных для их обработки. Хранение информации - это процесс поддержания исходной информации в виде, обеспечивающем выдачу данных по запросам конечных пользователей в установленные сроки. Хранение информации осуществляется на машинных носителях в виде информационных массивов, где данные располагаются по установленному в процессе проектирования группировочному признаку. Поиск данных - это выборка нужных данных из хранимой информации, включая поиск информации, подлежащей корректировке или замене. Процедура поиска информации выполняется на основе составленного запроса на нужную информацию.
