Базовий курс програмування на С++. Урок 18. Структури даних C++ |
Написав Joker | |||||
Вівторок, 28 червня 2016 12:13 Переглядів: 10091
|
|||||
Набирайтеся мужності, щоб ризикувати в житті. Без цього нікуди. @Територія твого розвитку #дій2016
Сьогодні ми розглянемо: 1. Розв’язок попереднього домашнього завдання 2. Структури даних 3. Практична частина 4. Домашнє завдання
Розв’язок попереднього домашнього завдання 1. Вивести рядок навпаки
2. У першому рядку задано певне значення. У наступному ми виводимо один символ. Результат програми повинен показати скільки разів цей символ зустрічається у рядку.
Структури даних Частково структуру даних тепер замінив excel. Наприклад там можна вести облік працівників, їх зарплати, пропуски та інші досягнення. Аналізуючи дані легко обрати якого працівника найкраще звільнити, якщо у цьому є необхідність. І це зручніше ніж вводити дані у програму щоразу чи робити ввід із текстового файлу. Проте, є і хороші сторони. Структура дещо схожа до класів і до змінних. Для прикладу можна реалізувати перевід із одної системи координат у іншу, зберігши читабельність програми, і не писати той самий код декілька разів. Далі ми розглянемо приклад програми Створюється структура за допомогою ключового слова struct. Ось так: Крапка з комою після фігурної дужки є обов’язкові, такий синтаксис. Але сама структура нічого не робить, це тільки опис об’єкта. Так само як змінна double вказує на те, що число може бути дробовим. Структура задає параметри об’єкта. Спершу спробуємо трішки простішу структуру, де будемо виключати з інституту студентів, які прогуляли більше ніж 10 днів навчання. Структура буде дуже простою. Три поля: ім’я студента, курс, кількість пропусків. І інститут у нас теж маленький – 5 студентів. Тепер глянемо, що робить наша програма. Ввід даних про студентів відбувається із клавіатури, звісно це незручно, якби даних було багато краще реалізувати зчитування із файлу. Але для прикладу такий варіант буде більш зрозумілим. Всіх студентів ми зберігаємо у масиві хоча можна створити для кожного з них окрему змінну. Крім цього STUDENT описує все, що потрібно для програми. Це якби різновид змінної J, якщо сказати у загальному. Далі є функція для заповнення. Якщо бажаєте вдосконалити її, то можна зробити тип bool і перевіряти на те, що ввід даних коректний і взагалі відбувся. У цій функції є такий рядок: cin.getline(ex.name, 49); ex – це посилання на об’єкт у функції main. Але у функції ми користуємося ним як об’єктом. name – одне із полів структури. Кожен об’єкт характеризується полями. Звернення відбувається двома способами. В даному випадку, цей і є головним, за допомогою "." . Це якщо ми використовуємо об’єкт. Наприклад як тут: Звернення відбувається через крапку. Другий варіант, коли ми працюємо з вказівником. Я думаю зрозуміло чому потрібно використовувати посилання чи вказівники. Це ефективно. По-перше ми вже знаємо, що у функції створиться копія і вона не може змінити об’єкт у головній функції. Якщо призабули ось простий приклад: Результат буде таким: Тобто змінна а не змінилася, її значення таке саме як і початкове. Це була перше проблема. По-друге, вказівник займає 4 байти, а об’єкт структури 24. Різниця у 6 разів і це багато. Тепер спробуємо використовувати вказівники. За логікою можна зробити так:
(*b).age Але цей запис майже не використовують, тому що придумали спеціальний символ який його замінює. b->age Якщо все зрозуміло, то можете спокійно замінювати перший варіант на другий. Я вважаю наступний код тепер теж зрозумілий. Пам’ятаємо про cin.get(), щоб ввід відбувався коректно. Замість змінної структури я створив масив і заповнював кожен його елемент через цикл. Далі знову я за допомогою циклу перевірив кількість пропусків кожного студента і вибрав тих у кого їх більше 10. Це все.
Практична частина Спершу сформулюю завдання. Буде добре, якщо ви напишете програму без мене. Отже: Нам дано дві різні години. Наше завдання правильно їх додати. Як на прикладі. Перші дві вводяться із клавіатури. Let’s go! Так, з чого складається ця структура? Години і хвилини. Нічого більше. Зрозуміло, що знадобиться 3 об’єкти цієї структури, як c = a + b, тільки години. Залишилося написати функцію для вводу перших двох і прописати те, як слід правильно їх додавати. Цього разу я використав вказівники замість посилань. Ну і я трішки попрацював з тим як буде виглядати ввід. Щоб ввід виглядав так само як на прикладі я дописав перевірку переходу на новий рядок. Після якого очищення екрану, двокрапка і ввід хвилин. Загалом можете скопіювати і подивитися як це працює. Функція iNput виглядає так: Логічно що максимальне кількість хвилин 59. Для того, щоб правильно додати можна додати маленьку умову. Але тут є один маленький баг. Користувач може випадково ввести неіснуючу годину, наприклад 4:84. В такому випадку програма не буде працювати правильно, це просто виправити і тему уроку полягає не у цьому. Для більшого розуміння коду я його залишив. Якщо вас це не влаштовує, просто додайте ще один if. Весь код:
Домашнє завдання Спробуйте знайти координати двох векторів на площині маючи координати їхніх точок (4 точки. Ввід з клавіатури). Крім цього визначте чи вектори лежать на одній або паралельних прямих. ( 19 Проголосувало ) Новіші матеріали:
Старіші матеріали:
3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved." |