• warning: Illegal string offset 'title' in /home/u157986/videoege.ru/www/sites/all/themes/mainsite2/node-article.tpl.php on line 77.
  • warning: Illegal string offset 'content' in /home/u157986/videoege.ru/www/sites/all/themes/mainsite2/node-article.tpl.php on line 80.
  • warning: Illegal string offset 'title' in /home/u157986/videoege.ru/www/sites/all/themes/mainsite2/node-article.tpl.php on line 89.
  • warning: Illegal string offset 'title' in /home/u157986/videoege.ru/www/sites/all/themes/mainsite2/node-article.tpl.php on line 103.
Лабораторный практикум. Язык программирования C/C++. Консольные приложения.

Для заказа лабораторной работы пишите на почту administrator@videoege.ru

 

Содержание:

Информация для всех студентов, а особенно для студентов КузГТУ
Нужна ли регистрация на сайте для заказа лабораторной работы?
Язык программирования C
  Практические задания
    Образец выполнения (задание №1)
  Лабораторная работа №1
  Контрольные вопросы
Язык программирования С++
  Практические задания
    Образец выполнения (задание №9)
  Лабораторная работа №2
  Лабораторная работа №3
  Контрольные вопросы
О качестве программного кода
Закодируем студенческие работы на любом из следующих языков программирования: C, C++, C#, Pascal, Delphi
Скидка 50% при заказе всех вариантов лабораторных/курсовых работ
А какими способами можно оплатить заказанные работы?
Окажем вам полную информационную поддержку, по заказанным у нас работам

Информация для всех студентов, а особенно для студентов КузГТУ

Здравствуйте! Мы - команда из $3$-х программистов, которые оказывают квалифицированную помощь студентам со всех уголков России, в написании лабораторных, курсовых и дипломных работ по программированию.

Также к нам постоянно обращаются студенты за помощью, когда требуется выполнить задание, связанное с программированием высшей математики или проектированием баз данных.

Вам знакома обложка этого учебно-методического пособия? Если, да, то вы обратились точно по адресу! В данном материале вы найдете образцы выполнения заданий из всех лабораторных работ.

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

yes Кстати, если хотите научиться безошибочно выполнять вузовские лабораторные работы по программированию, а также на достойном уровне выучить язык "чистый" Си или C++, то записывайтесь ко мне на индивидуальную подготовку. Мой контактный №тел.: $8\ (926)\ 610 - 61 - 95$.

Не спеша ознакомьтесь с информацией, представленной на данной веб-странице. Найдете очень много полезного для себя, а также параллельно решите все проблемы с программированием, которые у вас возникли в вузе.

Для навигации по лабораторным работам используйте ссылочное меню в верхней части данной веб-страницы.

Также стоит учитывать тот факт, что издание могло переиздаваться. Следовательно, своего варианта, возможно, вы не сможете обнаружить в перечне заданий. В этом случае обязательно пишите нам на почту: administrator@videoege.ru. Поддержка оказывается круглосуточно!yes

Мы поможем вам решить любые проблемы, связанные с программированием и программированием высшей математики. Поэтому смело обращайтесь к нам за оперативной помощью.

Нужна ли регистрация на сайте для заказа лабораторной работы?

Нет, для заказа требуемой вам лабораторной работы не нужна никакая регистрация на сайте! Все, что вам необходимо - написать на наш электронный адрес: administrator@videoege.ru.
enlightened Мы готовы оказать вам любую информационную поддержку круглосуточно.

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

Практические задания

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

Цель работы:

Приобретение студентами практических навыков создания консольных программ, используя среду Visual Studio .NET C++.

Требования к программам:

  • Консольное приложение.

  • Ввод исходных данных пользователем.

  • Форматированный вывод результатов работы программы.

enlightened ВАЖНО!

  • Стоимость программы из любого варианта составляет $100$ рублей.

  • Стоимость алгоритма (в виде отчета в формате *.doc из любого варианта составляет $100$ рублей (заказывается опционально на ваше усмотрение, чтобы детально разобраться с решением лабораторной работы, например, не прибегая к консультации репетитора).

Варианты заданий:

№ вар. Формулировка
1. В заданном интервале найти все натуральные числа, равные кубу суммы своих цифр.
2. Дан текст, в начале которого имеются пробелы и в котором имеются цифры. Найти порядковый номер максимальной цифры. Если максимальных цифр несколько, то следует определить номер первой из них.
3. Дана действительная матрица размера $6 • 7$. Найти среднее арифметического наибольшего и наименьшего значений ее элементов.
4. Дана действительная матрица размера $n • m$, в которой не все элементы равны нулю. Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент.
5. Дана матрица действительных чисел размером $n • m$. Найти среднее арифметическое элементов матрицы, расположенных на главной диагонали. Увеличить каждый элемент матрицы на соответствующую величину.
6. Дана матрица действительных чисел размером $n • m$. Найти суммы элементов матрицы, Расположенных параллельно главной диагонали.
7. Дано слово. Если длина его нечетная, то удалить среднюю букву, в противном случае - две средние буквы.
8. Дано слово. Удалить из него все повторяющиеся буквы, оставив их первые вхождения: в слове должны остаться только различные буквы.
9. Даны действительные числа $a, b, c$. Удвоить эти числа, если $a > b > c$, и заменить их абсолютными значениями, если это не так.
10. Известен год, номер месяца и число дней рождения человека, а также текущая дата: год, месяц и число. Определить возраст человека.
11. Известно, что разность любого натурального числа и суммы его цифр кратна $9$. Проверить этот факт для чисел в заданном интервале.
12. Известны даты рождения двух человек (год, номер месяца и число) и текущая дата. Определить, кто из них моложе.
13. Найти два наименьших числа, которые начинаются на $5$ и из которых, перенеся первую цифру в конец, можно получить новое число, в $5$ раз меньшее, чем искомое.
14. Найти среднее арифметическое положительных элементов каждого столбца матрицы $A(n, m)$, заданной целыми числами.
15. Натуральное число называется совершенным, если оно равно сумме всех своих простых делителей, например $6 = 1 + 2 + 3$. Найти все совершенные числа в заданном интервале.
16. Определить количество положительных элементов каждого столбца матрица $A(n, m)$, заданной целыми числами.
17. Определить, сколько различных букв содержится в заданном слове.
18. Определить, являются ли значения целочисленных переменных $M$ и $N$ кратными трем. Если оба кратны трем, то вычислить их сумму, иначе вычислить их произведение.
19. Числа, которые можно одинаково прочитать слева направо и справа налево, называются палиндромами. Например, $21312$, $52325$, $4224$. Проверить, является ли заданное число палиндромом.
20. Число делится на $11$, если разность между суммой цифр, стоящих на нечетных местах, кратна $11$. Проверить этот признак для всех натуральных чисел, значение которых не превосходит заданного $m$, и показать числа, кратные $11$.

Практическое задание предполагает написание программы на языке Си. При заказе работы своего варианта вы получите качественно написанную и хорошо прокомментированную программу.

Дополнительно заказав алгоритм решения вашей задачи (мы крайне рекомендуем это сделать), получите аккуратно оформленный отчет-алгоритм, поясняющий все тонкости решения поставленной задачи.

Образец выполнения (вариант №1)

Напомним условие практического задания к варианту $№1$:

В заданном интервале найти все натуральные числа, равные кубу суммы своих цифр.
 
Реализация задачи на языке Си:

[start lines=10]

#include <stdio.h>      // для ввода, вывода (scanf, printf)
#include <locale.h>     // для руссификации (setlocale)
#include <conio.h>      // для задержки программы (getch)
#include <math.h>       // для матем.функции (pow)

//-------------------------------------
// вычисление суммы цифр натур.числа
// pnubmer - входное натуральное число
//-------------------------------------
int GetSumDigits(int pnumber)
{
    // хранит сумму цифр натурального числа
    int sum = 0;

    // пока в числе есть хотя бы одна цифра
    while(pnumber > 0)
    {
        // увеличиваем сумму на значение самой правой цифры
        sum += pnumber % 10;
        // отбрасываем уже учтенную цифру из числа
        pnumber /= 10;
    }

    // возвращаем в качестве ответа сумму цифр натур.числа
    return sum;
}
//-------------------------------------
// главная функция программы (точка входа)
//-------------------------------------
int main(void)
{
    int left, right;    // границы отрезка вычислений
    int i;              // счетчик цикла + анализируемое натуральное число
    int sumDigit;       // хранит сумму цифр текущего числа

    // настройка руссификации диалогов
    setlocale(LC_ALL, "rus");

    // выводим на экран условие задачи
    printf("Условие задачи: ");
    printf("в заданном интервале найти все натуральные числа, равные кубу суммы своих цифр.\n\n");

    // предлагаем пользователю ввести с клавиатуры границы вычислений
    printf("Введите через пробел два натуральных числа, являющихся границами отрезка вычислений: ");
    scanf("%d %d", &left, &right);

    // убеждаемся, что пользователь ввел допустимые значения границ вычисления
    if((left < 1) || (right < left))
        printf("Вы ввели недопустимые границы! Дальнейшие вычисления невозможны!\n");
    else
    {
        printf("Список натуральных чисел из отрезка [%d .. %d], которые равны кубу суммы своих цифр:\n", left, right);

        // перебираем все натруальные числа из заданного интервала
        for(i = left; i <= right; i++)
        {
            // находим сумму цифр текущего натурального числа
            sumDigit = GetSumDigits(i);

            // если само число равно кубу суммы его цифр, то
            if(i == pow(sumDigit, 3.0))
                printf("\t%d\n", i);    // выводим число на экран
        }
    }

    printf("\nДля завершения работы программы нажмите ENTER...");
    getch();    // задержка программы, чтобы можно было просмотреть результаты
    return 0;   // завершение работы программы и передача управления в ОС
}
//-------------------------------------
[end]

Результаты работы программы:

enlightened Давайте выборочно проверим результаты работы программы! Например, проанализируем числа $4\ 913$ и $19\ 683$.

Число Цифры числа Сумма цифр числа Куб суммы цифр числа Сравнение
$4\ 913$ $4, 9, 1, 3$ $4 + 9 + 1 + 3 = 17$ $17^3 = 4\ 913$
$19\ 683$ $1, 9, 6, 8, 3$ $1 + 9 + 6 + 8 + 3 = 27$ $27^3 = 19\ 683$

Лабораторная работа №1

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

Тема: Табулирование функции одной переменной.

Цель работы: создать консольную программу табулирования функции одной переменной в среде Visual Studio .NET C++.

Требования к программе:

  • Данные необходимые для табулирования вводятся с помощью параметров, задаваемых из командной строки (параметры могут задаваться в любой последовательности) или интерактивно, если при запуске программы отсутствуют параметры.

  • Пример первого варианта запуска: $tabul.exe\ a=-1.2\ b=3\ n=30$

  • В программе должны использоваться следующие обозначения параметров командной строки: $a$ - начало диапазона, $b$ - конец диапазона, $n$ - количество точек табулирования, $h$ - шаг табулирования.

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

  • Пользователь может задавать любой отрезок табулирования функции.

  • По соответствующему ключу, к примеру $"?"$, программа должна выводить на экран справку из текстового файла.

  • В результате работы программы на экран должна выводиться следующая информация: функция, введенные параметры, таблица с результатами, состоящая из трех столбцов: номер точки, значение $x$, значение $f(x)$.

  • Программа должна уметь обходить особые точки функции.

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

  • Программа должна быть структурированной и в ней должен присутствовать следующий минимальный набор функций:

    1. главная функция;

    2. математическая функция;

    3. функция проверки строки на число;

    4. функция вывода русского текста на экран;

    5. функция считывания информации с клавиатуры с последующей проверкой на число;

    6. функция поиска нужного параметра в наборе параметров переданных через командную строку.

enlightened ВАЖНО!

  • Стоимость программы из любого варианта составляет $$ рублей.

  • Стоимость блок-схемы из любого варианта составляет $$ рублей.

Варианты заданий:

Функция Функция
1. $\frac{sin(x)}{x}·e^{-x}$ 26. $\frac{ln(1 + pi·x)}{x}·e^{-x}$
2. $x^x·e^{-x}$ 27. $\frac{tg(x)}{x}·e^{-x}$
3. $\frac{arctg(x)}{x}·e^{-x}$ 28. $x^x·e^{-x^2}$
4. $x^3·e^{-sin(pi · x)}$ 29. $x^5·e^{-\frac{x}{sin(x)}}$
5. $x^{6.5} · e^{-cos(x)}$ 30. $10^{1-x}·\frac{ln(1 + x)}{x}$
6. $\frac{(1-x)(1-x^2)}{1 - x^5}$ 31. $\frac{1-x}{x}·lg(1+x)$
7. $\frac{ln(1+x)}{x} - \frac{sin^2(x)}{x^2}$ 32. $x^x·e^{-x}·lg(1+x)$
8. $(1 - x)^5·e^{x·sin(x)}$ 33. $cos(2·arccos(x))$
9. $cos(3·arccos(x))$ 34. $sin(2·arcsin(x))$
10. $sin(3·arcsin(x))$ 35. $tg(2·arctg(x))$
11. $tg(3·arctg(x))$ 36. $10^{ln(1+x)}·sin(x)$
12. $e^{1 - x^2}·ln(1 + x^2)$ 37. $\frac{x·R}{R-1},\ R = (1+x)^2$
13. $\frac{x·R}{R - 1},\ R = (1 + x)^3$ 38. $\frac{x^3}{1-cos^3(x)}$
14. $\frac{cos(x)}{\frac{pi}{2} - x}$ 39. $\frac{sin(x)}{x}·e^{-x}·(1 + x^2)$
15. $\frac{sin(x)}{x}·e^{-x}·(1 + x^3)$ 40. $\frac{cos(\frac{pi·x}{2})}{1-x}$
16. $\frac{1 - e^x}{sin(x)}$ 41. $x·ln(x)·e^{-x}$
17. $x^2·ln(x)·e^{-x}$ 42. $x·lg(x)·10^{-x}$
18. $x^2·lg(x)·10^{-x}$ 43. $\frac{arcsin(x)}{x}·e^{-x}$
19. $\frac{sin(x)}{x}·e^{-x}·(1 + x^x)$ 44. $x^x·ln(x)·e^{-x}$
20. $\frac{arcsin(x)}{x}·e^{-x}·ln(2 + x)$ 45. $cos(\frac{x}{2})·ln(x)·x^{x+1}$
21. $\frac{arcsin(x)·ln(1 + x)}{x^2}$ 46. $cos(ln(1+x))·e^x$
22. $ln^2(x) - cos(x - 1)$ 47. $cos(arctg(x))·e^x$
23. $sin(\frac{ln(1 + x)}{x})·e^x$ 48. $(x^3 - x·cos(\frac{2 pi x}{5}) + 1)·e^x$
24. $(x^{2.5}-x+1)·e^{\frac{x}{2}}$ 49. $(x^4-x^{0.5}+1)^{sin(x)}$
25. $(x^{1.5}-x+1)·e^{x·sin(\frac{x}{2})}$ 50. $\frac{e^x-e^{-x}}{2}·arcsin(\sqrt(1-x))$

Параметры к вариантам:

Вариант Параметры
1. Начало диапазона, конец диапазона, количество точек.
2. Начало диапазона, конец диапазона, шаг (при выходе последней точки за конец диапазона точка не выводится в таблицу).
3. Начало диапазона, конец диапазона, шаг (при выходе последней точки за конец диапазона точка выводится в таблицу).
4. Начало диапазона, количество точек, шаг.

Лабораторная работа $№1$ предполагает написание программы на языке Си. При заказе работы своего варианта вы получите качественно написанную и хорошо прокомментированную программу.

Дополнительно заказав алгоритм решения вашей задачи (мы крайне рекомендуем это сделать), получите аккуратно оформленный отчет-алгоритм, поясняющий все тонкости решения поставленной задачи.

Контрольные вопросы

Вопрос Вопрос
1. Что такое область действия переменных? 16. Передача параметров по значению.
2. Что такое область видимости переменных? 17. Передача параметров по адресу.
3. Объясните понятие: оператор расширения области видимости. 18. Передача параметров по ссылке.
4. Что такое классы памяти? 19. Параметр со значением по умолчанию.
5. Какие бывают виды операций? 20. Передача массивов в качестве параметров.
6. Объясните понятие $L$-значения. 21. Описание функции main().
7. Что такое указатель. 22. Описание функции с переменным числом параметров.
8. Операция взятия адреса. 23. Методика перезагрузки функций.
9. Операция разадресации. 24. Ввод/вывод информации.
10. Методика сложения и вычитания указателя с константой. 25. Переименование типов.
11. Методика разности двух указателей. 26. Что такое перечисление?
12. Что такое ссылка? 27. Что такое структуры?
13. Что такое одномерный массив? 28. Что такое объединения?
14. Что такое многомерный массив? 29. Работа с динамической памятью.
15. Объясните понятие С-строка. 30. Директивы препроцессора.

enlightened Мы предлагаем студентам $3$ варианта помощи по контрольным вопросам:

  • Сокращенные ответы, по интересующим студента вопросам. Стоимость сокращенного ответа на один контрольный вопрос составляет $50$ рублей (пример см. чуть ниже).

  • Развернутые ответы, по интересующим студентам вопросам. Стоимость развернутого ответа на один контрольный вопрос составляет $100$ рублей (пример см. чуть ниже).

  • Помощь репетитора по программированию Александра Георгиевича (звонить по номеру телефона $8\ (926)\ 610-61-95$). Минимальная длительность одного занятия составляет $90$ минут и стоит ровно $1\ 000$ рублей.

Пример сокращенного ответа на вопрос: "Что такое классы памяти?".

В языке СИ все переменные помимо типа обладают еще и классом памяти. Всего существует четыре класса памяти переменных: автоматический (auto), статический (static), регистровый (register) и внешний (extern).

  • Автоматический класс памяти по умолчанию имеют все локальные переменные. Область видимости таких переменных ограничена блоком.

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

  • Когда происходит объявление регистровой переменной, то это означает, что мы "просим" компилятор о том, чтобы переменная располагалсь в регистре, а не в оперативной памяти.

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

Пример развернутого ответа на вопрос: "Что такое классы памяти?".

Стандарт языка СИ поддерживает четыре спецификатора класса памяти:

автоматический (auto) статический (static) регистровый (register) внешний (extern)

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

<спецификатор класса памяти> <тип данных> <имя переменной>;

Класс памяти "auto".

По умолчанию локальные переменные имеют спецификатор auto. Такие переменные располагаются в стеке, а их область видимости ограничена блоком их объявления. Глобальные переменные не могут быть объявлены как auto, потому что располагаются в data-сегменте.

В данном примере продемонстрирован принцип работы локальной автоматической переменной:

[start lines=10]

#include <stdio.h>
#include <conio.h>

//-------------------------------------------------------------------------------------
// главная функция программы (точка входа)
//-------------------------------------------------------------------------------------
int main(void)
{
    int x = 10;
    int auto y = 20;    // локальная автоматическая переменная (аналог int y = 20;)
    printf("x + y = %d + %d = %d", x, y, x + y);

    getch();        // задержка работы программы, чтобы можно было просмотреть результаты
    return 0;       // завершение работы программы и передача управления в ОС
}
//-------------------------------------------------------------------------------------
[end]

Класс памяти "static".

Переменные объявленные со спецификатором static, хранятся постоянно внутри своей функции или файла. В отличие от глобальных переменных они невидимы за пределами своей функции или файла, но они сохраняют свое значение между вызовами. Локальные и глобальные переменные, имеющие спецификатор static, ведут в программе себя по-разному.

В данном примере продемонстрирован принцип работы локальной статической переменной:

[start lines=1000]

#include <stdio.h>
#include <conio.h>

void F(void)
{
    static int number = 1;
    number += 2;
    printf("%d\n", number);
}

int main(void)
{
    F();
    F();
    F();
    getch();
    return 0;
}
[end]

Результаты работы программы:

Очень важно понимать, что в отличие от простой локальной переменной, статическая локальная переменная продолжает существовать между вызовами функций. Простая локальная переменная создается заново при каждом вызове, а затем уничтожается.

Глобальная переменная со спецификатором static заставляет компилятор создать глобальную переменную, видимую только в том файле, в котором она объявлена. При разработке больших и сложных программ для "сокрытия" переменных можно смело применять спецификатор static.

Класс памяти "register".

Спецификатор register можно применять к переменным любого типа данных. Стандарты языка C89 и C99 обязывают компилятор обращаться с переменными, имеющими спецификатор register, так быстро, насколько это возможно. При этом символьные и целочисленные переменные размещаются в регистрах процессора.

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

Спецификатор register можно применять только к локальным переменным и формальным параметрам функций. Регистровые переменные идеально подходят для оптимизации скорости работы цикла. Некоторые профессиональные программисты вообще настаивают на том, чтобы спецификатор register был применен только к переменным-счетчикам циклов.

В данном примере продемонстрирован принцип работы локальной регистровой переменной:

[start lines=10]

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>

#define MILLION 1000000     // миллион

//-------------------------------------------------------------------------------------
// проверки числа на совершенность
// совершенное число - натуральное число, равное сумме всех своих собственных делителей
// 0 - входное натуральное число не является совершенным
// 1 - входное натуральное число является совершенным
//-------------------------------------------------------------------------------------
int IsPerfect(const long long pnumber)
{
    int result = 0;
    long long sumDividers = 0;      // сумма всех собственных делителей
    register long long divider;     // текущий делитель
   
    for(divider = 1; divider <= pnumber/2; divider++)
        if(pnumber % divider == 0)  // если текущее значение счетчика является делителем
            sumDividers += divider;

    // если сумма всех делителей совпала с самим числом, значит оно совершенное
    if(pnumber == sumDividers)
        result = 1;

    return result;
}

//-------------------------------------------------------------------------------------
// главная функция программы (точка входа)
//-------------------------------------------------------------------------------------
int main(void)
{
    register long long number;  // счетчик цикла от 2 до миллиона

    setlocale(LC_ALL, "rus");
    printf("Список совершенных чисел из отрезка [1 ... 1 000 000]:\n");
    for(number = 2; number <= MILLION; number++)
        if(IsPerfect(number) == 1)
            printf("\t%lld\n", number);

    getch();        // задержка работы программы, чтобы можно было просмотреть результаты
    return 0;       // завершение работы программы и передача управления в ОС
}
//-------------------------------------------------------------------------------------
[end]

Результаты работы программы:

Практический ощутимый эффект от применения спецификатора register может быть получен только для переменных целого и символьного тип.

Класс памяти "extern".

Спецификатор extern указывает на то, что к переменной применяется внешнее связывание, именно поэтому значения таких переменных будут доступны во всей программе. Если нужно сослаться на переменную, определенную в другой части программы, необходимо объявить ее как внешнюю (extern).

В данном примере продемонстрирован принцип работы внешних переменных:

#include <stdio.h>
#include <conio.h>

//-------------------------------------------------------------------------------------
// главная функция программы (точка входа)
//-------------------------------------------------------------------------------------
int main(void)
{
    extern int x, y;
    printf("x + y = %d + %d = %d", x, y, x + y);

    getch();        // задержка работы программы, чтобы можно было просмотреть результаты
    return 0;       // завершение работы программы и передача управления в ОС
}
//-------------------------------------------------------------------------------------
// блок внешних деклараций
int x = 10;
int y = 20;

Спецификатор extern играет большую роль в программах, состоящих из многих файлов. На практике профессиональные программисты обычно включают объявления extern в заголовочные файлы, которые просто подключаются к каждому файлу исходного текста программы.

P.S. Спецификатор extern можно применять в объявлении функций, но в этом нет никакой необходимости.

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

Практические задания

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

Цель работы:

Приобретение студентами практических навыков создания консольных программ в среде Visual Studio .NET C++, используя объектно-ориентированную парадигму языка C++.

Требования к программам:

  • Консольное приложение.

  • Ввод исходных данных пользователем.

  • Форматированный вывод результатов работы программы.

enlightened ВАЖНО!

  • Стоимость программы из любого варианта составляет $$ рублей.

  • Стоимость алгоритма (в виде отчета в формате *.doc из любого варианта составляет $$ рублей (заказывается опционально на ваше усмотрение, чтобы детально разобраться с решением лабораторной работы, например, не прибегая к консультации репетитора).

Варианты заданий:

№ вар. Формулировка
1.

Описать класс двухмерного квадратного массива целых чисел (максимальный размер $100$ на $100$ элементов). В классе реализовать конструктор, создающий объект класса по размеру стороны квадрата и заполняющий элементы массива нулями, перегрузить операцию вывода в поток, и описать метод, подсчитывающий количество положительных элементов массива, лежащих ниже главной диагонали.

Написать демонстрационную программу для этого класса. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

2.

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

Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

3.

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

Написать программу, демонстрирующую работу с этими классами. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

4.

Составить описание класса для определения одномерных массивов целых чисел (векторов). Предусмотреть возможность обращения к отдельному элементу массива с контролем выхода за пределы массива, возможность задания произвольных границ индексов при создании объекта и выполнения операций поэлементного сложения и вычитания массивов с одинаковыми границами индексов, умножения и деления всех элементов массива на скаляр, вывода на экран элемента массива по заданному индексу и всего массива.

Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

5.

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

Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

6.

Написать класс для эффективной работы со строками, позволяющий форматировать и сравнивать строки, хранить в строках числовые значения и извлекать их. Для этого необходимо реализовать: перегруженные операторы присваивания и конкатенации; операции сравнения и приведения типов; преобразование в число любого типа; форматный вывод строки.

Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

7.

Описать класс "домашняя библиотека". Предусмотреть возможность работы с произвольным числом книг, поиска книги по какому-либо признаку (например, по автору или по году издания), добавление книг в библиотеку, удаления книг из нее, сортировки книг по разным полям.

Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

8.

Описать класс "записная книжка". Предусмотреть возможность работы с произвольным числом записей, поиска записи по какому-либо признаку (например, по фамилии, дате рождения или номеру телефона), добавления и удаления записей, сортировки по разным полям.

Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

9.

Описать класс "студенческая группа". Предусмотреть возможность работы с переменным числом студентов, поиска студента по какому-либо признаку (например, по фамилии, дате рождения или номеру телефона), добавления и удаления записей, сортировки по разным полям.

Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

10.

Создать класс CPoint - точка. На его основе создать классы CcoloredPoint и CLine. На основе класса CLine создать класс CColoredLine и класс CPolyLine - многоугольник. Все классы должны иметь методы для установки и получения значений всех координат, а также изменения цвета и получения текущего цвета.

Написать демонстрационную программу, в которой будет использоваться список объектов этих классов в динамической памяти.

11.

Создать абстрактный класс CVehicle. На его основе реализовать классы CPlane, CCar и CShip. Классы должны иметь возможность задавать и получать координаты, параметры средств передвижения (цена, скорость, год выпуска). Для самолета должна быть определена высота, для самолета и корабля - количество пассажиров. Для корабля - порт приписки.

Написать программу, создающую список объектов этих классов в динамической памяти. Программа должна содержать меню, позволяющее осуществить проверку всех методов классов.

Практическое задание предполагает написание программы на языке С++. При заказе работы своего варианта вы получите качественно написанную и хорошо прокомментированную программу.

Дополнительно заказав алгоритм решения вашей задачи (мы крайне рекомендуем это сделать), получите аккуратно оформленный отчет-алгоритм, поясняющий все тонкости решения поставленной задачи.

Образец выполнения (задание №9)

Напомним условие задания к варианту $№9$:

Описать класс "студенческая группа". Предусмотреть возможность работы с переменным числом студентов, поиска студента по какому-либо признаку (например, по фамилии, дате рождения или номеру телефона), добавления и удаления записей, сортировки по разным полям.

Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

Реализация задачи на языке C++:

#include <iostream>
#include <string>
#include <Windows.h>
#include <iomanip>

using namespace std;

// класс "Студент"
class CStudent
{
private:
    string name;                // имя студента
    string surname;             // фамилия студента
    string patronymic;          // отчество студента
    char sex;                   // пол студента
    string numberMobilePhone;   // мобильный номер телефона
    int year;                   // год рождения
    bool isLiveHostel;          // проживает в общежитии?
public:
    // конструктор по умолчанию
    CStudent(){}
    // параметрический конструктор (инициализация всех полей студента)
    CStudent(string pname, string psurname, string ppatron, char psex, string pnumberPhone, int pyear, bool phostel)
    {
        this->name = pname;
        this->surname = psurname;
        this->patronymic = ppatron;
        this->sex = psex;
        this->numberMobilePhone = pnumberPhone;
        this->year = pyear;
        this->isLiveHostel = phostel;
    }
    // получение имени студента
    string GetName(void) const
    {
        return this->name;
    }
    // получение фамилии студента
    string GetSurname(void) const
    {
        return this->surname;
    }
    // получение отчества студента
    string GetPatron(void) const
    {
        return this->patronymic;
    }
    // получение пола студента
    char GetSex(void) const
    {
        return this->sex;
    }
    // получение мобильного телефона студента
    string GetPhone(void) const
    {
        return this->numberMobilePhone;
    }
    // получение года рождения студента
    int GetYear(void) const
    {
        return this->year;
    }
    // получение проживания в общежитии
    bool GetLiveHostel(void) const
    {
        return this->isLiveHostel;
    }
};

// класс "Группа студентов"
class CStudentGroup
{
private:
    CStudent* students;     // коллекция студентов переменного размера
    int countStudents;      // количество студентов в группе
    static string nameGroup;    // название/номер группы
public:
    // конструктор по умолчанию (инициализация "пустой" группы студентов)
    CStudentGroup()
    {
        this->students = NULL;
        this->countStudents = 0;
    }
    // деструктор (удаляет динамическую память из коллекции студентов)
    ~CStudentGroup()
    {
        delete []students;
    }
    // установка название группы
    static void SetNameGroup(string pnameGroup)
    {
        nameGroup = pnameGroup;
    }
    // получение названия группы
    static string GetNameGroup(void)
    {
        return nameGroup;
    }
    // установка нового значения кол-ва студентов в группе
    void SetCountStudents(int pcount)
    {
        this->countStudents = pcount;
    }
    // получение кол-ва студентов в группе
    int GetCountStudents(void)
    {
        return this->countStudents;
    }
    //------------------------------------------------------------------
    // вывод на экран информации о текущем студенте
    //------------------------------------------------------------------
    void PrintStudent(const CStudent pstudent, const int pnumber)
    {
        cout << "| " << pnumber << " | ";
        cout << left << setw(18) << (pstudent.GetSurname() + " " + pstudent.GetName()[0] + "." + pstudent.GetPatron()[0] + ".") << " |  ";
        cout << pstudent.GetSex() << "  | ";
        cout << left << setw(25) << pstudent.GetPhone() << " | ";
        cout << right << setw(12) << pstudent.GetYear() << " | ";
        if(pstudent.GetLiveHostel() == true)
            cout << left << setw(21) << "Да" << " |" << endl;
        else
            cout << left << setw(21) << "Нет" << " |" << endl;
    }
    //------------------------------------------------------------------
    // вывод информации о студентах группы на экран (табличный формат)
    //------------------------------------------------------------------
    void PrintStudents(void)
    {
        cout << endl << "Информация о студентах (" << this->GetCountStudents() << " чел.) группы \'" << CStudentGroup::GetNameGroup() << "\':" << endl;
        cout << "--------------------------------------------------------------------------------------------------" << endl;
        cout << "| № |    ФИО студента    | Пол |     Мобильный телефон     | Год рождения | Проживает в общежитии |" << endl;
        cout << "--------------------------------------------------------------------------------------------------" << endl;
        for(int i = 0; i < this->GetCountStudents(); i++)
            PrintStudent(this->students[i], i + 1);
        cout << "--------------------------------------------------------------------------------------------------" << endl;
    }
    //------------------------------------------------------------------
    // добавление нового студента в конец группы
    //------------------------------------------------------------------
    void AddStudent(void)
    {
        string name;                // имя студента
        string surname;             // фамилия студента
        string patronymic;          // отчество студента
        char sex;                   // пол студента
        string numberMobilePhone;   // мобильный номер телефона
        int year;                   // год рождения
        bool isLiveHostel;          // проживает в общежитии?

        cout << endl << "Введите имя студента: ";
        cin >> name;
        cout << "Введите фамилию студента: ";
        cin >> surname;
        cout << "Введите отчество студента: ";
        cin >> patronymic;
        cout << "Введите пол студента (М - мужской, Ж - женский): ";
        cin >> sex;
        cout << "Введите номер мобильного телефона студента (в формате X(XXX) - XXX - XX - XX): ";
        fflush(stdin);
        getline(std::cin, numberMobilePhone);
        cout << "Введите год рождения студента: ";
        cin >> year;
        cout << "Проживает ли студент в общежитии (y - ДА, n - НЕТ)?: ";
        char tmpLive;
        cin >> tmpLive;
        if(tmpLive == 'y')
            isLiveHostel = true;
        else
            isLiveHostel = false;
        CStudent add(name, surname, patronymic, sex, numberMobilePhone, year, isLiveHostel);

        CStudent* tmpStudents = new CStudent[this->GetCountStudents() + 1];
        for(int i = 0; i < this->GetCountStudents(); i++)
            tmpStudents[i] = this->students[i];

        this->SetCountStudents(this->GetCountStudents() + 1);
        tmpStudents[this->GetCountStudents() - 1] = add;
        delete []this->students;
        this->students = tmpStudents;
    }
    //------------------------------------------------------------------
    // удаление студента из группу по порядковому номеру
    //------------------------------------------------------------------
    void DeleteStudent(const int pindex)
    {
        int position = -1;
        CStudent* tmpStudents = new CStudent[this->GetCountStudents() - 1];
        for(int i = 0; i < this->GetCountStudents(); i++)
            if(i != (pindex - 1))
                tmpStudents[++position] = this->students[i];

        this->SetCountStudents(this->GetCountStudents() - 1);
        delete []this->students;
        this->students = tmpStudents;
    }
    //------------------------------------------------------------------
    // поиск студентов, у которых в №телефона есть заданная цифра
    //------------------------------------------------------------------
    void SearchStudentsDigitPhone(const char pdigit)
    {
        cout << endl << "Информация о студентах, у которых в №телефона есть цифра \'" << pdigit << "\':" << endl;
        cout << "--------------------------------------------------------------------------------------------------" << endl;
        cout << "| № |    ФИО студента    | Пол |     Мобильный телефон     | Год рождения | Проживает в общежитии |" << endl;
        cout << "--------------------------------------------------------------------------------------------------" << endl;
        for(int i = 0; i < this->GetCountStudents(); i++)
            if(this->students[i].GetPhone().find(pdigit) != string::npos)
                PrintStudent(this->students[i], i + 1);
        cout << "--------------------------------------------------------------------------------------------------" << endl;
    }
    //------------------------------------------------------------------
    // поиск студентов, рожденных в заданном году
    //------------------------------------------------------------------
    void SearchStudentsByYear(const int pyear)
    {
        cout << endl << "Информация о студентах, рожденных в \'" << pyear << "\' году: " << endl;
        cout << "--------------------------------------------------------------------------------------------------" << endl;
        cout << "| № |    ФИО студента    | Пол |     Мобильный телефон     | Год рождения | Проживает в общежитии |" << endl;
        cout << "--------------------------------------------------------------------------------------------------" << endl;
        for(int i = 0; i < this->GetCountStudents(); i++)
            if(this->students[i].GetYear() == pyear)
                PrintStudent(this->students[i], i + 1);
        cout << "--------------------------------------------------------------------------------------------------" << endl;
    }
    //------------------------------------------------------------------
    // сортировка студентов по фамилии (по возрастанию)
    //------------------------------------------------------------------
    void SortStudentsBySurnameASC(void)
    {
        CStudent tmp;
        for(int i = this->GetCountStudents() - 1; i >= 0; i--)
            for(int j = 0; j < i; j++)
                if(this->students[j].GetSurname() > this->students[j + 1].GetSurname())
                {
                    tmp = this->students[j];
                    this->students[j] = this->students[j + 1];
                    this->students[j + 1] = tmp;
                }
    }
    //------------------------------------------------------------------
    // сортировка студентов по году рождения (по убыванию)
    //------------------------------------------------------------------
    void SortStudentsByYearDESC(void)
    {
        CStudent tmp;
        for(int i = this->GetCountStudents() - 1; i >= 0; i--)
            for(int j = 0; j < i; j++)
                if(this->students[j].GetYear() < this->students[j + 1].GetYear())
                {
                    tmp = this->students[j];
                    this->students[j] = this->students[j + 1];
                    this->students[j + 1] = tmp;
                }
    }
    //------------------------------------------------------------------
};
string CStudentGroup::nameGroup = "";
//------------------------------------------------------------------
// меню программы
//------------------------------------------------------------------
int Menu(void)
{
    int select;
    do
    {
        system("CLS");
        cout << "1 - ДОБАВИТЬ СТУДЕНТА В ГРУППУ (конец группы)" << endl;
        cout << "2 - УДАЛИТЬ СТУДЕНТА ИЗ ГРУППЫ (по порядковому номеру)" << endl;
        cout << "3 - ВЫВОД ИНФОРМАЦИИ ОБО ВСЕХ СТУДЕНТАХ ГРУППЫ" << endl;
        cout << "4 - ПОИСК СТУДЕНТОВ, У КОТОРЫХ В №ТЕЛЕФОНА ЕСТЬ ЗАДАННАЯ ЦИФРА" << endl;
        cout << "5 - ПОИСК СТУДЕНТОВ, РОЖДЕННЫХ В ЗАДАННОМ ГОДУ" << endl;
        cout << "6 - СОРТИРОВКА СТУДЕНТОВ ПО ФАМИЛИИ (по возрастанию)" << endl;
        cout << "7 - СОРТИРОВКА СТУДЕНТОВ ПО ГОДУ РОЖДЕНИЯ (по убыванию)" << endl;
        cout << "8 - ВЫХОД ИЗ ПРОГРАММЫ" << endl;
        cout << "Выбор: ";
        cin >> select;
    }
    while((select < 1) || (select > 8));
    return select;
}
//------------------------------------------------------------------
// главная функция программы (точка входа)
//------------------------------------------------------------------
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    // задаем вводом с клавиатуры название/номер группы
    string nameGroup;
    cout << "Введите название/номер обрабатываемой группы студентов: ";
    cin >> nameGroup;
    CStudentGroup::SetNameGroup(nameGroup);

    CStudentGroup group;    // группа студентов переменной длины

    int select;
    do
    {
        select = Menu();
        switch(select)
        {
        case 1:
            {
                group.AddStudent();
                cout << endl << "Новый студент успешно добавлен в конец группы. Для продолжения нажмите Enter...";
                fflush(stdin);
                cin.get();
                break;
            }
        case 2:
            {
                group.PrintStudents();
                int number;
                cout << endl << "Введите порядковый номер студента, которого планируете исключить из группы: ";
                cin >> number;
                fflush(stdin);
                if((number < 1) || (number > group.GetCountStudents()))
                    cout << "Студента с таким порядковым номером не существует! Удаление невозможно. Для продолжения нажмите ENTER...";
                else
                {
                    group.DeleteStudent(number);
                    cout << "Студент с заданным порядковым номером успешно исключен из группы. Для продолжения нажмите ENTER...";
                }
                cin.get();
                break;
            }
        case 3:
            {
                group.PrintStudents();
                fflush(stdin);
                cout << endl << "Для продолжения нажмите ENTER...";
                cin.get();
                break;
            }
        case 4:
            {
                if(group.GetCountStudents() == 0)
                {
                    fflush(stdin);
                    cout << endl << "В группе нет ни одного студента! Поиск невозможен. Для продолжения нажмите ENTER...";
                }
                else
                {
                    group.PrintStudents();
                    char digit;
                    cout << endl << "Введите цифру №телефона для поиска студентов: ";
                    cin >> digit;
                    group.SearchStudentsDigitPhone(digit);
                    fflush(stdin);
                    cout << endl << "Для продолжения нажмите ENTER...";
                }
                cin.get();
                break;
            }
        case 5:
            {
                if(group.GetCountStudents() == 0)
                {
                    fflush(stdin);
                    cout << endl << "В группе нет ни одного студента! Поиск невозможен. Для продолжения нажмите ENTER...";
                }
                else
                {
                    group.PrintStudents();
                    int year;
                    cout << endl << "Введите значение года (4-ре цифры) для поиска студентов: ";
                    cin >> year;
                    group.SearchStudentsByYear(year);
                    fflush(stdin);
                    cout << endl << "Для продолжения нажмите ENTER...";
                }
                cin.get();
                break;
            }
        case 6:
            {
                if(group.GetCountStudents() == 0)
                {
                    fflush(stdin);
                    cout << endl << "В группе нет ни одного студента! Сортировка данных невозможна. Для продолжения нажмите ENTER...";
                }
                else
                {
                    group.SortStudentsBySurnameASC();
                    group.PrintStudents();
                    cout << endl << "Информация о студентах упорядочена по возрастанию фамилий студентов." << endl;
                    fflush(stdin);
                    cout << endl << "Для продолжения нажмите ENTER...";
                }
                cin.get();
                break;
            }
        case 7:
            {
                if(group.GetCountStudents() == 0)
                {
                    fflush(stdin);
                    cout << endl << "В группе нет ни одного студента! Сортировка данных невозможна. Для продолжения нажмите ENTER...";
                }
                else
                {
                    group.SortStudentsByYearDESC();
                    group.PrintStudents();
                    cout << endl << "Информация о студентах упорядочена по убыванию года рождения." << endl;
                    fflush(stdin);
                    cout << endl << "Для продолжения нажмите ENTER...";
                }
                cin.get();
                break;
            }
        }
    }
    while(select != 8);
   
    return 0;
}
//------------------------------------------------------------------

Результаты работы программы (скриншоты):

Лабораторная работа №2

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

Тема: Реализация методов ООП средствами Visual Studio .NET C++ на примере программы "Класс Матрица"

Цель работы: описать класс "Матрица", инкапсулирующий в себе данные матрицы и операций для работы с ними. Создать демонстрационную программу в среде Visual Studio .NET C++, позволяющую на выбор пользователя выполнять арифметические действия.

Требования к программе:

Обязательное наличие в классе:

  • конструктора по умолчанию;

  • перегруженной операции $"<<"$, выводящей данные экран в матричной форме;

  • функции-члена возвращающей размер матрицы.

Рекомендации:

При реализации класса возможно использование обычных массивов, к примеру, размером $100$ на $100$ элементов.
Возможна перегрузка других операций, если это необходимо для реализации программы.
Для вывода информации на экран, необходимо разработать интерактивное меню.

 

enlightened ВАЖНО!

  • Стоимость программы из любого варианта составляет $$ рублей.

  • Стоимость алгоритма (в виде отчета в формате *.doc из любого варианта составляет $$ рублей (заказывается опционально на ваше усмотрение, чтобы детально разобраться с решением лабораторной работы, например, не прибегая к консультации репетитора).

Варианты заданий:

Перегруженная операция Дополнительный конструктор
1. Создает матрицу заданного размера, заполненную указанным числом.
2. + Создает матрицу заданного размера, заполненную нулями.
3. - Создает матрицу заданного размера, заполненную нулями.

Лабораторная работа №3

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

Тема: Реализация методов ООП средствами Visual Studio .NET C++ на примере программы "Класс Строка"

Цель работы: описать класс "Строка", инкапсулирующий в себе данные строки и операций для работы с ними. Создать демонстрационную программу в среде Visual Studio .NET C++

Требования к программе:

Описать базовый класс СТРОКА.

Обязательные поля класса:

  • указатель на char - хранит адрес динамически выделенной памяти для размещения символов строки;

  • значение типа int - хранит длину строки в байтах.

Обязательные методы:

  • конструктор без параметров;

  • конструктор, принимающий в качестве параметра С-строку (заканчивается нулевым байтом);

  • конструктор, принимающий в качестве параметра символ;

  • конструктор копирования;

  • получение длины строки;

  • очистка строки (сделать строку пустой);

  • деструктор.

Описать производный от СТРОКА класс СТРОКА_ИДЕНТИФИКАТОР. Строки данного класса строятся по правилам записи идентификаторов в языке С++ и могут включать в себя только те символы, которые могут входить в состав С-идентификаторов. Если исходные данные противоречат правилам записи идентификатора, то создается пустая СТРОКА_ИДЕНТИФИКАТОР.

Обязательные методы:

  • конструктор без параметров;

  • конструктор, принимающий в качестве параметра С-строку (заканчивается нулевым байтом);

  • конструктор, принимающий в качестве параметра символ;

  • конструктор копирования;

  • перевод всех символов строки в верхний регистр;

  • перевод всех символов строки в нижний регистр;

  • поиск первого вхождения символа в строку;

  • деструктор.

Переопределить следующие операции:

  • присваивание ($=$);

  • сложение ($+$) - операция конкатенации строк;

  • вычитание ($-$) - из строки (первый операнд) удаляются все символы, входящие в строку - второй операнд, при этом может получиться пустая строка;

  • операция ($>$) - проверка на больше. Строка считается больше другой, если код символа первой строки в $i$-й позиции ($i$ изменяется от $0$ до $n - 1$, где $n$ - длина более короткой строки) больше кода символа в той же позиции во второй строке, длины строк могут не совпадать;

  • операция ($<$) - проверка на меньше. Строка считается меньше другой, если код символа первой строки в $i$-й позиции ($i$ изменяется от $0$ до $n - 1$, где $n$ - длина более короткой строки) меньше кода символа в той же позиции во второй строке, длины строк могут не совпадать.

Разработчик вправе вводить любое (с обоснованием необходимости) число дополнительных полей и методов.

Написать тестовую программу, которая:

  • динамически выделяет массив указателей на базовый класс;

  • в режиме диалога заполняет этот массив указателями на производные классы, при этом экземпляры производных классов совпадают динамически с заданием начальных значений;

  • для созданных экземпляров производных классов выполняет проверку всех разработанных методов с выводом исходных данных и результатов на дисплей;

  • для конструкторов копирования каждого класса предусмотреть диагностическую печать количества его вызовов в определенное место дисплея (рекомендуется использовать статические члены класса).

Режим диалога обеспечивается с помощью иерархического меню.

enlightened ВАЖНО!

  • Стоимость программы из любого варианта составляет $$ рублей.

  • Стоимость алгоритма (в виде отчета в формате *.doc из любого варианта составляет $$ рублей (заказывается опционально на ваше усмотрение, чтобы детально разобраться с решением лабораторной работы, например, не прибегая к консультации репетитора).

Контрольные вопросы

1. Что такое класс? 16. Что такое конструктор преобразования?
2. Что такое объект? 17. Что такое деструктор?
3. Объяснение понятия полиморфизма. 18. Дружественные функции.
4. Объяснение понятия инкапсуляции. 19. Дружественные классы.
5. Объяснения понятия наследования. 20. Указатель this
6. Что такое метод? 21. Перегрузка операций.
7. Статический метод. 22. Простое наследование.
8. Что такое поле? 23. Уровни доступа производного класса.
9. Статическое поле. 24. Что такое виртуальные методы.
10. Что такое функция-член класса? 25. Механизм позднего связывания.
11. Что такое переменная-член класса? 26. Что такое абстрактные классы?
12. Что такое спецификаторы доступа класса? 27. Множественное наследование.
13. Что такое конструктор? 28. Виртуальное наследование.
14. Что такое конструктор по умолчанию? 29. Обработка исключений.
15. Что такое конструктор копирования? 30. Контролируемый блок.
  31.  Обработчик исключений

enlightened Мы предлагаем студентам $3$ варианта помощи по контрольным вопросам:

  • Сокращенные ответы, по интересующим студента вопросам. Стоимость сокращенного ответа на один контрольный вопрос составляет $75$ рублей.

  • Развернутые ответы, по интересующим студентам вопросам. Стоимость развернутого ответа на один контрольный вопрос составляет $150$ рублей.

  • Помощь репетитора по программированию Александра Георгиевича (звонить по номеру телефона $8\ (926)\ 610-61-95$). Минимальная длительность одного занятия составляет $90$ минут и стоит ровно $1\ 000$ рублей.

О качестве программного кода

Абсолютно любую программу можно закодировать "тысячей" способами. У каждого профессионального программиста собственная философия кодирования, начиная от названия переменных, и, заканчивая подсветкой редактора программного кода.

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

Поэтому, прежде чем приступать к кодированию, мы очень тщательно и скрупулезно изучаем все студенческие материалы, по которым студентам предстоит выполнять лабораторные проекты. Все лабораторные работы из данного практикума не являются исключением.

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

Закодируем студенческие работы на любом из следующих языков программирования: C, C++, C#, Pascal, Delphi

Зачастую разные вузы используют одни и те же методические обучающие пособия. Поэтому, если вы не студент КузГТУ, но вам требуется выполнить такие же или похожие задания, но не на языке C/C++, а, например, на языке Pascal, то мы абсолютно без каких-либо проблем напишем соответствующий код с нуля.

В нашем штате есть СИ-ориентированный программист Валентин Смирнов. Владеет на профессиональном уровне $3$-мя Си-подобными языками: C, C++, C#. Поэтому сообщите нам, под какой язык программирования следует провести адаптацию нужных вам лабораторных работ.

enlightened Стоимость реализации будет такой же, как под язык С/C++. Т е мы не делаем перевод Си-программы на другой язык программирования бесплатно. Но перевод будет сделан в кратчайшие сроки, как правило, в день вашего обращения.

Скидка 50% при заказе всех вариантов лабораторных/курсовых работ

enlightened Своим потенциальным клиентам мы предлагаем сумасшедший бонус! При одновременном заказе всех вариантов какой-либо лабораторной работы предоставляется ценовая скидка в размере $50\%$ от первоначальной стоимости.

Пример. Студенты, учащиеся в одном вузе, испытывают колоссальные проблемы с практическим заданием на языке Си. Поэтому они принимают коллегиальное решение заказать сразу все варианты этой работы. В этом случае им предоставляется скидка в размере $50\%$. Значит, стоимость каждой программы уже составляет не $100$ рублей, а всего $50$ рублей.

Для получения подобной скидки вам нужно оформить заказ на приобретение всех программ выбранной работы. Если по каким-либо причинам вы закажите не все варианты конкретной работы, то бонус не предоставляется.

Для оформления подобного заказа мы предлагаем вам, студентам, объединяться в группу.

Также хочется отметить особый случай, с которым мы периодически сталкиваемся. Иногда студенты определенной группы решают заказать все варианты всех лабораторных работ! В такой ситуации стоимость обговаривается в индивидуальном порядке, но скидка может достигать $70\%$.

А какими способами можно оплатить заказанные работы?

Своим потенциальным клиентам мы предлагаем следующие варианты оплаты:

  • На карточку Сбербанка России (рекомендуемый способ).

  • WebMoney.

  • Яндекс.Деньги.

  • На номер мобильного телефона (нерекомендуемый способ).

Окажем вам полную информационную поддержку, по заказанным у нас работам

Заказав у нас работы, вы получаете полную информационную поддержку. Что включает подобная поддержка?

  1. Ответим на любые тематические вопросы, связанные с программой/блок-схемой, которую вы заказали.

  2. Поможем запустить программу на вашем ПК. Или диагностируем проблему, с которой вы столкнулись, предложив рациональные пути решения.

  3. Исправим код программы под новые требования. Как правило, стоимость этой доработки составляет $10\%$ от первоначальной стоимости купленной программы, т е доработка производится не бесплатно.


Данный материал (программы, текст, оформление) подготовлен при участии:

Александр Георгиевич Валентин Иванович

► Основатель данного сайта.
► Эксперт ОГЭ и ЕГЭ по информатике/математике.
► Профессиональный реализатор студенческих работ.
► Программист на таких языках как: Pascal, C, C#.
► Разработчик БД и СУРБД (MS SQL Server).
► Методист, технический писатель.
► В прошлом школьный учитель и вузовский преподаватель.

Профессиональный программист на языках: C, C++, C#, Java.
► Профессиональный реализатор студенческих работ.
► Алгоритмист, в том числе алгоритмах дискретной математики (графы, комбинаторика, автоматы и т.п.).
► Программист алгоритмов высшей математики.
► Технический писатель.
► В прошлом вузовский преподаватель
.

 

 
 
 
 
 
Авторизация на сайте
 
 
 
Обнаружили
ошибку на сайте?
Занятия по информатике