Важность C при обучении программированию




Заключение.

7. Список литературы____стр

Тема проекта: Современные языки программирования семейства Си\Си.

 

Автор проекта: Слушаев Михаил Андреевич

Руководитель проекта: Смагина Наталия Ивановна

Цель проекта: узнатьо языке Си.

Задачи проекта:

1. Пояснить что за «семейство Си»?

2. Как создавался язык программирования Си

3. Зачем нужен Си?

4. Важность Cи при обучении программированию

5. Уязвимости языка Си.

6. Оформить работу.

 

Этапы работы над проектом:

 

1. Подготовка: Определение темы и целей проекта.

 

2. Планирование: Определение источников информации; определение способов её сбора и анализа. Определение способа представления результатов (формы отчета). Установление процедур и критериев оценки результата и процесса разработки проекта.

 

3. Исследование: Сбор информации.

 

4.Анализ и обобщение: Анализ информации, оформление результатов в виде текста и презентации, формулировка выводов.

 

5. Оценка результата и процесса: Анализ выполнения проекта; причины успехов и неудач.

 

Введение

Актуальность.

Для начала нужно понять что такое Си. Си — язык общего назначения. В нем нет классов, нет интерфейсов. Зато в нем есть гораздо более полезные и мощные инструменты — например, указатели и многие другие, позволющие манипулировать памятью прямо во время исполнения программы. Также С использовался как «строительный материал» для других, более высокоуровневых языков: Java, D, Cи#. Cи++ и Objective-C после компиляции превращаются в код на C, который затем компилируется в машинный код ради более быстрого исполнения.

Цель: понять все плюсы и минусы семейства Си.

Что за «семейство Си»?

Ответ на этот вопрос зависит от того, кого вы спрашиваете. Разработчики любят только одну вещь больше, чем споры о происхождении и взаимном влиянии языков программирования, — спор о том, какой язык лучше. Но вне зависимости от этого существует общепринятое мнение, что к семейству С относятся сам С, С++, C#, Objective-C и Java.
В качестве очень грубого определения можно сказать, что язык относится к семейству С, если в нём для выделения функциональных блоков используются фигурные скобки {}. Многие языки этого семейства (но не все) являются строго типизированными. Большинство из самых популярных языков являются объектно-ориентированными (С++, С#, Java)однако это не касается самого C. Немало распространённых языков, не относящихся к семейству С, испытало на себе его влияние: Python, Perl, PHP, Ruby и т.д. Однако оценки степени и важности этого влияния сильно различаются. Например, в JavaScript используется синтаксис по типу С, но если копнуть глубже, то эти языки сильно отличаются друг от друга.
Если вы освоите один из языков семейства С, то это даст вам понимание фундаментальных основ программирования: переменных, значений, типов, присваивания, выражений, функций, параметров, возвращаемых значений, потока команд и т.д. Это базовые концепции, которые должен знать любой программист, и, изучив язык семейства С, вы будете на одной волне с большинством других разработчиков, а это важно для многих работодателей.

Как создавался Си

В 1970 BellLabs приобрела для проекта компьютер PDP-11. Так как B был готов к работе на PDP-11, Томпсон переписал часть UNIX на B.
Но модель B и BCPL подразумевала издержки при работе с указателями: правила зыка, определяя указатель как индекс в массиве слов, делали указатели индексами слов. Каждое обращение к указателю при исполнении генерировало масштабирование указателя в адрес байта, который ожидал процессор.
Поэтому становилось ясно, что для того, чтобы справиться с символами и байтовой адресацией, а также подготовиться к грядущей аппаратной поддержке вычислений с плавающей точкой, нужна типизация.
В 1971 году Ритчи начал создавать расширенную версию B. Сначала он назвал её NB (New B), но когда язык стал сильно отличаться от B, название сменили на C. Вот что, писал об этом сам Ритчи: Для любого объекта такого составного типа, уже был способ указать на объект, который является его частью: индексировать массив, вызвать функцию, использовать с указателем оператор косвенного обращения. Аналогичное рассуждение приводило к синтаксису объявления имён, который отражает синтаксис выражения, где эти имена используются. Так

int i, *pi, **ppi;

объявляет целое, указатель на целое и указатель на указатель на целое. Синтаксис этих объявлений отражает тот факт, что i, *pi, и **ppi все в результате дают тип int, когда используются в выражении. Похожим образом

intf(), *f(), (*f)();

объявляют функцию, возвращающую целое, функцию возвращающую указатель на целое, указатель на функцию возвращающую целое;

int *api[10], (*pai)[10];

объявляют массив указателей на целое, указатель на массив целых.
Во всех этих случаях объявление переменной напоминает её использование в выражении, чей тип – это то, что находится в начале объявления.
Первая книга по Cи. Книга «Язык программирования Си», написанная Брайаном Керниганом и ДеннисомРитчи и опубликованная в 1978 году, стала библией программистов на Си. При отсутствии официального стандарта эта книга – известная также как K&R, или «Белая Книга», как любят называть поклонники си – фактически стала стандартом.

Зачем нужен Си?

 

Начнем с того, что большая часть системного программного обеспечения пишется на языке Си. Ядро популярнейшей opensource ОС Linux было написано на Си.

Огромным плюсом Си является то, что каждая инструкция языка транслируется в машинный код прямым и понятным образом. Исполняется ровно тот код, который программист видит на экране. Впрочем, в современных компиляторах, конечно, могут применяться хитрые оптимизации, но в меньшинстве случаев.

Стоит также отметить, что наиболее популярные языки программирования тем или иным образом связаны с Си. Так, например, Java и C# имеют так называемый Си-подобный синтаксис, а C++ и Objective-C в том или ином роде являются расширениями Си.

Если вы пишете код на каком-нибудь динамическом языке программирования, будь то PHP, JavaScript или Python, то его интерпретатор, среда исполнения и большинство библиотек в основном написаны на Си. Следовательно, чтобы понять особенности поведения того или иного языка, нужно знать особенности языка Си. А если вы вышли за рамки возможностей своего языка программирования, то не успеете оглянуться, как начнёте писать новое расширение на Си.

К тому же, знание Си позволяет программисту по-настоящему оценить все прелести высокоуровневых языков программирования, а также и ограничения, которые возникают при их использовании.

И это далеко не все доводы в пользу изучения Си.

 

Важность C при обучении программированию

 

 

Введение

Программирование — процесс создания разработчиком софта, который бы запускался на компьютере и решал конечное количество проблем. Люди занимались программированием с тех пор, как были изобретены компьютеры. Сначала это делалось с помощью вакуумных трубок, а после изобретения транзисторов — с помощью бинарных кодов. Первые низкоуровневые языки программирования появились одновременно с Colossus — первым программируемым компьютером.

С тех пор в этой сфере произошло много изменений, разработчики постоянно улучшают компьютерные системы. В наши дни мы можем наблюдать компьютеры, которые в тысячи раз мощнее тех, что были в начале технологической эры. Сначала все компьютеры были одинаковыми и использовали одинаковую архитектуру, но со временем появилась необходимость в операционной системе, которая бы взяла на себя управление базовыми операциями над «железом» компьютеров. Так появились несколько ОС. ДеннисРитчи был человеком, который переписал одну из них — Unix — с ассемблера на Си. Для того, чтобы «обучать» операционные системы, необходим был язык программирования, который говорил бы им, что делать. Таким образом, программирование — это процесс создания набора команд, которые говорят, какие операции должна исполнять ОС.

C — низкоуровневый язык программирования, который поддерживает прямое управление «железом». Он был разработан ДеннисомРитчи в 1973-ем году в AT&T Labs. С помощью этого языка вы можете с легкостью управлять памятью, процессором, регистрами и даже подключенными устройствами! Ассемблер также был одним из первых языков низкоуровнего программирования, изобретенных после бинарных кодов, но он был менее понятен человеку, чем Cи.

 

 

Уязвимости.

По тексту сказанному выше можно предположить что это самая идеальная и практичная программа, ноМногие элементы Си потенциально опасны, а последствия неправильного использования этих элементов зачастую непредсказуемы. Керниган говорит: «Си — инструмент, острый, как бритва: с его помощью можно создать и элегантную программу, и кровавое месиво ». В связи со сравнительно низким уровнем языка многие случаи неправильного использования опасных элементов не обнаруживаются и не могут быть обнаружены ни при компиляции, ни во время исполнения. Это часто приводит к непредсказуемому поведению программы. Иногда в результате неграмотного использования элементов языка появляются уязвимости в системе безопасности. Необходимо заметить, что использования многих таких элементов можно избежать.

Примером ошибки является обращение к несуществующему элементу массива. Несмотря на то, что Си непосредственно поддерживает статические массивы, он не имеет средств проверки индексов массивов (проверки границ). Например, возможна запись в шестой элемент массива из пяти элементов, что, естественно, приведёт к непредсказуемым результатам. Частный случай такой ошибки называется ошибкой переполнения буфера. Ошибки такого рода приводят к большинству проблем с безопасностью.

Другим потенциальным источником опасных ситуаций служит механизм указателей. Указатель может ссылаться на любой объект в памяти, включая и исполняемый код программы, и неправильное использование указателей может порождать непредсказуемые эффекты и приводить к катастрофичным последствиям. К примеру, указатель может быть неинициализированным или, в результате неверных арифметических операций над указателем, указывать в произвольное место памяти; на некоторых платформах работа с таким указателем может вызвать аппаратную остановку программы, на незащищённых же платформах это может привести к порче произвольных данных в памяти, причём эта порча может проявиться в самые произвольные моменты времени и намного позже момента порчи. Также область динамической памяти, на которую ссылается указатель, может быть освобождена (и даже выделена после этого под другой объект) — такие указатели называются «висячими». Или, наоборот, после манипуляций с указателями на область динамической памяти может не остаться ссылок, и тогда эта область, называемая «мусором» (garbage), никогда не будет освобождена, что может приводить к «утечкам памяти» в программе. В других языках подобные проблемы пытаются решить введением более ограниченных ссылочных типов.Проблемой является также то, что автоматически и динамически создаваемые объекты не инициализируются и они могут содержать значения, оставшиеся в памяти от ранее удалённых объектов. Такое значение полностью непредсказуемо, оно меняется от одной машины к другой, от запуска к запуску, от вызова функции к вызову. Если программа использует такое значение, то результат будет непредсказуемым и не обязательно проявится сразу. Современные компиляторы пытаются диагностировать эту проблему некоторым анализом исходного кода, хотя в общем случае статическим анализом это решить нельзя.

intoperator+ (intvalue) { returnnumber + value; }

#include<stdio.h> /* Стандартный заголовочный файл ввода-вывода */

#include<iostream> /* Библиотека (стандарт) */

#include<locale.h> /* Русификатор */

#include<windows.h> /* Русификатор */

usingnamespacestd;

 

intmain(intargc, char* argv[])

{

setlocale(LC_CTYPE,"Russian");

doubleplus, minus, pow, div; // объявление переменных через запятую

double a1; // отдельное объявление переменной a1

double a2; // отдельное объявление переменной a2

cout<< "Введите первое число: ";

cin>> a1;

cout<< "Введите второе число: ";

cin>> a2;

plus = a1 + a2; // операция сложения

minus = a1 - a2; // операция вычитания

pow = a1 * a2; // операция умножения

div = a1 / a2; // операция деления

cout<< a1 << "+" << a2 << "=" <<plus<<endl;

cout<< a1 << "-" << a2 << "=" <<minus<<endl;

cout<< a1 << "*" << a2 << "=" <<pow<<endl;

cout<< a1 << "/" << a2 << "=" <<div<<endl;

system("pause");

return 0;

}

// Простая дробь 2/3 simple_fractionfr(2, 3); doublesum = fr + 10; // сумма doublediff = fr - 10; // разность doublefactor = fr * 10; // произведение doublediv = fr / 10; // частное

 

Вывод: Скорее всего, вам придётся выбирать язык для изучения исходя из того, какие проблемы вы хотите решить. Или вам предложат тот или иной вариант в компании, где вы работаете. Не менее важным критерием может быть и «актуальность» того или иного языка. Несомненно, круто быть одним из первых освоивших новый язык программирования, о котором говорят на каждом форуме углу. Если вам повезёт, то этот новый язык станет популярным и вы сможете снять «сливки».
Если вы изучите один из С-языков, то вряд ли вас кто-то за это наградит, но однажды этот опыт и знания могут оказать вам неоценимую поддержку.

 

Список используемой литературы

 

1. https://habrahabr.ru/post/304034/

 

2. Р.Н. Ботавина «Этика деловых отношений».

 

3. А.Я. Кибанов, Д.К. Захаров, В.Г. Коновалова «Этика деловых отношений».

 

4. Емышева Е. «Некоторые особенности ведения переговоров с представителями разных стран».



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-10-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: