Ci++ 1.ppt
- Количество слайдов: 60
Програмування та алгоритмічні мови II семестр
Бали Вид роботи Аудиторна робота Модульний контроль Лаб. роботи Разом Кількість балів за один Кількість балів загальна Відвідування лекцій Відвідування лаб. роб. Контрольна робота 0… 1 0… 8 0… 18 0… 9 0… 24 Готовність до виконання Виконання Захист 0… 2 0… 3 0… 5 0… 10 0… 15 0… 25 0… 101 Форма контролю
Взаємозв’язок між різними системами оцінювань Бали, що набрані студентом за семестр 90 -100 Оцінка національна Відмінно 82 -89 75 -81 Добре С – Добре D – Задовільно 35 -59 0 -34 А – Відмінно В – Дуже добре 66 -74 60 -65 Оцінка ЕСТS Е – достатньо (задовольняє мінімальні критерії) FX – Незадовільно (з можливістю перескладати) Незадовільно F – Незадовільно (з обов’язковим повторним курсом)
Тематика курсу Візуальне програмування Об’єктно-орієнтоване програмування Мова програмування Сі++
Навчальна література 1. Р. Лафорте. Объектно-ориентированное программирование в С++, 4 -е изд. — Питер, — 2004. — 923 с. 2. Макс Шлее. Qt 4. 5. Профессиональное программирование на С++. —СПб. : БХВ-Петербург, 2010. — 896 е. : ил. + DVD — (В подлиннике) 3. Бланшет Ж. , Саммерфилд М. Qt 4: программирование GUI на С++. Пер. с англ. 2 -е изд. , доп. -М. : КУДИЦ-ПРЕСС, 2008. - 736 с. 4. Скляров В. А. Язык С++ и объектно- ориентированное программирование. — Минск. : Выш. шк. , 1997. — 478 с.
Навчальна література 5. Земсков Ю. В. Программирование на C++ с использованием библиотеки Qt 4. - Волгоград 2007 г. 6. Секунов Н. Ю. Программирование на С++ в Linux. — СПб. : БХВ-Петербург, 2004. — 368 с. : ил. 7. Прата С. Язык программирования С++. Лекции и упражнения. Учебник: Пер. с англ. /Стивсн Прата - СПб. : ООО «Диа. Софт. ЮП» , 2005. - 1104 с. 8. Мэйерс С. Эффективное использование С++. 55 верных способов улучшить структуру и код ваших прoграмм - М. : ДМК Пресс, 2006. - 300 c. : ил.
Навчальна література 9. C/C++. Программирование на языке высокого уровня / Т. А. Павловская. — СПб. : Питер, 2003. — 461 е. : ил. 10. Шилдт Г. Самоучитель C++: Пер. с англ. — 3 -е изд. — СПб. : БХВ-Петербург, 2003. — 688 с. 11. Шилдт, Герберт. Полный справочник по С++, 4 -е издание. Пер. с англ. — М. : Издательский дом "Вильяме", 2006. — 800 с. : ил.
Методична література • 1. Програмування та алгоритмічні мови. Методичні вказівки до виконання лабораторних робіт для студентів напрямку підготовки 0908 ”Електроніка” по спеціальності 6. 090803 “Електронні системи”. Частина 2. Мова програмування “С”/ Укл. Ревко А. С. , Гордієнко В. В. –Чернігів: ЧДТУ, 2007. – 60 с.
Методична література • 2. Програмування та алгоритмічні мови. Методичні вказівки до виконання курсового проекту для студентів за напрямком підготовки 0908 “Електроніка”, спеціальності 6. 090803 “Електронні системи” та за напрямком підготовки 0609 “Електротехніка”, спеціальності 6. 090602 “Електричні системи і мережі” / Укл. Ревко А. С. –Чернігів: ЧДТУ, 2006. – 25 с.
Методична література • 3. Программирование алгоритмов в среде Builder C++: Лаб. практикум по курсам «Программирование» и «Основы алгоритмизации и программирование» для студ. 1– 2 -го курсов всех спец. БГУИР дневной и вечерней форм обуч: В 2 ч. Ч. 1 / А. К. Синицын, А. А. Навроцкий, А. В. Щербаков и др. ; Под общ. ред. А. К. Синицына. – Мн. : БГУИР, 2004. – 92 с. : ил.
Допоміжна література 1. Архангельский А. Я. C++Builder 6. Справочное пособие. Книга 1. Язык C++. –М. : Бином-Пресс, 2002 г. — 544 с. : ил. 2. Архангельский А. Я. C++Builder 6. Справочное пособие. Книга 2. Классы и компоненты. –М. : Бином-Пресс, 2002 г. – 528 с: ил. 3. Культин Н. Б. C++ Builder в задачах и примерах. — СПб. : БХВ-Петербург, 2005. – 336 с: ил.
Допоміжна література 4. http: //inel. stu. cn. ua/~asr/forstudent 5. \inel. stuArchiveLiteratura_Книги_ПК, Програм, Же лезо, Драйвера, Интерфейсы_Программирование 6. http: //inel. stu. cn. ua/forum/
Введення виведення в Qt • Віджети: label, line. Edit, text. Edit, table. Widget та ін.
Введення виведення в Qt • Віджети: label, line. Edit, text. Edit, table. Widget та ін. float x; int a; • Введення: x=ui->line. Edit->text(). to. Float(); a=ui->line. Edit_2 ->text(). to. Int(); • Виведення: ui->label->set. Text(QString("%1"). arg(x)); ui->label->set. Text(QString: : number(x)); ui->line. Edit->set. Text(QString: : number(a)); ui->text. Edit->set. Text(QString("x=%1 Om, %2"). arg(x). arg(a)); ui->text. Edit->append(QString(“Текст %1"). arg(x));
Введення виведення в Qt • Діалогові вікна: #include <QInput. Dialog> …… float x; bool ok; x=QInput. Dialog: : get. Double(this, "Введення значень", "x=", 5, 0, 1000, 1, &ok);
Введення виведення в Qt • Введення та виведення елементів масиву (стор. 213 Шлее): table. Widget double a[3][4]; int n, m; ……. . n=ui->line. Edit->text(). to. Int(); m=ui->line. Edit_2 ->text(). to. Int(); ui->table. Widget->set. Row. Count(n); ui->table. Widget->set. Column. Count(m); • Зчитування з комірки: a[2][3]=ui->table. Widget->item(2, 3)->text(). to. Double();
Введення виведення в Qt • • Запис у комірку: QTable. Widget. Item *ptw=0; ptw=new QTable. Widget. Item(QString: : number(a[2][3])); ui->table. Widget->set. Item(0, 0, ptw);
Українська/російська мова в Qt • #include <QText. Codec> QText. Codec: : set. Codec. For. CStrings(QText. Codec: : codec. For. Name("CP 1251")); QText. Codec: : set. Codec. For. Tr(QText. Codec: : codec. For. Name("CP 1251")); QText. Codec: : set. Codec. For. Locale(QText. Codec: : codec. For. Name("CP 1251"));
Приклад роботи з масивом у Qt Створюємо новий візуальний проект dialog table. Widget_2
В кінець файлу dialog. cpp додаємо(перед цим клацнути на кнопки правою кнопкою миши і вибрати «Перейти к слоту» ): double a[10]; int n, m; void Dialog: : on_push. Button_clicked() { n=ui->line. Edit->text(). to. Int(); m=ui->line. Edit_2 ->text(). to. Int(); ui->table. Widget->set. Row. Count(n); ui->table. Widget->set. Column. Count(m); ui->table. Widget_2 ->set. Row. Count(m); ui->table. Widget_2 ->set. Column. Count(n); for(int i=0; i<n; i++) for(int j=0; j<m; j++) { QTable. Widget. Item *ptw=0; ptw=new QTable. Widget. Item(""); ui->table. Widget->set. Item(i, j, ptw); } }
void Dialog: : on_push. Button_2_clicked() { for(int i=0; i<n; i++) for(int j=0; j<m; j++) a[i][j]=ui->table. Widget->item(i, j)->text(). to. Double(); for(int i=0; i<m; i++) for(int j=0; j<n; j++) { b[i][j]=a[j][i]; QTable. Widget. Item *ptw=0; ptw=new QTable. Widget. Item(QString: : number(b[i][j])); ui->table. Widget_2 ->set. Item(i, j, ptw); } }
Результат роботи програми
Основи об'єктно-орієнтованого програмування С++
Класи та об'єкти • Клас – особливий тип даних, до складу якого входять не тільки данні, а й підпрограми для обробки цих даних. (схожий на структуру чи суміш) • Об'єкт – змінна типу даних клас, представник класу. Клас - це абстракція, загальне поняття, шаблон, уявлення, креслення речі. Об'єкт - це реальна конкретна річ, екземпляр класу. Приклад Класи: собака, кішка, мишка, людина, автомобіль. Об'єкти: Жучка, Мурка, Мікі-Маус, Петренко, волга.
Класи та об'єкти • Клас є набором характеристик/властивостей (описують його стан) і дій/методів, які він може виконувати. Наприклад, — хай є клас Песик, до властивостей якого можна віднести «вік» і «кличку» . Екземпляр класу може виконувати дії, що описані у класі (гавкати, сидіти, лежати, їсти), а також містить значення властивостей класу (клас Песик має властивість «вік» , а об'єкт Мухтар має значення — 2 роки).
Класи та об'єкти • Крім властивостей і методів, об'єкт має власне ім'я (не путати з властивістю «кличка» ) Наприклад: Моя. Собака. кличка = "Мухтар" Що значить, що у об'єкта з іменем «Моя. Собака» , є властивість кличка, і ця кличка — Мухтар. А може бути і така ситуація: Хозяїн. Собаки. ім'я = "Василь" Хозяїн. Собаки. прізвище = "Іванов" Тут об'єкт «Хозяїн. Собаки» , у котрого властивість «ім'я» має значення «Василь» , а прізвище «Іванов» .
Класи та об'єкти Подібним чином працюють і методи (дії) об'єктів. Наприклад: Моя. Собака. лежати() Моя. Собака. сидіти() Методи можуть бути з параметрами: Моя. Собака. гавкати(3) (Команда гавкнути 3 рази)
Класи та об'єкти Об'єкт завжди повинен бути створений. Клас існує як факт, тобто є завжди. Створення об'єкту виглядає в різних мовах програмування по різному, хоча частіше за все так: Моя. Собака = new Песик() Так створюється новий екземпляр класу Песик. Іноді він може бути з параметром для додаткової інформації, що необхідна для об'єкту (залежить від реалізації класу): Моя. Собака = new Песик("Мухтар") Клас повинен бути оголошений (описаний) перш ніж задавати змінні цього класу.
Базові принципи ООП • • 1. Пакетування (encapsulation) 2. Наслідування (inheritance) 3. Поліморфізм (polymorphism) 4. Передача повідомлень • Пакетування: об'єднання в одному об'єкті даних та функцій, які працюють з цими даними. До деяких даних доступ може бути заборонений або обмежений.
Базові принципи ООП • Наслідування : нові класи можуть будуватися на основі вже існуючих, унаслідувавши їх властивості та методи. • Поліморфізм: дозволяє використовувати одні і ті ж функції для вирішення різних задач. • Передача повідомлень: основна методологія побудування ОО програм. Такі програми є наборами об'єктів і передаванням повідомлень між цими об'єктами.
Базові принципи ООП • Ієрархія класів – розташування класів в залежності від того, який клас від яких похідний. З самого верху ієрархії основний клас, від якого походять інші класи. (Trolltech - Диаграмма классов Qt 4. 3 [2007]. pdf)
Базові принципи ООП • Перезавантаження функцій – використовується для поліморфізму. Можна описати декілька однакових функцій але з різною кількістю аргументів, різним їх типом або різним значенням, що повертається. • Перезавантаження операцій – використовується для поліморфізму. Дозволяє перевизначити дію стандартних операцій (++, +, -, = і т. д. ) над нестандартними даними. Виконується за допомогою функції(методу) у класі з ім'ям operator<операція>(). Приклад: operator++()
Класи та об'єкти <Оголошення класу>: : = class <ім'я класу>: <список класів-батьків> { public: //доступне всім <дані, методи> protected: //доступне тільки нащадкам <дані, методи> private: //доступне тільки у класі <дані, методи> } <список змінних(об'єктів)> ; <ім'я класу>: : =<ідентифікатор> Фактично, class у С++ є синонімом struct.
Приклад class My. Class { public: My. Class(int=0); void Set. A(int); int Get. A(void); ~My. Class(); private: int A; double B, C; protected: int F(int); }; //конструктор //метод //деструктор //властивість //властивості //метод
Можна оголосити змінні цього класу: My. Class MC, MC 10[10], *Pmc; Реалізацію методів можна робити або прямо у класі, або окремо. Приклад: void My. Class: : Set. A(int Value) { if (Value>=0) //перевірка на коректність даних A=Value; } int My. Class: : Get. A(void) { return A; }
Створити клас для роботи з резисторами #include "dialog. h" #include "ui_dialog. h" //dialog. cpp #include <QMessage. Box> #include <QText. Codec> //------Задавання класу Rezistor-------class Rezistor { public: Rezistor(double=0); //конструктор void Set. R(double); double Get. R(void); QString Perevod(void); ~Rezistor(); //деструктор private: double Opir; protected: bool Control(double); };
//-----Задавання методів класу Rezistor---Rezistor: : Rezistor(double R) { Opir=R; } bool Rezistor: : Control(double R) { if (R>=0&&R<=1 e 12) return true; else return false; } void Rezistor: : Set. R(double r) { if (Control(r)) Opir=r; else { QMessage. Box msg. Box; msg. Box. set. Text("R<0 або R>1000000"); msg. Box. exec(); } }
double Rezistor: : Get. R(void) { return Opir; } QString Rezistor: : Perevod(void) { if(Opir<1000) return QString("%L 1 = %L 2 Ом"). arg(Opir, 0, 'g', 3); else if(Opir<1 e 6) return QString("%L 1 = %L 2 к. Ом"). arg(Opir/1 e 3, 0, 'g', 3); else if(Opir<1 e 9) return QString("%L 1 = %L 2 МОм"). arg(Opir/1 e 6, 0, 'g', 3); return ""; } Rezistor: : ~Rezistor() { } //-----кінець задавання методів класу Rezistor----
Dialog: : Dialog(QWidget *parent) : QDialog(parent), ui(new Ui: : Dialog) { ui->setup. Ui(this); QText. Codec: : set. Codec. For. CStrings(QText. Codec: : codec. For. Name("CP 1251")); QText. Codec: : set. Codec. For. Tr(QText. Codec: : codec. For. Name("CP 1251")); QText. Codec: : set. Codec. For. Locale(QText. Codec: : codec. For. Name("CP 1251")); } Dialog: : ~Dialog() { delete ui; } void Dialog: : on_push. Button_clicked() { Rezistor *R 1; R 1 = new Rezistor(); R 1 ->Set. R(ui->line. Edit->text(). to. Double()); ui->text. Edit->append(R 1 ->Perevod()); }
Результат роботи програми
Приклад зі статичним об'єктом void Dialog: : on_push. Button_clicked() { Rezistor R 1; R 1. Set. R(ui->line. Edit->text(). to. Double()); ui->text. Edit->append(R 1. Perevod()); }
Приклад: перезавантаження операції ++ для класу Rezistor operator++() { Set. R(Get. R()+1); Rezistor temp; temp. Set. R(Get. R()); return temp; } void Dialog: : on_push. Button_clicked() { Rezistor R 1, R 2; R 1. Set. R(ui->line. Edit->text(). to. Double()); R 2=++R 1; ui->text. Edit->append(R 2. Perevod()); }
Приклад: наслідування та перезавантаження операції + class Rezistor. New : public Rezistor { public: Rezistor. New operator+(Rezistor. New r) { Set. R(Get. R()+r. Get. R()); Rezistor. New temp; temp. Set. R(Get. R()); return temp; } };
void Dialog: : on_push. Button_clicked() { Rezistor. New R 1, R 2; Rezistor *R 3; R 3=new Rezistor(100); R 1. Set. R(ui->line. Edit->text(). to. Double()); R 2. Set. R(25); R 2=R 1+R 2; ui->text. Edit->append(R 2. Perevod()); ++*R 3; ui->text. Edit->append(R 3 ->Perevod()); }
Масив у Qt з використанням ООП Створюємо новий візуальний проект dialog, зовнішній вигляд такий як і в прикладі з простим масивом table. Widget_2
Масив у Qt з використанням ООП В кінець файлу dialog. cpp додаємо: class Masiv { public: Masiv(int N, int M); void Input. Mas(int i, int j, double ms); double Output. Mas(int i, int j); void Set. N(int); int Get. N(); void Set. M(int); int Get. M(); void Transponired(Masiv); ~Masiv(); private: }; double mas[100]; int n, m;
Масив у Qt з використанням ООП Masiv: : Masiv(int N, int M) { if(N>0&&N<=100) n=N; else n=1; if(M>0&&M<=100) m=M; else m=1; } void Masiv: : Set. N(int N) { if(N>0&&N<=100) n=N; } void Masiv: : Set. M(int M) { if(M>0&&M<=100) m=M; } int Masiv: : Get. N() { return n; } int Masiv: : Get. M() { return m; }
Масив у Qt з використанням ООП double Masiv: : Output. Mas(int i, int j) { if(i<Get. N()&&j<Get. M())return mas[i][j]; else return 0; } void Masiv: : Input. Mas(int i, int j, double ms) { if(i<Get. N()&&j<Get. M()) mas[i][j]=ms; } void Masiv: : Transponired(Masiv x) { for(int i=0; i<x. Get. N(); i++) for(int j=0; j<x. Get. M(); j++) mas[j][i]=x. mas[i][j]; } Masiv: : ~Masiv() { }
Масив у Qt з використанням ООП Masiv a(3, 4), b(4, 3); void Dialog: : on_push. Button_clicked() { a. Set. N(ui->line. Edit->text(). to. Int()); a. Set. M(ui->line. Edit_2 ->text(). to. Int()); b. Set. M(ui->line. Edit->text(). to. Int()); b. Set. N(ui->line. Edit_2 ->text(). to. Int()); ui->table. Widget->set. Row. Count(a. Get. N()); ui->table. Widget->set. Column. Count(a. Get. M()); ui->table. Widget_2 ->set. Row. Count(b. Get. N()); ui->table. Widget_2 ->set. Column. Count(b. Get. M()); for(int i=0; i<a. Get. N(); i++) for(int j=0; j<a. Get. M(); j++) { QTable. Widget. Item *ptw=0; ptw=new QTable. Widget. Item(""); ui->table. Widget->set. Item(i, j, ptw); } }
Масив у Qt з використанням ООП void Dialog: : on_push. Button_2_clicked() { for(int i=0; i<a. Get. N(); i++) //Введення "а" for(int j=0; j<a. Get. M(); j++) a. Input. Mas(i, j, ui->table. Widget->item(i, j)->text(). to. Double()); b. Transponired(a); //Транспонування for(int i=0; i<b. Get. N(); i++) //Виведення "b" for(int j=0; j<b. Get. M(); j++) { QTable. Widget. Item *ptw=0; ptw=new QTable. Widget. Item(QString("%1"). arg(b. Output. Mas(i, j))); ui->table. Widget_2 ->set. Item(i, j, ptw); } }
Підпрограми у Qt з використанням ООП Створюється клас і підпрограми реалізуються як методи цього класу.
Форма Text. Edit
Файл dialog. cpp: #include "dialog. h" #include "ui_dialog. h" #include <QText. Codec> #include <QInput. Dialog> #include <math. h> Dialog: : Dialog(QWidget *parent) : QDialog(parent), ui(new Ui: : Dialog) { ui->setup. Ui(this); QText. Codec: : set. Codec. For. CStrings(QText. Codec: : codec. For. Name("CP 1251")); QText. Codec: : set. Codec. For. Tr(QText. Codec: : codec. For. Name("CP 1251")); QText. Codec: : set. Codec. For. Locale(QText. Codec: : codec. For. Name("CP 1251")); } Dialog: : ~Dialog() { delete ui; }
Файл dialog. cpp: class abc { public: double x[3]; QString name; \Початок опису нашого класу \Три зміннї \Ім'я змінних abc(QString Nm="") {name=Nm; } \Конструктор ~abc() { } void vvod() { bool ok; for(int i=1; i<=3; i++) \Деструктор \Метод(процедура)введення x[i-1]=QInput. Dialog: : get. Double(0, "Введення значень "+name, QString("%1%2="). arg(name). arg(i), 3. 8, -100, 1000, 5, &ok); }
Файл dialog. cpp: void sum(double *s) { *s=x[0]+x[1]+x[2]; } \Метод(процедура)сумування double min() \Метод(функція)знаходження мін. знач. { if(x[0]<=x[1]&&x[0]<=x[2])return x[0]; else if(x[1]<=x[0]&&x[1]<=x[2])return x[1]; else return x[2]; } }; \Кінець опису нашого класу abc a("a"), b("b"), c("c"); \Задавання об'єктів нашого класу
Файл dialog. cpp: void Dialog: : on_push. Button_clicked() { double e; abc t("t"); a. vvod(); b. vvod(); c. vvod(); if (fabs(a. min())>10) e=b. min()+c. min(); else { a. sum(&t. x[0]); b. sum(&t. x[1]); c. sum(&t. x[2]); e=1+pow(t. min(), 2); } ui->text. Edit->append(QString("a 1=%1, a 2=%2, a 3=%3"). arg(a. x[0]). arg(a. x[1]). arg(a. x[2])); ui->text. Edit->append(QString("b 1=%1, b 2=%2, b 3=%3"). arg(b. x[0]). arg(b. x[1]). arg(b. x[2])); ui->text. Edit->append(QString("c 1=%1, c 2=%2, c 3=%3"). arg(c. x[0]). arg(c. x[1]). arg(c. x[2])); ui->text. Edit->append(QString("e=%1"). arg(e)); }
Результат роботи програми
Ci++ 1.ppt