Лабораторная работа №1
Согласно варианта задания реализовать программу, вычисляющую целочисленное выражение
№ варианта | Выражение | Тип |
a*=b>>3|c++-c | unsigned char, int, short int | |
a^=b++==3?--c:b---c | unsigned int, int, short int | |
a&=b<<3+~++c | unsigned int, short int, int | |
a|=--b%c++ | unsigned int, int, short int | |
a%=b+++--c%b | int, int, short int | |
a/=++b*--c>>3 | int, int, short int | |
a>>=b++%--c | unsigned char, int, short int | |
a<<=~b*--c | unsigned char, int, short int | |
a-=((b++>>2!=c)+1)|++c | int, int, unsigned char | |
a+=b+=c*=b>>2 | long int, int, short int |
Примеры, как осуществлять ввод и вывод смотрите в "m:\Объектно-ориентированное программирование\2015-2016\Ввод-вывод\test.cpp"
Программа должна запрашивать у пользователя значения переменных a,b и c. Вычислять указанное выражение и снова выводить на экран значения переменных a,b и c.
Лабораторная работа №2
Использование циклов. Согласно варианта задания реализовать программу.
№ варианта | Постановка задачи |
Найти сумму целых чисел от m до n. | |
Найти произведение целых чисел от m до n. | |
Найти сумму чисел от m до n, кратных к. | |
В банк положили N у. е. под P процентов в год. Сколько денег будет в банке через L лет? | |
Найти факториал числа n, n<=16. | |
Найти произведение целых чисел от m до n, кратных к. | |
В банк положили N у. е. под P процентов в год. Через сколько лет в банке будет S у. е.? | |
На сколько дней студенту хватит стипендии S, если он тратит N р. в день и его расходы каждый день увеличиваются на X р.? | |
Найти сумму четных чисел от m до n. | |
На сколько дней студенту хватит стипендии S, если он тратит N р. в день и его расходы каждый день увеличиваются в X раз? |
Алгоритм из таблицы реализовать в программе двумя способами. С помощью цикла for и с помощью цикла while (или do while). Выбор цикла while или do while зависит от алгоритма, должен быть применён тот цикл, который позволяет получить оптимальный код.
Лабораторная работа №3
Реализовать программу согласно варианта задания. Где возможно, использовать условный оператор switch.
№ варианта | Постановка задачи |
Дан одномерный массив чисел. Умножить на 3 его положительные элементы, отрицательные разделить на 2, а равные нулю – заменить числом 5. | |
Даны отрезки a, b, c. Определить, можно ли из них составить треугольник. Вывести сообщения типа “можно”, ”нельзя”, ”треугольник превращается в отрезок”. | |
Дан одномерный массив чисел. Если его максимальный элемент >10, найти произведение элементов массива, <=10, но >=5 – найти сумму элементов, <5 – обнулить массив и вывести соответствующее сообщение. | |
Дана точка (x;y) и круг радиуса R с центром в точке (0;0). Определить, где находится точка: внутри, на границе, или за пределами круга. | |
Дана матрица [MxN]. Если число строк больше числа столбцов, удвоить все элементы матрицы. Если число строк меньше числа столбцов, утроить все элементы матрицы. Если матрица квадратная, обнулить все ее элементы. | |
Напечатать значение 0<К<10 римскими цифрами. | |
Для целого числа 14<К<26 написать фразу “мне К лет”, учитывая форму числительных (год, года). | |
Вывести название месяца по его номеру. | |
Напечатать словесное название числа 0<К<10 | |
Вывести название дня недели по его номеру. |
Лабораторная работа №4
Реализовать программу, работающую с одномерным массивом целых чисел (int). Обращение к элементам массива в программе для ввода, обработки и вывода должно быть реализовано с использованием указателей.
№ варианта | Постановка задачи |
Найти сумму тех значений массива, которые делятся на 3 | |
Увеличить элементы массива в два раза | |
Уменьшить элементы массива в два раза | |
Увеличить элементы массива на единицу | |
Найти сумму тех значений массива, которые делятся на 5 | |
Заменить значения элементов массива на противоположные | |
Уменьшить элементы массива на единицу | |
Найти максимальное значение среди элементов массива | |
Найти сумму тех значений массива, которые делятся на 2 | |
Найти минимальное значение среди элементов массива |
Все алгоритмы не должны использовать индексы элементов! В программе не должно быть конструкций вида
a[i]= или a[0] и. т.п.
Пример правильного ввода и вывода массива:
int *p,a[10],i;
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);
p=a;
for(i=0;i<10;i++)
printf("%4d",*p++);
Лабораторная работа №5
Научиться работать с двумерными массивами и вложенными операторами цикла. Реализовать программу согласно варианта задания.
№ варианта | Постановка задачи |
Составить одномерный массив из максимальных элементов строк матрицы [MxN]. | |
Определить число элементов матрицы [MxN] кратных A. | |
Перемножить 2 матрицы [MxN] и [NxK]. | |
Вывести все элементы двумерного массива [MxN] кратные A. | |
Найти сумму элементов матрицы [MxN], расположенных ниже побочной диагонали. | |
Найти число отрицательных элементов матрицы [MxN], расположенных в столбцах с номером, кратным A. | |
Найти произведение элементов матрицы [MxN], расположенных выше главной диагонали. | |
Поменять местами элементы j и k столбцов матрицы [MxN]. | |
Определить количество элементов матрицы [MxN] больших A и расположенных в четных строках и столбцах. | |
Найти минимальный элемент главной диагонали матрицы [MxN]. |
Лабораторная работа №6
Выполнить задание лабораторной работы №5 для случаев, когда память для двумерного массива выделяется динамически в зависимости от введённых M,N,K и корректно освобождается в конце работы программы.
Реализовать два варианта выделения памяти для двумерного массива (можно в одной программе, можно в двух отдельных, если в задании два двумерных массива, можно память под один выделить одним способом, а под второй – другим, тогда достаточно одной программы):
1. Память выделяется одним блоком на размер всех данных массива. Номер строки и столбца переводятся в номер элемента в выделенном блоке памяти (см. Hint);
2. Память выделяется отдельно под одномерный массив указателей на строки массива данных. Затем динамически выделяется память под каждую строку массива данных.
В каждом варианте выделенная память в конце работы алгоритма должна быть корректно освобождена.
Hint: при первом способе выделения памяти обращение к i, j элементу массива MxN будет выполняться так: A[i * N + j] = … или *(A + i*N + j) = …. Во втором случае – A[i][j] = … или *(*(A + i) + j) = ….
Лабораторная работа №7
C использованием комбинированного типа данных (Struct) реализовать программу для работы с данными согласно варианта задания.
№ варианта | Постановка задачи |
Ввести информацию о ценах на процессоры в массив записей и вывести ее в виде таблицы. | |
Ввести имена и телефоны сотрудников организации в массив записей и вывести их в виде таблицы. | |
Ввести информацию о ценах на мониторы в массив записей и вывести ее в виде таблицы. | |
Ввести фамилии и адреса сотрудников организации в массив записей и вывести их в виде таблицы. | |
Ввести характеристики монитора (разрешение, частота вертикальной развертки) в массив записей и вывести их в виде таблицы. | |
Ввести информацию о количестве продукции на складе в массив записей и вывести ее в виде таблицы. | |
Ввести информацию о ценах на жесткие диски в массив записей и вывести ее в виде таблицы. | |
Ввести информацию о ценах на компьютеры в массив записей и вывести ее в виде таблицы. | |
Ввести информацию о ценах на автомобили в массив записей и вывести ее в виде таблицы. | |
Ввести информацию о специальностях сотрудников организации в массив записей и вывести ее в виде таблицы. |
Ввод строковых значений реализовать так, чтобы была возможность вводить текст, содержащий пробелы.
Лабораторная работа №8(1)
Реализовать согласно варианта задания (последняя цифра номера студента в журнале) программу обработки введённого текста (предложения). Обработка русских букв не обязательна, достаточно, чтобы программа корректно обрабатывала текст, состоящий из букв английского алфавита, знаков препинания, цифр (символы с кодами до 0x80).
№ вар-та | Обработка текста | Пример |
Все числовые значение в тексте уменьшить в два раза (нацело) | I have 10 dollars and 3 apples. I have 5 dollars and 1 apples | |
Все числовые значение в тексте уменьшить на один | I have 10 dollars and 3 apples. I have 9 dollars and 3 apples | |
Перевернуть все слова в тексте в обратную сторону | I have 10 dollars, 3 apples. I evah 01 srallod, 3 selppa. | |
Продублировать гласные буквы (aeiouy) | I have 10 dollars, 3 apples. II haavee 10 doollaars, 3 aapplees. | |
Продублировать согласные буквы (bcdfgjklmnpqrstvwxz) | I have 10 dollars, 3 apples. I hhavve 10 ddollllarrss, 3 apppplless. | |
В словах гласные буквы (aeiouy) вынести в начало слова, сохранив порядок | I have 10 dollars, 3 apples. I aehv 10 oadllrs, 3 aeppls. | |
В словах гласные буквы (aeiouy) вынести в конец слова, сохранив порядок | I have 10 dollars, 3 apples. I hvae 10 dllrsoa, 3 pplsae. | |
После каждой запятой в тексте поставить в квадратных скобках её порядковый номер. | I have 10 dollars, 3 apples, 5 oranges. I have 10 dollars,[1] 3 apples,[2] 5 oranges. | |
Заменить все числа в тексте на их шестнадцатеричное представление. | I have 10 dollars, 13 apples, 255 oranges. I have А dollars, D apples, FF oranges. | |
Заменить все числа в тексте на их двоичное представление. | I have 10 dollars, 13 apples, 5 oranges. I have 1010 dollars, 1101 apples, 101 oranges. |
Вывод результата должен быть осуществлён одной командой (например, puts(result);). То есть нужно сначала сформировать строку с ответом, а потом уже её выводить. Не допускается вывод результата по частям.
Пример правильного алгоритм решения (меняет в тексте попарно символы местами):
int main()
{
char src[1000], res[1000]; //строки для исходного текста и результата
puts("Enter text:");
gets(src); //ввод исходного текста
char *s = src, *d = res;
while (*s) {
if (s[1]) { //если есть парный символ, то менять местами в результате
*(d + 1) = *s++; //копируем текущий символ на след. место
*d = *s++;//копируем след. символ на текущее место
d += 2; //перемещаемся вперёд на два символа в строке-результате
}
else *d++ = *s++; //последний копируется «как есть»
}
*d = 0; //заносим в результат символ \0 – признак конца строки
puts("Result:");
puts(res); //вывод результата
return 0;
}