Список вопросов для подготовки к зачёту по дисциплине

advertisement
Список вопросов для подготовки к зачёту по дисциплине
"Технологии программирования" (часть 1)
Задача 1. Процедурное программирование, базовые возможности языка C++
1.
Основные простые и составные типы данных, операция sizeof(), приведение и
преобразование типов данных, арифметические расчёты и их особенности на C++
2.
Операторы ввода-вывода (библиотеки stdio, iostream), организация построчного,
посимвольного, блочного, форматного ввода-вывода
3.
Выделение памяти для динамических строк, векторов и матриц (malloc/calloc,
new/delete). Проверка выделения памяти, освобождение
4.
Типовые алгоритмы табулирования (одномерных и двумерных данных), поиска
количества, суммы (среднего), произведения, минимума/максимума
5.
Организация цикла с неизвестным заранее числом шагов, организация вычислений с
заданной точностью
6.
Типовые алгоритмы обработки векторов и матриц (всех элементов, для матриц также обработка строк, обработка столбцов, обработка элементов выше/ниже главной диагонали)
7.
Организация сортировки одномерного вектора, попарное сравнение элементов "каждый
с каждым"
8.
Сканирование строк и массивов с помощью указателей
9.
Реализация типового разбора строк на лексемы и проверки соответствия строк шаблонам
(strtok, другие методы библиотеки string)
10.
Открытие файла для чтения текстовых и бинарных данных. Проверка открытия файла
11.
Реализация цикла чтения файла заранее неизвестного размера. Проверка существования
и размера файла
12.
Посимвольное и блочное чтение/запись бинарных данных (fread, fwrite)
13.
Посимвольное и построчное чтение/запись текстовых данных (fgetc, fgets)
14.
Форматное чтение/запись текстовых данных (fscanf, fgets+sscanf)
15.
Написание подпрограмм-функций, передача параметров по ссылке и по значению
Задача 2. Объектно-ориентированное программирование, структуры и классы
1.
Реализация структур данных: описание структурного типа, включение в него
перечислений, объединений, указателей, организация обмена данными с текстовыми и
бинарными файлами
2.
Реализация базовых динамических структур данных: односвязный список, очередь, стек,
дерево
3.
Реализация классов: конструкторы и деструктор, разделение доступа, переопределение
операторов в классах, наследование свойств и методов
В билете 2 задачи. Тема задачи 1 – процедурное программирование, задачи 2 – ООП
Пример билета.
Задача 1. Выбрать из текстового файла строки, соответствующие шаблону XXX-XX-XX, где X
- цифра от 0 до 9 (номер телефона). Вывести найденные строки и их количество. Длина строки
в файле ограничена 128 символами.
Реализация:
#include <stdio.h>
#include <stdlib.h>
int main () {
FILE *f = fopen ("test.txt","rt");
if (f==NULL) {
printf ("\nCan't open file test.txt"); exit (1);
}
char *buf = new char [128];
int count=0,d[7];
while (1) {
fscanf (f,"%s",buf);
int n=sscanf (&buf[0],
"%1d%1d%1d-%1d%1d-%1d%1d",
&d[0],&d[1],&d[2],&d[3],&d[4],&d[5],&d[6]);
if (n==7) {
count++;
buf[9]='\0';
printf ("\n%s",buf);
}
if (feof(f)) break;
}
printf ("\nAll:%d",count);
fflush (stdin); getchar();
return 0;
}
Возможный дополнительный вопрос: обеспечить работу программы с различными
текстовыми файлами, а не только test.txt
Задача 2. Реализовать класс для хранения значений интенсивностей красной, зеленой и синей
цветовых компонент. Интенсивности могут принимать целые значения от 0 до 255
включительно.
Реализовать в классе метод для печати 16-ричного кода цвета (например, при r=g=b=255
должно быть напечатано FFFFFF).
Реализовать в классе оператор бинарного вычитания кодов цветов, который вычисляет
"расстояние" между кодами цветов c1 и c2 по формуле
sqrt((c1.r-c2.r)^2+(c1.g-c2.g)^2+(c1.b-c2.b)^2)
где sqrt - обозначение квадратного корня, ^ -- возведения в степень
Реализация:
#include <stdio.h>
#include <math.h>
class my {
public:
int r,g,b;
inline my (int r=0,int g=0,int b=0) {
this->r=r; this->g=g; this->b=b;
}
inline void show (void) { printf ("\n%02X%02X%02X",r,g,b); }
float operator - (my &color);
};
float my::operator - (my &color) {
return sqrt(
pow((float)(this->r-color.r),2)+
pow((float)(this->g-color.g),2)+
pow((float)(this->g-color.g),2)
);
}
int main () {
my color1(204,204,204);
my color2(255,0,0);
color1.show();
color2.show();
printf ("\n%f",color1-color2);
fflush (stdin); getchar();
return 0;
}
Возможный дополнительный вопрос: обеспечить контроль указанных в условии ограничений
на значения r,g,b (от 0 до 255 включительно)
Download