Языки программирования, классификация и разработка ПО на C++

Enviado por Anónimo y clasificado en Informática

Escrito el en ruso con un tamaño de 1,11 MB

Билет 1: Языки программирования. Классификация языков программирования. Этапы программирования.

Языки программирования:

Это формальные языки, предназначенные для описания алгоритмов и структур данных, с целью их последующего выполнения компьютером.

Классификация языков программирования:

  1. По уровню абстракции:
    • Низкоуровневые — ассемблер, машинный код.
    • Высокоуровневые — C, C++, Python, Java и др.
  2. По способу реализации:
    • Интерпретируемые — Python, JavaScript.
    • Компилируемые — C, C++.
  3. По парадигме программирования:
    • Процедурные — C, Pascal.
    • Объектно-ориентированные (ООП) — C++, Java.
    • Функциональные — Haskell, Lisp.
    • Логические — Prolog.

Этапы программирования:

  1. Процедурное программирование:
    • Основа — процедуры (функции).
    • Программа разбивается на подпрограммы.
    • Пример: язык C.
  2. Модульное программирование:
    • Логическое разделение программы на модули.
    • Каждый модуль — самостоятельная часть.
    • Повышает читаемость и повторное использование кода.
  3. Объектно-ориентированное программирование (ООП):
    • Основные принципы: инкапсуляция, наследование, полиморфизм.
    • Пример: C++, Java.
    • Используются объекты и классы.
  4. Компонентное программирование:
    • Программа строится из готовых компонентов (библиотек, модулей). Активно используется в .NET, JavaBeans.

Билет 2: Этапы создания программного обеспечения. Структурный подход к разработке алгоритмов. Процесс компиляции программы, схема. Системы программирования. Общая схема работы транслятора.

Этапы создания программного обеспечения:

  • Постановка задачи.
  • Анализ требований.
  • Проектирование архитектуры и алгоритмов.
  • Кодирование.
  • Тестирование.
  • Отладка.
  • Сопровождение и обновление.

Структурный подход к разработке алгоритмов:

Алгоритм делится на блоки с единой входной и выходной точкой.

Используются три базовые конструкции:

  • Последовательность
  • Ветвление (if/else)
  • Цикл (for, while)

Повышает читаемость и сопровождаемость кода.

Процесс компиляции программы:

  • Предобработка — обработка директив #include, #define.
  • Компиляция — преобразование кода в объектные файлы.
  • Компоновка — объединение объектных файлов и библиотек в исполняемый файл.

Схема компиляции: Исходный код ➔ Предпроцессор ➔ Объектный код ➔ Компоновщик ➔ Исполняемый файл

Системы программирования:

Это совокупность программных средств для разработки программ: компиляторы, редакторы кода, отладчики, библиотеки, системы сборки и т.д.

Примеры:

GCC (GNU Compiler Collection), Visual Studio, Code::Blocks, CMake

Общая схема работы транслятора:

  • Чтение и анализ исходного текста.
  • Построение промежуточного представления.
  • Генерация объектного кода.
  • Сообщение об ошибках (синтаксических, семантических и пр.).

Билет 3: Язык программирования C++. Структура программы. Директивы препроцессора #include, #define. Примеры.

Язык C++:

C++ — это компилируемый, статически типизированный язык программирования общего назначения с поддержкой объектно-ориентированного, процедурного и обобщённого программирования.

Структура простой программы на C++:

#include <iostream> // Подключение библиотеки
#define PI 3.14159        // Макрос препроцессора
int main() {            // Точка входа
    std::cout << "Hello, world!" << std::endl;
    return 0;           // Возврат значения
}

Основные элементы структуры:

  • Директивы препроцессора: #include, #define
  • Функция main() — точка входа в программу.
  • Операторы вывода / ввода: std::cout, std::cin
  • Ключевые слова: int, return

Директива #include:

Подключает внешний файл или стандартную библиотеку:

  • #include <iostream> — подключает стандартный ввод/вывод.
  • #include "myheader.h" — подключение пользовательского заголовочного файла.

Директива #define:

Определяет макрос (константу или шаблон):

#define PI 3.14
#define SQUARE(x) ((x)*(x))

🔶 Важно: #define не имеет типа, просто подставляет текст до компиляции.

Пример использования:

#include <iostream>
#define GREETING "Hello"
int main() {
    std::cout << GREETING << ", student!" << std::endl;
    return 0;
}

Билет 4: Элементы языка C++, основные понятия: алфавит, комментарии, идентификаторы, служебные слова, литералы, Escape-последовательности, операторы, знаки пунктуации.

1. Алфавит языка C++:

Состоит из:

Букв (A–Z, a–z), Цифр (0–9), Специальных символов (+, -, *, /, {}, ;, #, и т.д.), Пробелов и управляющих символов (перевод строки, табуляция)

2. Комментарии:

  • Однострочные: // это комментарий
  • Многострочные:
/* Это
   многострочный
   комментарий */

3. Идентификаторы:

Имена переменных, функций, классов, и т.д.

  • Могут содержать буквы, цифры, знак подчеркивания
  • Не могут начинаться с цифры
  • Не могут совпадать с ключевыми словами

Пример: int age; float temperature;

4. Служебные слова (ключевые слова):

Зарезервированы языком — нельзя использовать как имена переменных. Примеры:

  • int, float, if, else, return, class, public, void, for, while, switch

5. Литералы:

Фиксированные значения, непосредственно используемые в коде:

Числовые: 42, 3.14, Символьные: 'a', Строковые: "Hello", Булевы: true, false

6. Escape-последовательности (спецсимволы):

Начинаются с \. Используются в строках и символах.

  • \n — новая строка, \t — табуляция, \\ — обратный слэш, \' — одинарная кавычка, \" — двойная кавычка

Пример:

std::cout << "Line1\nLine2\tTabbed";

7. Операторы:

Обозначают действия над данными.

Арифметика: +, -, *, /, %; Логические: &&, ||, !; Отношения: ==, !=, <, >, <=, >=; Присваивание: =, +=, -=, *=; Унарные: ++, --

8. Знаки пунктуации:

; — завершение оператора, {} — блок кода, () — параметры функции, [] — массивы, , — разделение, : — в case, public:, private:

Билет 5: Понятие типов данных. Стандартные типы данных и операции с ними, особенности. Логические операции и логические выражения. Примеры.

📌 Понятие типа данных

Тип данных определяет:

  • множество допустимых значений переменной,
  • допустимые операции с этими значениями,
  • объем памяти,
  • поведение при вычислениях.

🧱 Стандартные типы данных в C++:

Тип

Пример значения

Размер (обычно)

Особенности

int

42

4 байта

Целое число

float

3.14f

4 байта

Число с плавающей точкой

double

3.14159

8 байт

Повышенная точность

char

'a'

1 байт

Один символ ASCII

bool

true, false

1 байт

Логический тип

unsigned

0…

4 байта

Только положительные int

⚙️ Операции с типами:

  • Арифметические: +, -, *, /, %
  • Сравнения: ==, !=, <, >, <=, >=
  • Логические: &&, ||, !

💡 Особенности:

  • При делении целых int результат тоже int: 5 / 2 ➔ 2
  • Деление float/double: 5.0 / 2 ➔ 2.5
  • При работе с разными типами происходит автоматическое приведение типов

🔄 Логические операции и выражения:

Операция

Описание

Пример

Результат

&&

И (AND)

true && false

false

||

ИЛИ (OR)

true || false

true

!

НЕ (NOT)

!true

false

Логические выражения используются в if, while и других управляющих конструкциях.

✅ Примеры:

int a = 5, b = 10;
bool res1 = (a < b);      // true
bool res2 = (a > b || a == 5); // true
bool res3 = !(a == b);    // true

Билет 6: Константы и переменные. Именованные константы, перечисляемый тип. Примеры.

🧮 Переменные

Переменная — это именованная область памяти, значение которой может изменяться в процессе выполнения программы.

Пример:

int age = 25;
float height = 1.75;

🧵 Константы

Константа — это значение, которое не может быть изменено после инициализации.

🔶 Способы объявления:
  • Через ключевое слово const:
const int DAYS_IN_WEEK = 7;
  • Через директиву препроцессора #define:
#define PI 3.14159

📌 Рекомендуется использовать const, так как он типизирован и проверяется компилятором.

🪪 Именованные константы

Это просто const-переменные с именем, которое ясно указывает на их назначение. Они повышают читаемость и упрощают сопровождение кода.

Пример:

const double GRAVITY = 9.8;

📋 Перечисляемый тип (enum)

Перечисление — это способ задать набор именованных целочисленных констант.

enum Color { RED, GREEN, BLUE };
  • По умолчанию: RED = 0, GREEN = 1, BLUE = 2

Можно задать значения вручную:

enum Status { OK = 200, NOT_FOUND = 404, ERROR = 500 };

✅ Пример использования:

Color myColor = GREEN;
if (myColor == GREEN) {
    std::cout << "Color is green" << std::endl;
}

Билет 7: Выражения. Правила вычисления значения выражения и определения типа результата. Оператор присваивания. Приведение типов. Примеры.

🔢 Выражение в C++ — это комбинация операндов и операторов, которая возвращает значение.

Примеры:

int x = 3 + 4;     // арифметическое выражение
bool res = x > 5;    // логическое выражение

📐 Тип результата выражения

  • Определяется по типам операндов и правилам приведения типов.
  • Если участвуют разные типы, происходит автоматическое преобразование:
    • int + float ➔ float
    • char + int ➔ int

➕ Оператор присваивания (=)

Обновляет значение переменной.

Общий вид:

переменная = выражение;

Примеры:

int a;
a = 5;            // простое присваивание
a = a + 2;        // выражение с присваиванием

🔄 Сокращенные формы:

a += 3;  // то же самое, что a = a + 3;
a *= 2;  // умножение и присваивание

🧬 Особенности операции присваивания

  • Возвращает значение (можно использовать в выражениях):
int a, b;
a = b = 10;   // сначала b = 10, потом a = b
  • Присваивание производится справа налево.

🔄 Приведение типов

1. Неявное (автоматическое):

int a = 5;
float b = a + 2.5;  // int преобразуется в float

2. Явное (кастинг):

int a = 10;
float b = (float)a / 3;   // явное преобразование

✅ Пример:

int x = 5;
float y = 2.0;
float z = x + y;     // x неявно преобразуется в float
std::cout << z;     // 7.0

Билет 8: Форматный ввод, вывод информации на экран и в файл. Примеры.

🖥️ Форматный ввод/вывод на экран в C++

Осуществляется с помощью потоков из библиотеки <iostream>:

  • std::cout — вывод (Console OUTput)
  • std::cin — ввод (Console INput)

📤 Вывод (cout)

#include <iostream>
using namespace std;
int main() {
    int a = 10;
    cout << "Value of a: " << a << endl;
    return 0;
}
  • << — оператор вставки в поток
  • endl — перевод строки

📥 Ввод (cin)

int x;
cin >> x;  // пользователь вводит значение с клавиатуры
  • >> — оператор извлечения из поток

📂 Работа с файлами: ввод/вывод в файл

Для этого используется <fstream>:

  • std::ofstream — запись в файл
  • std::ifstream — чтение из файла
  • std::fstream — чтение и запись

✍️ Пример записи в файл:

#include <fstream>
using namespace std;
int main() {
    ofstream fout("output.txt");    // создаем/открываем файл
    fout << "Hello, file!" << endl;  // записываем строку
    fout.close();                   // закрываем файл
    return 0;
}

📖 Пример чтения из файла:

#include <fstream>
#include <iostream>
using namespace std;
int main() {
    ifstream fin("input.txt");
    string line;
    while (getline(fin, line)) {
        cout << line << endl;  // выводим строку из файла на экран
    }
    fin.close();
    return 0;
}

AZaeu3d0NaC3AAAAAElFTkSuQmCC

xxAAAAAElFTkSuQmCC

GFrHQCAASPIAQAYMBfk3dWjXUUyAADw8rkg78pzdgVNAADAy8fWOgAAA0aQAwAwYC7IoyhylcIAAMAwcEUrAAAD9gPJq8yJHqO8KQAAAABJRU5ErkJggg==

FL8xXgPntp5+e6d9vfv1rN0uRdOuHbsEgIiKiXqEVhmH9ZmnJfAWY321uGmOM+d3m5pl+JiIiotPDWBJEREQUaSTPMBAREdGr7f8PtLdryYqRP58AAAAASUVORK5CYII=

+xnPwvdR4SFZzKZjn0A2HOo1+sGQN9pd+PJ5XLuJqHkOIPso9NeLBbd1R10XvVzPm5eAzD1er1jXT9xERHR5eQZY0wymQx98nlxcREbGxsDNZlfhLB0ra+vY3Z2NrT1gIiI6HXC4VGJiIhGTMfvvImIiOhyY+FNREQ0Ylh4ExERjRgW3kRERCOGhTcREdGIYeFNREQ0Ylh4ExERjRgW3kRERCOGhTcREdGIYeFNREQ0Ylh4ExERjRgW3kRERCOGhTcREdGI+f8BF7OZL5mMpQgAAAAASUVORK5CYII=

RJlRGrD5EAAAAASUVORK5CYII=

yRG4SVSPvhQAAAABJRU5ErkJggg==

54Mko76Uw0YAAAAASUVORK5CYII=

AAAC8zcfYo+6WjTtzAAAAABJRU5ErkJggg==

x+vhlqgOj27KgAAAABJRU5ErkJggg==

fxiSjZflHEDzAAAAAElFTkSuQmCC

cHmLAAAAMAE8P8H3pwMFqI7yhwAAAAASUVORK5CYII=

ele3fk93hHcAAAAASUVORK5CYII=

8P7KxDfLNj+DnAAAAAElFTkSuQmCC

rqLlnA4wWxUAAAAASUVORK5CYII=

3+NN7rCor9apQAAAABJRU5ErkJggg==

Билет 25: Рекурсивные функции. Примеры.

1. Рекурсивная функция — это функция, которая вызывает сама себя.

  • Важно иметь условие выхода (базовый случай), чтобы избежать бесконечной рекурсии.

2. Пример: вычисление факториала

int factorial(int n) {
    if (n <= 1) return 1;  // базовый случай
    else return n * factorial(n - 1);  // рекурсивный вызов
}

3. Пример: вычисление числа Фибоначчи

int fibonacci(int n) {
    if (n == 0) return 0;
    else if (n == 1) return 1;
    else return fibonacci(n - 1) + fibonacci(n - 2);
}

4. Пример: рекурсивный обход массива (сумма элементов)

int sumArray(int arr[], int n) {
    if (n == 0) return 0;  // базовый случай
    else return arr[n-1] + sumArray(arr, n-1);
}

5. Особенности рекурсии

  • Рекурсия удобна для задач, где естественно разбивать проблему на подобные подзадачи.
  • Иногда рекурсия менее эффективна, чем итерация, из-за накладных расходов на вызовы функций.

4IHQbAnyFrZAAAAAElFTkSuQmCC

bHXIAAMDXYyMCAAAKtrWyBQAAu0HYAgBQMMIWAICCEbYAABSMsAUAoGCELQAABfsXUdygUwioepMAAAAASUVORK5CYII=

h9rLu2B0BcDpAAAAABJRU5ErkJggg==

Entradas relacionadas: