Список вопросов для подготовки к зачёту по дисциплине "Технологии программирования" (часть 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 включительно)