
Содержание:
Информация для всех студентов, а особенно для студентов КузГТУ
Здравствуйте! Мы - команда из $3$-х программистов, которые оказывают квалифицированную помощь студентам со всех уголков России, в написании лабораторных, курсовых и дипломных работ по программированию.
Также к нам постоянно обращаются студенты за помощью, когда требуется выполнить задание, связанное с программированием высшей математики или проектированием баз данных.
Вам знакома обложка этого учебно-методического пособия? Если, да, то вы обратились точно по адресу! В данном материале вы найдете образцы выполнения заданий из всех лабораторных работ.
Т к я являюсь репетитором по информатике и программированию, то на постоянной основе готовлю студентов технических вузов к сдаче экзаменов, помогаю в реализации лабораторных практикумов.
Кстати, если хотите научиться безошибочно выполнять вузовские лабораторные работы по программированию, а также на достойном уровне выучить язык "чистый" Си или C++, то записывайтесь ко мне на индивидуальную подготовку. Мой контактный №тел.: $8\ (926)\ 610 - 61 - 95$.
Не спеша ознакомьтесь с информацией, представленной на данной веб-странице. Найдете очень много полезного для себя, а также параллельно решите все проблемы с программированием, которые у вас возникли в вузе.
Для навигации по лабораторным работам используйте ссылочное меню в верхней части данной веб-страницы.
Также стоит учитывать тот факт, что издание могло переиздаваться. Следовательно, своего варианта, возможно, вы не сможете обнаружить в перечне заданий. В этом случае обязательно пишите нам на почту: administrator@videoege.ru. Поддержка оказывается круглосуточно!
Мы поможем вам решить любые проблемы, связанные с программированием и программированием высшей математики. Поэтому смело обращайтесь к нам за оперативной помощью.
Нужна ли регистрация на сайте для заказа лабораторной работы?
Нет, для заказа требуемой вам лабораторной работы не нужна никакая регистрация на сайте! Все, что вам необходимо - написать на наш электронный адрес: administrator@videoege.ru.
Мы готовы оказать вам любую информационную поддержку круглосуточно.
Язык программирования C
Практические задания
Задание для всех вариантов звучит так (или, возможно, немного изменено, т к могут быть разные издания учебного пособия).
Цель работы: Приобретение студентами практических навыков создания консольных программ, используя среду Visual Studio .NET C++. Требования к программам:
|
ВАЖНО!
Стоимость программы из любого варианта составляет $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 <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; // завершение работы программы и передача управления в ОС
}
//-------------------------------------
Результаты работы программы:
Давайте выборочно проверим результаты работы программы! Например, проанализируем числа $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++. Требования к программе:
|
ВАЖНО!
Стоимость программы из любого варианта составляет $$ рублей.
Стоимость блок-схемы из любого варианта составляет $$ рублей.
Варианты заданий:
№ | Функция | № | Функция |
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. | Директивы препроцессора. |
Мы предлагаем студентам $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 <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; // завершение работы программы и передача управления в ОС
}
//-------------------------------------------------------------------------------------
Класс памяти "static".
Переменные объявленные со спецификатором static, хранятся постоянно внутри своей функции или файла. В отличие от глобальных переменных они невидимы за пределами своей функции или файла, но они сохраняют свое значение между вызовами. Локальные и глобальные переменные, имеющие спецификатор static, ведут в программе себя по-разному.
В данном примере продемонстрирован принцип работы локальной статической переменной:
[start lines=1000]
#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;
}
Результаты работы программы:
Очень важно понимать, что в отличие от простой локальной переменной, статическая локальная переменная продолжает существовать между вызовами функций. Простая локальная переменная создается заново при каждом вызове, а затем уничтожается.
Глобальная переменная со спецификатором static заставляет компилятор создать глобальную переменную, видимую только в том файле, в котором она объявлена. При разработке больших и сложных программ для "сокрытия" переменных можно смело применять спецификатор static.
Класс памяти "register".
Спецификатор register можно применять к переменным любого типа данных. Стандарты языка C89 и C99 обязывают компилятор обращаться с переменными, имеющими спецификатор register, так быстро, насколько это возможно. При этом символьные и целочисленные переменные размещаются в регистрах процессора.
Разные компиляторы могут по-разному обрабатывать переменные со спецификатором register. Иногда спецификатор register попросту игнорируется компилятором и переменная обрабатывается как обычная.
Спецификатор register можно применять только к локальным переменным и формальным параметрам функций. Регистровые переменные идеально подходят для оптимизации скорости работы цикла. Некоторые профессиональные программисты вообще настаивают на том, чтобы спецификатор register был применен только к переменным-счетчикам циклов.
В данном примере продемонстрирован принцип работы локальной регистровой переменной:
[start lines=10]
#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; // завершение работы программы и передача управления в ОС
}
//-------------------------------------------------------------------------------------
Результаты работы программы:
Практический ощутимый эффект от применения спецификатора register может быть получен только для переменных целого и символьного тип.
Класс памяти "extern".
Спецификатор extern указывает на то, что к переменной применяется внешнее связывание, именно поэтому значения таких переменных будут доступны во всей программе. Если нужно сослаться на переменную, определенную в другой части программы, необходимо объявить ее как внешнюю (extern).
В данном примере продемонстрирован принцип работы внешних переменных:
#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++. Требования к программам:
|
ВАЖНО!
Стоимость программы из любого варианта составляет $$ рублей.
Стоимость алгоритма (в виде отчета в формате *.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 <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$ элементов. |
ВАЖНО!
Стоимость программы из любого варианта составляет $$ рублей.
Стоимость алгоритма (в виде отчета в формате *.doc из любого варианта составляет $$ рублей (заказывается опционально на ваше усмотрение, чтобы детально разобраться с решением лабораторной работы, например, не прибегая к консультации репетитора).
Варианты заданий:
№ | Перегруженная операция | Дополнительный конструктор |
1. | • | Создает матрицу заданного размера, заполненную указанным числом. |
2. | + | Создает матрицу заданного размера, заполненную нулями. |
3. | - | Создает матрицу заданного размера, заполненную нулями. |
Лабораторная работа №3
Задание для всех вариантов звучит так (или, возможно, немного изменено, т к могут быть разные издания учебного пособия).
Тема: Реализация методов ООП средствами Visual Studio .NET C++ на примере программы "Класс Строка" Цель работы: описать класс "Строка", инкапсулирующий в себе данные строки и операций для работы с ними. Создать демонстрационную программу в среде Visual Studio .NET C++ Требования к программе: Описать базовый класс СТРОКА. Обязательные поля класса:
Обязательные методы:
Описать производный от СТРОКА класс СТРОКА_ИДЕНТИФИКАТОР. Строки данного класса строятся по правилам записи идентификаторов в языке С++ и могут включать в себя только те символы, которые могут входить в состав С-идентификаторов. Если исходные данные противоречат правилам записи идентификатора, то создается пустая СТРОКА_ИДЕНТИФИКАТОР. Обязательные методы:
Переопределить следующие операции:
Разработчик вправе вводить любое (с обоснованием необходимости) число дополнительных полей и методов. Написать тестовую программу, которая:
Режим диалога обеспечивается с помощью иерархического меню. |
ВАЖНО!
Стоимость программы из любого варианта составляет $$ рублей.
Стоимость алгоритма (в виде отчета в формате *.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. Обработчик исключений |
Мы предлагаем студентам $3$ варианта помощи по контрольным вопросам:
Сокращенные ответы, по интересующим студента вопросам. Стоимость сокращенного ответа на один контрольный вопрос составляет $75$ рублей.
Развернутые ответы, по интересующим студентам вопросам. Стоимость развернутого ответа на один контрольный вопрос составляет $150$ рублей.
Помощь репетитора по программированию Александра Георгиевича (звонить по номеру телефона $8\ (926)\ 610-61-95$). Минимальная длительность одного занятия составляет $90$ минут и стоит ровно $1\ 000$ рублей.
О качестве программного кода
Абсолютно любую программу можно закодировать "тысячей" способами. У каждого профессионального программиста собственная философия кодирования, начиная от названия переменных, и, заканчивая подсветкой редактора программного кода.
У каждого из нас за плечами колоссальное количество успешно реализованных студенческих проектов. И мы прекрасно понимаем, что вузовские программы, а особенно лабораторные работы, должны соответствовать требованиям, описанным в методическом пособии.
Поэтому, прежде чем приступать к кодированию, мы очень тщательно и скрупулезно изучаем все студенческие материалы, по которым студентам предстоит выполнять лабораторные проекты. Все лабораторные работы из данного практикума не являются исключением.
Соблюдены названия переменных и функций, порядок и способ заполнения массивов и т.п. Преподаватель, принимающий у вас работу, не заподозрит, что вы программировали не самостоятельно.
Закодируем студенческие работы на любом из следующих языков программирования: C, C++, C#, Pascal, Delphi
Зачастую разные вузы используют одни и те же методические обучающие пособия. Поэтому, если вы не студент КузГТУ, но вам требуется выполнить такие же или похожие задания, но не на языке C/C++, а, например, на языке Pascal, то мы абсолютно без каких-либо проблем напишем соответствующий код с нуля.
В нашем штате есть СИ-ориентированный программист Валентин Смирнов. Владеет на профессиональном уровне $3$-мя Си-подобными языками: C, C++, C#. Поэтому сообщите нам, под какой язык программирования следует провести адаптацию нужных вам лабораторных работ.
Стоимость реализации будет такой же, как под язык С/C++. Т е мы не делаем перевод Си-программы на другой язык программирования бесплатно. Но перевод будет сделан в кратчайшие сроки, как правило, в день вашего обращения.
Скидка 50% при заказе всех вариантов лабораторных/курсовых работ
Своим потенциальным клиентам мы предлагаем сумасшедший бонус! При одновременном заказе всех вариантов какой-либо лабораторной работы предоставляется ценовая скидка в размере $50\%$ от первоначальной стоимости.
Пример. Студенты, учащиеся в одном вузе, испытывают колоссальные проблемы с практическим заданием на языке Си. Поэтому они принимают коллегиальное решение заказать сразу все варианты этой работы. В этом случае им предоставляется скидка в размере $50\%$. Значит, стоимость каждой программы уже составляет не $100$ рублей, а всего $50$ рублей. |
Для получения подобной скидки вам нужно оформить заказ на приобретение всех программ выбранной работы. Если по каким-либо причинам вы закажите не все варианты конкретной работы, то бонус не предоставляется.
Для оформления подобного заказа мы предлагаем вам, студентам, объединяться в группу.
Также хочется отметить особый случай, с которым мы периодически сталкиваемся. Иногда студенты определенной группы решают заказать все варианты всех лабораторных работ! В такой ситуации стоимость обговаривается в индивидуальном порядке, но скидка может достигать $70\%$.
А какими способами можно оплатить заказанные работы?
Своим потенциальным клиентам мы предлагаем следующие варианты оплаты:
На карточку Сбербанка России (рекомендуемый способ).
WebMoney.
Яндекс.Деньги.
На номер мобильного телефона (нерекомендуемый способ).
Окажем вам полную информационную поддержку, по заказанным у нас работам
Заказав у нас работы, вы получаете полную информационную поддержку. Что включает подобная поддержка?
Ответим на любые тематические вопросы, связанные с программой/блок-схемой, которую вы заказали.
Поможем запустить программу на вашем ПК. Или диагностируем проблему, с которой вы столкнулись, предложив рациональные пути решения.
Исправим код программы под новые требования. Как правило, стоимость этой доработки составляет $10\%$ от первоначальной стоимости купленной программы, т е доработка производится не бесплатно.
Данный материал (программы, текст, оформление) подготовлен при участии:
Александр Георгиевич | Валентин Иванович |
► Основатель данного сайта. |
► Профессиональный программист на языках: C, C++, C#, Java. |