[{"data":1,"prerenderedAt":15886},["ShallowReactive",2],{"navigation_docs":3,"-cpp-c-style-files":3403,"-cpp-c-style-files-surround":15881},[4,1707,1912,2366,2547,2673,2880,3002,3052,3109,3143,3269,3346,3399],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"C#","i-devicon-csharp","\u002Fcsharp","01.csharp",[10,13,60,90,120,202,219,253,379,404,457,650,1364,1654,1703],{"title":11,"path":7,"stem":12},"C# та .NET","01.csharp\u002Findex",{"title":14,"icon":15,"path":16,"stem":17,"children":18,"page":59},"Fundamentals","i-lucide-book-open","\u002Fcsharp\u002Ffundamentals","01.csharp\u002F01.fundamentals",[19,23,27,31,35,39,43,47,51,55],{"title":20,"path":21,"stem":22},"Вступ до екосистеми .NET","\u002Fcsharp\u002Ffundamentals\u002Fintroduction-to-ecosystem","01.csharp\u002F01.fundamentals\u002F01.introduction-to-ecosystem",{"title":24,"path":25,"stem":26},"Структура програми на C#","\u002Fcsharp\u002Ffundamentals\u002Fprogram-structure","01.csharp\u002F01.fundamentals\u002F02.program-structure",{"title":28,"path":29,"stem":30},"Змінні та Типи Даних","\u002Fcsharp\u002Ffundamentals\u002Fvariables-data-types","01.csharp\u002F01.fundamentals\u002F03.variables-data-types",{"title":32,"path":33,"stem":34},"Масиви","\u002Fcsharp\u002Ffundamentals\u002Farrays","01.csharp\u002F01.fundamentals\u002F04.arrays",{"title":36,"path":37,"stem":38},"Strings & Text Handling","\u002Fcsharp\u002Ffundamentals\u002Fstrings-text-handling","01.csharp\u002F01.fundamentals\u002F05.strings-text-handling",{"title":40,"path":41,"stem":42},"Дати і Час","\u002Fcsharp\u002Ffundamentals\u002Fdates-time-handling","01.csharp\u002F01.fundamentals\u002F06.dates-time-handling",{"title":44,"path":45,"stem":46},"Потік Керування","\u002Fcsharp\u002Ffundamentals\u002Fcontrol-flow","01.csharp\u002F01.fundamentals\u002F07.control-flow",{"title":48,"path":49,"stem":50},"Методи","\u002Fcsharp\u002Ffundamentals\u002Fmethods","01.csharp\u002F01.fundamentals\u002F08.methods",{"title":52,"path":53,"stem":54},"Основи Відлагодження","\u002Fcsharp\u002Ffundamentals\u002Fdebugging-basics","01.csharp\u002F01.fundamentals\u002F09.debugging-basics",{"title":56,"path":57,"stem":58},"Інтерактивна Консоль (Classic)","\u002Fcsharp\u002Ffundamentals\u002Finteractive-console","01.csharp\u002F01.fundamentals\u002F10.interactive-console",false,{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":59},"OOP","i-lucide-box","\u002Fcsharp\u002Foop","01.csharp\u002F02.oop",[66,70,74,78,82,86],{"title":67,"path":68,"stem":69},"Package Management (Управління Пакетами)","\u002Fcsharp\u002Foop\u002Fpackage-management","01.csharp\u002F02.oop\u002F01.package-management",{"title":71,"path":72,"stem":73},"Класи та Об'єкти","\u002Fcsharp\u002Foop\u002Fclasses-objects","01.csharp\u002F02.oop\u002F02.classes-objects",{"title":75,"path":76,"stem":77},"Властивості та Поля","\u002Fcsharp\u002Foop\u002Fproperties-fields","01.csharp\u002F02.oop\u002F03.properties-fields",{"title":79,"path":80,"stem":81},"Стовпи ООП","\u002Fcsharp\u002Foop\u002Foop-pillars","01.csharp\u002F02.oop\u002F04.oop-pillars",{"title":83,"path":84,"stem":85},"Advanced Types","\u002Fcsharp\u002Foop\u002Fadvanced-types","01.csharp\u002F02.oop\u002F05.advanced-types",{"title":87,"path":88,"stem":89},"Namespaces (Простори Імен)","\u002Fcsharp\u002Foop\u002Fnamespaces","01.csharp\u002F02.oop\u002F06.namespaces",{"title":91,"icon":92,"path":93,"stem":94,"children":95,"page":59},"Advanced Core","i-lucide-zap","\u002Fcsharp\u002Fadvanced-core","01.csharp\u002F03.advanced-core",[96,100,104,108,112,116],{"title":97,"path":98,"stem":99},"Generics (Узагальнення)","\u002Fcsharp\u002Fadvanced-core\u002Fgenerics","01.csharp\u002F03.advanced-core\u002F01.generics",{"title":101,"path":102,"stem":103},"Делегати, Події та Лямбда-вирази","\u002Fcsharp\u002Fadvanced-core\u002Fdelegates-events-lambdas","01.csharp\u002F03.advanced-core\u002F02.delegates-events-lambdas",{"title":105,"path":106,"stem":107},"Interfaces Deep Dive (Інтерфейси: Поглиблений Розгляд)","\u002Fcsharp\u002Fadvanced-core\u002Finterfaces-deep-dive","01.csharp\u002F03.advanced-core\u002F03.interfaces-deep-dive",{"title":109,"path":110,"stem":111},"Обробка Винятків","\u002Fcsharp\u002Fadvanced-core\u002Fexception-handling","01.csharp\u002F03.advanced-core\u002F04.exception-handling",{"title":113,"path":114,"stem":115},"Pattern Matching","\u002Fcsharp\u002Fadvanced-core\u002Fpattern-matching","01.csharp\u002F03.advanced-core\u002F05.pattern-matching",{"title":117,"path":118,"stem":119},"Додаткові Можливості C#","\u002Fcsharp\u002Fadvanced-core\u002Fadditional-features","01.csharp\u002F03.advanced-core\u002F06.additional-features",{"title":121,"icon":122,"path":123,"stem":124,"children":125,"page":59},"Architecture Best Practices","i-lucide-building-2","\u002Fcsharp\u002Farchitecture-best-practices","01.csharp\u002F04.architecture-best-practices",[126,130,149,153,157,161,165,169],{"title":127,"path":128,"stem":129},"Software Design Principles (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fsoftware-design-principles","01.csharp\u002F04.architecture-best-practices\u002F01.software-design-principles",{"title":131,"icon":132,"path":133,"stem":134,"children":135,"page":59},"Design Patterns","i-lucide-folder","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns",[136],{"title":137,"icon":132,"path":138,"stem":139,"children":140,"page":59},"Creational","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational",[141,145],{"title":142,"path":143,"stem":144},"Singleton (Одинак)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fsingleton","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F01.singleton",{"title":146,"path":147,"stem":148},"Builder (Будівельник)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fbuilder","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F02.builder",{"title":150,"path":151,"stem":152},"Building Professional CLIs","\u002Fcsharp\u002Farchitecture-best-practices\u002Fbuilding-professional-clis","01.csharp\u002F04.architecture-best-practices\u002F03.building-professional-clis",{"title":154,"path":155,"stem":156},"Validation & Flow Control","\u002Fcsharp\u002Farchitecture-best-practices\u002Fvalidation-flow-control","01.csharp\u002F04.architecture-best-practices\u002F04.validation-flow-control",{"title":158,"path":159,"stem":160},"The Modern .NET Host (Microsoft.Extensions)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fmodern-dotnet-host","01.csharp\u002F04.architecture-best-practices\u002F05.modern-dotnet-host",{"title":162,"path":163,"stem":164},"Data Mapper: Repository та DAO патерни (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part1","01.csharp\u002F04.architecture-best-practices\u002F06.data-mapper-part1",{"title":166,"path":167,"stem":168},"Data Mapper: Repository та DAO патерни (Частина 2)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part2","01.csharp\u002F04.architecture-best-practices\u002F07.data-mapper-part2",{"title":170,"icon":132,"path":171,"stem":172,"children":173,"page":59},"Di Ioc","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc",[174,178,182,186,190,194,198],{"title":175,"path":176,"stem":177},"Проблема залежностей та Інверсія Контролю","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fthe-dependency-problem","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F01.the-dependency-problem",{"title":179,"path":180,"stem":181},"Будуємо власний Service Container","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fbuild-your-own-container","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F02.build-your-own-container",{"title":183,"path":184,"stem":185},"Service Locator: Паттерн та Анти-паттерн","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-locator-pattern","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F03.service-locator-pattern",{"title":187,"path":188,"stem":189},"Паттерни Dependency Injection","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdependency-injection-patterns","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F04.dependency-injection-patterns",{"title":191,"path":192,"stem":193},"Microsoft DI: IServiceCollection та IServiceProvider","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fmicrosoft-di-deep-dive","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F05.microsoft-di-deep-dive",{"title":195,"path":196,"stem":197},"Service Lifetimes та Scopes","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-lifetimes-and-scopes","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F06.service-lifetimes-and-scopes",{"title":199,"path":200,"stem":201},"DI Анти-паттерни та Найкращі Практики","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdi-anti-patterns-and-best-practices","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F07.di-anti-patterns-and-best-practices",{"title":203,"icon":132,"path":204,"stem":205,"children":206,"page":59},"Standard Library","\u002Fcsharp\u002Fstandard-library","01.csharp\u002F05.standard-library",[207,211,215],{"title":208,"path":209,"stem":210},"Collections (Колекції)","\u002Fcsharp\u002Fstandard-library\u002Fcollections","01.csharp\u002F05.standard-library\u002F01.collections",{"title":212,"path":213,"stem":214},"High Performance Types (Високопродуктивні Типи)","\u002Fcsharp\u002Fstandard-library\u002Fhigh-performance-types","01.csharp\u002F05.standard-library\u002F02.high-performance-types",{"title":216,"path":217,"stem":218},"LINQ (Language Integrated Query)","\u002Fcsharp\u002Fstandard-library\u002Flinq","01.csharp\u002F05.standard-library\u002F03.linq",{"title":220,"icon":221,"path":222,"stem":223,"children":224,"page":59},"System Internals Concurrency","i-lucide-server","\u002Fcsharp\u002Fsystem-internals-concurrency","01.csharp\u002F06.system-internals-concurrency",[225,229,233,237,241,245,249],{"title":226,"path":227,"stem":228},"Memory Management","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmemory-management","01.csharp\u002F06.system-internals-concurrency\u002F01.memory-management",{"title":230,"path":231,"stem":232},"Reflection API: System.Type та Метадані","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Freflection-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F02.reflection-fundamentals",{"title":234,"path":235,"stem":236},"Attributes та Dynamic Language Runtime","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fattributes-dynamic","01.csharp\u002F06.system-internals-concurrency\u002F03.attributes-dynamic",{"title":238,"path":239,"stem":240},"Expression Trees: Швидка Альтернатива Рефлексії","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fexpression-trees-compiled","01.csharp\u002F06.system-internals-concurrency\u002F04.expression-trees-compiled",{"title":242,"path":243,"stem":244},"Source Generators: Compile-Time Code Generation","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsource-generators","01.csharp\u002F06.system-internals-concurrency\u002F05.source-generators",{"title":246,"path":247,"stem":248},"Multithreading Fundamentals","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmultithreading-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F06.multithreading-fundamentals",{"title":250,"path":251,"stem":252},"Synchronization Primitives","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsynchronization-primitives","01.csharp\u002F06.system-internals-concurrency\u002F07.synchronization-primitives",{"title":254,"icon":255,"path":256,"stem":257,"children":258,"page":59},"System Programming Windows","i-lucide-cpu","\u002Fcsharp\u002Fsystem-programming-windows","01.csharp\u002F07.system-programming-windows",[259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343,347,351,355,359,363,367,371,375],{"title":260,"path":261,"stem":262},"Як Працює Операційна Система","\u002Fcsharp\u002Fsystem-programming-windows\u002Fhow-os-works","01.csharp\u002F07.system-programming-windows\u002F01.how-os-works",{"title":264,"path":265,"stem":266},"Процеси в .NET — API та Запуск","\u002Fcsharp\u002Fsystem-programming-windows\u002Fprocesses-in-dotnet","01.csharp\u002F07.system-programming-windows\u002F02.processes-in-dotnet",{"title":268,"path":269,"stem":270},"Процеси в .NET — IPC та Міжпроцесна Комунікація","\u002Fcsharp\u002Fsystem-programming-windows\u002F02a.processes-ipc","01.csharp\u002F07.system-programming-windows\u002F02a.processes-ipc",{"title":272,"path":273,"stem":274},"Application Domains та Збірки — AppDomain і AssemblyLoadContext","\u002Fcsharp\u002Fsystem-programming-windows\u002Fappdomains-assemblies","01.csharp\u002F07.system-programming-windows\u002F03.appdomains-assemblies",{"title":276,"path":277,"stem":278},"Application Domains та Збірки — Plug-in Система з Hot-Reload","\u002Fcsharp\u002Fsystem-programming-windows\u002F03a.appdomains-plugin-system","01.csharp\u002F07.system-programming-windows\u002F03a.appdomains-plugin-system",{"title":280,"path":281,"stem":282},"Потоки — Основи та API Thread","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-fundamentals","01.csharp\u002F07.system-programming-windows\u002F04.thread-fundamentals",{"title":284,"path":285,"stem":286},"Потоки — Lifecycle, Пріоритети та Безпечне Завершення","\u002Fcsharp\u002Fsystem-programming-windows\u002F04a.thread-lifecycle-priorities","01.csharp\u002F07.system-programming-windows\u002F04a.thread-lifecycle-priorities",{"title":288,"path":289,"stem":290},"Проблеми Спільного Стану — Race Condition та Data Race","\u002Fcsharp\u002Fsystem-programming-windows\u002Fshared-state-problems","01.csharp\u002F07.system-programming-windows\u002F05.shared-state-problems",{"title":292,"path":293,"stem":294},"Проблеми Спільного Стану — Memory Model та volatile","\u002Fcsharp\u002Fsystem-programming-windows\u002F05a.shared-state-memory-model","01.csharp\u002F07.system-programming-windows\u002F05a.shared-state-memory-model",{"title":296,"path":297,"stem":298},"Синхронізація — Monitor, lock та еволюція примітивів","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-fundamentals","01.csharp\u002F07.system-programming-windows\u002F06.synchronization-fundamentals",{"title":300,"path":301,"stem":302},"Синхронізація — Наскрізний Приклад та Deadlock Detection","\u002Fcsharp\u002Fsystem-programming-windows\u002F06a.synchronization-walkthrough","01.csharp\u002F07.system-programming-windows\u002F06a.synchronization-walkthrough",{"title":304,"path":305,"stem":306},"Синхронізація — Mutex, Semaphore та Event-Based Primitives","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-advanced","01.csharp\u002F07.system-programming-windows\u002F07.synchronization-advanced",{"title":308,"path":309,"stem":310},"Синхронізація — Interlocked, Volatile та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002F07a.synchronization-advanced-walkthrough","01.csharp\u002F07.system-programming-windows\u002F07a.synchronization-advanced-walkthrough",{"title":312,"path":313,"stem":314},"Interlocked, CAS та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002Finterlocked-cas-lockfree","01.csharp\u002F07.system-programming-windows\u002F08.interlocked-cas-lockfree",{"title":316,"path":317,"stem":318},"Volatile, Memory Model та Spinning","\u002Fcsharp\u002Fsystem-programming-windows\u002F08a.volatile-memory-model","01.csharp\u002F07.system-programming-windows\u002F08a.volatile-memory-model",{"title":320,"path":321,"stem":322},"ThreadPool — Пул Потоків для Ефективного Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-pool","01.csharp\u002F07.system-programming-windows\u002F09.thread-pool",{"title":324,"path":325,"stem":326},"ThreadPool — Просунуті Сценарії та Внутрішня Будова","\u002Fcsharp\u002Fsystem-programming-windows\u002F09a.thread-pool-advanced","01.csharp\u002F07.system-programming-windows\u002F09a.thread-pool-advanced",{"title":328,"path":329,"stem":330},"Concurrent та Immutable Collections","\u002Fcsharp\u002Fsystem-programming-windows\u002Fconcurrent-collections","01.csharp\u002F07.system-programming-windows\u002F10.concurrent-collections",{"title":332,"path":333,"stem":334},"TPL, Task та Композиція — Від Thread до Task","\u002Fcsharp\u002Fsystem-programming-windows\u002Ftpl-parallel-plinq","01.csharp\u002F07.system-programming-windows\u002F11.tpl-parallel-plinq",{"title":336,"path":337,"stem":338},"Parallel Class та PLINQ — Data Parallelism","\u002Fcsharp\u002Fsystem-programming-windows\u002F11a.tpl-parallel-plinq-advanced","01.csharp\u002F07.system-programming-windows\u002F11a.tpl-parallel-plinq-advanced",{"title":340,"path":341,"stem":342},"Async\u002FAwait — Фундамент Асинхронного Програмування","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-fundamentals","01.csharp\u002F07.system-programming-windows\u002F12.async-fundamentals",{"title":344,"path":345,"stem":346},"SynchronizationContext та ConfigureAwait — Контекст Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-context-configureawait","01.csharp\u002F07.system-programming-windows\u002F13.async-context-configureawait",{"title":348,"path":349,"stem":350},"Async — Просунуті Паттерни","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-advanced","01.csharp\u002F07.system-programming-windows\u002F14.async-advanced",{"title":352,"path":353,"stem":354},"System.Threading.Channels — Async Producer-Consumer","\u002Fcsharp\u002Fsystem-programming-windows\u002Fchannels","01.csharp\u002F07.system-programming-windows\u002F15.channels",{"title":356,"path":357,"stem":358},"Асинхронна Синхронізація","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-synchronization","01.csharp\u002F07.system-programming-windows\u002F16.async-synchronization",{"title":360,"path":361,"stem":362},"Unsafe Code та Вказівники","\u002Fcsharp\u002Fsystem-programming-windows\u002Funsafe-code","01.csharp\u002F07.system-programming-windows\u002F17.unsafe-code",{"title":364,"path":365,"stem":366},"P\u002FInvoke та Windows API — Міст між .NET та Native Code","\u002Fcsharp\u002Fsystem-programming-windows\u002Fpinvoke-winapi","01.csharp\u002F07.system-programming-windows\u002F18.pinvoke-winapi",{"title":368,"path":369,"stem":370},"Реєстр Windows — Центральна База Конфігурації Системи","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-registry","01.csharp\u002F07.system-programming-windows\u002F19.windows-registry",{"title":372,"path":373,"stem":374},"Windows Hooks, Hotkeys та Services — Глибока Інтеграція з ОС","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-hooks-services","01.csharp\u002F07.system-programming-windows\u002F20.windows-hooks-services",{"title":376,"path":377,"stem":378},"Системне Програмування C# (Windows) — 07.system-programming-windows","\u002Fcsharp\u002Fsystem-programming-windows\u002Fimplementation_plan","01.csharp\u002F07.system-programming-windows\u002Fimplementation_plan",{"title":380,"icon":132,"path":381,"stem":382,"children":383,"page":59},"Io","\u002Fcsharp\u002Fio","01.csharp\u002F08.io",[384,388,392,396,400],{"title":385,"path":386,"stem":387},"8.1.1. Основи роботи з файловою системою","\u002Fcsharp\u002Fio\u002Ffile-system-basics","01.csharp\u002F08.io\u002F01.file-system-basics",{"title":389,"path":390,"stem":391},"8.1.2. Потоки (Streams) та Серіалізація Даних","\u002Fcsharp\u002Fio\u002Fstreams-serialization","01.csharp\u002F08.io\u002F02.streams-serialization",{"title":393,"path":394,"stem":395},"8.2.1. JSON Serialization з System.Text.Json","\u002Fcsharp\u002Fio\u002Fjson-serialization","01.csharp\u002F08.io\u002F03.json-serialization",{"title":397,"path":398,"stem":399},"8.2.2. XML Serialization та LINQ to XML","\u002Fcsharp\u002Fio\u002Fxml-serialization","01.csharp\u002F08.io\u002F04.xml-serialization",{"title":401,"path":402,"stem":403},"8.2.3. Binary Serialization: MessagePack та Protocol Buffers","\u002Fcsharp\u002Fio\u002Fbinary-serialization","01.csharp\u002F08.io\u002F05.binary-serialization",{"title":405,"icon":132,"path":406,"stem":407,"children":408,"page":59},"Ado Net","\u002Fcsharp\u002Fado-net","01.csharp\u002F09.ado-net",[409,413,417,421,425,429,433,437,441,445,449,453],{"title":410,"path":411,"stem":412},"9.1. Введення в ADO.NET","\u002Fcsharp\u002Fado-net\u002Fintroduction-to-adonet","01.csharp\u002F09.ado-net\u002F01.introduction-to-adonet",{"title":414,"path":415,"stem":416},"9.2. Клас DbConnection — з'єднання з базою даних","\u002Fcsharp\u002Fado-net\u002Fconnection","01.csharp\u002F09.ado-net\u002F02.connection",{"title":418,"path":419,"stem":420},"9.3. Клас DbCommand — виконання SQL-запитів","\u002Fcsharp\u002Fado-net\u002Fcommand-and-queries","01.csharp\u002F09.ado-net\u002F03.command-and-queries",{"title":422,"path":423,"stem":424},"9.4. Клас DbDataReader — ефективне читання даних","\u002Fcsharp\u002Fado-net\u002Fdatareader","01.csharp\u002F09.ado-net\u002F04.datareader",{"title":426,"path":427,"stem":428},"9.5. Параметризовані запити та захист від SQL Injection","\u002Fcsharp\u002Fado-net\u002Fparameters-and-sql-injection","01.csharp\u002F09.ado-net\u002F05.parameters-and-sql-injection",{"title":430,"path":431,"stem":432},"9.6. Транзакції в ADO.NET","\u002Fcsharp\u002Fado-net\u002Ftransactions","01.csharp\u002F09.ado-net\u002F06.transactions",{"title":434,"path":435,"stem":436},"9.7. DbProviderFactory — провайдер-незалежний код","\u002Fcsharp\u002Fado-net\u002Fprovider-factory","01.csharp\u002F09.ado-net\u002F07.provider-factory",{"title":438,"path":439,"stem":440},"9.8. Асинхронний доступ до даних","\u002Fcsharp\u002Fado-net\u002Fasync-data-access","01.csharp\u002F09.ado-net\u002F08.async-data-access",{"title":442,"path":443,"stem":444},"9.9. Від'єднаний режим: DataSet, DataTable, DataRow","\u002Fcsharp\u002Fado-net\u002Fdisconnected-mode-dataset","01.csharp\u002F09.ado-net\u002F09.disconnected-mode-dataset",{"title":446,"path":447,"stem":448},"9.10. DataAdapter — міст між DataSet та базою даних","\u002Fcsharp\u002Fado-net\u002Fdata-adapter","01.csharp\u002F09.ado-net\u002F10.data-adapter",{"title":450,"path":451,"stem":452},"9.11. Data Mapper та Repository: Архітектура доступу до даних","\u002Fcsharp\u002Fado-net\u002Fdata-mapper-repository","01.csharp\u002F09.ado-net\u002F11.data-mapper-repository",{"title":454,"path":455,"stem":456},"9.12. Identity Map, Unit of Work та Specification Pattern","\u002Fcsharp\u002Fado-net\u002Fadvanced-patterns","01.csharp\u002F09.ado-net\u002F12.advanced-patterns",{"title":458,"icon":255,"path":459,"stem":460,"children":461,"page":59},"Ef Core","\u002Fcsharp\u002Fef-core","01.csharp\u002F10.ef-core",[462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,532,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646],{"title":463,"path":464,"stem":465},"Що таке ORM? Від SQL до об'єктів","\u002Fcsharp\u002Fef-core\u002Fwhat-is-orm","01.csharp\u002F10.ef-core\u002F01.what-is-orm",{"title":467,"path":468,"stem":469},"Перший проєкт — від нуля до CRUD","\u002Fcsharp\u002Fef-core\u002Ffirst-project","01.csharp\u002F10.ef-core\u002F02.first-project",{"title":471,"path":472,"stem":473},"DbContext — Серце EF Core","\u002Fcsharp\u002Fef-core\u002Fdbcontext-deep-dive","01.csharp\u002F10.ef-core\u002F03.dbcontext-deep-dive",{"title":475,"path":476,"stem":477},"Провайдери баз даних — Архітектура та Вибір СУБД","\u002Fcsharp\u002Fef-core\u002Fdatabase-providers","01.csharp\u002F10.ef-core\u002F04.database-providers",{"title":479,"path":480,"stem":481},"Конвенції EF Core — Магія без конфігурації","\u002Fcsharp\u002Fef-core\u002Fconventions","01.csharp\u002F10.ef-core\u002F05.conventions",{"title":483,"path":484,"stem":485},"Fluent API та Data Annotations — Явна конфігурація моделі","\u002Fcsharp\u002Fef-core\u002Ffluent-api-vs-annotations","01.csharp\u002F10.ef-core\u002F06.fluent-api-vs-annotations",{"title":487,"path":488,"stem":489},"Зв'язки — One-to-One та One-to-Many","\u002Fcsharp\u002Fef-core\u002Frelationships-basics","01.csharp\u002F10.ef-core\u002F07.relationships-basics",{"title":491,"path":492,"stem":493},"Зв'язки Advanced — Many-to-Many та Складні Сценарії","\u002Fcsharp\u002Fef-core\u002Frelationships-advanced","01.csharp\u002F10.ef-core\u002F08.relationships-advanced",{"title":495,"path":496,"stem":497},"Властивості — Типи, Конвертери, Компаратори (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part1","01.csharp\u002F10.ef-core\u002F09.property-configuration-part1",{"title":499,"path":500,"stem":501},"Властивості — Value Comparers, Generators, Shadow Properties (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part2","01.csharp\u002F10.ef-core\u002F09.property-configuration-part2",{"title":503,"path":504,"stem":505},"Складні типи — Owned Types та Complex Types (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part1","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part1",{"title":507,"path":508,"stem":509},"Складні типи — Complex Types, Keyless Entities, Порівняння (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part2","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part2",{"title":511,"path":512,"stem":513},"JSON Columns — Складні дані у JSON (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part1","01.csharp\u002F10.ef-core\u002F11.json-columns-part1",{"title":515,"path":516,"stem":517},"JSON Columns — Value Comparers, Індекси, Провайдери (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part2","01.csharp\u002F10.ef-core\u002F11.json-columns-part2",{"title":519,"path":520,"stem":521},"Успадкування — Абстрактні класи та TPH (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finheritance-part1","01.csharp\u002F10.ef-core\u002F12.inheritance-part1",{"title":523,"path":524,"stem":525},"Успадкування — TPT, TPC та Порівняння Стратегій (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finheritance-part2","01.csharp\u002F10.ef-core\u002F12.inheritance-part2",{"title":527,"path":528,"stem":529,"children":530},"Індекси, Обмеження та Схема (Частина 1)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part1","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part1",[531],{"title":527,"path":528,"stem":529},{"title":533,"path":534,"stem":535,"children":536},"Індекси, Обмеження та Схема (Частина 2)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part2","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part2",[537],{"title":533,"path":534,"stem":535},{"title":539,"path":540,"stem":541},"Seed Data — Початкові Дані (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fseeding-part1","01.csharp\u002F10.ef-core\u002F14.seeding-part1",{"title":543,"path":544,"stem":545},"Seed Data — SQL-скрипти, Bogus та Стратегії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fseeding-part2","01.csharp\u002F10.ef-core\u002F14.seeding-part2",{"title":547,"path":548,"stem":549},"Global Query Filters — Глобальні Фільтри (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part1","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part1",{"title":551,"path":552,"stem":553},"Global Query Filters — Підводні камені та Інтеграція (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part2","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part2",{"title":555,"path":556,"stem":557},"LINQ-запити в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part1","01.csharp\u002F10.ef-core\u002F16.linq-queries-part1",{"title":559,"path":560,"stem":561},"LINQ-запити в EF Core (Частина 2)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part2","01.csharp\u002F10.ef-core\u002F16.linq-queries-part2",{"title":563,"path":564,"stem":565},"Завантаження Пов'язаних Даних (Частина 1)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part1","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part1",{"title":567,"path":568,"stem":569},"Завантаження Пов'язаних Даних (Частина 2)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part2","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part2",{"title":571,"path":572,"stem":573},"Raw SQL, Views та Stored Procedures (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part1","01.csharp\u002F10.ef-core\u002F18.raw-sql-part1",{"title":575,"path":576,"stem":577},"Raw SQL — Stored Procedures, DbFunction та Bulk Operations (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part2","01.csharp\u002F10.ef-core\u002F18.raw-sql-part2",{"title":579,"path":580,"stem":581},"Продвинуті Запити — Compiled Queries, Bulk та Оптимізація (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part1","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part1",{"title":583,"path":584,"stem":585},"Продвинуті Запити — Query Tags, Bulk та Interceptors (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part2","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part2",{"title":587,"path":588,"stem":589},"Change Tracker — Відстеження Змін (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part1","01.csharp\u002F10.ef-core\u002F20.change-tracking-part1",{"title":591,"path":592,"stem":593},"Change Tracker — Графи Об'єктів та Disconnected (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part2","01.csharp\u002F10.ef-core\u002F20.change-tracking-part2",{"title":595,"path":596,"stem":597},"Збереження Даних та Транзакції (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part1","01.csharp\u002F10.ef-core\u002F21.saving-data-part1",{"title":599,"path":600,"stem":601},"Збереження Даних — Concurrency та Outbox (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part2","01.csharp\u002F10.ef-core\u002F21.saving-data-part2",{"title":603,"path":604,"stem":605},"Конкурентність та Блокування (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part1","01.csharp\u002F10.ef-core\u002F22.concurrency-part1",{"title":607,"path":608,"stem":609},"Конкурентність — Дедлоки та Queue Processing (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part2","01.csharp\u002F10.ef-core\u002F22.concurrency-part2",{"title":611,"path":612,"stem":613},"Міграції в EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part1","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part1",{"title":615,"path":616,"stem":617},"Міграції в EF Core — Основи (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part2","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part2",{"title":619,"path":620,"stem":621},"Міграції — Просунуті Сценарії (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part1","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part1",{"title":623,"path":624,"stem":625},"Міграції — Просунуті Сценарії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part2","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part2",{"title":627,"path":628,"stem":629},"Управління Схемою та Database-First (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part1","01.csharp\u002F10.ef-core\u002F25.schema-management-part1",{"title":631,"path":632,"stem":633},"Управління Схемою та Database-First (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part2","01.csharp\u002F10.ef-core\u002F25.schema-management-part2",{"title":635,"path":636,"stem":637},"Продуктивність EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fperformance-fundamentals-part1","01.csharp\u002F10.ef-core\u002F26.performance-fundamentals-part1",{"title":639,"path":640,"stem":641},"Interceptors в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part1","01.csharp\u002F10.ef-core\u002F29.interceptors-part1",{"title":643,"path":644,"stem":645},"Interceptors в EF Core — Connection, Transaction та Materialization (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part2","01.csharp\u002F10.ef-core\u002F29.interceptors-part2",{"title":647,"path":648,"stem":649},"План вивчення Entity Framework Core — Повний курс","\u002Fcsharp\u002Fef-core\u002Fimplementation_plan","01.csharp\u002F10.ef-core\u002Fimplementation_plan",{"title":651,"icon":652,"path":653,"stem":654,"children":655,"page":59},"ASP.NET","i-devicon-dotnetcore","\u002Fcsharp\u002Faspnet","01.csharp\u002F11.aspnet",[656,730,791,869,927,941,967,1057,1111,1182,1212,1289,1346],{"title":657,"icon":658,"path":659,"stem":660,"children":661,"page":59},"Minimal API","i-lucide-network","\u002Fcsharp\u002Faspnet\u002Fminimal-api","01.csharp\u002F11.aspnet\u002F01.minimal-api",[662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726],{"title":663,"path":664,"stem":665},"Вступ до ASP.NET та еволюція фреймворку","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fintroduction","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F01.introduction",{"title":667,"path":668,"stem":669},"Перший додаток на ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Ffirst-application","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F02.first-application",{"title":671,"path":672,"stem":673},"WebApplication, Builder та Dependency Injection","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fwebapplication-builder","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F03.webapplication-builder",{"title":675,"path":676,"stem":677},"Конвеєр запитів та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frequest-pipeline-middleware","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F04.request-pipeline-middleware",{"title":679,"path":680,"stem":681},"Маршрутизація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F05.routing-basics",{"title":683,"path":684,"stem":685},"Маршрутизація в ASP.NET Core: Розширені можливості","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F06.routing-advanced",{"title":687,"path":688,"stem":689},"Статичні файли в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-files","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F07.static-files",{"title":691,"path":692,"stem":693},"Статичні Активи: MapStaticAssets (ASP.NET Core 9.0)","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-assets","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F08.static-assets",{"title":695,"path":696,"stem":697},"Конфігурація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-fundamentals","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F09.configuration-fundamentals",{"title":699,"path":700,"stem":701},"Конфігурація: Паттерн Options","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-options","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F10.configuration-options",{"title":703,"path":704,"stem":705},"Логування в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F11.logging-basics",{"title":707,"path":708,"stem":709},"Логування: Serilog та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F12.logging-advanced",{"title":711,"path":712,"stem":713},"Управління станом: HttpContext.Items та Cookies","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstate-management","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F13.state-management",{"title":715,"path":716,"stem":717},"Стан сесії: Sessions","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fsession-state","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F14.session-state",{"title":719,"path":720,"stem":721},"Структура проєкту: від хаосу до архітектури","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fproject-structure","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F15.project-structure",{"title":723,"path":724,"stem":725},"Scalar у Minimal API: повний проєкт і Fluent OpenAPI","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fscalar-openapi-fluent","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F16.scalar-openapi-fluent",{"title":727,"path":728,"stem":729},"Swagger \u002F Swashbuckle у Minimal API: окремий класичний шлях","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fswagger-swashbuckle","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F17.swagger-swashbuckle",{"title":731,"icon":658,"path":732,"stem":733,"children":734,"page":59},"API","\u002Fcsharp\u002Faspnet\u002Fapi","01.csharp\u002F11.aspnet\u002F02.api",[735,739,743,747,751,755,759,763,767,771,775,779,783,787],{"title":736,"path":737,"stem":738},"Що таке API. Клієнт-серверна архітектура","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fwhat-is-api","01.csharp\u002F11.aspnet\u002F02.api\u002F01.what-is-api",{"title":740,"path":741,"stem":742},"Формати даних: JSON, XML, TOML та бінарні формати","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fdata-formats","01.csharp\u002F11.aspnet\u002F02.api\u002F02.data-formats",{"title":744,"path":745,"stem":746},"Парадигми API та концепція REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-paradigms-rest","01.csharp\u002F11.aspnet\u002F02.api\u002F03.api-paradigms-rest",{"title":748,"path":749,"stem":750},"HTTP-методи, статус-коди та заголовки","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fhttp-methods-status-codes","01.csharp\u002F11.aspnet\u002F02.api\u002F04.http-methods-status-codes",{"title":752,"path":753,"stem":754},"Організація HTTP API за принципами REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Frest-organizing","01.csharp\u002F11.aspnet\u002F02.api\u002F05.rest-organizing",{"title":756,"path":757,"stem":758},"Номенклатура URL та CRUD-операції","\u002Fcsharp\u002Faspnet\u002Fapi\u002Furl-nomenclature-crud","01.csharp\u002F11.aspnet\u002F02.api\u002F06.url-nomenclature-crud",{"title":760,"path":761,"stem":762},"Правила дизайну: іменування та стандарти","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-naming","01.csharp\u002F11.aspnet\u002F02.api\u002F07.api-design-naming",{"title":764,"path":765,"stem":766},"Валідація, ліміти та обробка помилок","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-validation","01.csharp\u002F11.aspnet\u002F02.api\u002F08.api-design-validation",{"title":768,"path":769,"stem":770},"Обробка помилок у Minimal API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Ferror-handling-http","01.csharp\u002F11.aspnet\u002F02.api\u002F09.error-handling-http",{"title":772,"path":773,"stem":774},"Ідемпотентність та синхронізація стану","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fidempotency-sync","01.csharp\u002F11.aspnet\u002F02.api\u002F10.idempotency-sync",{"title":776,"path":777,"stem":778},"Пагінація та організація списків","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fpagination-lists","01.csharp\u002F11.aspnet\u002F02.api\u002F11.pagination-lists",{"title":780,"path":781,"stem":782},"Безпека API, кешування та інтернаціоналізація","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fsecurity-auth","01.csharp\u002F11.aspnet\u002F02.api\u002F12.security-auth",{"title":784,"path":785,"stem":786},"Процес проєктування API та документування","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-process","01.csharp\u002F11.aspnet\u002F02.api\u002F13.api-design-process",{"title":788,"path":789,"stem":790},"OpenAPI: контракт, специфікація та документація API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fopenapi","01.csharp\u002F11.aspnet\u002F02.api\u002F14.openapi",{"title":792,"icon":793,"path":794,"stem":795,"children":796,"page":59},"Auth","i-lucide-shield-check","\u002Fcsharp\u002Faspnet\u002Fauth","01.csharp\u002F11.aspnet\u002F03.auth",[797,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865],{"title":798,"path":799,"stem":800},"Основи аутентифікації та авторизації","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauth-fundamentals","01.csharp\u002F11.aspnet\u002F03.auth\u002F01.auth-fundamentals",{"title":802,"path":803,"stem":804},"JWT-аутентифікація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fjwt-authentication","01.csharp\u002F11.aspnet\u002F03.auth\u002F02.jwt-authentication",{"title":806,"path":807,"stem":808},"Авторизація: ролі, політики та resource-based доступ","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauthorization-policies","01.csharp\u002F11.aspnet\u002F03.auth\u002F03.authorization-policies",{"title":810,"path":811,"stem":812},"Cookie-аутентифікація та ASP.NET Core Identity","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcookie-auth-identity","01.csharp\u002F11.aspnet\u002F03.auth\u002F04.cookie-auth-identity",{"title":814,"path":815,"stem":816},"JWT + Refresh Tokens (HttpOnly Cookie)","\u002Fcsharp\u002Faspnet\u002Fauth\u002F04b.identity-auth-jwt","01.csharp\u002F11.aspnet\u002F03.auth\u002F04b.identity-auth-jwt",{"title":818,"path":819,"stem":820},"Identity: Підтвердження Email та Скидання Пароля","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-email-confirmation","01.csharp\u002F11.aspnet\u002F03.auth\u002F05.identity-email-confirmation",{"title":822,"path":823,"stem":824},"Identity: Двофакторна Аутентифікація (2FA)","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-two-factor","01.csharp\u002F11.aspnet\u002F03.auth\u002F06.identity-two-factor",{"title":826,"path":827,"stem":828},"Identity: Внутрішня Архітектура та Кастомізація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-internals","01.csharp\u002F11.aspnet\u002F03.auth\u002F07.identity-internals",{"title":830,"path":831,"stem":832},"OAuth 2.0 та зовнішні провайдери","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-external-providers","01.csharp\u002F11.aspnet\u002F03.auth\u002F08.oauth-external-providers",{"title":834,"path":835,"stem":836},"Безпека на практиці: CORS, HTTPS та захист від атак","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fsecurity-hardening","01.csharp\u002F11.aspnet\u002F03.auth\u002F09.security-hardening",{"title":838,"path":839,"stem":840},"Теорія OAuth 2.0: Поняття, Аналогії та Флоу","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-theory","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oauth-theory",{"title":842,"path":843,"stem":844},"OIDC, OAuth 2.0 та Keycloak в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foidc-keycloak","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oidc-keycloak",{"title":846,"path":847,"stem":848},"API Keys аутентифікація в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fapi-keys","01.csharp\u002F11.aspnet\u002F03.auth\u002F11.api-keys",{"title":850,"path":851,"stem":852},"Rate Limiting та Throttling в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frate-limiting","01.csharp\u002F11.aspnet\u002F03.auth\u002F12.rate-limiting",{"title":854,"path":855,"stem":856},"Refresh Token Rotation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frefresh-token-rotation","01.csharp\u002F11.aspnet\u002F03.auth\u002F13.refresh-token-rotation",{"title":858,"path":859,"stem":860},"Certificate Authentication та mTLS в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcertificate-auth","01.csharp\u002F11.aspnet\u002F03.auth\u002F14.certificate-auth",{"title":862,"path":863,"stem":864},"RBAC, ABAC та ReBAC в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frbac-abac-rebac","01.csharp\u002F11.aspnet\u002F03.auth\u002F15.rbac-abac-rebac",{"title":866,"path":867,"stem":868},"Multi-tenancy та ізоляція даних в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fmulti-tenancy","01.csharp\u002F11.aspnet\u002F03.auth\u002F16.multi-tenancy",{"title":870,"icon":871,"path":872,"stem":873,"children":874,"page":59},"Нотифікації","i-lucide-bell","\u002Fcsharp\u002Faspnet\u002Fnotifications","01.csharp\u002F11.aspnet\u002F04.notifications",[875,879,883,887,891,895,899,903,907,911,915,919,923],{"title":876,"path":877,"stem":878},"In-App нотифікації через базу даних","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fin-app-database-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F01.in-app-database-notifications",{"title":880,"path":881,"stem":882},"Polling: Регулярний запит оновлень","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fpolling","01.csharp\u002F11.aspnet\u002F04.notifications\u002F02.polling",{"title":884,"path":885,"stem":886},"Server-Sent Events: Однострімовий push від сервера","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fserver-sent-events","01.csharp\u002F11.aspnet\u002F04.notifications\u002F03.server-sent-events",{"title":888,"path":889,"stem":890},"WebSockets: Двостороннє з'єднання в реальному часі","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fwebsockets","01.csharp\u002F11.aspnet\u002F04.notifications\u002F04.websockets",{"title":892,"path":893,"stem":894},"SignalR: Абстракція над транспортами реального часу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fsignalr","01.csharp\u002F11.aspnet\u002F04.notifications\u002F05.signalr",{"title":896,"path":897,"stem":898},"Background Services: Фонові задачі в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fbackground-services","01.csharp\u002F11.aspnet\u002F04.notifications\u002F06.background-services",{"title":900,"path":901,"stem":902},"Web Push нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fweb-push","01.csharp\u002F11.aspnet\u002F04.notifications\u002F07.web-push",{"title":904,"path":905,"stem":906},"Email нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Femail-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F08.email-notifications",{"title":908,"path":909,"stem":910},"Порівняння підходів: Як вибрати правильну технологію нотифікацій","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fchoosing-the-right-approach","01.csharp\u002F11.aspnet\u002F04.notifications\u002F09.choosing-the-right-approach",{"title":912,"path":913,"stem":914},"Hangfire: Надійне планування фонових задач","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire","01.csharp\u002F11.aspnet\u002F04.notifications\u002F10.hangfire",{"title":916,"path":917,"stem":918},"Практика: Конвертація зображень у WebP через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-image-webp","01.csharp\u002F11.aspnet\u002F04.notifications\u002F11.hangfire-image-webp",{"title":920,"path":921,"stem":922},"Практика: Підготовка відео до HLS-стрімінгу через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-video-hls","01.csharp\u002F11.aspnet\u002F04.notifications\u002F12.hangfire-video-hls",{"title":924,"path":925,"stem":926},"Telegram-нотифікації: від одного повідомлення до масових розсилок і мульти-канального підходу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Ftelegram-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F13.telegram-notifications",{"title":928,"icon":929,"path":930,"stem":931,"children":932,"page":59},"Інтернаціоналізація","i-lucide-languages","\u002Fcsharp\u002Faspnet\u002Fi18n","01.csharp\u002F11.aspnet\u002F05.i18n",[933,937],{"title":934,"path":935,"stem":936},"Інтернаціоналізація (i18n) у Minimal API: від A до Я","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Finternationalization","01.csharp\u002F11.aspnet\u002F05.i18n\u002F01.internationalization",{"title":938,"path":939,"stem":940},"Humanizer: людиномовні рядки у .NET","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Fhumanizer","01.csharp\u002F11.aspnet\u002F05.i18n\u002F02.humanizer",{"title":942,"icon":943,"path":944,"stem":945,"children":946,"page":59},"Кешування","i-lucide-layers","\u002Fcsharp\u002Faspnet\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching",[947,951,955,959,963],{"title":948,"path":949,"stem":950},"Огляд кешування: чотири рівні і коли що обирати","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching\u002F01.caching",{"title":952,"path":953,"stem":954},"IMemoryCache: кеш в оперативній пам'яті","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fmemory-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F02.memory-cache",{"title":956,"path":957,"stem":958},"IDistributedCache і Redis: розподілений кеш","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fdistributed-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F03.distributed-cache",{"title":960,"path":961,"stem":962},"Response Cache: HTTP-кешування через Cache-Control","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fresponse-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F04.response-cache",{"title":964,"path":965,"stem":966},"Output Cache: серверний кеш HTTP-відповідей (.NET 7+)","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Foutput-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F05.output-cache",{"title":968,"icon":969,"path":970,"stem":971,"children":972,"page":59},"Тестування","i-lucide-test-tube","\u002Fcsharp\u002Faspnet\u002Ftesting","01.csharp\u002F11.aspnet\u002F07.testing",[973,977,981,985,989,993,997,1001,1005,1009,1013,1017,1021,1025,1029,1033,1037,1041,1045,1049,1053],{"title":974,"path":975,"stem":976},"Що таке тестування? Від інтуїції до науки","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-is-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F01.what-is-testing",{"title":978,"path":979,"stem":980},"Піраміда тестування — Стратегія, а не Догма","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-pyramid","01.csharp\u002F11.aspnet\u002F07.testing\u002F02.testing-pyramid",{"title":982,"path":983,"stem":984},"Дві Школи Тестування — Лондон проти Детройту","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-schools","01.csharp\u002F11.aspnet\u002F07.testing\u002F03.testing-schools",{"title":986,"path":987,"stem":988},"TDD та BDD — Тести як Дизайн-інструмент","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftdd-and-bdd","01.csharp\u002F11.aspnet\u002F07.testing\u002F04.tdd-and-bdd",{"title":990,"path":991,"stem":992},"Що саме тестувати — Техніки аналізу та Циклomatична складність","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-to-test","01.csharp\u002F11.aspnet\u002F07.testing\u002F05.what-to-test",{"title":994,"path":995,"stem":996},"Тестові Фреймворки — Навіщо вони і що всередині","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftest-frameworks","01.csharp\u002F11.aspnet\u002F07.testing\u002F06.test-frameworks",{"title":998,"path":999,"stem":1000},"xUnit — Факти, Теорії та Lifecycle тестів","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-basics","01.csharp\u002F11.aspnet\u002F07.testing\u002F07.xunit-basics",{"title":1002,"path":1003,"stem":1004},"xUnit Advanced — Fixtures, Кастомізація та Розширення","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F08.xunit-advanced",{"title":1006,"path":1007,"stem":1008},"Moq — Глибоке занурення в мокування","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fmocking-with-moq","01.csharp\u002F11.aspnet\u002F07.testing\u002F09.mocking-with-moq",{"title":1010,"path":1011,"stem":1012},"Тестування Баз Даних — EF Core, SQLite та Testcontainers","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fdatabase-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F10.database-testing",{"title":1014,"path":1015,"stem":1016},"Integration Testing — Частина 1 [Теорія та WebApplicationFactory]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F11.integration-testing",{"title":1018,"path":1019,"stem":1020},"Інтеграційне тестування — Практика","\u002Fcsharp\u002Faspnet\u002Ftesting\u002F11a.integration-testing-practice","01.csharp\u002F11.aspnet\u002F07.testing\u002F11a.integration-testing-practice",{"title":1022,"path":1023,"stem":1024},"Integration Testing — Частина 2 [Просунуті Сценарії та Testcontainers]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F12.integration-testing-advanced",{"title":1026,"path":1027,"stem":1028},"Професійний Postman: Колекції, Змінні та GitHub Інтеграція","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fpostman-professional","01.csharp\u002F11.aspnet\u002F07.testing\u002F13.postman-professional",{"title":1030,"path":1031,"stem":1032},"HttpClient у Тестах Частина 1: Архітектура та MockHttpMessageHandler","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fhttpclient-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F14.httpclient-testing",{"title":1034,"path":1035,"stem":1036},"HttpClient у Тестах Частина 2: WireMock.Net та Resilience","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwiremock-net","01.csharp\u002F11.aspnet\u002F07.testing\u002F15.wiremock-net",{"title":1038,"path":1039,"stem":1040},"Патерни та Анти-патерни Тестування: Test Smells","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-patterns","01.csharp\u002F11.aspnet\u002F07.testing\u002F16.testing-patterns",{"title":1042,"path":1043,"stem":1044},"Просунуті інструменти: Time, Snapshots та Властивості","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fadvanced-testing-tools","01.csharp\u002F11.aspnet\u002F07.testing\u002F17.advanced-testing-tools",{"title":1046,"path":1047,"stem":1048},"Тестування Архітектури з NetArchTest","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Farchitecture-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F18.architecture-testing",{"title":1050,"path":1051,"stem":1052},"Тестування Продуктивності: BenchmarkDotNet, NBomber та k6","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fperformance-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F19.performance-testing",{"title":1054,"path":1055,"stem":1056},"Залишок плану для курсу \"Тестування ASP.NET Minimal API\"","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fremaining_plan","01.csharp\u002F11.aspnet\u002F07.testing\u002Fremaining_plan",{"title":1058,"icon":1059,"path":1060,"stem":1061,"children":1062,"page":59},"Платежі","i-lucide-credit-card","\u002Fcsharp\u002Faspnet\u002Fpayments","01.csharp\u002F11.aspnet\u002F08.payments",[1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1103,1107],{"title":1064,"path":1065,"stem":1066},"Основи платіжної інфраструктури","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-fundamentals","01.csharp\u002F11.aspnet\u002F08.payments\u002F01.payment-fundamentals",{"title":1068,"path":1069,"stem":1070},"Методи оплати в Україні","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-methods-ukraine","01.csharp\u002F11.aspnet\u002F08.payments\u002F02.payment-methods-ukraine",{"title":1072,"path":1073,"stem":1074},"PCI DSS та безпека платежів","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpci-dss-security","01.csharp\u002F11.aspnet\u002F08.payments\u002F03.pci-dss-security",{"title":1076,"path":1077,"stem":1078},"Архітектура платіжної підсистеми","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-architecture","01.csharp\u002F11.aspnet\u002F08.payments\u002F04.payment-architecture",{"title":1080,"path":1081,"stem":1082},"Інтеграція LiqPay (ПриватБанк)","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fliqpay-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F05.liqpay-integration",{"title":1084,"path":1085,"stem":1086},"Інтеграція Monobank Acquiring API","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fmonobank-acquiring","01.csharp\u002F11.aspnet\u002F08.payments\u002F06.monobank-acquiring",{"title":1088,"path":1089,"stem":1090},"Інтеграція Stripe","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fstripe-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F07.stripe-integration",{"title":1092,"path":1093,"stem":1094},"Webhooks — глибоке занурення","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fwebhooks-deep-dive","01.csharp\u002F11.aspnet\u002F08.payments\u002F08.webhooks-deep-dive",{"title":1096,"path":1097,"stem":1098},"Підписки та рекурентні платежі","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fsubscriptions-recurring","01.csharp\u002F11.aspnet\u002F08.payments\u002F09.subscriptions-recurring",{"title":1100,"path":1101,"stem":1102},"Повернення коштів та диспути","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Frefunds-disputes","01.csharp\u002F11.aspnet\u002F08.payments\u002F10.refunds-disputes",{"title":1104,"path":1105,"stem":1106},"Тестування платіжних інтеграцій","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Ftesting-payments","01.csharp\u002F11.aspnet\u002F08.payments\u002F11.testing-payments",{"title":1108,"path":1109,"stem":1110},"Чекліст виходу в Production","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fproduction-checklist","01.csharp\u002F11.aspnet\u002F08.payments\u002F12.production-checklist",{"title":1112,"icon":1113,"items":1114,"path":1127,"stem":1128,"children":1129,"page":59},"Популярні бібліотеки","lucide:box",[1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126],"01.fluent-validation","02.mapster","03.erroror-result-pattern","04.serilog","05.mediatr","06.polly","07.health-checks","08.feature-management","09.fluent-email","10.quest-pdf","11.bogus","12.humanizer-guard","\u002Fcsharp\u002Faspnet\u002Flibraries","01.csharp\u002F11.aspnet\u002F09.libraries",[1130,1134,1138,1142,1146,1150,1154,1158,1162,1166,1170,1174,1178],{"title":1131,"path":1132,"stem":1133},"Валідація з FluentValidation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-validation","01.csharp\u002F11.aspnet\u002F09.libraries\u002F01.fluent-validation",{"title":1135,"path":1136,"stem":1137},"Маппінг об","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmapster","01.csharp\u002F11.aspnet\u002F09.libraries\u002F02.mapster",{"title":1139,"path":1140,"stem":1141},"Обробка помилок з ErrorOr та Result Pattern в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ferroror-result-pattern","01.csharp\u002F11.aspnet\u002F09.libraries\u002F03.erroror-result-pattern",{"title":1143,"path":1144,"stem":1145},"Структуроване логування з Serilog в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fserilog","01.csharp\u002F11.aspnet\u002F09.libraries\u002F04.serilog",{"title":1147,"path":1148,"stem":1149},"CQRS та Mediator з MediatR в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmediatr","01.csharp\u002F11.aspnet\u002F09.libraries\u002F05.mediatr",{"title":1151,"path":1152,"stem":1153},"Відмовостійкість з Polly в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fpolly","01.csharp\u002F11.aspnet\u002F09.libraries\u002F06.polly",{"title":1155,"path":1156,"stem":1157},"Health Checks в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F09.libraries\u002F07.health-checks",{"title":1159,"path":1160,"stem":1161},"Feature Management та Feature Flags в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffeature-management","01.csharp\u002F11.aspnet\u002F09.libraries\u002F08.feature-management",{"title":1163,"path":1164,"stem":1165},"Відправка Email з FluentEmail в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-email","01.csharp\u002F11.aspnet\u002F09.libraries\u002F09.fluent-email",{"title":1167,"path":1168,"stem":1169},"Генерація PDF з QuestPDF в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fquest-pdf","01.csharp\u002F11.aspnet\u002F09.libraries\u002F10.quest-pdf",{"title":1171,"path":1172,"stem":1173},"Генерація тестових даних з Bogus в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fbogus","01.csharp\u002F11.aspnet\u002F09.libraries\u002F11.bogus",{"title":1175,"path":1176,"stem":1177},"Humanizer та Guard Clauses в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhumanizer-guard","01.csharp\u002F11.aspnet\u002F09.libraries\u002F12.humanizer-guard",{"title":1179,"path":1180,"stem":1181},"План модуля 10.libraries — Популярні бібліотеки ASP.NET","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fplan","01.csharp\u002F11.aspnet\u002F09.libraries\u002Fplan",{"title":1183,"icon":1184,"path":1185,"stem":1186,"children":1187,"page":59},"Razor Pages","i-lucide-layout-template","\u002Fcsharp\u002Faspnet\u002Frazor-pages","01.csharp\u002F11.aspnet\u002F10.razor-pages",[1188,1192,1196,1200,1204,1208],{"title":1189,"path":1190,"stem":1191},"Від Minimal API до Razor Pages: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ffrom-minimal-api","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F01.from-minimal-api",{"title":1193,"path":1194,"stem":1195},"PageModel: логіка сторінки Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fpage-model","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F02.page-model",{"title":1197,"path":1198,"stem":1199},"Razor синтаксис: шаблонізатор у .cshtml","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Frazor-syntax","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F03.razor-syntax",{"title":1201,"path":1202,"stem":1203},"Tag Helpers: типізований HTML","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ftag-helpers","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F04.tag-helpers",{"title":1205,"path":1206,"stem":1207},"Форми і валідація: повний цикл обробки даних","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fforms-validation","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F05.forms-validation",{"title":1209,"path":1210,"stem":1211},"Практичний проєкт: TaskManager на Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fproject-task-manager","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F06.project-task-manager",{"title":1213,"path":1214,"stem":1215,"children":1216,"page":59},"ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc","01.csharp\u002F11.aspnet\u002F11.mvc",[1217,1221,1225,1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273,1277,1281,1285],{"title":1218,"path":1219,"stem":1220},"Патерн MVC: архітектура, що змінила веб","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-pattern","01.csharp\u002F11.aspnet\u002F11.mvc\u002F01.mvc-pattern",{"title":1222,"path":1223,"stem":1224},"Від Razor Pages до MVC: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffrom-razor-pages","01.csharp\u002F11.aspnet\u002F11.mvc\u002F02.from-razor-pages",{"title":1226,"path":1227,"stem":1228},"Controllers та Actions: серце MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fcontrollers-actions","01.csharp\u002F11.aspnet\u002F11.mvc\u002F03.controllers-actions",{"title":1230,"path":1231,"stem":1232},"Маршрутизація в MVC: Convention vs Attribute Routing","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Frouting-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F04.routing-mvc",{"title":1234,"path":1235,"stem":1236},"Model Binding: від HTTP до C#","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmodel-binding","01.csharp\u002F11.aspnet\u002F11.mvc\u002F05.model-binding",{"title":1238,"path":1239,"stem":1240},"Views, ViewData, ViewBag, TempData і ViewModel","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fviews-viewdata-tempdata","01.csharp\u002F11.aspnet\u002F11.mvc\u002F06.views-viewdata-tempdata",{"title":1242,"path":1243,"stem":1244},"Filters: аспектно-орієнтоване програмування в MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffilters","01.csharp\u002F11.aspnet\u002F11.mvc\u002F07.filters",{"title":1246,"path":1247,"stem":1248},"Areas: структурування великих застосунків","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fareas","01.csharp\u002F11.aspnet\u002F11.mvc\u002F08.areas",{"title":1250,"path":1251,"stem":1252},"View Components: повторювані незалежні блоки UI","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fview-components","01.csharp\u002F11.aspnet\u002F11.mvc\u002F09.view-components",{"title":1254,"path":1255,"stem":1256},"Display та Editor Templates","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fdisplay-editor-templates","01.csharp\u002F11.aspnet\u002F11.mvc\u002F10.display-editor-templates",{"title":1258,"path":1259,"stem":1260},"Валідація: IValidatableObject та FluentValidation","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fvalidation-advanced","01.csharp\u002F11.aspnet\u002F11.mvc\u002F11.validation-advanced",{"title":1262,"path":1263,"stem":1264},"HTMX: інтерактивність через HTML-атрибути","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx","01.csharp\u002F11.aspnet\u002F11.mvc\u002F12.htmx",{"title":1266,"path":1267,"stem":1268},"HTMX у ASP.NET Core MVC: серверна інтеграція","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fajax-htmx-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F13.ajax-htmx-mvc",{"title":1270,"path":1271,"stem":1272},"Практичний проєкт: Каталог товарів з HTMX","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F14.htmx-project",{"title":1274,"path":1275,"stem":1276},"Завантаження та обробка файлів","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffile-upload","01.csharp\u002F11.aspnet\u002F11.mvc\u002F15.file-upload",{"title":1278,"path":1279,"stem":1280},"Глобалізація та Локалізація MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fglobalization-localization","01.csharp\u002F11.aspnet\u002F11.mvc\u002F16.globalization-localization",{"title":1282,"path":1283,"stem":1284},"Підсумковий проєкт: Блог-платформа","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F17.mvc-project",{"title":1286,"path":1287,"stem":1288},"План курсу: ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fplan","01.csharp\u002F11.aspnet\u002F11.mvc\u002Fplan",{"title":1290,"path":1291,"stem":1292,"children":1293,"page":59},"Web Api","\u002Fcsharp\u002Faspnet\u002Fweb-api","01.csharp\u002F11.aspnet\u002F12.web-api",[1294,1298,1302,1306,1310,1314,1318,1322,1326,1330,1334,1338,1342],{"title":1295,"path":1296,"stem":1297},"Від Minimal API до Controller-based API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffrom-minimal-api-to-controllers","01.csharp\u002F11.aspnet\u002F12.web-api\u002F01.from-minimal-api-to-controllers",{"title":1299,"path":1300,"stem":1301},"ControllerBase, ActionResult\u003CT> та Response Types","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontroller-base-actionresult","01.csharp\u002F11.aspnet\u002F12.web-api\u002F02.controller-base-actionresult",{"title":1303,"path":1304,"stem":1305},"Content Negotiation - JSON, XML та власні форматери","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontent-negotiation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F03.content-negotiation",{"title":1307,"path":1308,"stem":1309},"Версіонування API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-versioning","01.csharp\u002F11.aspnet\u002F12.web-api\u002F04.api-versioning",{"title":1311,"path":1312,"stem":1313},"ProblemDetails та структурована обробка помилок","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fproblemdetails-error-handling","01.csharp\u002F11.aspnet\u002F12.web-api\u002F05.problemdetails-error-handling",{"title":1315,"path":1316,"stem":1317},"Фільтри у Web API контексті","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffilters-for-api","01.csharp\u002F11.aspnet\u002F12.web-api\u002F06.filters-for-api",{"title":1319,"path":1320,"stem":1321},"Пагінація, фільтрація та сортування","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fpagination-filtering-sorting","01.csharp\u002F11.aspnet\u002F12.web-api\u002F07.pagination-filtering-sorting",{"title":1323,"path":1324,"stem":1325},"HATEOAS та Resource Expansion","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhateoas-resource-expansion","01.csharp\u002F11.aspnet\u002F12.web-api\u002F08.hateoas-resource-expansion",{"title":1327,"path":1328,"stem":1329},"Гібридна архітектура - Minimal API + Controllers","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fminimal-api-vs-controllers-hybrid","01.csharp\u002F11.aspnet\u002F12.web-api\u002F09.minimal-api-vs-controllers-hybrid",{"title":1331,"path":1332,"stem":1333},"Документація API - Swashbuckle, NSwag та генерація клієнтів","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-documentation-generation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F10.api-documentation-generation",{"title":1335,"path":1336,"stem":1337},"Health Checks та моніторинг API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhealth-checks-monitoring","01.csharp\u002F11.aspnet\u002F12.web-api\u002F11.health-checks-monitoring",{"title":1339,"path":1340,"stem":1341},"Підсумковий проєкт - Production-Ready REST API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fweb-api-project","01.csharp\u002F11.aspnet\u002F12.web-api\u002F12.web-api-project",{"title":1343,"path":1344,"stem":1345},"План курсу: ASP.NET Core Web API (Controllers)","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fplan","01.csharp\u002F11.aspnet\u002F12.web-api\u002Fplan",{"title":1347,"icon":1348,"path":1349,"stem":1350,"children":1351,"page":59},"Моніторинг","i-lucide-activity","\u002Fcsharp\u002Faspnet\u002Fmonitoring","01.csharp\u002F11.aspnet\u002F13.monitoring",[1352,1356,1360],{"title":1353,"path":1354,"stem":1355},"Спостережуваність: від console.log до production-систем","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fobservability-intro","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F01.observability-intro",{"title":1357,"path":1358,"stem":1359},"Health Checks: перший рівень observability","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F02.health-checks",{"title":1361,"path":1362,"stem":1363},"Вбудовані метрики .NET 10 та System.Diagnostics.Metrics","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fdotnet-metrics","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F03.dotnet-metrics",{"title":1365,"icon":1366,"path":1367,"stem":1368,"children":1369,"page":59},"Desktop UI","i-lucide-app-window","\u002Fcsharp\u002Fdesktop-ui","01.csharp\u002F12.desktop-ui",[1370,1374,1378,1382,1386,1390,1394,1398,1402,1406,1410,1414,1418,1422,1426,1430,1434,1438,1442,1446,1450,1454,1458,1462,1466,1470,1474,1478,1482,1486,1490,1494,1498,1502,1506,1510,1514,1518,1522,1526,1530,1534,1538,1542,1546,1550,1554,1558,1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1602,1606,1610,1614,1618,1622,1626,1630,1634,1638,1642,1646,1650],{"title":1371,"path":1372,"stem":1373},"Що таке десктопна розробка?","\u002Fcsharp\u002Fdesktop-ui\u002Fwhat-is-desktop-dev","01.csharp\u002F12.desktop-ui\u002F01.what-is-desktop-dev",{"title":1375,"path":1376,"stem":1377},"Архітектура WPF — як влаштований графічний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-architecture","01.csharp\u002F12.desktop-ui\u002F02.wpf-architecture",{"title":1379,"path":1380,"stem":1381},"Перший WPF-проєкт — від нуля до вікна","\u002Fcsharp\u002Fdesktop-ui\u002Ffirst-wpf-app","01.csharp\u002F12.desktop-ui\u002F03.first-wpf-app",{"title":1383,"path":1384,"stem":1385},"Перший Avalonia-проєкт: WPF для всіх платформ","\u002Fcsharp\u002Fdesktop-ui\u002F03a.first-avalonia-app","01.csharp\u002F12.desktop-ui\u002F03a.first-avalonia-app",{"title":1387,"path":1388,"stem":1389},"XAML: декларативний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-basics","01.csharp\u002F12.desktop-ui\u002F04.xaml-basics",{"title":1391,"path":1392,"stem":1393},"Fluent UI у WPF — сучасний дизайн Windows 11","\u002Fcsharp\u002Fdesktop-ui\u002F04a.wpf-fluent-ui","01.csharp\u002F12.desktop-ui\u002F04a.wpf-fluent-ui",{"title":1395,"path":1396,"stem":1397},"WPF UI — сучасна бібліотека Fluent контролів","\u002Fcsharp\u002Fdesktop-ui\u002F04b.wpf-ui-library","01.csharp\u002F12.desktop-ui\u002F04b.wpf-ui-library",{"title":1399,"path":1400,"stem":1401},"HandyControl — велика бібліотека UI контролів для WPF","\u002Fcsharp\u002Fdesktop-ui\u002F04c.handycontrol-library","01.csharp\u002F12.desktop-ui\u002F04c.handycontrol-library",{"title":1403,"path":1404,"stem":1405},"Простори імен та ресурси XAML","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-namespaces-resources","01.csharp\u002F12.desktop-ui\u002F05.xaml-namespaces-resources",{"title":1407,"path":1408,"stem":1409},"XAML в Avalonia: ключові відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F05a.avalonia-xaml-differences","01.csharp\u002F12.desktop-ui\u002F05a.avalonia-xaml-differences",{"title":1411,"path":1412,"stem":1413},"Розширення розмітки XAML (Markup Extensions)","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-markup-extensions","01.csharp\u002F12.desktop-ui\u002F06.xaml-markup-extensions",{"title":1415,"path":1416,"stem":1417},"Панелі Layout: StackPanel, WrapPanel, DockPanel","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part1","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part1",{"title":1419,"path":1420,"stem":1421},"Grid, Canvas, UniformGrid","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part2","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part2",{"title":1423,"path":1424,"stem":1425},"Просунуті техніки Layout","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-advanced","01.csharp\u002F12.desktop-ui\u002F08.layout-advanced",{"title":1427,"path":1428,"stem":1429},"Адаптивний Layout та найкращі практики","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-responsive","01.csharp\u002F12.desktop-ui\u002F09.layout-responsive",{"title":1431,"path":1432,"stem":1433},"Layout в Avalonia: відмінності та нові можливості","\u002Fcsharp\u002Fdesktop-ui\u002F09a.layout-avalonia","01.csharp\u002F12.desktop-ui\u002F09a.layout-avalonia",{"title":1435,"path":1436,"stem":1437},"Button, Image, ProgressBar та інші базові контроли","\u002Fcsharp\u002Fdesktop-ui\u002Fbasic-controls","01.csharp\u002F12.desktop-ui\u002F10.basic-controls",{"title":1439,"path":1440,"stem":1441},"Контроли в Avalonia: відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F10a.controls-avalonia","01.csharp\u002F12.desktop-ui\u002F10a.controls-avalonia",{"title":1443,"path":1444,"stem":1445},"Текстові контроли — TextBlock, TextBox, RichTextBox","\u002Fcsharp\u002Fdesktop-ui\u002Ftext-controls","01.csharp\u002F12.desktop-ui\u002F11.text-controls",{"title":1447,"path":1448,"stem":1449},"Контроли вибору — CheckBox, RadioButton, ComboBox, ListBox, DatePicker","\u002Fcsharp\u002Fdesktop-ui\u002Fselection-controls","01.csharp\u002F12.desktop-ui\u002F12.selection-controls",{"title":1451,"path":1452,"stem":1453},"Content Model — GroupBox, Expander, TabControl, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fcontent-controls","01.csharp\u002F12.desktop-ui\u002F13.content-controls",{"title":1455,"path":1456,"stem":1457},"UI\u002FUX принципи десктопних застосунків","\u002Fcsharp\u002Fdesktop-ui\u002F13a.ui-ux-principles","01.csharp\u002F12.desktop-ui\u002F13a.ui-ux-principles",{"title":1459,"path":1460,"stem":1461},"Dependency Properties — Концепція та Value Resolution","\u002Fcsharp\u002Fdesktop-ui\u002Fdependency-properties-part1","01.csharp\u002F12.desktop-ui\u002F14.dependency-properties-part1",{"title":1463,"path":1464,"stem":1465},"Avalonia Property System — StyledProperty та DirectProperty","\u002Fcsharp\u002Fdesktop-ui\u002F14a.avalonia-property-system","01.csharp\u002F12.desktop-ui\u002F14a.avalonia-property-system",{"title":1467,"path":1468,"stem":1469},"Attached Properties — Властивості без меж","\u002Fcsharp\u002Fdesktop-ui\u002Fattached-properties","01.csharp\u002F12.desktop-ui\u002F15.attached-properties",{"title":1471,"path":1472,"stem":1473},"Routed Events — Маршрутизація подій у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Frouted-events","01.csharp\u002F12.desktop-ui\u002F16.routed-events",{"title":1475,"path":1476,"stem":1477},"Data Binding — Від Code-Behind до Декларативності","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part1","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part1",{"title":1479,"path":1480,"stem":1481},"INotifyPropertyChanged — Живе оновлення UI","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part2","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part2",{"title":1483,"path":1484,"stem":1485},"Compiled Bindings в Avalonia — Безпека на етапі компіляції","\u002Fcsharp\u002Fdesktop-ui\u002F17a.avalonia-compiled-bindings","01.csharp\u002F12.desktop-ui\u002F17a.avalonia-compiled-bindings",{"title":1487,"path":1488,"stem":1489},"Просунутий Data Binding — ElementName, RelativeSource, MultiBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-advanced","01.csharp\u002F12.desktop-ui\u002F18.data-binding-advanced",{"title":1491,"path":1492,"stem":1493},"Value Converters — Перетворення типів даних у Data Binding","\u002Fcsharp\u002Fdesktop-ui\u002Fvalue-converters","01.csharp\u002F12.desktop-ui\u002F19.value-converters",{"title":1495,"path":1496,"stem":1497},"Data Templates — Візуалізація об'єктів у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-templates","01.csharp\u002F12.desktop-ui\u002F20.data-templates",{"title":1499,"path":1500,"stem":1501},"Collections Binding Part 1 — ObservableCollection та ItemsControl","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part1","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part1",{"title":1503,"path":1504,"stem":1505},"Collections Binding Part 2 — ICollectionView, Filtering, Sorting та Virtualization","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part2","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part2",{"title":1507,"path":1508,"stem":1509},"MVVM Pattern — Від Spaghetti Code до архітектури","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-pattern","01.csharp\u002F12.desktop-ui\u002F22.mvvm-pattern",{"title":1511,"path":1512,"stem":1513},"ViewModel Implementation — Від BaseViewModel до валідації","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-implementation","01.csharp\u002F12.desktop-ui\u002F23.viewmodel-implementation",{"title":1515,"path":1516,"stem":1517},"Commands — Від event handlers до декларативних команд","\u002Fcsharp\u002Fdesktop-ui\u002Fcommands","01.csharp\u002F12.desktop-ui\u002F24.commands",{"title":1519,"path":1520,"stem":1521},"MVVM Toolkit — MVVM без boilerplate через Source Generators","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-toolkit","01.csharp\u002F12.desktop-ui\u002F25.mvvm-toolkit",{"title":1523,"path":1524,"stem":1525},"Messenger Pattern — Комунікація між ViewModel без прямих посилань","\u002Fcsharp\u002Fdesktop-ui\u002Fmessenger-pattern","01.csharp\u002F12.desktop-ui\u002F26.messenger-pattern",{"title":1527,"path":1528,"stem":1529},"Стилі WPF — CSS для десктопу","\u002Fcsharp\u002Fdesktop-ui\u002Fstyles-basics","01.csharp\u002F12.desktop-ui\u002F27.styles-basics",{"title":1531,"path":1532,"stem":1533},"CSS-like стилі Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F27a.avalonia-css-styling","01.csharp\u002F12.desktop-ui\u002F27a.avalonia-css-styling",{"title":1535,"path":1536,"stem":1537},"Control Templates — Частина 1. Концепція та TemplateBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part1","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part1",{"title":1539,"path":1540,"stem":1541},"Control Templates — Частина 2. Named Parts та ContentPresenter","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part2","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part2",{"title":1543,"path":1544,"stem":1545},"Control Themes в Avalonia — нова ера стилізації","\u002Fcsharp\u002Fdesktop-ui\u002F28a.avalonia-control-themes","01.csharp\u002F12.desktop-ui\u002F28a.avalonia-control-themes",{"title":1547,"path":1548,"stem":1549},"Triggers та Visual State Manager у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Ftriggers-visual-states","01.csharp\u002F12.desktop-ui\u002F29.triggers-visual-states",{"title":1551,"path":1552,"stem":1553},"Pseudo-classes в Avalonia — замість WPF Triggers","\u002Fcsharp\u002Fdesktop-ui\u002F29a.avalonia-pseudo-classes","01.csharp\u002F12.desktop-ui\u002F29a.avalonia-pseudo-classes",{"title":1555,"path":1556,"stem":1557},"Теми та ресурсні словники у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fresources-themes","01.csharp\u002F12.desktop-ui\u002F30.resources-themes",{"title":1559,"path":1560,"stem":1561},"Avalonia Themes — Fluent Design та система тематизації","\u002Fcsharp\u002Fdesktop-ui\u002F30a.avalonia-themes-fluent","01.csharp\u002F12.desktop-ui\u002F30a.avalonia-themes-fluent",{"title":1563,"path":1564,"stem":1565},"Контроли колекцій — глибоке занурення","\u002Fcsharp\u002Fdesktop-ui\u002Fcollection-controls","01.csharp\u002F12.desktop-ui\u002F31.collection-controls",{"title":1567,"path":1568,"stem":1569},"DataGrid — колонки та базове відображення","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part1","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part1",{"title":1571,"path":1572,"stem":1573},"DataGrid — сортування, фільтрація, редагування","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part2","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part2",{"title":1575,"path":1576,"stem":1577},"TreeView та GridView","\u002Fcsharp\u002Fdesktop-ui\u002Ftreeview-listview","01.csharp\u002F12.desktop-ui\u002F33.treeview-listview",{"title":1579,"path":1580,"stem":1581},"Меню, Toolbar, ContextMenu, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fmenus-toolbars","01.csharp\u002F12.desktop-ui\u002F34.menus-toolbars",{"title":1583,"path":1584,"stem":1585},"Навігація та керування вікнами. Частина 1: вікна та сторінки","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part1","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part1",{"title":1587,"path":1588,"stem":1589},"Навігація та керування вікнами. Частина 2: MVVM-навігація","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part2","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part2",{"title":1591,"path":1592,"stem":1593},"Avalonia — Навігація та діалоги","\u002Fcsharp\u002Fdesktop-ui\u002F35a.avalonia-navigation-dialogs","01.csharp\u002F12.desktop-ui\u002F35a.avalonia-navigation-dialogs",{"title":1595,"path":1596,"stem":1597},"Діалоги та File Pickers у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdialogs-file-pickers","01.csharp\u002F12.desktop-ui\u002F36.dialogs-file-pickers",{"title":1599,"path":1600,"stem":1601},"UserControl: компонентний підхід у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fuser-controls","01.csharp\u002F12.desktop-ui\u002F37.user-controls",{"title":1603,"path":1604,"stem":1605},"Custom Controls: Lookless Controls у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fcustom-controls","01.csharp\u002F12.desktop-ui\u002F38.custom-controls",{"title":1607,"path":1608,"stem":1609},"Avalonia TemplatedControl — Lookless Controls","\u002Fcsharp\u002Fdesktop-ui\u002F38a.avalonia-templated-controls","01.csharp\u002F12.desktop-ui\u002F38a.avalonia-templated-controls",{"title":1611,"path":1612,"stem":1613},"Анімації у WPF: Storyboard та Easing Functions","\u002Fcsharp\u002Fdesktop-ui\u002Fanimations-transitions","01.csharp\u002F12.desktop-ui\u002F39.animations-transitions",{"title":1615,"path":1616,"stem":1617},"Анімації в Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F39a.avalonia-animations","01.csharp\u002F12.desktop-ui\u002F39a.avalonia-animations",{"title":1619,"path":1620,"stem":1621},"2D Графіка та Мультимедіа у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fmedia-graphics","01.csharp\u002F12.desktop-ui\u002F40.media-graphics",{"title":1623,"path":1624,"stem":1625},"Dependency Injection у WPF та Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Fdi-integration","01.csharp\u002F12.desktop-ui\u002F41.di-integration",{"title":1627,"path":1628,"stem":1629},"SQLite та EF Core у десктопних додатках","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part1","01.csharp\u002F12.desktop-ui\u002F42.data-persistence-part1",{"title":1631,"path":1632,"stem":1633},"Repository Pattern та Unit of Work","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part2","01.csharp\u002F12.desktop-ui\u002F43.data-persistence-part2",{"title":1635,"path":1636,"stem":1637},"Тестування ViewModels","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-testing","01.csharp\u002F12.desktop-ui\u002F44.viewmodel-testing",{"title":1639,"path":1640,"stem":1641},"Avalonia Headless Testing — тестування UI без вікон","\u002Fcsharp\u002Fdesktop-ui\u002F44a.avalonia-headless-testing","01.csharp\u002F12.desktop-ui\u002F44a.avalonia-headless-testing",{"title":1643,"path":1644,"stem":1645},"Кросплатформна розробка з Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-cross-platform","01.csharp\u002F12.desktop-ui\u002F45.avalonia-cross-platform",{"title":1647,"path":1648,"stem":1649},"Пакування та розгортання Avalonia додатків","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F46.avalonia-packaging-deployment",{"title":1651,"path":1652,"stem":1653},"Розгортання WPF застосунків","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F47.wpf-packaging-deployment",{"title":1655,"icon":658,"path":1656,"stem":1657,"children":1658,"page":59},"Network Programming","\u002Fcsharp\u002Fnetwork-programming","01.csharp\u002F13.network-programming",[1659,1663,1667,1671,1675,1679,1683,1687,1691,1695,1699],{"title":1660,"path":1661,"stem":1662},"Основи комп'ютерних мереж","\u002Fcsharp\u002Fnetwork-programming\u002Ffoundations","01.csharp\u002F13.network-programming\u002F01.foundations",{"title":1664,"path":1665,"stem":1666},"Модель OSI та стек TCP\u002FIP","\u002Fcsharp\u002Fnetwork-programming\u002Fosi-model","01.csharp\u002F13.network-programming\u002F02.osi-model",{"title":1668,"path":1669,"stem":1670},"IP-протокол та адресація","\u002Fcsharp\u002Fnetwork-programming\u002Fip-addressing","01.csharp\u002F13.network-programming\u002F03.ip-addressing",{"title":1672,"path":1673,"stem":1674},"UDP — протокол без з'єднання","\u002Fcsharp\u002Fnetwork-programming\u002Fudp","01.csharp\u002F13.network-programming\u002F05.udp",{"title":1676,"path":1677,"stem":1678},"UDP Broadcast та Multicast","\u002Fcsharp\u002Fnetwork-programming\u002Fudp-broadcast-multicast","01.csharp\u002F13.network-programming\u002F06.udp-broadcast-multicast",{"title":1680,"path":1681,"stem":1682},"HTTP — протокол вебу","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-fundamentals","01.csharp\u002F13.network-programming\u002F07.http-fundamentals",{"title":1684,"path":1685,"stem":1686},"HttpListener — вбудований HTTP-сервер .NET","\u002Fcsharp\u002Fnetwork-programming\u002F07a.http-listener","01.csharp\u002F13.network-programming\u002F07a.http-listener",{"title":1688,"path":1689,"stem":1690},"HTTP Advanced — cookies, аутентифікація та HTTPS","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-advanced","01.csharp\u002F13.network-programming\u002F08.http-advanced",{"title":1692,"path":1693,"stem":1694},"SMTP та протоколи електронної пошти","\u002Fcsharp\u002Fnetwork-programming\u002Fsmtp","01.csharp\u002F13.network-programming\u002F09.smtp",{"title":1696,"path":1697,"stem":1698},"WebSocket — повнодуплексний протокол реального часу","\u002Fcsharp\u002Fnetwork-programming\u002Fwebsockets","01.csharp\u002F13.network-programming\u002F10.websockets",{"title":1700,"path":1701,"stem":1702},"TLS\u002FSSL — криптографічний захист мережевих з'єднань","\u002Fcsharp\u002Fnetwork-programming\u002Ftls-ssl","01.csharp\u002F13.network-programming\u002F11.tls-ssl",{"title":1704,"path":1705,"stem":1706},"C# & .NET: The Ultimate Roadmap","\u002Fcsharp\u002Froadmap","01.csharp\u002Froadmap",{"title":1708,"icon":1709,"path":1710,"stem":1711,"children":1712,"page":59},"C++","i-devicon-cplusplus","\u002Fcpp","02.cpp",[1713,1717,1721,1725,1729,1733,1737,1741,1745,1748,1752,1756,1760,1764,1768,1772,1776,1780,1784,1788,1792,1796,1800,1804,1808,1812,1816,1820,1824,1828,1832,1836,1840,1844,1848,1852,1856,1860,1864,1868,1872,1876,1880,1884,1888,1892,1896,1900,1904,1908],{"title":1714,"path":1715,"stem":1716},"Вступ у програмування та алгоритми","\u002Fcpp\u002Fintro-algorithms","02.cpp\u002F01.intro-algorithms",{"title":1718,"path":1719,"stem":1720},"Code Style: угоди про оформлення коду","\u002Fcpp\u002Fcode-style","02.cpp\u002F02.code-style",{"title":1722,"path":1723,"stem":1724},"Середовище розробки та перший проєкт","\u002Fcpp\u002Fide-setup","02.cpp\u002F03.ide-setup",{"title":1726,"path":1727,"stem":1728},"Вивід даних на екран","\u002Fcpp\u002Fdata-output","02.cpp\u002F04.data-output",{"title":1730,"path":1731,"stem":1732},"Типи даних, змінні та константи","\u002Fcpp\u002Fdata-types-variables","02.cpp\u002F05.data-types-variables",{"title":1734,"path":1735,"stem":1736},"Ввід даних з клавіатури","\u002Fcpp\u002Fdata-input","02.cpp\u002F06.data-input",{"title":1738,"path":1739,"stem":1740},"Оператори, перетворення типів та логічні операції","\u002Fcpp\u002Foperators-type-conversion","02.cpp\u002F07.operators-type-conversion",{"title":1742,"path":1743,"stem":1744},"Цикли","\u002Fcpp\u002Floops","02.cpp\u002F08.loops",{"title":32,"path":1746,"stem":1747},"\u002Fcpp\u002Farrays","02.cpp\u002F09.arrays",{"title":1749,"path":1750,"stem":1751},"Алгоритми сортування та аналіз складності","\u002Fcpp\u002Fsorting","02.cpp\u002F10.sorting",{"title":1753,"path":1754,"stem":1755},"Алгоритми пошуку","\u002Fcpp\u002Fsearching","02.cpp\u002F11.searching",{"title":1757,"path":1758,"stem":1759},"Функції: основи","\u002Fcpp\u002Ffunctions-basics","02.cpp\u002F12.functions-basics",{"title":1761,"path":1762,"stem":1763},"Функції: прототипи, область видимості та додаткові можливості","\u002Fcpp\u002Ffunctions-scope","02.cpp\u002F13.functions-scope",{"title":1765,"path":1766,"stem":1767},"Функції: перевантаження та шаблони","\u002Fcpp\u002Ffunctions-overloading-templates","02.cpp\u002F14.functions-overloading-templates",{"title":1769,"path":1770,"stem":1771},"Вказівники: основи","\u002Fcpp\u002Fpointers-basics","02.cpp\u002F15.pointers-basics",{"title":1773,"path":1774,"stem":1775},"Посилання (References)","\u002Fcpp\u002Freferences","02.cpp\u002F16.references",{"title":1777,"path":1778,"stem":1779},"Вказівники, const і масиви","\u002Fcpp\u002Fpointers-const-arrays","02.cpp\u002F17.pointers-const-arrays",{"title":1781,"path":1782,"stem":1783},"Адресна арифметика","\u002Fcpp\u002Fpointer-arithmetic","02.cpp\u002F18.pointer-arithmetic",{"title":1785,"path":1786,"stem":1787},"Динамічна пам'ять","\u002Fcpp\u002Fdynamic-memory","02.cpp\u002F19.dynamic-memory",{"title":1789,"path":1790,"stem":1791},"Вказівники типу void","\u002Fcpp\u002Fvoid-pointers","02.cpp\u002F20.void-pointers",{"title":1793,"path":1794,"stem":1795},"Вказівники на вказівники","\u002Fcpp\u002Fpointers-to-pointers","02.cpp\u002F21.pointers-to-pointers",{"title":1797,"path":1798,"stem":1799},"Оператор доступу до членів через вказівник (->)","\u002Fcpp\u002Fmember-access-operator","02.cpp\u002F22.member-access-operator",{"title":1801,"path":1802,"stem":1803},"Цикл for-each (Range-based for)","\u002Fcpp\u002Fforeach-loop","02.cpp\u002F23.foreach-loop",{"title":1805,"path":1806,"stem":1807},"Вказівники на функції","\u002Fcpp\u002Ffunction-pointers","02.cpp\u002F24.function-pointers",{"title":1809,"path":1810,"stem":1811},"Лямбда-вирази","\u002Fcpp\u002Flambdas","02.cpp\u002F25.lambdas",{"title":1813,"path":1814,"stem":1815},"Лямбда-захоплення","\u002Fcpp\u002Flambda-captures","02.cpp\u002F26.lambda-captures",{"title":1817,"path":1818,"stem":1819},"Еліпсис","\u002Fcpp\u002Fellipsis","02.cpp\u002F27.ellipsis",{"title":1821,"path":1822,"stem":1823},"Безпечні альтернативи еліпсису","\u002Fcpp\u002F27a.ellipsis","02.cpp\u002F27a.ellipsis",{"title":1825,"path":1826,"stem":1827},"Аргументи командного рядка","\u002Fcpp\u002Fcommand-line-arguments","02.cpp\u002F28.command-line-arguments",{"title":1829,"path":1830,"stem":1831},"Перерахування (enum)","\u002Fcpp\u002Fenum","02.cpp\u002F29.enum",{"title":1833,"path":1834,"stem":1835},"Класи-перерахування (enum class)","\u002Fcpp\u002Fenum-class","02.cpp\u002F30.enum-class",{"title":1837,"path":1838,"stem":1839},"Псевдоніми типів (typedef і using)","\u002Fcpp\u002Ftype-aliases","02.cpp\u002F31.type-aliases",{"title":1841,"path":1842,"stem":1843},"Системи числення та двійкова арифметика","\u002Fcpp\u002Fnumber-systems","02.cpp\u002F32.number-systems",{"title":1845,"path":1846,"stem":1847},"Структури (struct): агрегування даних","\u002Fcpp\u002Fstruct","02.cpp\u002F33.struct",{"title":1849,"path":1850,"stem":1851},"Структури у функціях","\u002Fcpp\u002Fstruct-functions","02.cpp\u002F34.struct-functions",{"title":1853,"path":1854,"stem":1855},"Масиви структур і вкладені структури","\u002Fcpp\u002Fstruct-arrays","02.cpp\u002F35.struct-arrays",{"title":1857,"path":1858,"stem":1859},"Патерни struct та межі застосування","\u002Fcpp\u002Fstruct-patterns","02.cpp\u002F36.struct-patterns",{"title":1861,"path":1862,"stem":1863},"Символи та таблиця ASCII","\u002Fcpp\u002Fascii-characters","02.cpp\u002F37.ascii-characters",{"title":1865,"path":1866,"stem":1867},"Unicode та кодування UTF","\u002Fcpp\u002Funicode-utf","02.cpp\u002F38.unicode-utf",{"title":1869,"path":1870,"stem":1871},"C-style рядки","\u002Fcpp\u002Fc-strings","02.cpp\u002F39.c-strings",{"title":1873,"path":1874,"stem":1875},"Вступ до std::string","\u002Fcpp\u002Fstd-string-intro","02.cpp\u002F40.std-string-intro",{"title":1877,"path":1878,"stem":1879},"Довжина, ємність та доступ до символів std::string","\u002Fcpp\u002Fstd-string-capacity-access","02.cpp\u002F41.std-string-capacity-access",{"title":1881,"path":1882,"stem":1883},"Модифікація std::string: присвоювання, додавання, вставка, видалення та заміна","\u002Fcpp\u002Fstd-string-modification","02.cpp\u002F42.std-string-modification",{"title":1885,"path":1886,"stem":1887},"Пошук у std::string: find, npos та практичні патерни","\u002Fcpp\u002Fstd-string-search","02.cpp\u002F43.std-string-search",{"title":1889,"path":1890,"stem":1891},"std::string_view: невласницький погляд на рядок без копіювання","\u002Fcpp\u002Fstd-string-view","02.cpp\u002F44.std-string-view",{"title":1893,"path":1894,"stem":1895},"Об'єднання (union): один блок пам'яті, кілька інтерпретацій","\u002Fcpp\u002Funion","02.cpp\u002F45.union",{"title":1897,"path":1898,"stem":1899},"Організація коду: файли, препроцесор, простори імен","\u002Fcpp\u002Fmultifile-programs","02.cpp\u002F46.multifile-programs",{"title":1901,"path":1902,"stem":1903},"Робота з файлами: C-стиль (stdio.h)","\u002Fcpp\u002Fc-style-files","02.cpp\u002F47.c-style-files",{"title":1905,"path":1906,"stem":1907},"Робота з файлами: C++-стиль (fstream)","\u002Fcpp\u002Fcpp-style-files","02.cpp\u002F48.cpp-style-files",{"title":1909,"path":1910,"stem":1911},"План навчання: Курс C++ — Продовження (Статті 29–60+)","\u002Fcpp\u002Fcurriculum-plan","02.cpp\u002Fcurriculum-plan",{"title":1913,"icon":1914,"path":1915,"stem":1916,"children":1917,"page":59},"JavaScript","i-devicon-javascript","\u002Fjavascript","03.javascript",[1918,1944,1998,2020,2324,2362],{"title":1919,"icon":1920,"path":1921,"stem":1922,"children":1923,"page":59},"Events","i-lucide-mouse-pointer-click","\u002Fjavascript\u002Fevents","03.javascript\u002F01.events",[1924,1928,1932,1936,1940],{"title":1925,"path":1926,"stem":1927},"Вступ до подій браузера","\u002Fjavascript\u002Fevents\u002Fintro","03.javascript\u002F01.events\u002F01.intro",{"title":1929,"path":1930,"stem":1931},"Бульбашковий механізм (Bubbling) та занурення (Capturing)","\u002Fjavascript\u002Fevents\u002Fbubbling-capturing","03.javascript\u002F01.events\u002F02.bubbling-capturing",{"title":1933,"path":1934,"stem":1935},"Делегування подій (Event Delegation)","\u002Fjavascript\u002Fevents\u002Fdelegate-events","03.javascript\u002F01.events\u002F03.delegate-events",{"title":1937,"path":1938,"stem":1939},"Типові дії браузера та preventDefault()","\u002Fjavascript\u002Fevents\u002Fprevent-default","03.javascript\u002F01.events\u002F04.prevent-default",{"title":1941,"path":1942,"stem":1943},"Запуск користувацьких подій (Custom Events)","\u002Fjavascript\u002Fevents\u002Fcustom-events","03.javascript\u002F01.events\u002F05.custom-events",{"title":1945,"icon":1946,"path":1947,"stem":1948,"children":1949,"page":59},"Network","i-lucide-globe","\u002Fjavascript\u002Fnetwork","03.javascript\u002F02.network",[1950,1954,1958,1962,1966,1970,1974,1978,1982,1986,1990,1994],{"title":1951,"path":1952,"stem":1953},"Fetch API - Сучасний підхід до HTTP-запитів","\u002Fjavascript\u002Fnetwork\u002F01-fetch-api","03.javascript\u002F02.network\u002F01-fetch-api",{"title":1955,"path":1956,"stem":1957},"FormData - Робота з формами та файлами","\u002Fjavascript\u002Fnetwork\u002F02-formdata","03.javascript\u002F02.network\u002F02-formdata",{"title":1959,"path":1960,"stem":1961},"Відстеження прогресу завантаження","\u002Fjavascript\u002Fnetwork\u002F03-download-progress","03.javascript\u002F02.network\u002F03-download-progress",{"title":1963,"path":1964,"stem":1965},"Переривання fetch-запитів","\u002Fjavascript\u002Fnetwork\u002F04-abort-requests","03.javascript\u002F02.network\u002F04-abort-requests",{"title":1967,"path":1968,"stem":1969},"CORS - Запити між різними джерелами","\u002Fjavascript\u002Fnetwork\u002F05-cors","03.javascript\u002F02.network\u002F05-cors",{"title":1971,"path":1972,"stem":1973},"Fetch API - Повний довідник опцій","\u002Fjavascript\u002Fnetwork\u002F06-fetch-options","03.javascript\u002F02.network\u002F06-fetch-options",{"title":1975,"path":1976,"stem":1977},"URL Objects - Робота з посиланнями","\u002Fjavascript\u002Fnetwork\u002F07-url-objects","03.javascript\u002F02.network\u002F07-url-objects",{"title":1979,"path":1980,"stem":1981},"XMLHttpRequest - AJAX та низькорівневі запити","\u002Fjavascript\u002Fnetwork\u002F08-xmlhttprequest","03.javascript\u002F02.network\u002F08-xmlhttprequest",{"title":1983,"path":1984,"stem":1985},"Відновлюване завантаження файлів","\u002Fjavascript\u002Fnetwork\u002F09-resumable-upload","03.javascript\u002F02.network\u002F09-resumable-upload",{"title":1987,"path":1988,"stem":1989},"Cookies, document.cookie та світ після \"Cookiepocalypse\"","\u002Fjavascript\u002Fnetwork\u002F10-cookies","03.javascript\u002F02.network\u002F10-cookies",{"title":1991,"path":1992,"stem":1993},"js-cookie: Керування Cookies без Болю","\u002Fjavascript\u002Fnetwork\u002F11-js-cookie","03.javascript\u002F02.network\u002F11-js-cookie",{"title":1995,"path":1996,"stem":1997},"Axios: Потужний HTTP-клієнт для JavaScript","\u002Fjavascript\u002Fnetwork\u002F12-axios","03.javascript\u002F02.network\u002F12-axios",{"title":1999,"icon":2000,"path":2001,"stem":2002,"children":2003,"page":59},"Bom","i-lucide-monitor","\u002Fjavascript\u002Fbom","03.javascript\u002F03.bom",[2004,2008,2012,2016],{"title":2005,"path":2006,"stem":2007},"LocalStorage, SessionStorage та patterns збереження даних","\u002Fjavascript\u002Fbom\u002F01-localstorage","03.javascript\u002F03.bom\u002F01-localstorage",{"title":2009,"path":2010,"stem":2011},"Location Object - Керування адресою сторінки","\u002Fjavascript\u002Fbom\u002F02-location-object","03.javascript\u002F03.bom\u002F02-location-object",{"title":2013,"path":2014,"stem":2015},"History API - Керування історією браузера","\u002Fjavascript\u002Fbom\u002F03-history-api","03.javascript\u002F03.bom\u002F03-history-api",{"title":2017,"path":2018,"stem":2019},"Navigator Object - Ідентифікація та Можливості Пристрою","\u002Fjavascript\u002Fbom\u002F04-navigator-object","03.javascript\u002F03.bom\u002F04-navigator-object",{"title":2021,"icon":2022,"path":2023,"stem":2024,"children":2025},"React","i-devicon-react","\u002Fjavascript\u002Freact","03.javascript\u002F04.react\u002Findex",[2026,2027,2031,2035,2039,2043,2106,2141,2293],{"title":2021,"path":2023,"stem":2024},{"title":2028,"path":2029,"stem":2030},"Робота з Формами в React","\u002Fjavascript\u002Freact\u002Freact-forms","03.javascript\u002F04.react\u002F01.react-forms",{"title":2032,"path":2033,"stem":2034},"React Hook Form: Професійна Робота з Формами","\u002Fjavascript\u002Freact\u002Freact-hook-form","03.javascript\u002F04.react\u002F02.react-hook-form",{"title":2036,"path":2037,"stem":2038},"React Hook Form: Глибоке Розуміння Архітектури та Оптимізації","\u002Fjavascript\u002Freact\u002Freact-hook-form-new","03.javascript\u002F04.react\u002F02.react-hook-form-new",{"title":2040,"path":2041,"stem":2042},"Axios та React: Професійна Архітектура Запитів","\u002Fjavascript\u002Freact\u002Fdata-fetching-axios","03.javascript\u002F04.react\u002F03.data-fetching-axios",{"title":2044,"icon":132,"path":2045,"stem":2046,"children":2047},"Tanstack Query","\u002Fjavascript\u002Freact\u002Ftanstack-query","03.javascript\u002F04.react\u002F04.tanstack-query\u002Findex",[2048,2050,2054,2058,2062,2066,2070,2074,2078,2082,2086,2090,2094,2098,2102],{"title":2049,"path":2045,"stem":2046},"TanStack Query: Майстерність Керування Станом Сервера",{"title":2051,"path":2052,"stem":2053},"Парадигма Server State: Чому useEffect недостатньо","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-state-paradigm","03.javascript\u002F04.react\u002F04.tanstack-query\u002F01.server-state-paradigm",{"title":2055,"path":2056,"stem":2057},"Встановлення та Налаштування: Фундамент","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Finstallation-and-devtools","03.javascript\u002F04.react\u002F04.tanstack-query\u002F02.installation-and-devtools",{"title":2059,"path":2060,"stem":2061},"Основи Запитів та Магія Ключів","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fquery-basics-and-keys","03.javascript\u002F04.react\u002F04.tanstack-query\u002F03.query-basics-and-keys",{"title":2063,"path":2064,"stem":2065},"Синхронізація Даних: Життєвий Цикл Запиту","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fdata-synchronization","03.javascript\u002F04.react\u002F04.tanstack-query\u002F04.data-synchronization",{"title":2067,"path":2068,"stem":2069},"Мутації та Інвалідація: Зміна Даних","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fmutations-and-invalidation","03.javascript\u002F04.react\u002F04.tanstack-query\u002F05.mutations-and-invalidation",{"title":2071,"path":2072,"stem":2073},"Оптимістичні Оновлення: Швидше за Світло","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Foptimistic-updates","03.javascript\u002F04.react\u002F04.tanstack-query\u002F06.optimistic-updates",{"title":2075,"path":2076,"stem":2077},"Пагінація та Infinite Scroll","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fpagination-and-load-more","03.javascript\u002F04.react\u002F04.tanstack-query\u002F07.pagination-and-load-more",{"title":2079,"path":2080,"stem":2081},"Просунуті Патерни та Оптимізація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F04.tanstack-query\u002F08.advanced-patterns",{"title":2083,"path":2084,"stem":2085},"Архітектура та Best Practices","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Farchitecture-and-best-practices","03.javascript\u002F04.react\u002F04.tanstack-query\u002F09.architecture-and-best-practices",{"title":2087,"path":2088,"stem":2089},"Server-Side Rendering (SSR) та Гідратація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-side-rendering","03.javascript\u002F04.react\u002F04.tanstack-query\u002F10.server-side-rendering",{"title":2091,"path":2092,"stem":2093},"Стратегії Тестування","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Ftesting-strategies","03.javascript\u002F04.react\u002F04.tanstack-query\u002F11.testing-strategies",{"title":2095,"path":2096,"stem":2097},"Аутентифікація та Обробка Помилок","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fauthentication-and-errors","03.javascript\u002F04.react\u002F04.tanstack-query\u002F12.authentication-and-errors",{"title":2099,"path":2100,"stem":2101},"React Suspense та Майбутнє","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Freact-suspense","03.javascript\u002F04.react\u002F04.tanstack-query\u002F13.react-suspense",{"title":2103,"path":2104,"stem":2105},"Глибоке Занурення в Продуктивність","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fperformance-deep-dive","03.javascript\u002F04.react\u002F04.tanstack-query\u002F14.performance-deep-dive",{"title":2107,"icon":2022,"path":2108,"stem":2109,"children":2110},"React Router","\u002Fjavascript\u002Freact\u002Freact-router","03.javascript\u002F04.react\u002F05.react-router\u002Findex",[2111,2113,2117,2121,2125,2129,2133,2137],{"title":2112,"path":2108,"stem":2109},"React Router: Навігаційна система сучасного вебу",{"title":2114,"path":2115,"stem":2116},"Налаштування та Базовий Роутинг","\u002Fjavascript\u002Freact\u002Freact-router\u002Fsetup-and-basic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F01.setup-and-basic-routing",{"title":2118,"path":2119,"stem":2120},"Динамічна Навігація","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnavigation-and-links","03.javascript\u002F04.react\u002F05.react-router\u002F02.navigation-and-links",{"title":2122,"path":2123,"stem":2124},"Вкладені Маршрути та Макети","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnested-routes-and-layouts","03.javascript\u002F04.react\u002F05.react-router\u002F03.nested-routes-and-layouts",{"title":2126,"path":2127,"stem":2128},"Динамічні Маршрути та Параметри","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdynamic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F04.dynamic-routing",{"title":2130,"path":2131,"stem":2132},"Data APIs: Loaders та Actions","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdata-loading","03.javascript\u002F04.react\u002F05.react-router\u002F05.data-loading",{"title":2134,"path":2135,"stem":2136},"Просунуті Патерни","\u002Fjavascript\u002Freact\u002Freact-router\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F05.react-router\u002F06.advanced-patterns",{"title":2138,"path":2139,"stem":2140},"Legacy Routing: Компонентний підхід","\u002Fjavascript\u002Freact\u002Freact-router\u002Flegacy-routing","03.javascript\u002F04.react\u002F05.react-router\u002F07.legacy-routing",{"title":2142,"icon":132,"path":2143,"stem":2144,"children":2145},"Redux","\u002Fjavascript\u002Freact\u002Fredux","03.javascript\u002F04.react\u002F06.redux\u002Findex",[2146,2148,2164,2193,2202,2223,2239,2268],{"title":2147,"path":2143,"stem":2144},"Redux: Еволюція управління станом",{"title":14,"icon":15,"path":2149,"stem":2150,"children":2151,"page":59},"\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals",[2152,2156,2160],{"title":2153,"path":2154,"stem":2155},"Вступ до State Management","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fintro-state-management","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F01.intro-state-management",{"title":2157,"path":2158,"stem":2159},"Філософія Redux та Три Принципи","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fredux-philosophy","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F02.redux-philosophy",{"title":2161,"path":2162,"stem":2163},"Чисті функції та Іммутабельність","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fpure-functions-immutability","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F03.pure-functions-immutability",{"title":2165,"icon":132,"path":2166,"stem":2167,"children":2168,"page":59},"Classic Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux",[2169,2173,2177,2181,2185,2189],{"title":2170,"path":2171,"stem":2172},"Створення Store (Classic Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fstore-setup","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F01.store-setup",{"title":2174,"path":2175,"stem":2176},"Actions, Constants та Action Creators","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Factions-constants","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F02.actions-constants",{"title":2178,"path":2179,"stem":2180},"Логіка Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freducers","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F03.reducers",{"title":2182,"path":2183,"stem":2184},"Комбінування Reducers (Root Reducer)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fdata-flow","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F04.data-flow",{"title":2186,"path":2187,"stem":2188},"Підключення до React (React-Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freact-redux-connection","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F05.react-redux-connection",{"title":2190,"path":2191,"stem":2192},"Middleware та Асинхронність (Redux Thunk)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fmiddleware-thunk","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F06.middleware-thunk",{"title":2194,"icon":132,"path":2195,"stem":2196,"children":2197,"page":59},"Transition To Rtk","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk",[2198],{"title":2199,"path":2200,"stem":2201},"Проблеми класичного Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk\u002Fproblems-with-classic","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk\u002F01.problems-with-classic",{"title":2203,"icon":132,"path":2204,"stem":2205,"children":2206,"page":59},"Redux Toolkit","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit",[2207,2211,2215,2219],{"title":2208,"path":2209,"stem":2210},"Налаштування Store з configureStore","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fconfigure-store","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F01.configure-store",{"title":2212,"path":2213,"stem":2214},"createSlice: Революція в Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fcreate-slice","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F02.create-slice",{"title":2216,"path":2217,"stem":2218},"Асинхронність з createAsyncThunk","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fasync-thunks","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F03.async-thunks",{"title":2220,"path":2221,"stem":2222},"04. Entity Adapter: Керування нормалізованим станом","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fentity-adapter","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F04.entity-adapter",{"title":2224,"icon":92,"path":2225,"stem":2226,"children":2227,"page":59},"Advanced","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced",[2228,2232,2236],{"title":2229,"path":2230,"stem":2231},"Мемоізація та Селектори: Повний Гайд по Reselect","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Fselectors-reselect","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F01.selectors-reselect",{"title":2233,"path":2234,"stem":2235},"RTK Query: Архітектура Серверного Кешу","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Frtk-query-intro","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F02.rtk-query-intro",{"title":2083,"path":2237,"stem":2238},"\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Farchitecture-best-practices","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F03.architecture-best-practices",{"title":2240,"icon":132,"path":2241,"stem":2242,"children":2243,"page":59},"Project Kanban","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban",[2244,2248,2252,2256,2260,2264],{"title":2245,"path":2246,"stem":2247},"Проєкт: Kanban Board (Trello Clone)","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fproject-overview","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F01.project-overview",{"title":2249,"path":2250,"stem":2251},"Налаштування та Типізація","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fsetup-and-types","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F02.setup-and-types",{"title":2253,"path":2254,"stem":2255},"Board Slice: Серце Дошки","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fboard-slice","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F03.board-slice",{"title":2257,"path":2258,"stem":2259},"Логіка Drag & Drop","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fdrag-and-drop-logic","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F04.drag-and-drop-logic",{"title":2261,"path":2262,"stem":2263},"Інтеграція з RTK Query","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Frtk-query-integration","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F05.rtk-query-integration",{"title":2265,"path":2266,"stem":2267},"Optimistic Updates","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Foptimistic-updates","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F06.optimistic-updates",{"title":2269,"icon":132,"path":2270,"stem":2271,"children":2272,"page":59},"Testing","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting","03.javascript\u002F04.react\u002F06.redux\u002F07.testing",[2273,2277,2281,2285,2289],{"title":2274,"path":2275,"stem":2276},"Тестування Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Fintro-testing","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F01.intro-testing",{"title":2278,"path":2279,"stem":2280},"Тестування Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-reducers","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F02.testing-reducers",{"title":2282,"path":2283,"stem":2284},"Тестування Селекторів","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-selectors","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F03.testing-selectors",{"title":2286,"path":2287,"stem":2288},"Тестування Компонентів (Integration)","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-components","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F04.testing-components",{"title":2290,"path":2291,"stem":2292},"Тестування Async Thunks","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-thunks","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F05.testing-thunks",{"title":2294,"icon":132,"path":2295,"stem":2296,"children":2297},"Ui Libraries","\u002Fjavascript\u002Freact\u002Fui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002Findex",[2298,2300,2304,2308,2312,2316,2320],{"title":2299,"path":2295,"stem":2296},"UI Бібліотеки в React",{"title":2301,"path":2302,"stem":2303},"Вступ до UI Бібліотек: Навіщо Винаходити Велосипед Двічі?","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fintroduction-to-ui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002F01.introduction-to-ui-libraries",{"title":2305,"path":2306,"stem":2307},"Філософія shadcn\u002Fui: \"Not a Component Library\"","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-philosophy","03.javascript\u002F04.react\u002F07.ui-libraries\u002F02.shadcn-philosophy",{"title":2309,"path":2310,"stem":2311},"Установка та Налаштування shadcn\u002Fui","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-installation","03.javascript\u002F04.react\u002F07.ui-libraries\u002F03.shadcn-installation",{"title":2313,"path":2314,"stem":2315},"Базові Компоненти shadcn\u002Fui: Фундамент Інтерфейсу","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-basics","03.javascript\u002F04.react\u002F07.ui-libraries\u002F04.shadcn-components-basics",{"title":2317,"path":2318,"stem":2319},"Компоненти Форм: Побудова Інтерактивних Form","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-forms","03.javascript\u002F04.react\u002F07.ui-libraries\u002F05.shadcn-components-forms",{"title":2321,"path":2322,"stem":2323},"Складні Компоненти: Dialog, Dropdown, Table та Command","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-advanced","03.javascript\u002F04.react\u002F07.ui-libraries\u002F06.shadcn-components-advanced",{"title":2325,"icon":2326,"path":2327,"stem":2328,"children":2329,"page":59},"TypeScript","i-devicon-typescript","\u002Fjavascript\u002Ftypescript","03.javascript\u002F05.typescript",[2330,2334,2338,2342,2346,2350,2354,2358],{"title":2331,"path":2332,"stem":2333},"TypeScript: Броня для вашого коду","\u002Fjavascript\u002Ftypescript\u002Fintro-and-basic-types","03.javascript\u002F05.typescript\u002F01.intro-and-basic-types",{"title":2335,"path":2336,"stem":2337},"Майстерність Моделювання Даних: Інтерфейси та Просунуті Типи","\u002Fjavascript\u002Ftypescript\u002Finterfaces-and-advanced-types","03.javascript\u002F05.typescript\u002F02.interfaces-and-advanced-types",{"title":2339,"path":2340,"stem":2341},"Алхімія Типів: Generics та Utility Types","\u002Fjavascript\u002Ftypescript\u002Fgenerics-and-utilities","03.javascript\u002F05.typescript\u002F03.generics-and-utilities",{"title":2343,"path":2344,"stem":2345},"Архітектура та Шаблони: Класи в TypeScript","\u002Fjavascript\u002Ftypescript\u002Fclasses-and-oop","03.javascript\u002F05.typescript\u002F04.classes-and-oop",{"title":2347,"path":2348,"stem":2349},"Продакшн та Екосистема: Advanced Config & Workflow","\u002Fjavascript\u002Ftypescript\u002Fadvanced-patterns-and-config","03.javascript\u002F05.typescript\u002F05.advanced-patterns-and-config",{"title":2351,"path":2352,"stem":2353},"TypeScript у світі React","\u002Fjavascript\u002Ftypescript\u002Freact-basics","03.javascript\u002F05.typescript\u002F06.react-basics",{"title":2355,"path":2356,"stem":2357},"React + TypeScript: Продвинуті патерни","\u002Fjavascript\u002Ftypescript\u002Freact-advanced","03.javascript\u002F05.typescript\u002F07.react-advanced",{"title":2359,"path":2360,"stem":2361},"React + TypeScript: Екосистема та бібліотеки","\u002Fjavascript\u002Ftypescript\u002Freact-ecosystem","03.javascript\u002F05.typescript\u002F08.react-ecosystem",{"title":2363,"path":2364,"stem":2365},"Atomic Design","\u002Fjavascript\u002Fatomic-design","03.javascript\u002F2.atomic-design",{"title":2367,"icon":2368,"path":2369,"stem":2370,"children":2371,"page":59},"Java","i-devicon-java","\u002Fjava","04.java",[2372,2375,2378,2382,2386,2390,2394],{"title":162,"path":2373,"stem":2374},"\u002Fjava\u002Fdata-mapper-part1","04.java\u002F01.data-mapper-part1",{"title":166,"path":2376,"stem":2377},"\u002Fjava\u002Fdata-mapper-part2","04.java\u002F02.data-mapper-part2",{"title":2379,"path":2380,"stem":2381},"Service Layer: Організація бізнес-логіки","\u002Fjava\u002Fservice-layer","04.java\u002F03.service-layer",{"title":2383,"path":2384,"stem":2385},"Rich Domain Model та State Pattern","\u002Fjava\u002Frich-domain-model","04.java\u002F04.rich-domain-model",{"title":2387,"path":2388,"stem":2389},"Патерни для складної бізнес-логіки","\u002Fjava\u002Fbusiness-logic-patterns","04.java\u002F05.business-logic-patterns",{"title":2391,"path":2392,"stem":2393},"Обробка помилок та валідація","\u002Fjava\u002Ferror-handling-validation","04.java\u002F06.error-handling-validation",{"title":2395,"path":2396,"stem":2397,"children":2398,"page":59},"Проектування баз даних","\u002Fjava\u002Fpr2","04.java\u002Fpr2",[2399,2403,2407,2411,2415,2419,2423,2427,2431,2435,2439,2443,2447,2451,2455,2459,2463,2467,2471,2475,2479,2483,2487,2491,2495,2499,2503,2507,2511,2515,2519,2523,2527,2531,2535,2539,2543],{"title":2400,"path":2401,"stem":2402},"Концептуальне моделювання: Мистецтво розуміння предметної області","\u002Fjava\u002Fpr2\u002Fconceptual-modeling","04.java\u002Fpr2\u002F01.conceptual-modeling",{"title":2404,"path":2405,"stem":2406},"Логічне моделювання: Від бізнес-ідей до структур даних","\u002Fjava\u002Fpr2\u002Flogical-modeling","04.java\u002Fpr2\u002F02.logical-modeling",{"title":2408,"path":2409,"stem":2410},"Нормалізація: Гігієна даних та боротьба з аномаліями","\u002Fjava\u002Fpr2\u002Fnormalization","04.java\u002Fpr2\u002F03.normalization",{"title":2412,"path":2413,"stem":2414},"Фізична схема: Від абстракції до DDL","\u002Fjava\u002Fpr2\u002Fphysical-schema","04.java\u002Fpr2\u002F04.physical-schema",{"title":2416,"path":2417,"stem":2418},"Архітектурна класифікація таблиць","\u002Fjava\u002Fpr2\u002Ftable-classification","04.java\u002Fpr2\u002F05.table-classification",{"title":2420,"path":2421,"stem":2422},"Database Migrations: Версіонування схеми з Flyway","\u002Fjava\u002Fpr2\u002Fdatabase-migrations","04.java\u002Fpr2\u002F06.database-migrations",{"title":2424,"path":2425,"stem":2426},"А що, якби це була не реляційна БД?","\u002Fjava\u002Fpr2\u002Fbeyond-relational","04.java\u002Fpr2\u002F07.beyond-relational",{"title":2428,"path":2429,"stem":2430},"Object-Relational Impedance Mismatch: Два світи, що не хочуть дружити","\u002Fjava\u002Fpr2\u002Fimpedance-mismatch","04.java\u002Fpr2\u002F09.impedance-mismatch",{"title":2432,"path":2433,"stem":2434},"JDBC: Перший контакт із базою даних","\u002Fjava\u002Fpr2\u002Fjdbc-fundamentals","04.java\u002Fpr2\u002F10.jdbc-fundamentals",{"title":2436,"path":2437,"stem":2438},"Якість коду: Spotless, SpotBugs та SonarQube","\u002Fjava\u002Fpr2\u002F10a.code-quality","04.java\u002Fpr2\u002F10a.code-quality",{"title":2440,"path":2441,"stem":2442},"Connection Pool: Патерн Object Pool для JDBC-з'єднань","\u002Fjava\u002Fpr2\u002Fconnection-pool","04.java\u002Fpr2\u002F11.connection-pool",{"title":2444,"path":2445,"stem":2446},"Row Data Gateway: Об'єкт як обгортка рядка таблиці","\u002Fjava\u002Fpr2\u002Frow-data-gateway","04.java\u002Fpr2\u002F12.row-data-gateway",{"title":2448,"path":2449,"stem":2450},"Table Data Gateway: Фасад таблиці як архітектурний відступ","\u002Fjava\u002Fpr2\u002Ftable-data-gateway","04.java\u002Fpr2\u002F13.table-data-gateway",{"title":2452,"path":2453,"stem":2454},"Repository + Data Mapper: Правильна шарова архітектура з JDBC","\u002Fjava\u002Fpr2\u002Frepository-data-mapper","04.java\u002Fpr2\u002F14.repository-data-mapper",{"title":2456,"path":2457,"stem":2458},"Identity Map: Кешування сутностей у рамках сесії","\u002Fjava\u002Fpr2\u002Fidentity-map","04.java\u002Fpr2\u002F15.identity-map",{"title":2460,"path":2461,"stem":2462},"Unit of Work: Відстеження змін і координація JDBC-транзакцій","\u002Fjava\u002Fpr2\u002Funit-of-work","04.java\u002Fpr2\u002F16.unit-of-work",{"title":2464,"path":2465,"stem":2466},"Strategy: Замінювані SQL-стратегії для підтримки різних СУБД","\u002Fjava\u002Fpr2\u002Fstrategy-sql","04.java\u002Fpr2\u002F17.strategy-sql",{"title":2468,"path":2469,"stem":2470},"Proxy: Lazy Loading для One-To-Many колекцій","\u002Fjava\u002Fpr2\u002Fproxy-lazy-loading","04.java\u002Fpr2\u002F18.proxy-lazy-loading",{"title":2472,"path":2473,"stem":2474},"Generic Repository через Java Reflection: анотації та динамічний SQL","\u002Fjava\u002Fpr2\u002Fgeneric-repository-reflection","04.java\u002Fpr2\u002F19.generic-repository-reflection",{"title":2476,"path":2477,"stem":2478},"Specification Pattern: Композиція бізнес-правил для складних запитів","\u002Fjava\u002Fpr2\u002Fspecification-pattern","04.java\u002Fpr2\u002F20.specification-pattern",{"title":2480,"path":2481,"stem":2482},"Розширені можливості Specification Pattern: підзапити, агрегації та гібридний підхід","\u002Fjava\u002Fpr2\u002F20a.advanced-specifications","04.java\u002Fpr2\u002F20a.advanced-specifications",{"title":2484,"path":2485,"stem":2486},"Асинхронність у JDBC: Від блокуючих викликів до CompletableFuture","\u002Fjava\u002Fpr2\u002Fasynchronous-jdbc","04.java\u002Fpr2\u002F21.asynchronous-jdbc",{"title":2488,"path":2489,"stem":2490},"Інтеграційне тестування JDBC-репозиторіїв: Embedded H2 та патерн AAA","\u002Fjava\u002Fpr2\u002Fintegration-testing-h2","04.java\u002Fpr2\u002F22.integration-testing-h2",{"title":2492,"path":2493,"stem":2494},"Testcontainers: Тестування з реальною PostgreSQL у Docker-контейнерах","\u002Fjava\u002Fpr2\u002Fintegration-testing-testcontainers","04.java\u002Fpr2\u002F23.integration-testing-testcontainers",{"title":2496,"path":2497,"stem":2498},"Google Guice: Впровадження залежностей у JavaFX-проєкті","\u002Fjava\u002Fpr2\u002Fdependency-injection-guice","04.java\u002Fpr2\u002F24.dependency-injection-guice",{"title":2500,"path":2501,"stem":2502},"JavaFX: Основи побудови графічних інтерфейсів","\u002Fjava\u002Fpr2\u002Fjavafx-fundamentals","04.java\u002Fpr2\u002F25.javafx-fundamentals",{"title":2504,"path":2505,"stem":2506},"Properties та Bindings: Реактивність у JavaFX","\u002Fjava\u002Fpr2\u002Fjavafx-properties-bindings","04.java\u002Fpr2\u002F26.javafx-properties-bindings",{"title":2508,"path":2509,"stem":2510},"MVC vs MVP vs MVVM: Еволюція архітектурних патернів UI","\u002Fjava\u002Fpr2\u002Fui-architecture-patterns","04.java\u002Fpr2\u002F27.ui-architecture-patterns",{"title":2512,"path":2513,"stem":2514},"MVVM на практиці: Побудова ViewModel","\u002Fjava\u002Fpr2\u002Fmvvm-viewmodel-implementation","04.java\u002Fpr2\u002F28.mvvm-viewmodel-implementation",{"title":2516,"path":2517,"stem":2518},"View та Controller: Зв'язування з ViewModel через FXML","\u002Fjava\u002Fpr2\u002Fmvvm-view-controller","04.java\u002Fpr2\u002F29.mvvm-view-controller",{"title":2520,"path":2521,"stem":2522},"Інтеграція MVVM з Guice: Автоматична ін'єкція залежностей","\u002Fjava\u002Fpr2\u002Fmvvm-guice-integration","04.java\u002Fpr2\u002F30.mvvm-guice-integration",{"title":2524,"path":2525,"stem":2526},"Валідація та обробка помилок у MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-validation-error-handling","04.java\u002Fpr2\u002F31.mvvm-validation-error-handling",{"title":2528,"path":2529,"stem":2530},"Навігація та управління екранами у JavaFX MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-navigation-screen-management","04.java\u002Fpr2\u002F32.mvvm-navigation-screen-management",{"title":2532,"path":2533,"stem":2534},"Тестування JavaFX MVVM-додатків","\u002Fjava\u002Fpr2\u002Fmvvm-testing","04.java\u002Fpr2\u002F33.mvvm-testing",{"title":2536,"path":2537,"stem":2538},"Стилізація та теми у JavaFX: CSS та User Experience","\u002Fjava\u002Fpr2\u002Fjavafx-styling-themes","04.java\u002Fpr2\u002F34.javafx-styling-themes",{"title":2540,"path":2541,"stem":2542},"AtlantaFX: Сучасні теми для JavaFX додатків","\u002Fjava\u002Fpr2\u002Fatlantafx-modern-themes","04.java\u002Fpr2\u002F35.atlantafx-modern-themes",{"title":2544,"path":2545,"stem":2546},"Пакування та розповсюдження JavaFX-додатків","\u002Fjava\u002Fpr2\u002Fjar-packaging-distribution","04.java\u002Fpr2\u002F36.jar-packaging-distribution",{"title":2548,"icon":2549,"path":2550,"stem":2551,"children":2552,"page":59},"Python","i-devicon-python","\u002Fpython","05.python",[2553,2557,2560,2564,2568,2572,2576,2580,2584,2588,2592,2596,2600,2604,2608,2669],{"title":2554,"path":2555,"stem":2556},"Модулі, Пакети та Віртуальні Середовища","\u002Fpython\u002Fmodules-packages-venv","05.python\u002F00.modules-packages-venv",{"title":71,"path":2558,"stem":2559},"\u002Fpython\u002Fclasses-objects","05.python\u002F01.classes-objects",{"title":2561,"path":2562,"stem":2563},"Інкапсуляція, Керування Доступом та Властивості","\u002Fpython\u002Fencapsulation","05.python\u002F02.encapsulation",{"title":2565,"path":2566,"stem":2567},"Наслідування, MRO та суперсила super()","\u002Fpython\u002Finheritance-mro","05.python\u002F03.inheritance-mro",{"title":2569,"path":2570,"stem":2571},"Абстракція — ABC проти Статичних Протоколів (PEP 544)","\u002Fpython\u002Fabstraction-protocols","05.python\u002F04.abstraction-protocols",{"title":2573,"path":2574,"stem":2575},"Магічні методи (Dunder) та Емуляція протоколів","\u002Fpython\u002Fdunder-methods","05.python\u002F05.dunder-methods",{"title":2577,"path":2578,"stem":2579},"Декоратори та Керування життєвим циклом методів","\u002Fpython\u002Fdecorators-static-class","05.python\u002F06.decorators-static-class",{"title":2581,"path":2582,"stem":2583},"Дескриптори — Магія доступу до атрибутів","\u002Fpython\u002Fdescriptors","05.python\u002F07.descriptors",{"title":2585,"path":2586,"stem":2587},"Метакласи — Динамічне створення класів під капотом CPython","\u002Fpython\u002Fmetaclasses","05.python\u002F08.metaclasses",{"title":2589,"path":2590,"stem":2591},"Dataclasses, NamedTuple та сучасні контейнери Python","\u002Fpython\u002Fmodern-containers","05.python\u002F09.modern-containers",{"title":2593,"path":2594,"stem":2595},"GIL та модель конкурентності CPython — фундамент перед потоками і процесами","\u002Fpython\u002Fgil-concurrency-intro","05.python\u002F11.gil-concurrency-intro",{"title":2597,"path":2598,"stem":2599},"Threading — конкурентність для I\u002FO-bound задач","\u002Fpython\u002Fthreading","05.python\u002F12.threading",{"title":2601,"path":2602,"stem":2603},"Multiprocessing — справжній паралелізм для CPU-bound задач","\u002Fpython\u002Fmultiprocessing","05.python\u002F13.multiprocessing",{"title":2605,"path":2606,"stem":2607},"asyncio — кооперативна конкурентність та event loop","\u002Fpython\u002Fasyncio","05.python\u002F14.asyncio",{"title":2609,"icon":92,"path":2610,"stem":2611,"children":2612,"page":59},"FastAPI","\u002Fpython\u002Ffastapi","05.python\u002Ffastapi",[2613,2617,2621,2625,2629,2633,2637,2641,2645,2649,2653,2657,2661,2665],{"title":2614,"path":2615,"stem":2616},"Глибокий Typing та Pydantic v2 — від анотацій до валідації","\u002Fpython\u002Ffastapi\u002Ftyping-pydantic","05.python\u002Ffastapi\u002F15.typing-pydantic",{"title":2618,"path":2619,"stem":2620},"WSGI, ASGI та Python Web-екосистема","\u002Fpython\u002Ffastapi\u002Fwsgi-asgi-ecosystem","05.python\u002Ffastapi\u002F16.wsgi-asgi-ecosystem",{"title":2622,"path":2623,"stem":2624},"FastAPI: Перший додаток, Uvicorn та OpenAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-intro","05.python\u002Ffastapi\u002F17.fastapi-intro",{"title":2626,"path":2627,"stem":2628},"Маршрутизація, параметри запитів та APIRouter","\u002Fpython\u002Ffastapi\u002Ffastapi-routing-params","05.python\u002Ffastapi\u002F18.fastapi-routing-params",{"title":2630,"path":2631,"stem":2632},"Pydantic v2 у FastAPI — схеми, валідація та серіалізація","\u002Fpython\u002Ffastapi\u002Ffastapi-pydantic-schemas","05.python\u002Ffastapi\u002F19.fastapi-pydantic-schemas",{"title":2634,"path":2635,"stem":2636},"Dependency Injection — серце архітектури FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-dependency-injection","05.python\u002Ffastapi\u002F20.fastapi-dependency-injection",{"title":2638,"path":2639,"stem":2640},"Обробка помилок, Middleware та CORS у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-errors-middleware","05.python\u002Ffastapi\u002F21.fastapi-errors-middleware",{"title":2642,"path":2643,"stem":2644},"SQLAlchemy 2.0 — ORM, Core та Async Engine","\u002Fpython\u002Ffastapi\u002Fsqlalchemy-orm","05.python\u002Ffastapi\u002F22.sqlalchemy-orm",{"title":2646,"path":2647,"stem":2648},"Alembic — міграції бази даних","\u002Fpython\u002Ffastapi\u002Falembic-migrations","05.python\u002Ffastapi\u002F23.alembic-migrations",{"title":2650,"path":2651,"stem":2652},"Repository Pattern та Clean Architecture у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-repository-clean-arch","05.python\u002Ffastapi\u002F24.fastapi-repository-clean-arch",{"title":2654,"path":2655,"stem":2656},"Автентифікація та авторизація — JWT, OAuth2, RBAC","\u002Fpython\u002Ffastapi\u002Ffastapi-auth-security","05.python\u002Ffastapi\u002F25.fastapi-auth-security",{"title":2658,"path":2659,"stem":2660},"Тестування FastAPI — pytest, httpx, fixtures","\u002Fpython\u002Ffastapi\u002Ffastapi-testing","05.python\u002Ffastapi\u002F26.fastapi-testing",{"title":2662,"path":2663,"stem":2664},"Async на повну — Background Tasks, WebSockets, SSE та Celery","\u002Fpython\u002Ffastapi\u002Ffastapi-async-advanced","05.python\u002Ffastapi\u002F27.fastapi-async-advanced",{"title":2666,"path":2667,"stem":2668},"Deployment — Docker, CI\u002FCD, Monitoring","\u002Fpython\u002Ffastapi\u002Ffastapi-deployment","05.python\u002Ffastapi\u002F28.fastapi-deployment",{"title":2670,"path":2671,"stem":2672},"[object Object]","\u002Fpython\u002Foop-plan","05.python\u002Foop-plan",{"title":2674,"icon":2675,"path":2676,"stem":2677,"children":2678,"page":59},"Бази даних","i-lucide-database","\u002Fdatabases","06.databases",[2679,2709,2732,2769,2798,2816,2850,2862,2871],{"title":2680,"icon":2681,"path":2682,"stem":2683,"children":2684,"page":59},"Intro","i-lucide-play","\u002Fdatabases\u002Fintro","06.databases\u002F01.intro",[2685,2689,2693,2697,2701,2705],{"title":2686,"path":2687,"stem":2688},"Введення в теорію баз даних","\u002Fdatabases\u002Fintro\u002Fintroduction-to-databases","06.databases\u002F01.intro\u002F01.introduction-to-databases",{"title":2690,"path":2691,"stem":2692},"Реляційна модель даних","\u002Fdatabases\u002Fintro\u002Frelational-model-theory","06.databases\u002F01.intro\u002F02.relational-model-theory",{"title":2694,"path":2695,"stem":2696},"ER-моделювання","\u002Fdatabases\u002Fintro\u002Fer-modeling","06.databases\u002F01.intro\u002F03.er-modeling",{"title":2698,"path":2699,"stem":2700},"Логічне проектування БД","\u002Fdatabases\u002Fintro\u002Flogical-schema","06.databases\u002F01.intro\u002F04.logical-schema",{"title":2702,"path":2703,"stem":2704},"Класифікація таблиць","\u002Fdatabases\u002Fintro\u002Ftable-classification","06.databases\u002F01.intro\u002F05.table-classification",{"title":2706,"path":2707,"stem":2708},"PlantUML для баз даних","\u002Fdatabases\u002Fintro\u002Fplantuml-diagrams","06.databases\u002F01.intro\u002F06.plantuml-diagrams",{"title":2710,"icon":2675,"path":2711,"stem":2712,"children":2713,"page":59},"MS SQL Server Start","\u002Fdatabases\u002Fms-sql-server-start","06.databases\u002F02.ms-sql-server-start",[2714,2718,2724,2728],{"title":2715,"path":2716,"stem":2717},"Типи даних у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fdata-types","06.databases\u002F02.ms-sql-server-start\u002F01.data-types",{"title":2719,"path":2720,"stem":2721,"children":2722},"Індекси у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-indexes","06.databases\u002F02.ms-sql-server-start\u002F02.sql-indexes",[2723],{"title":2719,"path":2720,"stem":2721},{"title":2725,"path":2726,"stem":2727},"Системні бази даних MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsystem-databases","06.databases\u002F02.ms-sql-server-start\u002F03.system-databases",{"title":2729,"path":2730,"stem":2731},"Огляд мови SQL та запитів","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-queries-overview","06.databases\u002F02.ms-sql-server-start\u002F04.sql-queries-overview",{"title":2733,"icon":2675,"path":2734,"stem":2735,"children":2736,"page":59},"SQL","\u002Fdatabases\u002Fsql","06.databases\u002F03.sql",[2737,2741,2745,2749,2753,2757,2761,2765],{"title":2738,"path":2739,"stem":2740},"Налаштування демонстраційної бази даних","\u002Fdatabases\u002Fsql\u002Fsample-database-setup","06.databases\u002F03.sql\u002F00.sample-database-setup",{"title":2742,"path":2743,"stem":2744},"DDL - Створення таблиць (CREATE TABLE)","\u002Fdatabases\u002Fsql\u002Fddl-create-table","06.databases\u002F03.sql\u002F01.ddl-create-table",{"title":2746,"path":2747,"stem":2748},"DDL - Зміна та видалення таблиць (ALTER, DROP)","\u002Fdatabases\u002Fsql\u002Fddl-alter-drop-table","06.databases\u002F03.sql\u002F02.ddl-alter-drop-table",{"title":2750,"path":2751,"stem":2752},"SELECT запити - Основи","\u002Fdatabases\u002Fsql\u002Fselect-queries-fundamentals","06.databases\u002F03.sql\u002F03.select-queries-fundamentals",{"title":2754,"path":2755,"stem":2756},"SELECT запити - Розширені можливості","\u002Fdatabases\u002Fsql\u002Fselect-queries-advanced","06.databases\u002F03.sql\u002F04.select-queries-advanced",{"title":2758,"path":2759,"stem":2760},"INSERT запити - Додавання даних","\u002Fdatabases\u002Fsql\u002Finsert-queries","06.databases\u002F03.sql\u002F05.insert-queries",{"title":2762,"path":2763,"stem":2764},"UPDATE та DELETE запити","\u002Fdatabases\u002Fsql\u002Fupdate-delete-queries","06.databases\u002F03.sql\u002F06.update-delete-queries",{"title":2766,"path":2767,"stem":2768},"Транзакції в SQL","\u002Fdatabases\u002Fsql\u002Ftransactions","06.databases\u002F03.sql\u002F07.transactions",{"title":2770,"icon":2675,"path":2771,"stem":2772,"children":2773,"page":59},"Multi Table Databases","\u002Fdatabases\u002Fmulti-table-databases","06.databases\u002F04.multi-table-databases",[2774,2778,2782,2786,2790,2794],{"title":2775,"path":2776,"stem":2777},"Зв'язки та нормалізація БД","\u002Fdatabases\u002Fmulti-table-databases\u002Frelationships-and-normalization","06.databases\u002F04.multi-table-databases\u002F00.relationships-and-normalization",{"title":2779,"path":2780,"stem":2781},"INNER JOIN - З'єднання таблиць","\u002Fdatabases\u002Fmulti-table-databases\u002Finner-join","06.databases\u002F04.multi-table-databases\u002F01.inner-join",{"title":2783,"path":2784,"stem":2785},"OUTER JOINs - LEFT, RIGHT, FULL","\u002Fdatabases\u002Fmulti-table-databases\u002Fouter-joins","06.databases\u002F04.multi-table-databases\u002F02.outer-joins",{"title":2787,"path":2788,"stem":2789},"CROSS та SELF JOINs","\u002Fdatabases\u002Fmulti-table-databases\u002Fcross-self-joins","06.databases\u002F04.multi-table-databases\u002F03.cross-self-joins",{"title":2791,"path":2792,"stem":2793},"Підзапити (Subqueries)","\u002Fdatabases\u002Fmulti-table-databases\u002Fsubqueries","06.databases\u002F04.multi-table-databases\u002F04.subqueries",{"title":2795,"path":2796,"stem":2797},"Агрегації з JOIN","\u002Fdatabases\u002Fmulti-table-databases\u002Faggregations-with-joins","06.databases\u002F04.multi-table-databases\u002F05.aggregations-with-joins",{"title":2799,"icon":2800,"path":2801,"stem":2802,"children":2803,"page":59},"Aggregate Functions","i-lucide-calculator","\u002Fdatabases\u002Faggregate-functions","06.databases\u002F05.aggregate-functions",[2804,2808,2812],{"title":2805,"path":2806,"stem":2807},"Функції агрегування в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fintroduction-aggregate-functions","06.databases\u002F05.aggregate-functions\u002F01.introduction-aggregate-functions",{"title":2809,"path":2810,"stem":2811},"Групування даних в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fgrouping-data","06.databases\u002F05.aggregate-functions\u002F02.grouping-data",{"title":2813,"path":2814,"stem":2815},"Підзапити з агрегатними функціями","\u002Fdatabases\u002Faggregate-functions\u002Fsubqueries-aggregates","06.databases\u002F05.aggregate-functions\u002F03.subqueries-aggregates",{"title":2817,"icon":2818,"path":2819,"stem":2820,"children":2821,"page":59},"Тригери та зберігаємі процедури","i-lucide-database-zap","\u002Fdatabases\u002Ftriggers-stored-procedures","06.databases\u002F07.triggers-stored-procedures",[2822,2826,2830,2834,2838,2842,2846],{"title":2823,"path":2824,"stem":2825},"DML-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fdml-triggers","06.databases\u002F07.triggers-stored-procedures\u002F01.dml-triggers",{"title":2827,"path":2828,"stem":2829},"DDL-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fddl-triggers","06.databases\u002F07.triggers-stored-procedures\u002F02.ddl-triggers",{"title":2831,"path":2832,"stem":2833},"Transact-SQL розширення","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransact-sql-extensions","06.databases\u002F07.triggers-stored-procedures\u002F03.transact-sql-extensions",{"title":2835,"path":2836,"stem":2837},"Транзакції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransactions","06.databases\u002F07.triggers-stored-procedures\u002F04.transactions",{"title":2839,"path":2840,"stem":2841},"Зберігаємі процедури","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fstored-procedures","06.databases\u002F07.triggers-stored-procedures\u002F05.stored-procedures",{"title":2843,"path":2844,"stem":2845},"Користувацькі функції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fuser-defined-functions","06.databases\u002F07.triggers-stored-procedures\u002F06.user-defined-functions",{"title":2847,"path":2848,"stem":2849},"Безпека баз даних","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fsecurity","06.databases\u002F07.triggers-stored-procedures\u002F08.security",{"title":2847,"icon":793,"path":2851,"stem":2852,"children":2853,"page":59},"\u002Fdatabases\u002Fsecurity","06.databases\u002F08.security",[2854,2858],{"title":2855,"path":2856,"stem":2857},"Вступ до безпеки баз даних","\u002Fdatabases\u002Fsecurity\u002Fintroduction","06.databases\u002F08.security\u002F01.introduction",{"title":2859,"path":2860,"stem":2861},"Системні представлення та метадані","\u002Fdatabases\u002Fsecurity\u002Fsystem-views","06.databases\u002F08.security\u002F02.system-views",{"title":2863,"icon":2864,"path":2865,"stem":2866,"children":2867,"page":59},"Резервне копіювання та відновлення","i-lucide-database-backup","\u002Fdatabases\u002Fbackup-recovery","06.databases\u002F09.backup-recovery",[2868],{"title":2863,"path":2869,"stem":2870},"\u002Fdatabases\u002Fbackup-recovery\u002Fbackup-restore","06.databases\u002F09.backup-recovery\u002F01.backup-restore",{"title":2872,"icon":2873,"path":2874,"stem":2875,"children":2876,"page":59},"Повнотекстовий пошук","i-lucide-search","\u002Fdatabases\u002Ffull-text-search","06.databases\u002F10.full-text-search",[2877],{"title":2872,"path":2878,"stem":2879},"\u002Fdatabases\u002Ffull-text-search\u002Ffull-text-search","06.databases\u002F10.full-text-search\u002F01.full-text-search",{"title":2881,"icon":2882,"path":2883,"stem":2884,"children":2885,"page":59},"Tools","i-lucide-wrench","\u002Ftools","07.tools",[2886,2962],{"title":2887,"icon":2888,"path":2889,"stem":2890,"children":2891},"Docker","i-simple-icons-docker","\u002Ftools\u002Fdocker","07.tools\u002F01.docker\u002Findex",[2892,2894,2898,2902,2906,2910,2914,2918,2922,2926,2930,2934,2938,2942,2946,2950,2954,2958],{"title":2893,"path":2889,"stem":2890},"Docker: від нуля до production",{"title":2895,"path":2896,"stem":2897},"Контейнеризація — від проблеми до рішення","\u002Ftools\u002Fdocker\u002Fcontainerization-concept","07.tools\u002F01.docker\u002F01.containerization-concept",{"title":2899,"path":2900,"stem":2901},"Docker — що це і навіщо?","\u002Ftools\u002Fdocker\u002Fdocker-what-and-why","07.tools\u002F01.docker\u002F02.docker-what-and-why",{"title":2903,"path":2904,"stem":2905},"Архітектура Docker Engine","\u002Ftools\u002Fdocker\u002Fdocker-architecture","07.tools\u002F01.docker\u002F03.docker-architecture",{"title":2907,"path":2908,"stem":2909},"Встановлення Docker","\u002Ftools\u002Fdocker\u002Finstallation","07.tools\u002F01.docker\u002F04.installation",{"title":2911,"path":2912,"stem":2913},"Перший контейнер — docker run","\u002Ftools\u002Fdocker\u002Ffirst-container","07.tools\u002F01.docker\u002F05.first-container",{"title":2915,"path":2916,"stem":2917},"Життєвий цикл контейнера","\u002Ftools\u002Fdocker\u002Fcontainer-lifecycle","07.tools\u002F01.docker\u002F06.container-lifecycle",{"title":2919,"path":2920,"stem":2921},"Docker Images — фундаментальні концепції","\u002Ftools\u002Fdocker\u002Fdocker-images-fundamentals","07.tools\u002F01.docker\u002F07.docker-images-fundamentals",{"title":2923,"path":2924,"stem":2925},"Dockerfile — основи","\u002Ftools\u002Fdocker\u002Fdockerfile-basics","07.tools\u002F01.docker\u002F08.dockerfile-basics",{"title":2927,"path":2928,"stem":2929},"Dockerfile — просунуті техніки","\u002Ftools\u002Fdocker\u002Fdockerfile-advanced","07.tools\u002F01.docker\u002F09.dockerfile-advanced",{"title":2931,"path":2932,"stem":2933},"Build Context та кешування шарів","\u002Ftools\u002Fdocker\u002Fbuild-context-and-cache","07.tools\u002F01.docker\u002F10.build-context-and-cache",{"title":2935,"path":2936,"stem":2937},"Реєстри Docker-образів","\u002Ftools\u002Fdocker\u002Fimage-registries","07.tools\u002F01.docker\u002F11.image-registries",{"title":2939,"path":2940,"stem":2941},"Контейнеризація .NET додатків","\u002Ftools\u002Fdocker\u002Fdotnet-containerization","07.tools\u002F01.docker\u002F12.dotnet-containerization",{"title":2943,"path":2944,"stem":2945},"Томи та збереження даних","\u002Ftools\u002Fdocker\u002Fvolumes-and-data","07.tools\u002F01.docker\u002F13.volumes-and-data",{"title":2947,"path":2948,"stem":2949},"Основи мережі в Docker","\u002Ftools\u002Fdocker\u002Fnetworking-basics","07.tools\u002F01.docker\u002F14.networking-basics",{"title":2951,"path":2952,"stem":2953},"Змінні оточення та конфігурація","\u002Ftools\u002Fdocker\u002Fenvironment-and-configuration","07.tools\u002F01.docker\u002F15.environment-and-configuration",{"title":2955,"path":2956,"stem":2957},"Docker Compose — оркестрація контейнерів","\u002Ftools\u002Fdocker\u002Fdocker-compose-basics","07.tools\u002F01.docker\u002F16.docker-compose-basics",{"title":2959,"path":2960,"stem":2961},"Docker Compose — Multi-Service застосунки","\u002Ftools\u002Fdocker\u002Fcompose-multi-service","07.tools\u002F01.docker\u002F17.compose-multi-service",{"title":2963,"icon":2964,"path":2965,"stem":2966,"children":2967},"Kubernetes","simple-icons:kubernetes","\u002Ftools\u002Fkubernetes","07.tools\u002F02.kubernetes\u002Findex",[2968,2970,2974,2978,2982,2986,2990,2994,2998],{"title":2969,"path":2965,"stem":2966},"Kubernetes: від розробки до production",{"title":2971,"path":2972,"stem":2973},"Kubernetes — коли Docker Compose більше не вистачає","\u002Ftools\u002Fkubernetes\u002Fwhy-kubernetes","07.tools\u002F02.kubernetes\u002F01.why-kubernetes",{"title":2975,"path":2976,"stem":2977},"Архітектура Kubernetes — анатомія кластера","\u002Ftools\u002Fkubernetes\u002Fkubernetes-architecture","07.tools\u002F02.kubernetes\u002F02.kubernetes-architecture",{"title":2979,"path":2980,"stem":2981},"Локальне середовище — minikube, kind та k3s","\u002Ftools\u002Fkubernetes\u002Flocal-environment","07.tools\u002F02.kubernetes\u002F03.local-environment",{"title":2983,"path":2984,"stem":2985},"Pod — атомарна одиниця Kubernetes","\u002Ftools\u002Fkubernetes\u002Fpods-and-containers","07.tools\u002F02.kubernetes\u002F04.pods-and-containers",{"title":2987,"path":2988,"stem":2989},"Патерни використання Pod","\u002Ftools\u002Fkubernetes\u002Fpod-patterns","07.tools\u002F02.kubernetes\u002F05.pod-patterns",{"title":2991,"path":2992,"stem":2993},"Deployment — декларативне управління Pod","\u002Ftools\u002Fkubernetes\u002Fdeployment-basics","07.tools\u002F02.kubernetes\u002F06.deployment-basics",{"title":2995,"path":2996,"stem":2997},"Rolling Updates та управління життєвим циклом Deployment","\u002Ftools\u002Fkubernetes\u002Fdeployment-rolling-updates","07.tools\u002F02.kubernetes\u002F07.deployment-rolling-updates",{"title":2999,"path":3000,"stem":3001},"Service — мережева абстракція для Pod","\u002Ftools\u002Fkubernetes\u002Fservices-networking","07.tools\u002F02.kubernetes\u002F08.services-networking",{"title":3003,"icon":3004,"path":3005,"stem":3006,"children":3007,"page":59},"Software Engineering","i-lucide-code-2","\u002Fsoftware-engineering","09.software-engineering",[3008,3012,3016,3020,3024,3028,3032,3036,3040,3044,3048],{"title":3009,"path":3010,"stem":3011},"1. Аналіз предметної області. Експертні знання та складність","\u002Fsoftware-engineering\u002Fintro-subdomains","09.software-engineering\u002F01.intro-subdomains",{"title":3013,"path":3014,"stem":3015},"2. Обмежені контексти. Інтеграція обмежених контекстів","\u002Fsoftware-engineering\u002Fintegrating-limited-contexts","09.software-engineering\u002F02.integrating-limited-contexts",{"title":3017,"path":3018,"stem":3019},"3. Реалізація простої бізнес-логіки","\u002Fsoftware-engineering\u002Fsimple","09.software-engineering\u002F03.simple",{"title":3021,"path":3022,"stem":3023},"4. Опрацювання складної бізнес-логіки","\u002Fsoftware-engineering\u002Fcomplex-business-logic","09.software-engineering\u002F04.complex-business-logic",{"title":3025,"path":3026,"stem":3027},"5. Моделювання фактора часу. Подієво-орієнтована архітектура.","\u002Fsoftware-engineering\u002Fmodelling-the-time-factor","09.software-engineering\u002F05.modelling-the-time-factor",{"title":3029,"path":3030,"stem":3031},"6. Архітектурні патерни","\u002Fsoftware-engineering\u002Farchitectural-patterns","09.software-engineering\u002F06.architectural-patterns",{"title":3033,"path":3034,"stem":3035},"Паттерни взаємодії","\u002Fsoftware-engineering\u002Fpatterns-of-interaction","09.software-engineering\u002F07.patterns-of-interaction",{"title":3037,"path":3038,"stem":3039},"Евристика проєктування","\u002Fsoftware-engineering\u002Fdesign-heuristics","09.software-engineering\u002F08.design-heuristics",{"title":3041,"path":3042,"stem":3043},"Еволюція проєктних рішень","\u002Fsoftware-engineering\u002Fevolution-of-design-solutions","09.software-engineering\u002F09.evolution-of-design-solutions",{"title":3045,"path":3046,"stem":3047},"EventStorming","\u002Fsoftware-engineering\u002Feventstorming","09.software-engineering\u002F10.eventstorming",{"title":3049,"path":3050,"stem":3051},"DDD на практиці","\u002Fsoftware-engineering\u002Fddd-in-practice","09.software-engineering\u002F11.ddd-in-practice",{"title":3053,"icon":943,"path":3054,"stem":3055,"children":3056,"page":59},"DDD","\u002Fddd","10.ddd",[3057,3061,3065,3069,3073,3077,3081,3085,3089,3093,3097,3101,3105],{"title":3058,"path":3059,"stem":3060},"Аналіз предметної області","\u002Fddd\u002Fdomain-analysis","10.ddd\u002F01.domain-analysis",{"title":3062,"path":3063,"stem":3064},"Експертні знання про предметну область","\u002Fddd\u002Fdomain-expert-knowledge","10.ddd\u002F02.domain-expert-knowledge",{"title":3066,"path":3067,"stem":3068},"Як осмислити складність предметної області","\u002Fddd\u002Fmanaging-domain-complexity","10.ddd\u002F03.managing-domain-complexity",{"title":3070,"path":3071,"stem":3072},"Інтеграція обмежених контекстів","\u002Fddd\u002Fbounded-context-integration","10.ddd\u002F04.bounded-context-integration",{"title":3074,"path":3075,"stem":3076},"Реалізація простої бізнес-логіки","\u002Fddd\u002Fsimple-business-logic","10.ddd\u002F05.simple-business-logic",{"title":3078,"path":3079,"stem":3080},"Обробка складної бізнес-логіки","\u002Fddd\u002Fcomplex-business-logic","10.ddd\u002F06.complex-business-logic",{"title":3082,"path":3083,"stem":3084},"Моделювання фактора часу","\u002Fddd\u002Ftime-modeling","10.ddd\u002F07.time-modeling",{"title":3086,"path":3087,"stem":3088},"Глава 8. Архітектурні Патерни","\u002Fddd\u002Farchitectural-patterns","10.ddd\u002F08.architectural-patterns",{"title":3090,"path":3091,"stem":3092},"Глава 9. Патерни Взаємодії","\u002Fddd\u002Finteraction-patterns","10.ddd\u002F09.interaction-patterns",{"title":3094,"path":3095,"stem":3096},"Глава 10. Проектні Евристики","\u002Fddd\u002Fdesign-heuristics","10.ddd\u002F10.design-heuristics",{"title":3098,"path":3099,"stem":3100},"Глава 11. Еволюція Проектних Рішень","\u002Fddd\u002Fevolution-of-design-decisions","10.ddd\u002F11.evolution-of-design-decisions",{"title":3102,"path":3103,"stem":3104},"Глава 12. EventStorming","\u002Fddd\u002Fevent-storming","10.ddd\u002F12.event-storming",{"title":3106,"path":3107,"stem":3108},"Глава 13. DDD на Практиці","\u002Fddd\u002Fddd-in-practice","10.ddd\u002F13.ddd-in-practice",{"title":3110,"icon":3111,"path":3112,"stem":3113,"children":3114,"page":59},"Media Streaming","i-lucide-video","\u002Fmedia-streaming","11.media-streaming",[3115,3119,3123,3127,3131,3135,3139],{"title":3116,"path":3117,"stem":3118},"01. Магія Стрімінгу: Що відбувається, коли ви натискаєте \"Play\"","\u002Fmedia-streaming\u002Fintroduction","11.media-streaming\u002F01.introduction",{"title":3120,"path":3121,"stem":3122},"02. Анатомія Медіа: Кодеки, Контейнери та Стиснення","\u002Fmedia-streaming\u002Faudio-video-anatomy","11.media-streaming\u002F02.audio-video-anatomy",{"title":3124,"path":3125,"stem":3126},"03. The Gym: FFmpeg Deep Dive","\u002Fmedia-streaming\u002Fffmpeg-gym","11.media-streaming\u002F03.ffmpeg-gym",{"title":3128,"path":3129,"stem":3130},"04. HLS Protocol: HTTP Live Streaming у Деталях","\u002Fmedia-streaming\u002Fhls-protocol","11.media-streaming\u002F04.hls-protocol",{"title":3132,"path":3133,"stem":3134},"05. DASH Protocol: Відкритий Стандарт","\u002Fmedia-streaming\u002Fdash-protocol","11.media-streaming\u002F05.dash-protocol",{"title":3136,"path":3137,"stem":3138},"06. Масштабування: CDN та Adaptive Bitrate","\u002Fmedia-streaming\u002Fcdn-and-adaptive-bitrate","11.media-streaming\u002F06.cdn-and-adaptive-bitrate",{"title":3140,"path":3141,"stem":3142},"07. Війна із Затримкою (Latency)","\u002Fmedia-streaming\u002Frealtime-latency","11.media-streaming\u002F07.realtime-latency",{"title":3144,"icon":3145,"path":3146,"stem":3147,"children":3148,"page":59},"HTML & CSS","i-devicon-html5","\u002Fhtml-css","12.html-css",[3149,3153,3157,3161,3165,3169,3173,3177,3181,3185,3189,3193,3197,3201,3205,3209,3213,3217,3221,3225,3229,3233,3237,3241,3245,3249,3253,3257,3261,3265],{"title":3150,"path":3151,"stem":3152},"Вступ до HTML. Структура документа","\u002Fhtml-css\u002Fintro-html-structure","12.html-css\u002F01.intro-html-structure",{"title":3154,"path":3155,"stem":3156},"Форматування тексту в HTML","\u002Fhtml-css\u002Fhtml-text-formatting","12.html-css\u002F02.html-text-formatting",{"title":3158,"path":3159,"stem":3160},"Посилання та зображення в HTML","\u002Fhtml-css\u002Fhtml-links-images","12.html-css\u002F03.html-links-images",{"title":3162,"path":3163,"stem":3164},"Списки та таблиці в HTML","\u002Fhtml-css\u002Fhtml-lists-tables","12.html-css\u002F04.html-lists-tables",{"title":3166,"path":3167,"stem":3168},"Форми в HTML","\u002Fhtml-css\u002Fhtml-forms","12.html-css\u002F05.html-forms",{"title":3170,"path":3171,"stem":3172},"Семантичні елементи HTML5","\u002Fhtml-css\u002Fhtml-semantic-elements","12.html-css\u002F06.html-semantic-elements",{"title":3174,"path":3175,"stem":3176},"Мультимедіа та розширені елементи HTML","\u002Fhtml-css\u002Fhtml-multimedia-advanced","12.html-css\u002F07.html-multimedia-advanced",{"title":3178,"path":3179,"stem":3180},"Мікророзмітка та SEO в HTML","\u002Fhtml-css\u002Fhtml-microdata-seo","12.html-css\u002F08.html-microdata-seo",{"title":3182,"path":3183,"stem":3184},"Вступ до CSS. Селектори та специфічність","\u002Fhtml-css\u002Fcss-intro-selectors","12.html-css\u002F09.css-intro-selectors",{"title":3186,"path":3187,"stem":3188},"Блокова модель CSS. Відступи. Box Sizing","\u002Fhtml-css\u002Fcss-box-model","12.html-css\u002F10.css-box-model",{"title":3190,"path":3191,"stem":3192},"Розміри у CSS: повний довідник одиниць і ключових слів","\u002Fhtml-css\u002F10a.css-sizing","12.html-css\u002F10a.css-sizing",{"title":3194,"path":3195,"stem":3196},"Типографіка в CSS. Шрифти та текст","\u002Fhtml-css\u002Fcss-typography","12.html-css\u002F11.css-typography",{"title":3198,"path":3199,"stem":3200},"Кольори та фони в CSS","\u002Fhtml-css\u002Fcss-colors-backgrounds","12.html-css\u002F12.css-colors-backgrounds",{"title":3202,"path":3203,"stem":3204},"Тіні та фільтри в CSS","\u002Fhtml-css\u002F12b.css-shadows-filters","12.html-css\u002F12b.css-shadows-filters",{"title":3206,"path":3207,"stem":3208},"CSS Flexbox: Фундамент гнучких макетів","\u002Fhtml-css\u002Fcss-flexbox-fundamentals","12.html-css\u002F13.css-flexbox-fundamentals",{"title":3210,"path":3211,"stem":3212},"CSS Flexbox: Вирівнювання та Позиціонування","\u002Fhtml-css\u002Fcss-flexbox-alignment-sizing-and-patterns","12.html-css\u002F14.css-flexbox-alignment-sizing-and-patterns",{"title":3214,"path":3215,"stem":3216},"CSS Grid. Двовимірний макет. Частина 1","\u002Fhtml-css\u002Fcss-layout-grid","12.html-css\u002F15.css-layout-grid",{"title":3218,"path":3219,"stem":3220},"CSS Grid. Двовимірний макет. Частина 2","\u002Fhtml-css\u002Fcss-layout-grid-advanced","12.html-css\u002F16.css-layout-grid-advanced",{"title":3222,"path":3223,"stem":3224},"Позиціонування в CSS. Z-index. Stacking Context","\u002Fhtml-css\u002Fcss-positioning","12.html-css\u002F17.css-positioning",{"title":3226,"path":3227,"stem":3228},"CSS Анімації та Переходи","\u002Fhtml-css\u002Fcss-animations-transitions","12.html-css\u002F18.css-animations-transitions",{"title":3230,"path":3231,"stem":3232},"Адаптивний дизайн. Media Queries. Частина 1","\u002Fhtml-css\u002Fcss-responsive-media-queries","12.html-css\u002F19.css-responsive-media-queries",{"title":3234,"path":3235,"stem":3236},"Адаптивний дизайн. Частина 2: clamp(), Container Queries, @layer","\u002Fhtml-css\u002Fcss-responsive-advanced","12.html-css\u002F20.css-responsive-advanced",{"title":3238,"path":3239,"stem":3240},"CSS Custom Properties. Методології. Сучасний CSS","\u002Fhtml-css\u002Fcss-variables-methodologies","12.html-css\u002F21.css-variables-methodologies",{"title":3242,"path":3243,"stem":3244},"Сучасний CSS 2023–2025: Нові можливості","\u002Fhtml-css\u002Fcss-modern-features","12.html-css\u002F22.css-modern-features",{"title":3246,"path":3247,"stem":3248},"CSS Nesting, @layer, @scope та @property: нативний препроцесор","\u002Fhtml-css\u002F22a.css-nesting-modern-syntax","12.html-css\u002F22a.css-nesting-modern-syntax",{"title":3250,"path":3251,"stem":3252},"CSS для форм та інтерактивних станів","\u002Fhtml-css\u002Fcss-forms-interactive-states","12.html-css\u002F23.css-forms-interactive-states",{"title":3254,"path":3255,"stem":3256},"Доступність у CSS (CSS Accessibility)","\u002Fhtml-css\u002Fcss-accessibility","12.html-css\u002F24.css-accessibility",{"title":3258,"path":3259,"stem":3260},"CSS-функції та сучасні sizing primitives","\u002Fhtml-css\u002Fcss-functions-sizing","12.html-css\u002F25.css-functions-sizing",{"title":3262,"path":3263,"stem":3264},"Rendering Pipeline і CSS Performance","\u002Fhtml-css\u002Fcss-rendering-performance","12.html-css\u002F26.css-rendering-performance",{"title":3266,"path":3267,"stem":3268},"CSS Best Practices: типові ситуації та правильні рішення","\u002Fhtml-css\u002Fcss-best-practices","12.html-css\u002F27.css-best-practices",{"title":3270,"path":3271,"stem":3272,"children":3273,"page":59},"AWS","\u002Faws","13.aws",[3274,3278,3282,3286,3290,3294,3298,3302,3306,3310,3314,3318,3322,3326,3330,3334,3338,3342],{"title":3275,"path":3276,"stem":3277},"Реєстрація AWS акаунту та студентські програми","\u002Faws\u002Faccount-registration","13.aws\u002F00.account-registration",{"title":3279,"path":3280,"stem":3281},"Вступ до хмарних обчислень та AWS","\u002Faws\u002Fintroduction-to-cloud","13.aws\u002F01.introduction-to-cloud",{"title":3283,"path":3284,"stem":3285},"AWS IAM — Identity and Access Management","\u002Faws\u002Fiam","13.aws\u002F02.iam",{"title":3287,"path":3288,"stem":3289},"AWS IAM CLI — Довідник команд","\u002Faws\u002F02a.iam-doc","13.aws\u002F02a.iam-doc",{"title":3291,"path":3292,"stem":3293},"Docker та контейнеризація в AWS — ECR, ECS та Fargate","\u002Faws\u002Fdocker-ecs","13.aws\u002F03.docker-ecs",{"title":3295,"path":3296,"stem":3297},"AWS ECR \u002F ECS CLI — Довідник команд","\u002Faws\u002F03a.docker-ecs-doc","13.aws\u002F03a.docker-ecs-doc",{"title":3299,"path":3300,"stem":3301},"Amazon EC2 — Elastic Compute Cloud","\u002Faws\u002Fec2","13.aws\u002F04.ec2",{"title":3303,"path":3304,"stem":3305},"AWS EC2 CLI — Довідник команд","\u002Faws\u002F04a.ec2-doc","13.aws\u002F04a.ec2-doc",{"title":3307,"path":3308,"stem":3309},"Elastic Load Balancing та Auto Scaling","\u002Faws\u002Falb-asg","13.aws\u002F05.alb-asg",{"title":3311,"path":3312,"stem":3313},"Amazon S3 — Simple Storage Service","\u002Faws\u002Fs3","13.aws\u002F06.s3",{"title":3315,"path":3316,"stem":3317},"Amazon CloudFront — Content Delivery Network","\u002Faws\u002Fcloudfront","13.aws\u002F07.cloudfront",{"title":3319,"path":3320,"stem":3321},"Amazon RDS — Relational Database Service","\u002Faws\u002Frds","13.aws\u002F08.rds",{"title":3323,"path":3324,"stem":3325},"Amazon DynamoDB — NoSQL Database","\u002Faws\u002Fdynamodb","13.aws\u002F09.dynamodb",{"title":3327,"path":3328,"stem":3329},"AWS Lambda та Serverless Compute","\u002Faws\u002Flambda","13.aws\u002F10.lambda",{"title":3331,"path":3332,"stem":3333},"Amazon Bedrock - Foundation Models, RAG та Agents","\u002Faws\u002Fbedrock","13.aws\u002F22.bedrock",{"title":3335,"path":3336,"stem":3337},"Amazon Rekognition - Комп'ютерний зір","\u002Faws\u002Frekognition","13.aws\u002F23.rekognition",{"title":3339,"path":3340,"stem":3341},"Amazon Textract - Інтелектуальний аналіз документів","\u002Faws\u002Ftextract","13.aws\u002F24.textract",{"title":3343,"path":3344,"stem":3345},"Amazon Polly, Transcribe, Comprehend та Translate","\u002Faws\u002Faudio-nlp-services","13.aws\u002F25.audio-nlp-services",{"title":3347,"path":3348,"stem":3349,"children":3350,"page":59},"Tailwind","\u002Ftailwind","21.tailwind",[3351,3355,3359,3363,3367,3371,3375,3379,3383,3387,3391,3395],{"title":3352,"path":3353,"stem":3354},"Що таке Tailwind CSS і навіщо він потрібен","\u002Ftailwind\u002Ftailwind-intro-philosophy","21.tailwind\u002F01.tailwind-intro-philosophy",{"title":3356,"path":3357,"stem":3358},"Встановлення та налаштування Tailwind CSS v4","\u002Ftailwind\u002Ftailwind-installation-setup","21.tailwind\u002F02.tailwind-installation-setup",{"title":3360,"path":3361,"stem":3362},"Utility-класи: основи та система Tailwind","\u002Ftailwind\u002Ftailwind-utility-classes-core","21.tailwind\u002F03.tailwind-utility-classes-core",{"title":3364,"path":3365,"stem":3366},"Layout: Flexbox та Grid через Tailwind","\u002Ftailwind\u002Ftailwind-flexbox-grid","21.tailwind\u002F04.tailwind-flexbox-grid",{"title":3368,"path":3369,"stem":3370},"Кастомізація теми через @theme у Tailwind v4","\u002Ftailwind\u002Ftailwind-theme-customization","21.tailwind\u002F05.tailwind-theme-customization",{"title":3372,"path":3373,"stem":3374},"Варіанти: hover, focus, responsive, dark mode та нові v4","\u002Ftailwind\u002Ftailwind-variants-states","21.tailwind\u002F06.tailwind-variants-states",{"title":3376,"path":3377,"stem":3378},"Типографіка та система кольорів у Tailwind v4","\u002Ftailwind\u002Ftailwind-typography-colors","21.tailwind\u002F07.tailwind-typography-colors",{"title":3380,"path":3381,"stem":3382},"Компоненти та повторюваність: @apply, @utility та патерни","\u002Ftailwind\u002Ftailwind-components-patterns","21.tailwind\u002F08.tailwind-components-patterns",{"title":3384,"path":3385,"stem":3386},"Темна тема та система дизайн-токенів у Tailwind v4","\u002Ftailwind\u002Ftailwind-dark-mode-theming","21.tailwind\u002F09.tailwind-dark-mode-theming",{"title":3388,"path":3389,"stem":3390},"Довільні значення та контейнерні запити у Tailwind v4","\u002Ftailwind\u002Ftailwind-arbitrary-container-queries","21.tailwind\u002F10.tailwind-arbitrary-container-queries",{"title":3392,"path":3393,"stem":3394},"Анімації, трансформації та 3D у Tailwind v4","\u002Ftailwind\u002Ftailwind-animations-transforms","21.tailwind\u002F11.tailwind-animations-transforms",{"title":3396,"path":3397,"stem":3398},"Tailwind CLI, PostCSS та інтеграція з фреймворками","\u002Ftailwind\u002Ftailwind-cli-tooling","21.tailwind\u002F12.tailwind-cli-tooling",{"title":3400,"path":3401,"stem":3402},"Тестування компонентів діаграм","\u002Ftest-components","98.test-components",{"id":3404,"title":1901,"body":3405,"description":15875,"extension":15876,"links":15877,"meta":15878,"navigation":3618,"path":1902,"seo":15879,"stem":1903,"__hash__":15880},"docs\u002F02.cpp\u002F47.c-style-files.md",{"type":3406,"value":3407,"toc":15810},"minimark",[3408,3412,3417,3421,3428,3477,3481,3492,3495,3499,3506,3512,3515,3533,3544,3572,3581,3667,3678,3680,3684,3701,3707,3742,3752,3755,3793,3795,3799,3809,3823,3826,3846,3853,3868,3870,3874,3881,3924,3942,3954,3959,4153,4167,4171,4180,4390,4425,4427,4431,4438,4521,4527,4586,4618,4634,4636,4640,4650,4673,4687,4893,4910,4912,4916,4927,4959,4962,4987,4991,4994,5241,5288,5292,5295,5751,5783,5797,5799,5803,5815,5845,5851,5855,5861,5883,5892,5915,5919,5926,6186,6253,6277,6281,6288,6736,6796,6798,6802,6816,6819,7025,7031,7033,7037,7047,7051,7073,7085,7113,7117,7146,7156,7160,7163,7582,7623,7627,7636,7899,7935,7949,7951,7955,7964,7968,8005,8031,8052,8058,8062,8092,8109,8113,8429,8463,8475,8479,8525,8527,8531,8542,8558,8578,8593,8600,8723,8727,8774,8806,8815,8819,8860,8867,8871,9342,9382,9386,9393,9965,10013,10020,10022,10026,10037,10054,10058,10098,10123,10182,10187,10194,10282,10286,10310,10316,10320,10343,10350,10354,10363,10640,10673,10677,10688,11207,11253,11257,11266,11798,11833,11835,11839,11844,11866,11872,11885,11889,11902,11930,12119,12142,12144,12148,12154,12219,12238,12555,12601,12603,12607,12627,12692,13036,13093,13095,13099,13102,14544,14643,14645,14649,14982,14984,14988,14992,14998,15229,15261,15263,15267,15395,15397,15401,15405,15502,15506,15622,15626,15680,15682,15686,15790,15806],[3409,3410,1901],"h1",{"id":3411},"робота-з-файлами-c-стиль-stdioh",[3413,3414,3416],"h2",{"id":3415},"що-таке-файл-і-навіщо-він-потрібен","Що таке файл і навіщо він потрібен",[3418,3419,3420],"p",{},"До цього моменту всі дані, з якими працювали наші програми, існували лише в оперативній пам'яті. Масиви, змінні, рядки — усе це зникає в момент завершення роботи програми. Це фундаментальне обмеження: якщо ви обчислили середню оцінку 200 студентів, записали в масив і вийшли з програми — результат втрачено назавжди.",[3418,3422,3423,3427],{},[3424,3425,3426],"strong",{},"Файл"," — це іменована область зовнішньої пам'яті (жорсткого диска, SSD, флеш-накопичувача), що зберігає дані незалежно від того, працює програма чи ні. Файл має чотири ключові характеристики:",[3429,3430,3431,3451,3465,3471],"ul",{},[3432,3433,3434,3437,3438,3442,3443,3446,3447,3450],"li",{},[3424,3435,3436],{},"Ім'я та розширення"," — унікальний ідентифікатор у файловій системі. ",[3439,3440,3441],"code",{},"myData.txt"," і ",[3439,3444,3445],{},"myData.dat"," — це ",[3424,3448,3449],{},"абсолютно різні"," файли, навіть якщо їхні назви збігаються.",[3432,3452,3453,3456,3457,3460,3461,3464],{},[3424,3454,3455],{},"Повний шлях"," — місцезнаходження файлу в ієрархії каталогів: ",[3439,3458,3459],{},"C:\\Users\\ivan\\documents\\data.txt"," або ",[3439,3462,3463],{},"\u002Fhome\u002Fivan\u002Fdata.txt",".",[3432,3466,3467,3470],{},[3424,3468,3469],{},"Розмір"," — кількість байтів даних. Обмежений лише ємністю носія.",[3432,3472,3473,3476],{},[3424,3474,3475],{},"Персистентність"," — дані зберігаються між запусками програм і навіть при вимкненні живлення (якщо програма коректно закрила файл).",[3478,3479,3480],"note",{},"Назва файлу складається з двох частин: власне назви та розширення, розділених крапкою. Розширення — лише конвенція, що сигналізує операційній системі та програмам про формат вмісту. Але для мови C жодного значення розширення не має — файл є просто послідовністю байтів.",[3418,3482,3483,3484,3487,3488,3491],{},"Дуже поширеними є дві операції: ",[3424,3485,3486],{},"читання"," — отримання збережених даних у програму, та ",[3424,3489,3490],{},"запис"," — збереження результатів роботи програми у файл для подальшого використання.",[3493,3494],"hr",{},[3413,3496,3498],{"id":3497},"потоки-та-буферизація","Потоки та буферизація",[3418,3500,3501,3502,3505],{},"C++ не має вбудованих операторів для роботи з файлами. Натомість уся взаємодія з файлами відбувається через ",[3424,3503,3504],{},"потоки"," (streams), реалізовані у стандартній бібліотеці.",[3418,3507,3508,3511],{},[3424,3509,3510],{},"Потік"," (stream) — це абстрактна послідовність байтів, що не залежить від конкретного пристрою. За допомогою потоків програма працює однаково з файлом на диску, клавіатурою, принтером або навіть іншою програмою — не знаючи, що саме знаходиться «на іншому кінці».",[3418,3513,3514],{},"Існує два типи потоків:",[3516,3517,3518,3528],"card-group",{},[3519,3520,3523,3524,3527],"card",{"icon":3521,"title":3522},"i-lucide-file-text","Текстовий потік","Послідовність символів, організована в рядки. Рядки відокремлені спеціальним символом нового рядка (",[3439,3525,3526],{},"'\\n'","). За передачі на екран деякі службові символи не відображаються. Зручний для даних, які людина має читати вручну.",[3519,3529,3532],{"icon":3530,"title":3531},"i-lucide-binary","Бінарний потік","Послідовність байтів довільних даних. Кожен байт у файлі відповідає рівно одному байту в пам'яті програми — без жодних перетворень. Ефективний для зберігання чисел, структур, зображень, звуку.",[3418,3534,3535,3536,3539,3540,3543],{},"Аби збільшити швидкість передачі даних, операційна система використовує ",[3424,3537,3538],{},"буфер"," — спеціальну область оперативної пам'яті. Замість того, щоб при кожному виклику ",[3439,3541,3542],{},"fwrite()"," фізично записувати байти на диск (що дуже повільно), ОС накопичує дані в буфері й відправляє їх на диск пакетами. Фактичний запис відбувається у трьох ситуаціях:",[3545,3546,3547,3553,3563],"ol",{},[3432,3548,3549,3552],{},[3424,3550,3551],{},"Буфер заповнений"," — автоматичне скидання накопичених даних.",[3432,3554,3555,3558,3559,3562],{},[3424,3556,3557],{},"Файл закрито"," (",[3439,3560,3561],{},"fclose()",") — примусове скидання перед звільненням ресурсів.",[3432,3564,3565,3571],{},[3424,3566,3567,3568],{},"Викликано ",[3439,3569,3570],{},"fflush()"," — ручне скидання у будь-який момент.",[3418,3573,3574],{},[3575,3576],"img",{"alt":3577,"className":3578,"src":3580},"Схема буферизації потоку даних при роботі з файлами",[3579],"diagram-img","\u002Fimages\u002Fcpp\u002Fc-style-files\u002F01.jpg",[3582,3583,3584],"plant-uml",{},[3585,3586,3591],"pre",{"className":3587,"code":3588,"language":3589,"meta":3590,"style":3590},"language-plantuml shiki shiki-themes light-plus dark-plus dark-plus","@startuml\nskinparam style plain\nskinparam backgroundColor #ffffff\n\nactor \"Програма\" as Prog\ndatabase \"Буфер в ОЗУ\" as Buf\ndatabase \"Диск (Файл)\" as Disk\n\nProg -> Buf : 1. Запис даних (швидко)\nnote right of Prog: Дані накопичуються\\nв ОЗУ\nBuf -> Disk : 2. Скидання буфера (повільно)\\n- Буфер повний\\n- fclose()\\n- fflush()\n@enduml\n","plantuml","",[3439,3592,3593,3601,3607,3613,3620,3626,3632,3638,3643,3649,3655,3661],{"__ignoreMap":3590},[3594,3595,3598],"span",{"class":3596,"line":3597},"line",1,[3594,3599,3600],{},"@startuml\n",[3594,3602,3604],{"class":3596,"line":3603},2,[3594,3605,3606],{},"skinparam style plain\n",[3594,3608,3610],{"class":3596,"line":3609},3,[3594,3611,3612],{},"skinparam backgroundColor #ffffff\n",[3594,3614,3616],{"class":3596,"line":3615},4,[3594,3617,3619],{"emptyLinePlaceholder":3618},true,"\n",[3594,3621,3623],{"class":3596,"line":3622},5,[3594,3624,3625],{},"actor \"Програма\" as Prog\n",[3594,3627,3629],{"class":3596,"line":3628},6,[3594,3630,3631],{},"database \"Буфер в ОЗУ\" as Buf\n",[3594,3633,3635],{"class":3596,"line":3634},7,[3594,3636,3637],{},"database \"Диск (Файл)\" as Disk\n",[3594,3639,3641],{"class":3596,"line":3640},8,[3594,3642,3619],{"emptyLinePlaceholder":3618},[3594,3644,3646],{"class":3596,"line":3645},9,[3594,3647,3648],{},"Prog -> Buf : 1. Запис даних (швидко)\n",[3594,3650,3652],{"class":3596,"line":3651},10,[3594,3653,3654],{},"note right of Prog: Дані накопичуються\\nв ОЗУ\n",[3594,3656,3658],{"class":3596,"line":3657},11,[3594,3659,3660],{},"Buf -> Disk : 2. Скидання буфера (повільно)\\n- Буфер повний\\n- fclose()\\n- fflush()\n",[3594,3662,3664],{"class":3596,"line":3663},12,[3594,3665,3666],{},"@enduml\n",[3668,3669,3670,3671,3673,3674,3677],"caution",{},"Якщо програма аварійно завершується без виклику ",[3439,3672,3561],{},", вміст буфера може ",[3424,3675,3676],{},"не потрапити на диск",". Дані в буфері, що не були скинуті, втрачаються безповоротно. Завжди закривайте файли явно перед виходом із програми.",[3493,3679],{},[3413,3681,3683],{"id":3682},"структура-file-та-підключення-бібліотеки","Структура FILE та підключення бібліотеки",[3418,3685,3686,3687,3692,3693,3696,3697,3700],{},"У мові C класичний механізм роботи з файлами базується на бібліотеці ",[3424,3688,3689],{},[3439,3690,3691],{},"\u003Cstdio.h>"," (у C++ підключається як ",[3439,3694,3695],{},"\u003Ccstdio>","). Ця бібліотека надає структуру ",[3439,3698,3699],{},"FILE"," та набір функцій для роботи з нею.",[3418,3702,3703,3704,3706],{},"Структура ",[3439,3705,3699],{}," — це непрозора (opaque) структура, поля якої приховані від програміста навмисно: ви не повинні знати деталей реалізації, щоб не залежати від конкретного компілятора чи платформи. Внутрішньо вона містить:",[3708,3709,3710,3728,3733,3737],"field-group",{},[3711,3712,3715,3716,3719,3720,3723,3724,3727],"field",{"name":3713,"type":3714},"Дескриптор файлу","int","Унікальний числовий ідентифікатор, який операційна система призначає відкритому файлу. У Unix-подібних системах: ",[3439,3717,3718],{},"0"," — stdin, ",[3439,3721,3722],{},"1"," — stdout, ",[3439,3725,3726],{},"2"," — stderr.",[3711,3729,3732],{"name":3730,"type":3731},"Покажчик буфера","unsigned char\\*","Адреса поточного байта в буфері вводу\u002Fвиводу. Зсувається при кожній операції читання або запису.",[3711,3734,3736],{"name":3735,"type":3714},"Лічильник байтів","Кількість байтів, що залишилися в буфері (при читанні) або вільних місць (при записі).",[3711,3738,3741],{"name":3739,"type":3740},"Режим і стан","unsigned short","Прапорці режиму відкриття (читання\u002Fзапис\u002Fбінарний), прапорець кінця файлу (EOF), прапорець помилки.",[3478,3743,3744,3745,3747,3748,3751],{},"Безпосередньо звертатися до полів ",[3439,3746,3699],{}," не потрібно і не варто — вони залежать від реалізації та компілятора. Уся взаємодія з файлом відбувається виключно через покажчик ",[3439,3749,3750],{},"FILE*"," і бібліотечні функції.",[3418,3753,3754],{},"Для підключення бібліотеки у C++ використовується:",[3585,3756,3762],{"className":3757,"code":3758,"filename":3759,"language":3760,"meta":3761,"style":3590},"language-cpp shiki shiki-themes light-plus dark-plus dark-plus","#include \u003Ccstdio>   \u002F\u002F C++ обгортка над stdio.h (рекомендовано в C++)\n\u002F\u002F або\n#include \u003Cstdio.h>  \u002F\u002F класичний C-заголовок (також працює в C++)\n","Main.cpp","cpp","showLineNumbers",[3439,3763,3764,3778,3783],{"__ignoreMap":3590},[3594,3765,3766,3770,3774],{"class":3596,"line":3597},[3594,3767,3769],{"class":3768},"s8xlr","#include",[3594,3771,3773],{"class":3772},"sbdoH"," \u003Ccstdio>",[3594,3775,3777],{"class":3776},"spJ8K","   \u002F\u002F C++ обгортка над stdio.h (рекомендовано в C++)\n",[3594,3779,3780],{"class":3596,"line":3603},[3594,3781,3782],{"class":3776},"\u002F\u002F або\n",[3594,3784,3785,3787,3790],{"class":3596,"line":3609},[3594,3786,3769],{"class":3768},[3594,3788,3789],{"class":3772}," \u003Cstdio.h>",[3594,3791,3792],{"class":3776},"  \u002F\u002F класичний C-заголовок (також працює в C++)\n",[3493,3794],{},[3413,3796,3798],{"id":3797},"оголошення-файлового-покажчика","Оголошення файлового покажчика",[3418,3800,3801,3802,3805,3806,3808],{},"Перший крок роботи з будь-яким файлом — оголошення ",[3424,3803,3804],{},"файлового покажчика"," (file pointer). Це змінна типу ",[3439,3807,3750],{},", через яку надалі виконуватимуться всі операції з файлом.",[3585,3810,3812],{"className":3757,"code":3811,"language":3760,"meta":3590,"style":3590},"FILE* ім'я_покажчика;\n",[3439,3813,3814],{"__ignoreMap":3590},[3594,3815,3816,3820],{"class":3596,"line":3597},[3594,3817,3819],{"class":3818},"sHH4Y","FILE* ім",[3594,3821,3822],{"class":3772},"'я_покажчика;\n",[3418,3824,3825],{},"Якщо програма працює з кількома файлами одночасно — оголошується відповідна кількість покажчиків:",[3585,3827,3829],{"className":3757,"code":3828,"language":3760,"meta":3590,"style":3590},"FILE* inputFile;\nFILE* outputFile;\nFILE* logFile;\n",[3439,3830,3831,3836,3841],{"__ignoreMap":3590},[3594,3832,3833],{"class":3596,"line":3597},[3594,3834,3835],{"class":3818},"FILE* inputFile;\n",[3594,3837,3838],{"class":3596,"line":3603},[3594,3839,3840],{"class":3818},"FILE* outputFile;\n",[3594,3842,3843],{"class":3596,"line":3609},[3594,3844,3845],{"class":3818},"FILE* logFile;\n",[3418,3847,3848,3849,3852],{},"Самого лише оголошення недостатньо: покажчик треба ",[3424,3850,3851],{},"ініціалізувати"," через функцію відкриття файлу. До ініціалізації покажчик містить невизначене значення і використовувати його у файлових функціях категорично не можна.",[3854,3855,3856,3857,3860,3861,3860,3864,3867],"tip",{},"За угодою прийнятого в курсі стилю (camelCase) файлові покажчики іменуються так само, як і звичайні змінні: ",[3439,3858,3859],{},"inputFile",", ",[3439,3862,3863],{},"outputFile",[3439,3865,3866],{},"dataFile",". Це відображає їхню природу — вони є «посередниками» для доступу до ресурсу.",[3493,3869],{},[3413,3871,3873],{"id":3872},"відкриття-файлу-функція-fopen","Відкриття файлу: функція fopen",[3418,3875,3876,3877,3880],{},"Функція ",[3439,3878,3879],{},"fopen()"," створює зв'язок між файловим покажчиком у програмі і фізичним файлом на диску. Її синтаксис:",[3585,3882,3884],{"className":3757,"code":3883,"language":3760,"meta":3590,"style":3590},"FILE* fopen(const char* filename, const char* mode);\n",[3439,3885,3886],{"__ignoreMap":3590},[3594,3887,3888,3891,3895,3899,3902,3905,3908,3912,3914,3916,3918,3921],{"class":3596,"line":3597},[3594,3889,3699],{"class":3890},"sN1BT",[3594,3892,3894],{"class":3893},"su1O8","*",[3594,3896,3898],{"class":3897},"s8Opu"," fopen",[3594,3900,3901],{"class":3818},"(",[3594,3903,3904],{"class":3893},"const",[3594,3906,3907],{"class":3893}," char*",[3594,3909,3911],{"class":3910},"siwwj"," filename",[3594,3913,3860],{"class":3818},[3594,3915,3904],{"class":3893},[3594,3917,3907],{"class":3893},[3594,3919,3920],{"class":3910}," mode",[3594,3922,3923],{"class":3818},");\n",[3429,3925,3926,3934],{},[3432,3927,3928,3933],{},[3424,3929,3930],{},[3439,3931,3932],{},"filename"," — ім'я файлу або повний шлях до нього (рядок C-style у лапках).",[3432,3935,3936,3941],{},[3424,3937,3938],{},[3439,3939,3940],{},"mode"," — рядок режиму відкриття, що визначає дозволені операції.",[3418,3943,3944,3945,3947,3948,3953],{},"Функція повертає покажчик на структуру ",[3439,3946,3699],{}," при успіху або ",[3424,3949,3950],{},[3439,3951,3952],{},"NULL"," при невдачі.",[3955,3956,3958],"h3",{"id":3957},"режими-відкриття","Режими відкриття",[3960,3961,3962,3983],"table",{},[3963,3964,3965],"thead",{},[3966,3967,3968,3973,3977,3980],"tr",{},[3969,3970,3972],"th",{"align":3971},"center","Режим",[3969,3974,3976],{"align":3975},"left","Дія",[3969,3978,3979],{"align":3975},"Якщо файл існує",[3969,3981,3982],{"align":3975},"Якщо файл не існує",[3984,3985,3986,4003,4022,4037,4051,4066,4080,4094,4110,4124,4138],"tbody",{},[3966,3987,3988,3994,3997,4000],{},[3989,3990,3991],"td",{"align":3971},[3439,3992,3993],{},"\"r\"",[3989,3995,3996],{"align":3975},"Читання (текст)",[3989,3998,3999],{"align":3975},"Відкриває",[3989,4001,4002],{"align":3975},"Повертає NULL",[3966,4004,4005,4010,4013,4019],{},[3989,4006,4007],{"align":3971},[3439,4008,4009],{},"\"w\"",[3989,4011,4012],{"align":3975},"Запис (текст)",[3989,4014,4015,4018],{"align":3975},[3424,4016,4017],{},"Очищає"," вміст",[3989,4020,4021],{"align":3975},"Створює новий",[3966,4023,4024,4029,4032,4035],{},[3989,4025,4026],{"align":3971},[3439,4027,4028],{},"\"a\"",[3989,4030,4031],{"align":3975},"Дозапис у кінець (текст)",[3989,4033,4034],{"align":3975},"Зберігає вміст",[3989,4036,4021],{"align":3975},[3966,4038,4039,4044,4047,4049],{},[3989,4040,4041],{"align":3971},[3439,4042,4043],{},"\"r+\"",[3989,4045,4046],{"align":3975},"Читання + запис (текст)",[3989,4048,3999],{"align":3975},[3989,4050,4002],{"align":3975},[3966,4052,4053,4058,4060,4064],{},[3989,4054,4055],{"align":3971},[3439,4056,4057],{},"\"w+\"",[3989,4059,4046],{"align":3975},[3989,4061,4062,4018],{"align":3975},[3424,4063,4017],{},[3989,4065,4021],{"align":3975},[3966,4067,4068,4073,4076,4078],{},[3989,4069,4070],{"align":3971},[3439,4071,4072],{},"\"a+\"",[3989,4074,4075],{"align":3975},"Читання + дозапис (текст)",[3989,4077,4034],{"align":3975},[3989,4079,4021],{"align":3975},[3966,4081,4082,4087,4090,4092],{},[3989,4083,4084],{"align":3971},[3439,4085,4086],{},"\"rb\"",[3989,4088,4089],{"align":3975},"Читання (бінарний)",[3989,4091,3999],{"align":3975},[3989,4093,4002],{"align":3975},[3966,4095,4096,4101,4104,4108],{},[3989,4097,4098],{"align":3971},[3439,4099,4100],{},"\"wb\"",[3989,4102,4103],{"align":3975},"Запис (бінарний)",[3989,4105,4106,4018],{"align":3975},[3424,4107,4017],{},[3989,4109,4021],{"align":3975},[3966,4111,4112,4117,4120,4122],{},[3989,4113,4114],{"align":3971},[3439,4115,4116],{},"\"ab\"",[3989,4118,4119],{"align":3975},"Дозапис (бінарний)",[3989,4121,4034],{"align":3975},[3989,4123,4021],{"align":3975},[3966,4125,4126,4131,4134,4136],{},[3989,4127,4128],{"align":3971},[3439,4129,4130],{},"\"r+b\"",[3989,4132,4133],{"align":3975},"Читання + запис (бінарний)",[3989,4135,3999],{"align":3975},[3989,4137,4002],{"align":3975},[3966,4139,4140,4145,4147,4151],{},[3989,4141,4142],{"align":3971},[3439,4143,4144],{},"\"w+b\"",[3989,4146,4133],{"align":3975},[3989,4148,4149,4018],{"align":3975},[3424,4150,4017],{},[3989,4152,4021],{"align":3975},[4154,4155,4156,4157,4159,4160,4163,4164,4166],"warning",{},"Режим ",[3439,4158,4009],{}," для ",[3424,4161,4162],{},"існуючого"," файлу знищує його попередній вміст без попередження. Якщо вам потрібно додати дані в кінець, а не перезаписати файл — використовуйте режим ",[3439,4165,4028],{}," (append).",[3955,4168,4170],{"id":4169},"приклад-відкриття-файлу-з-перевіркою-помилок","Приклад відкриття файлу з перевіркою помилок",[3418,4172,4173,4174,4176,4177,4179],{},"Обов'язковою практикою є перевірка результату ",[3439,4175,3879],{},". Функція може повернути ",[3439,4178,3952],{}," з різних причин: файл не знайдено, недостатньо прав доступу, диск заповнений, помилка файлової системи.",[3585,4181,4184],{"className":3757,"code":4182,"filename":4183,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n#include \u003Ccstdlib>\n\nint main()\n{\n    FILE* dataFile;\n\n    \u002F\u002F Відкриваємо файл для запису (текстовий режим)\n    dataFile = fopen(\"students.txt\", \"w\");\n\n    if (dataFile == NULL)\n    {\n        fprintf(stderr, \"Помилка: не вдалося відкрити файл students.txt\\n\");\n        return 1;\n    }\n\n    \u002F\u002F Файл успішно відкрито — записуємо дані\n    fprintf(dataFile, \"Іван Петренко, 20, 4.5\\n\");\n    fprintf(dataFile, \"Олена Коваль, 19, 4.8\\n\");\n\n    fclose(dataFile);\n    return 0;\n}\n","OpenFile.cpp",[3439,4185,4186,4193,4200,4204,4214,4219,4224,4228,4233,4252,4256,4269,4274,4295,4308,4314,4319,4325,4343,4359,4364,4373,4384],{"__ignoreMap":3590},[3594,4187,4188,4190],{"class":3596,"line":3597},[3594,4189,3769],{"class":3768},[3594,4191,4192],{"class":3772}," \u003Ccstdio>\n",[3594,4194,4195,4197],{"class":3596,"line":3603},[3594,4196,3769],{"class":3768},[3594,4198,4199],{"class":3772}," \u003Ccstdlib>\n",[3594,4201,4202],{"class":3596,"line":3609},[3594,4203,3619],{"emptyLinePlaceholder":3618},[3594,4205,4206,4208,4211],{"class":3596,"line":3615},[3594,4207,3714],{"class":3893},[3594,4209,4210],{"class":3897}," main",[3594,4212,4213],{"class":3818},"()\n",[3594,4215,4216],{"class":3596,"line":3622},[3594,4217,4218],{"class":3818},"{\n",[3594,4220,4221],{"class":3596,"line":3628},[3594,4222,4223],{"class":3818},"    FILE* dataFile;\n",[3594,4225,4226],{"class":3596,"line":3634},[3594,4227,3619],{"emptyLinePlaceholder":3618},[3594,4229,4230],{"class":3596,"line":3640},[3594,4231,4232],{"class":3776},"    \u002F\u002F Відкриваємо файл для запису (текстовий режим)\n",[3594,4234,4235,4238,4241,4243,4246,4248,4250],{"class":3596,"line":3645},[3594,4236,4237],{"class":3818},"    dataFile = ",[3594,4239,4240],{"class":3897},"fopen",[3594,4242,3901],{"class":3818},[3594,4244,4245],{"class":3772},"\"students.txt\"",[3594,4247,3860],{"class":3818},[3594,4249,4009],{"class":3772},[3594,4251,3923],{"class":3818},[3594,4253,4254],{"class":3596,"line":3651},[3594,4255,3619],{"emptyLinePlaceholder":3618},[3594,4257,4258,4261,4264,4266],{"class":3596,"line":3657},[3594,4259,4260],{"class":3768},"    if",[3594,4262,4263],{"class":3818}," (dataFile == ",[3594,4265,3952],{"class":3893},[3594,4267,4268],{"class":3818},")\n",[3594,4270,4271],{"class":3596,"line":3663},[3594,4272,4273],{"class":3818},"    {\n",[3594,4275,4277,4280,4283,4286,4290,4293],{"class":3596,"line":4276},13,[3594,4278,4279],{"class":3897},"        fprintf",[3594,4281,4282],{"class":3818},"(stderr, ",[3594,4284,4285],{"class":3772},"\"Помилка: не вдалося відкрити файл students.txt",[3594,4287,4289],{"class":4288},"sjcCO","\\n",[3594,4291,4292],{"class":3772},"\"",[3594,4294,3923],{"class":3818},[3594,4296,4298,4301,4305],{"class":3596,"line":4297},14,[3594,4299,4300],{"class":3768},"        return",[3594,4302,4304],{"class":4303},"sJj4R"," 1",[3594,4306,4307],{"class":3818},";\n",[3594,4309,4311],{"class":3596,"line":4310},15,[3594,4312,4313],{"class":3818},"    }\n",[3594,4315,4317],{"class":3596,"line":4316},16,[3594,4318,3619],{"emptyLinePlaceholder":3618},[3594,4320,4322],{"class":3596,"line":4321},17,[3594,4323,4324],{"class":3776},"    \u002F\u002F Файл успішно відкрито — записуємо дані\n",[3594,4326,4328,4331,4334,4337,4339,4341],{"class":3596,"line":4327},18,[3594,4329,4330],{"class":3897},"    fprintf",[3594,4332,4333],{"class":3818},"(dataFile, ",[3594,4335,4336],{"class":3772},"\"Іван Петренко, 20, 4.5",[3594,4338,4289],{"class":4288},[3594,4340,4292],{"class":3772},[3594,4342,3923],{"class":3818},[3594,4344,4346,4348,4350,4353,4355,4357],{"class":3596,"line":4345},19,[3594,4347,4330],{"class":3897},[3594,4349,4333],{"class":3818},[3594,4351,4352],{"class":3772},"\"Олена Коваль, 19, 4.8",[3594,4354,4289],{"class":4288},[3594,4356,4292],{"class":3772},[3594,4358,3923],{"class":3818},[3594,4360,4362],{"class":3596,"line":4361},20,[3594,4363,3619],{"emptyLinePlaceholder":3618},[3594,4365,4367,4370],{"class":3596,"line":4366},21,[3594,4368,4369],{"class":3897},"    fclose",[3594,4371,4372],{"class":3818},"(dataFile);\n",[3594,4374,4376,4379,4382],{"class":3596,"line":4375},22,[3594,4377,4378],{"class":3768},"    return",[3594,4380,4381],{"class":4303}," 0",[3594,4383,4307],{"class":3818},[3594,4385,4387],{"class":3596,"line":4386},23,[3594,4388,4389],{"class":3818},"}\n",[4391,4392,4394,4409,4417],"terminal-preview",{"title":4393},".\u002FOpenFile",[4395,4396,4398,4403,4404],"div",{"className":4397},[3596],[3594,4399,4402],{"className":4400},[4401],"opacity-40","$"," ",[3424,4405,4408],{"className":4406},[4407],"font-bold","g++ -std=c++17 OpenFile.cpp -o OpenFile && .\u002FOpenFile",[4395,4410,4412],{"className":4411},[3596],[3594,4413,4416],{"className":4414},[4415,4407],"text-green-400","Execution finished with exit code 0",[4395,4418,4420],{"className":4419},[3596],[3594,4421,4424],{"className":4422},[4423],"text-gray-400","Файл students.txt створено у поточній директорії.",[3493,4426],{},[3413,4428,4430],{"id":4429},"стандартні-потоки-та-файловий-дескриптор","Стандартні потоки та файловий дескриптор",[3418,4432,4433],{},[3575,4434],{"alt":4435,"className":4436,"src":4437},"Схема стандартних потоків вводу та виводу stdin stdout stderr",[3579],"\u002Fimages\u002Fcpp\u002Fc-style-files\u002F02.svg",[3582,4439,4440],{},[3585,4441,4443],{"className":3587,"code":4442,"language":3589,"meta":3590,"style":3590},"@startuml\nskinparam style plain\nskinparam backgroundColor #ffffff\n\nnode \"Пристрої вводу\u002Fвиводу\" {\n  [Клавіатура] as Kbd\n  [Екран консолі] as Screen\n}\n\nnode \"Процес програми\" {\n  [Стандартні потоки] as Process\n}\n\nKbd --> Process : \"stdin (дескриптор 0)\"\nProcess --> Screen : \"stdout (дескриптор 1)\"\nProcess --> Screen : \"stderr (дескриптор 2)\"\n@enduml\n",[3439,4444,4445,4449,4453,4457,4461,4466,4471,4476,4480,4484,4489,4494,4498,4502,4507,4512,4517],{"__ignoreMap":3590},[3594,4446,4447],{"class":3596,"line":3597},[3594,4448,3600],{},[3594,4450,4451],{"class":3596,"line":3603},[3594,4452,3606],{},[3594,4454,4455],{"class":3596,"line":3609},[3594,4456,3612],{},[3594,4458,4459],{"class":3596,"line":3615},[3594,4460,3619],{"emptyLinePlaceholder":3618},[3594,4462,4463],{"class":3596,"line":3622},[3594,4464,4465],{},"node \"Пристрої вводу\u002Fвиводу\" {\n",[3594,4467,4468],{"class":3596,"line":3628},[3594,4469,4470],{},"  [Клавіатура] as Kbd\n",[3594,4472,4473],{"class":3596,"line":3634},[3594,4474,4475],{},"  [Екран консолі] as Screen\n",[3594,4477,4478],{"class":3596,"line":3640},[3594,4479,4389],{},[3594,4481,4482],{"class":3596,"line":3645},[3594,4483,3619],{"emptyLinePlaceholder":3618},[3594,4485,4486],{"class":3596,"line":3651},[3594,4487,4488],{},"node \"Процес програми\" {\n",[3594,4490,4491],{"class":3596,"line":3657},[3594,4492,4493],{},"  [Стандартні потоки] as Process\n",[3594,4495,4496],{"class":3596,"line":3663},[3594,4497,4389],{},[3594,4499,4500],{"class":3596,"line":4276},[3594,4501,3619],{"emptyLinePlaceholder":3618},[3594,4503,4504],{"class":3596,"line":4297},[3594,4505,4506],{},"Kbd --> Process : \"stdin (дескриптор 0)\"\n",[3594,4508,4509],{"class":3596,"line":4310},[3594,4510,4511],{},"Process --> Screen : \"stdout (дескриптор 1)\"\n",[3594,4513,4514],{"class":3596,"line":4316},[3594,4515,4516],{},"Process --> Screen : \"stderr (дескриптор 2)\"\n",[3594,4518,4519],{"class":3596,"line":4321},[3594,4520,3666],{},[3418,4522,4523,4524,4526],{},"В операційній системі завжди відкриті три стандартні потоки, що доступні будь-якій програмі без явного ",[3439,4525,3879],{},":",[3960,4528,4529,4542],{},[3963,4530,4531],{},[3966,4532,4533,4536,4539],{},[3969,4534,4535],{"align":3971},"Дескриптор",[3969,4537,4538],{"align":3975},"Символьна назва",[3969,4540,4541],{"align":3975},"Призначення",[3984,4543,4544,4558,4572],{},[3966,4545,4546,4550,4555],{},[3989,4547,4548],{"align":3971},[3439,4549,3718],{},[3989,4551,4552],{"align":3975},[3439,4553,4554],{},"stdin",[3989,4556,4557],{"align":3975},"Стандартний ввід (клавіатура)",[3966,4559,4560,4564,4569],{},[3989,4561,4562],{"align":3971},[3439,4563,3722],{},[3989,4565,4566],{"align":3975},[3439,4567,4568],{},"stdout",[3989,4570,4571],{"align":3975},"Стандартний вивід (екран)",[3966,4573,4574,4578,4583],{},[3989,4575,4576],{"align":3971},[3439,4577,3726],{},[3989,4579,4580],{"align":3975},[3439,4581,4582],{},"stderr",[3989,4584,4585],{"align":3975},"Стандартний потік помилок (екран)",[3418,4587,4588,4589,3442,4592,4595,4596,3442,4599,4602,4603,3442,4606,4609,4610,4613,4614,4617],{},"Це означає, що ",[3439,4590,4591],{},"printf(\"Hello\")",[3439,4593,4594],{},"fprintf(stdout, \"Hello\")"," — еквівалентні виклики. Так само ",[3439,4597,4598],{},"scanf(\"%d\", &n)",[3439,4600,4601],{},"fscanf(stdin, \"%d\", &n)"," роблять те саме. Функції ",[3439,4604,4605],{},"fprintf",[3439,4607,4608],{},"fscanf"," є узагальненнями ",[3439,4611,4612],{},"printf","\u002F",[3439,4615,4616],{},"scanf"," для довільного потоку.",[3478,4619,4620,4622,4623,4625,4626,4629,4630,4633],{},[3439,4621,4582],{}," — окремий від ",[3439,4624,4568],{}," потік. Це дозволяє перенаправляти корисний вивід програми у файл (",[3439,4627,4628],{},".\u002Fprogram > output.txt","), а повідомлення про помилки все одно бачити в терміналі. Завжди використовуйте ",[3439,4631,4632],{},"fprintf(stderr, ...)"," для діагностичних повідомлень.",[3493,4635],{},[3413,4637,4639],{"id":4638},"закриття-файлу-функція-fclose","Закриття файлу: функція fclose",[3418,4641,4642,4643,4646,4647,4649],{},"Після завершення роботи з файлом його ",[3424,4644,4645],{},"обов'язково"," потрібно закрити. Функція ",[3439,4648,3561],{}," скидає буфер на диск, звільняє системні ресурси (файловий дескриптор) і розриває зв'язок між покажчиком і файлом.",[3585,4651,4653],{"className":3757,"code":4652,"language":3760,"meta":3590,"style":3590},"int fclose(FILE* stream);\n",[3439,4654,4655],{"__ignoreMap":3590},[3594,4656,4657,4659,4662,4664,4666,4668,4671],{"class":3596,"line":3597},[3594,4658,3714],{"class":3893},[3594,4660,4661],{"class":3897}," fclose",[3594,4663,3901],{"class":3818},[3594,4665,3699],{"class":3890},[3594,4667,3894],{"class":3893},[3594,4669,4670],{"class":3910}," stream",[3594,4672,3923],{"class":3818},[3418,4674,4675,4676,4678,4679,4682,4683,4686],{},"Повертає ",[3439,4677,3718],{}," при успіху і ",[3439,4680,4681],{},"EOF"," (зазвичай ",[3439,4684,4685],{},"-1",") при помилці.",[3585,4688,4691],{"className":3757,"code":4689,"filename":4690,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nint main()\n{\n    FILE* logFile;\n    int   closeResult;\n\n    logFile = fopen(\"app.log\", \"w\");\n    if (logFile == NULL)\n    {\n        fprintf(stderr, \"Помилка відкриття файлу\\n\");\n        return 1;\n    }\n\n    fprintf(logFile, \"Програма запущена\\n\");\n\n    \u002F\u002F Явно закриваємо і перевіряємо результат\n    closeResult = fclose(logFile);\n    if (closeResult != 0)\n    {\n        fprintf(stderr, \"Помилка закриття файлу\\n\");\n        return 1;\n    }\n\n    return 0;\n}\n","CloseExample.cpp",[3439,4692,4693,4699,4703,4711,4715,4720,4728,4732,4750,4761,4765,4780,4788,4792,4796,4812,4816,4821,4832,4843,4847,4862,4870,4874,4879,4888],{"__ignoreMap":3590},[3594,4694,4695,4697],{"class":3596,"line":3597},[3594,4696,3769],{"class":3768},[3594,4698,4192],{"class":3772},[3594,4700,4701],{"class":3596,"line":3603},[3594,4702,3619],{"emptyLinePlaceholder":3618},[3594,4704,4705,4707,4709],{"class":3596,"line":3609},[3594,4706,3714],{"class":3893},[3594,4708,4210],{"class":3897},[3594,4710,4213],{"class":3818},[3594,4712,4713],{"class":3596,"line":3615},[3594,4714,4218],{"class":3818},[3594,4716,4717],{"class":3596,"line":3622},[3594,4718,4719],{"class":3818},"    FILE* logFile;\n",[3594,4721,4722,4725],{"class":3596,"line":3628},[3594,4723,4724],{"class":3893},"    int",[3594,4726,4727],{"class":3818},"   closeResult;\n",[3594,4729,4730],{"class":3596,"line":3634},[3594,4731,3619],{"emptyLinePlaceholder":3618},[3594,4733,4734,4737,4739,4741,4744,4746,4748],{"class":3596,"line":3640},[3594,4735,4736],{"class":3818},"    logFile = ",[3594,4738,4240],{"class":3897},[3594,4740,3901],{"class":3818},[3594,4742,4743],{"class":3772},"\"app.log\"",[3594,4745,3860],{"class":3818},[3594,4747,4009],{"class":3772},[3594,4749,3923],{"class":3818},[3594,4751,4752,4754,4757,4759],{"class":3596,"line":3645},[3594,4753,4260],{"class":3768},[3594,4755,4756],{"class":3818}," (logFile == ",[3594,4758,3952],{"class":3893},[3594,4760,4268],{"class":3818},[3594,4762,4763],{"class":3596,"line":3651},[3594,4764,4273],{"class":3818},[3594,4766,4767,4769,4771,4774,4776,4778],{"class":3596,"line":3657},[3594,4768,4279],{"class":3897},[3594,4770,4282],{"class":3818},[3594,4772,4773],{"class":3772},"\"Помилка відкриття файлу",[3594,4775,4289],{"class":4288},[3594,4777,4292],{"class":3772},[3594,4779,3923],{"class":3818},[3594,4781,4782,4784,4786],{"class":3596,"line":3663},[3594,4783,4300],{"class":3768},[3594,4785,4304],{"class":4303},[3594,4787,4307],{"class":3818},[3594,4789,4790],{"class":3596,"line":4276},[3594,4791,4313],{"class":3818},[3594,4793,4794],{"class":3596,"line":4297},[3594,4795,3619],{"emptyLinePlaceholder":3618},[3594,4797,4798,4800,4803,4806,4808,4810],{"class":3596,"line":4310},[3594,4799,4330],{"class":3897},[3594,4801,4802],{"class":3818},"(logFile, ",[3594,4804,4805],{"class":3772},"\"Програма запущена",[3594,4807,4289],{"class":4288},[3594,4809,4292],{"class":3772},[3594,4811,3923],{"class":3818},[3594,4813,4814],{"class":3596,"line":4316},[3594,4815,3619],{"emptyLinePlaceholder":3618},[3594,4817,4818],{"class":3596,"line":4321},[3594,4819,4820],{"class":3776},"    \u002F\u002F Явно закриваємо і перевіряємо результат\n",[3594,4822,4823,4826,4829],{"class":3596,"line":4327},[3594,4824,4825],{"class":3818},"    closeResult = ",[3594,4827,4828],{"class":3897},"fclose",[3594,4830,4831],{"class":3818},"(logFile);\n",[3594,4833,4834,4836,4839,4841],{"class":3596,"line":4345},[3594,4835,4260],{"class":3768},[3594,4837,4838],{"class":3818}," (closeResult != ",[3594,4840,3718],{"class":4303},[3594,4842,4268],{"class":3818},[3594,4844,4845],{"class":3596,"line":4361},[3594,4846,4273],{"class":3818},[3594,4848,4849,4851,4853,4856,4858,4860],{"class":3596,"line":4366},[3594,4850,4279],{"class":3897},[3594,4852,4282],{"class":3818},[3594,4854,4855],{"class":3772},"\"Помилка закриття файлу",[3594,4857,4289],{"class":4288},[3594,4859,4292],{"class":3772},[3594,4861,3923],{"class":3818},[3594,4863,4864,4866,4868],{"class":3596,"line":4375},[3594,4865,4300],{"class":3768},[3594,4867,4304],{"class":4303},[3594,4869,4307],{"class":3818},[3594,4871,4872],{"class":3596,"line":4386},[3594,4873,4313],{"class":3818},[3594,4875,4877],{"class":3596,"line":4876},24,[3594,4878,3619],{"emptyLinePlaceholder":3618},[3594,4880,4882,4884,4886],{"class":3596,"line":4881},25,[3594,4883,4378],{"class":3768},[3594,4885,4381],{"class":4303},[3594,4887,4307],{"class":3818},[3594,4889,4891],{"class":3596,"line":4890},26,[3594,4892,4389],{"class":3818},[3854,4894,4895,4896,4898,4899,4902,4903,4905,4906,4909],{},"Після ",[3439,4897,3561],{}," покажчик ",[3439,4900,4901],{},"logFile"," стає «висячим» (dangling pointer) — він зберігає адресу вже звільненої структури. Хорошою практикою є присвоєння ",[3439,4904,3952],{}," після закриття: ",[3439,4907,4908],{},"logFile = NULL;",". Це запобігає випадковому повторному використанню закритого покажчика.",[3493,4911],{},[3413,4913,4915],{"id":4914},"форматований-запис-функція-fprintf","Форматований запис: функція fprintf",[3418,4917,4918,4919,4922,4923,4926],{},"Для запису текстових даних у файл використовується функція ",[3439,4920,4921],{},"fprintf()"," — повний аналог ",[3439,4924,4925],{},"printf()",", але першим параметром приймає файловий покажчик.",[3585,4928,4930],{"className":3757,"code":4929,"language":3760,"meta":3590,"style":3590},"int fprintf(FILE* stream, const char* format, ...);\n",[3439,4931,4932],{"__ignoreMap":3590},[3594,4933,4934,4936,4939,4941,4943,4945,4947,4949,4951,4953,4956],{"class":3596,"line":3597},[3594,4935,3714],{"class":3893},[3594,4937,4938],{"class":3897}," fprintf",[3594,4940,3901],{"class":3818},[3594,4942,3699],{"class":3890},[3594,4944,3894],{"class":3893},[3594,4946,4670],{"class":3910},[3594,4948,3860],{"class":3818},[3594,4950,3904],{"class":3893},[3594,4952,3907],{"class":3893},[3594,4954,4955],{"class":3910}," format",[3594,4957,4958],{"class":3818},", ...);\n",[3418,4960,4961],{},"Повертає кількість записаних символів при успіху або від'ємне значення при помилці.",[3418,4963,4964,4965,4967,4968,3860,4971,3860,4974,3860,4977,3860,4980,3860,4983,4986],{},"Рядок формату підтримує ті самі специфікатори, що й ",[3439,4966,4612],{},": ",[3439,4969,4970],{},"%d",[3439,4972,4973],{},"%f",[3439,4975,4976],{},"%s",[3439,4978,4979],{},"%c",[3439,4981,4982],{},"%ld",[3439,4984,4985],{},"%lf"," і т.д.",[3955,4988,4990],{"id":4989},"приклад-запис-масиву-у-текстовий-файл","Приклад: запис масиву у текстовий файл",[3418,4992,4993],{},"Збережемо масив із п'яти цілих чисел у файлі так, щоб кожен елемент розташовувався в новому рядку:",[3585,4995,4998],{"className":3757,"code":4996,"filename":4997,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nint main()\n{\n    FILE* dataFile;\n    int   numbers[5] = { 10, 25, 37, 42, 58 };\n\n    dataFile = fopen(\"numbers.txt\", \"w\");\n    if (dataFile == NULL)\n    {\n        fprintf(stderr, \"Помилка: файл не відкрито\\n\");\n        return 1;\n    }\n\n    \u002F\u002F Записуємо кожен елемент масиву в окремий рядок файлу\n    for (int i = 0; i \u003C 5; i++)\n    {\n        fprintf(dataFile, \"%d\\n\", numbers[i]);\n    }\n\n    fclose(dataFile);\n    dataFile = NULL;\n\n    fprintf(stdout, \"Дані успішно записано у numbers.txt\\n\");\n    return 0;\n}\n","WriteArray.cpp",[3439,4999,5000,5006,5010,5018,5022,5026,5068,5072,5089,5099,5103,5118,5126,5130,5134,5139,5161,5165,5187,5191,5195,5201,5209,5213,5229,5237],{"__ignoreMap":3590},[3594,5001,5002,5004],{"class":3596,"line":3597},[3594,5003,3769],{"class":3768},[3594,5005,4192],{"class":3772},[3594,5007,5008],{"class":3596,"line":3603},[3594,5009,3619],{"emptyLinePlaceholder":3618},[3594,5011,5012,5014,5016],{"class":3596,"line":3609},[3594,5013,3714],{"class":3893},[3594,5015,4210],{"class":3897},[3594,5017,4213],{"class":3818},[3594,5019,5020],{"class":3596,"line":3615},[3594,5021,4218],{"class":3818},[3594,5023,5024],{"class":3596,"line":3622},[3594,5025,4223],{"class":3818},[3594,5027,5028,5030,5033,5036,5039,5042,5045,5047,5050,5052,5055,5057,5060,5062,5065],{"class":3596,"line":3628},[3594,5029,4724],{"class":3893},[3594,5031,5032],{"class":3910},"   numbers",[3594,5034,5035],{"class":3818},"[",[3594,5037,5038],{"class":4303},"5",[3594,5040,5041],{"class":3818},"] = { ",[3594,5043,5044],{"class":4303},"10",[3594,5046,3860],{"class":3818},[3594,5048,5049],{"class":4303},"25",[3594,5051,3860],{"class":3818},[3594,5053,5054],{"class":4303},"37",[3594,5056,3860],{"class":3818},[3594,5058,5059],{"class":4303},"42",[3594,5061,3860],{"class":3818},[3594,5063,5064],{"class":4303},"58",[3594,5066,5067],{"class":3818}," };\n",[3594,5069,5070],{"class":3596,"line":3634},[3594,5071,3619],{"emptyLinePlaceholder":3618},[3594,5073,5074,5076,5078,5080,5083,5085,5087],{"class":3596,"line":3640},[3594,5075,4237],{"class":3818},[3594,5077,4240],{"class":3897},[3594,5079,3901],{"class":3818},[3594,5081,5082],{"class":3772},"\"numbers.txt\"",[3594,5084,3860],{"class":3818},[3594,5086,4009],{"class":3772},[3594,5088,3923],{"class":3818},[3594,5090,5091,5093,5095,5097],{"class":3596,"line":3645},[3594,5092,4260],{"class":3768},[3594,5094,4263],{"class":3818},[3594,5096,3952],{"class":3893},[3594,5098,4268],{"class":3818},[3594,5100,5101],{"class":3596,"line":3651},[3594,5102,4273],{"class":3818},[3594,5104,5105,5107,5109,5112,5114,5116],{"class":3596,"line":3657},[3594,5106,4279],{"class":3897},[3594,5108,4282],{"class":3818},[3594,5110,5111],{"class":3772},"\"Помилка: файл не відкрито",[3594,5113,4289],{"class":4288},[3594,5115,4292],{"class":3772},[3594,5117,3923],{"class":3818},[3594,5119,5120,5122,5124],{"class":3596,"line":3663},[3594,5121,4300],{"class":3768},[3594,5123,4304],{"class":4303},[3594,5125,4307],{"class":3818},[3594,5127,5128],{"class":3596,"line":4276},[3594,5129,4313],{"class":3818},[3594,5131,5132],{"class":3596,"line":4297},[3594,5133,3619],{"emptyLinePlaceholder":3618},[3594,5135,5136],{"class":3596,"line":4310},[3594,5137,5138],{"class":3776},"    \u002F\u002F Записуємо кожен елемент масиву в окремий рядок файлу\n",[3594,5140,5141,5144,5146,5148,5151,5153,5156,5158],{"class":3596,"line":4316},[3594,5142,5143],{"class":3768},"    for",[3594,5145,3558],{"class":3818},[3594,5147,3714],{"class":3893},[3594,5149,5150],{"class":3818}," i = ",[3594,5152,3718],{"class":4303},[3594,5154,5155],{"class":3818},"; i \u003C ",[3594,5157,5038],{"class":4303},[3594,5159,5160],{"class":3818},"; i++)\n",[3594,5162,5163],{"class":3596,"line":4321},[3594,5164,4273],{"class":3818},[3594,5166,5167,5169,5171,5173,5175,5177,5179,5181,5184],{"class":3596,"line":4327},[3594,5168,4279],{"class":3897},[3594,5170,4333],{"class":3818},[3594,5172,4292],{"class":3772},[3594,5174,4970],{"class":3910},[3594,5176,4289],{"class":4288},[3594,5178,4292],{"class":3772},[3594,5180,3860],{"class":3818},[3594,5182,5183],{"class":3910},"numbers",[3594,5185,5186],{"class":3818},"[i]);\n",[3594,5188,5189],{"class":3596,"line":4345},[3594,5190,4313],{"class":3818},[3594,5192,5193],{"class":3596,"line":4361},[3594,5194,3619],{"emptyLinePlaceholder":3618},[3594,5196,5197,5199],{"class":3596,"line":4366},[3594,5198,4369],{"class":3897},[3594,5200,4372],{"class":3818},[3594,5202,5203,5205,5207],{"class":3596,"line":4375},[3594,5204,4237],{"class":3818},[3594,5206,3952],{"class":3893},[3594,5208,4307],{"class":3818},[3594,5210,5211],{"class":3596,"line":4386},[3594,5212,3619],{"emptyLinePlaceholder":3618},[3594,5214,5215,5217,5220,5223,5225,5227],{"class":3596,"line":4876},[3594,5216,4330],{"class":3897},[3594,5218,5219],{"class":3818},"(stdout, ",[3594,5221,5222],{"class":3772},"\"Дані успішно записано у numbers.txt",[3594,5224,4289],{"class":4288},[3594,5226,4292],{"class":3772},[3594,5228,3923],{"class":3818},[3594,5230,5231,5233,5235],{"class":3596,"line":4881},[3594,5232,4378],{"class":3768},[3594,5234,4381],{"class":4303},[3594,5236,4307],{"class":3818},[3594,5238,5239],{"class":3596,"line":4890},[3594,5240,4389],{"class":3818},[4391,5242,5244,5253,5260,5263,5273,5276,5279,5282,5285],{"title":5243},".\u002FWriteArray",[4395,5245,5247,4403,5250],{"className":5246},[3596],[3594,5248,4402],{"className":5249},[4401],[3424,5251,5243],{"className":5252},[4407],[4395,5254,5256],{"className":5255},[3596],[3594,5257,5259],{"className":5258},[4415,4407],"Дані успішно записано у numbers.txt",[4395,5261],{"className":5262},[3596],[4395,5264,5266,4403,5269],{"className":5265},[3596],[3594,5267,4402],{"className":5268},[4401],[3424,5270,5272],{"className":5271},[4407],"cat numbers.txt",[4395,5274,5044],{"className":5275},[3596],[4395,5277,5049],{"className":5278},[3596],[4395,5280,5054],{"className":5281},[3596],[4395,5283,5059],{"className":5284},[3596],[4395,5286,5064],{"className":5287},[3596],[3955,5289,5291],{"id":5290},"запис-структур-у-текстовий-файл","Запис структур у текстовий файл",[3418,5293,5294],{},"У реальних програмах часто потрібно зберегти масив структур. Розглянемо приклад зі студентами:",[3585,5296,5299],{"className":3757,"code":5297,"filename":5298,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n#include \u003Ccstring>\n\nstruct Student\n{\n    char   name[50];\n    int    age;\n    double gpa;\n};\n\nint main()\n{\n    FILE*   dataFile;\n    Student students[3] = {\n        { \"Іван Петренко\", 20, 4.5 },\n        { \"Олена Коваль\",  19, 4.8 },\n        { \"Михайло Бойко\", 21, 3.9 }\n    };\n\n    dataFile = fopen(\"students.txt\", \"w\");\n    if (dataFile == NULL)\n    {\n        fprintf(stderr, \"Не вдалося відкрити файл\\n\");\n        return 1;\n    }\n\n    \u002F\u002F Записуємо заголовок і дані кожного студента\n    fprintf(dataFile, \"%-25s %5s %6s\\n\", \"Ім'я\", \"Вік\", \"ГПА\");\n    fprintf(dataFile, \"%-25s %5s %6s\\n\", \"-------------------------\", \"---\", \"------\");\n\n    for (int i = 0; i \u003C 3; i++)\n    {\n        fprintf(dataFile, \"%-25s %5d %6.2f\\n\",\n                students[i].name,\n                students[i].age,\n                students[i].gpa);\n    }\n\n    fclose(dataFile);\n    dataFile = NULL;\n\n    return 0;\n}\n","WriteStudents.cpp",[3439,5300,5301,5307,5314,5318,5326,5330,5346,5353,5361,5366,5370,5378,5382,5387,5403,5424,5444,5464,5469,5473,5489,5499,5503,5518,5526,5530,5534,5540,5579,5615,5620,5639,5644,5668,5682,5694,5706,5711,5716,5723,5732,5737,5746],{"__ignoreMap":3590},[3594,5302,5303,5305],{"class":3596,"line":3597},[3594,5304,3769],{"class":3768},[3594,5306,4192],{"class":3772},[3594,5308,5309,5311],{"class":3596,"line":3603},[3594,5310,3769],{"class":3768},[3594,5312,5313],{"class":3772}," \u003Ccstring>\n",[3594,5315,5316],{"class":3596,"line":3609},[3594,5317,3619],{"emptyLinePlaceholder":3618},[3594,5319,5320,5323],{"class":3596,"line":3615},[3594,5321,5322],{"class":3893},"struct",[3594,5324,5325],{"class":3890}," Student\n",[3594,5327,5328],{"class":3596,"line":3622},[3594,5329,4218],{"class":3818},[3594,5331,5332,5335,5338,5340,5343],{"class":3596,"line":3628},[3594,5333,5334],{"class":3893},"    char",[3594,5336,5337],{"class":3910},"   name",[3594,5339,5035],{"class":3818},[3594,5341,5342],{"class":4303},"50",[3594,5344,5345],{"class":3818},"];\n",[3594,5347,5348,5350],{"class":3596,"line":3634},[3594,5349,4724],{"class":3893},[3594,5351,5352],{"class":3818},"    age;\n",[3594,5354,5355,5358],{"class":3596,"line":3640},[3594,5356,5357],{"class":3893},"    double",[3594,5359,5360],{"class":3818}," gpa;\n",[3594,5362,5363],{"class":3596,"line":3645},[3594,5364,5365],{"class":3818},"};\n",[3594,5367,5368],{"class":3596,"line":3651},[3594,5369,3619],{"emptyLinePlaceholder":3618},[3594,5371,5372,5374,5376],{"class":3596,"line":3657},[3594,5373,3714],{"class":3893},[3594,5375,4210],{"class":3897},[3594,5377,4213],{"class":3818},[3594,5379,5380],{"class":3596,"line":3663},[3594,5381,4218],{"class":3818},[3594,5383,5384],{"class":3596,"line":4276},[3594,5385,5386],{"class":3818},"    FILE*   dataFile;\n",[3594,5388,5389,5392,5395,5397,5400],{"class":3596,"line":4297},[3594,5390,5391],{"class":3818},"    Student ",[3594,5393,5394],{"class":3910},"students",[3594,5396,5035],{"class":3818},[3594,5398,5399],{"class":4303},"3",[3594,5401,5402],{"class":3818},"] = {\n",[3594,5404,5405,5408,5411,5413,5416,5418,5421],{"class":3596,"line":4310},[3594,5406,5407],{"class":3818},"        { ",[3594,5409,5410],{"class":3772},"\"Іван Петренко\"",[3594,5412,3860],{"class":3818},[3594,5414,5415],{"class":4303},"20",[3594,5417,3860],{"class":3818},[3594,5419,5420],{"class":4303},"4.5",[3594,5422,5423],{"class":3818}," },\n",[3594,5425,5426,5428,5431,5434,5437,5439,5442],{"class":3596,"line":4316},[3594,5427,5407],{"class":3818},[3594,5429,5430],{"class":3772},"\"Олена Коваль\"",[3594,5432,5433],{"class":3818},",  ",[3594,5435,5436],{"class":4303},"19",[3594,5438,3860],{"class":3818},[3594,5440,5441],{"class":4303},"4.8",[3594,5443,5423],{"class":3818},[3594,5445,5446,5448,5451,5453,5456,5458,5461],{"class":3596,"line":4321},[3594,5447,5407],{"class":3818},[3594,5449,5450],{"class":3772},"\"Михайло Бойко\"",[3594,5452,3860],{"class":3818},[3594,5454,5455],{"class":4303},"21",[3594,5457,3860],{"class":3818},[3594,5459,5460],{"class":4303},"3.9",[3594,5462,5463],{"class":3818}," }\n",[3594,5465,5466],{"class":3596,"line":4327},[3594,5467,5468],{"class":3818},"    };\n",[3594,5470,5471],{"class":3596,"line":4345},[3594,5472,3619],{"emptyLinePlaceholder":3618},[3594,5474,5475,5477,5479,5481,5483,5485,5487],{"class":3596,"line":4361},[3594,5476,4237],{"class":3818},[3594,5478,4240],{"class":3897},[3594,5480,3901],{"class":3818},[3594,5482,4245],{"class":3772},[3594,5484,3860],{"class":3818},[3594,5486,4009],{"class":3772},[3594,5488,3923],{"class":3818},[3594,5490,5491,5493,5495,5497],{"class":3596,"line":4366},[3594,5492,4260],{"class":3768},[3594,5494,4263],{"class":3818},[3594,5496,3952],{"class":3893},[3594,5498,4268],{"class":3818},[3594,5500,5501],{"class":3596,"line":4375},[3594,5502,4273],{"class":3818},[3594,5504,5505,5507,5509,5512,5514,5516],{"class":3596,"line":4386},[3594,5506,4279],{"class":3897},[3594,5508,4282],{"class":3818},[3594,5510,5511],{"class":3772},"\"Не вдалося відкрити файл",[3594,5513,4289],{"class":4288},[3594,5515,4292],{"class":3772},[3594,5517,3923],{"class":3818},[3594,5519,5520,5522,5524],{"class":3596,"line":4876},[3594,5521,4300],{"class":3768},[3594,5523,4304],{"class":4303},[3594,5525,4307],{"class":3818},[3594,5527,5528],{"class":3596,"line":4881},[3594,5529,4313],{"class":3818},[3594,5531,5532],{"class":3596,"line":4890},[3594,5533,3619],{"emptyLinePlaceholder":3618},[3594,5535,5537],{"class":3596,"line":5536},27,[3594,5538,5539],{"class":3776},"    \u002F\u002F Записуємо заголовок і дані кожного студента\n",[3594,5541,5543,5545,5547,5549,5552,5555,5558,5560,5562,5564,5567,5569,5572,5574,5577],{"class":3596,"line":5542},28,[3594,5544,4330],{"class":3897},[3594,5546,4333],{"class":3818},[3594,5548,4292],{"class":3772},[3594,5550,5551],{"class":3910},"%-25s",[3594,5553,5554],{"class":3910}," %5s",[3594,5556,5557],{"class":3910}," %6s",[3594,5559,4289],{"class":4288},[3594,5561,4292],{"class":3772},[3594,5563,3860],{"class":3818},[3594,5565,5566],{"class":3772},"\"Ім'я\"",[3594,5568,3860],{"class":3818},[3594,5570,5571],{"class":3772},"\"Вік\"",[3594,5573,3860],{"class":3818},[3594,5575,5576],{"class":3772},"\"ГПА\"",[3594,5578,3923],{"class":3818},[3594,5580,5582,5584,5586,5588,5590,5592,5594,5596,5598,5600,5603,5605,5608,5610,5613],{"class":3596,"line":5581},29,[3594,5583,4330],{"class":3897},[3594,5585,4333],{"class":3818},[3594,5587,4292],{"class":3772},[3594,5589,5551],{"class":3910},[3594,5591,5554],{"class":3910},[3594,5593,5557],{"class":3910},[3594,5595,4289],{"class":4288},[3594,5597,4292],{"class":3772},[3594,5599,3860],{"class":3818},[3594,5601,5602],{"class":3772},"\"-------------------------\"",[3594,5604,3860],{"class":3818},[3594,5606,5607],{"class":3772},"\"---\"",[3594,5609,3860],{"class":3818},[3594,5611,5612],{"class":3772},"\"------\"",[3594,5614,3923],{"class":3818},[3594,5616,5618],{"class":3596,"line":5617},30,[3594,5619,3619],{"emptyLinePlaceholder":3618},[3594,5621,5623,5625,5627,5629,5631,5633,5635,5637],{"class":3596,"line":5622},31,[3594,5624,5143],{"class":3768},[3594,5626,3558],{"class":3818},[3594,5628,3714],{"class":3893},[3594,5630,5150],{"class":3818},[3594,5632,3718],{"class":4303},[3594,5634,5155],{"class":3818},[3594,5636,5399],{"class":4303},[3594,5638,5160],{"class":3818},[3594,5640,5642],{"class":3596,"line":5641},32,[3594,5643,4273],{"class":3818},[3594,5645,5647,5649,5651,5653,5655,5658,5661,5663,5665],{"class":3596,"line":5646},33,[3594,5648,4279],{"class":3897},[3594,5650,4333],{"class":3818},[3594,5652,4292],{"class":3772},[3594,5654,5551],{"class":3910},[3594,5656,5657],{"class":3910}," %5d",[3594,5659,5660],{"class":3910}," %6.2f",[3594,5662,4289],{"class":4288},[3594,5664,4292],{"class":3772},[3594,5666,5667],{"class":3818},",\n",[3594,5669,5671,5674,5677,5680],{"class":3596,"line":5670},34,[3594,5672,5673],{"class":3910},"                students",[3594,5675,5676],{"class":3818},"[i].",[3594,5678,5679],{"class":3910},"name",[3594,5681,5667],{"class":3818},[3594,5683,5685,5687,5689,5692],{"class":3596,"line":5684},35,[3594,5686,5673],{"class":3910},[3594,5688,5676],{"class":3818},[3594,5690,5691],{"class":3910},"age",[3594,5693,5667],{"class":3818},[3594,5695,5697,5699,5701,5704],{"class":3596,"line":5696},36,[3594,5698,5673],{"class":3910},[3594,5700,5676],{"class":3818},[3594,5702,5703],{"class":3910},"gpa",[3594,5705,3923],{"class":3818},[3594,5707,5709],{"class":3596,"line":5708},37,[3594,5710,4313],{"class":3818},[3594,5712,5714],{"class":3596,"line":5713},38,[3594,5715,3619],{"emptyLinePlaceholder":3618},[3594,5717,5719,5721],{"class":3596,"line":5718},39,[3594,5720,4369],{"class":3897},[3594,5722,4372],{"class":3818},[3594,5724,5726,5728,5730],{"class":3596,"line":5725},40,[3594,5727,4237],{"class":3818},[3594,5729,3952],{"class":3893},[3594,5731,4307],{"class":3818},[3594,5733,5735],{"class":3596,"line":5734},41,[3594,5736,3619],{"emptyLinePlaceholder":3618},[3594,5738,5740,5742,5744],{"class":3596,"line":5739},42,[3594,5741,4378],{"class":3768},[3594,5743,4381],{"class":4303},[3594,5745,4307],{"class":3818},[3594,5747,5749],{"class":3596,"line":5748},43,[3594,5750,4389],{"class":3818},[4391,5752,5754,5763,5767,5771,5775,5779],{"title":5753},"cat students.txt",[4395,5755,5757,4403,5760],{"className":5756},[3596],[3594,5758,4402],{"className":5759},[4401],[3424,5761,5753],{"className":5762},[4407],[4395,5764,5766],{"className":5765},[3596],"Ім'я                       Вік    ГПА",[4395,5768,5770],{"className":5769},[3596],"------------------------- -----  ------",[4395,5772,5774],{"className":5773},[3596],"Іван Петренко              20    4.50",[4395,5776,5778],{"className":5777},[3596],"Олена Коваль               19    4.80",[4395,5780,5782],{"className":5781},[3596],"Михайло Бойко              21    3.90",[3418,5784,5785,5786,5788,5789,5792,5793,5796],{},"Зверніть увагу на специфікатори форматування: ",[3439,5787,5551],{}," — рядок шириною 25 символів з вирівнюванням ліворуч, ",[3439,5790,5791],{},"%5d"," — ціле число шириною 5 символів, ",[3439,5794,5795],{},"%6.2f"," — число з плаваючою крапкою шириною 6 знаків і 2 знаки після крапки.",[3493,5798],{},[3413,5800,5802],{"id":5801},"форматоване-читання-функція-fscanf","Форматоване читання: функція fscanf",[3418,5804,3876,5805,5808,5809,5812,5813,3464],{},[3439,5806,5807],{},"fscanf()"," зчитує форматовані дані з файлу — аналог ",[3439,5810,5811],{},"scanf()"," для потоку ",[3439,5814,3750],{},[3585,5816,5818],{"className":3757,"code":5817,"language":3760,"meta":3590,"style":3590},"int fscanf(FILE* stream, const char* format, ...);\n",[3439,5819,5820],{"__ignoreMap":3590},[3594,5821,5822,5824,5827,5829,5831,5833,5835,5837,5839,5841,5843],{"class":3596,"line":3597},[3594,5823,3714],{"class":3893},[3594,5825,5826],{"class":3897}," fscanf",[3594,5828,3901],{"class":3818},[3594,5830,3699],{"class":3890},[3594,5832,3894],{"class":3893},[3594,5834,4670],{"class":3910},[3594,5836,3860],{"class":3818},[3594,5838,3904],{"class":3893},[3594,5840,3907],{"class":3893},[3594,5842,4955],{"class":3910},[3594,5844,4958],{"class":3818},[3418,5846,5847,5848,5850],{},"Повертає кількість успішно прочитаних і збережених елементів або ",[3439,5849,4681],{}," при кінці файлу чи помилці.",[3955,5852,5854],{"id":5853},"виявлення-кінця-файлу-функція-feof","Виявлення кінця файлу: функція feof",[3418,5856,5857,5858,4526],{},"Оскільки наперед невідомо, скільки записів у файлі, читання зазвичай виконується у циклі до досягнення кінця файлу. Для контролю призначена функція ",[3439,5859,5860],{},"feof()",[3585,5862,5864],{"className":3757,"code":5863,"language":3760,"meta":3590,"style":3590},"int feof(FILE* stream);\n",[3439,5865,5866],{"__ignoreMap":3590},[3594,5867,5868,5870,5873,5875,5877,5879,5881],{"class":3596,"line":3597},[3594,5869,3714],{"class":3893},[3594,5871,5872],{"class":3897}," feof",[3594,5874,3901],{"class":3818},[3594,5876,3699],{"class":3890},[3594,5878,3894],{"class":3893},[3594,5880,4670],{"class":3910},[3594,5882,3923],{"class":3818},[3418,5884,4675,5885,5888,5889,5891],{},[3424,5886,5887],{},"ненульове значення",", якщо досягнуто кінця файлу, і ",[3439,5890,3718],{}," — якщо ні.",[4154,5893,5894,5895,5897,5898,4403,5901,5904,5905,5907,5908,5911,5912,5914],{},"Важливий нюанс: ",[3439,5896,5860],{}," повертає ",[3439,5899,5900],{},"true",[3424,5902,5903],{},"тільки після"," невдалої спроби читання, а не перед нею. Тому перевіряти ",[3439,5906,5860],{}," слід ",[3424,5909,5910],{},"після"," виклику ",[3439,5913,5807],{},", а не до.",[3955,5916,5918],{"id":5917},"приклад-читання-масиву-з-файлу","Приклад: читання масиву з файлу",[3418,5920,5921,5922,5925],{},"Прочитаємо числа з файлу ",[3439,5923,5924],{},"numbers.txt",", що був створений попереднім прикладом:",[3585,5927,5930],{"className":3757,"code":5928,"filename":5929,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nint main()\n{\n    FILE* dataFile;\n    int   value;\n    int   count;\n\n    dataFile = fopen(\"numbers.txt\", \"r\");\n    if (dataFile == NULL)\n    {\n        fprintf(stderr, \"Файл numbers.txt не знайдено\\n\");\n        return 1;\n    }\n\n    count = 0;\n    fprintf(stdout, \"Вміст файлу numbers.txt:\\n\");\n\n    \u002F\u002F Читаємо поки не кінець файлу\n    while (fscanf(dataFile, \"%d\", &value) == 1)\n    {\n        fprintf(stdout, \"[%d] %d\\n\", count, value);\n        count++;\n    }\n\n    fprintf(stdout, \"Всього прочитано елементів: %d\\n\", count);\n\n    fclose(dataFile);\n    dataFile = NULL;\n\n    return 0;\n}\n","ReadArray.cpp",[3439,5931,5932,5938,5942,5950,5954,5958,5965,5972,5976,5992,6002,6006,6021,6029,6033,6037,6046,6061,6065,6070,6094,6098,6121,6126,6130,6134,6152,6156,6162,6170,6174,6182],{"__ignoreMap":3590},[3594,5933,5934,5936],{"class":3596,"line":3597},[3594,5935,3769],{"class":3768},[3594,5937,4192],{"class":3772},[3594,5939,5940],{"class":3596,"line":3603},[3594,5941,3619],{"emptyLinePlaceholder":3618},[3594,5943,5944,5946,5948],{"class":3596,"line":3609},[3594,5945,3714],{"class":3893},[3594,5947,4210],{"class":3897},[3594,5949,4213],{"class":3818},[3594,5951,5952],{"class":3596,"line":3615},[3594,5953,4218],{"class":3818},[3594,5955,5956],{"class":3596,"line":3622},[3594,5957,4223],{"class":3818},[3594,5959,5960,5962],{"class":3596,"line":3628},[3594,5961,4724],{"class":3893},[3594,5963,5964],{"class":3818},"   value;\n",[3594,5966,5967,5969],{"class":3596,"line":3634},[3594,5968,4724],{"class":3893},[3594,5970,5971],{"class":3818},"   count;\n",[3594,5973,5974],{"class":3596,"line":3640},[3594,5975,3619],{"emptyLinePlaceholder":3618},[3594,5977,5978,5980,5982,5984,5986,5988,5990],{"class":3596,"line":3645},[3594,5979,4237],{"class":3818},[3594,5981,4240],{"class":3897},[3594,5983,3901],{"class":3818},[3594,5985,5082],{"class":3772},[3594,5987,3860],{"class":3818},[3594,5989,3993],{"class":3772},[3594,5991,3923],{"class":3818},[3594,5993,5994,5996,5998,6000],{"class":3596,"line":3651},[3594,5995,4260],{"class":3768},[3594,5997,4263],{"class":3818},[3594,5999,3952],{"class":3893},[3594,6001,4268],{"class":3818},[3594,6003,6004],{"class":3596,"line":3657},[3594,6005,4273],{"class":3818},[3594,6007,6008,6010,6012,6015,6017,6019],{"class":3596,"line":3663},[3594,6009,4279],{"class":3897},[3594,6011,4282],{"class":3818},[3594,6013,6014],{"class":3772},"\"Файл numbers.txt не знайдено",[3594,6016,4289],{"class":4288},[3594,6018,4292],{"class":3772},[3594,6020,3923],{"class":3818},[3594,6022,6023,6025,6027],{"class":3596,"line":4276},[3594,6024,4300],{"class":3768},[3594,6026,4304],{"class":4303},[3594,6028,4307],{"class":3818},[3594,6030,6031],{"class":3596,"line":4297},[3594,6032,4313],{"class":3818},[3594,6034,6035],{"class":3596,"line":4310},[3594,6036,3619],{"emptyLinePlaceholder":3618},[3594,6038,6039,6042,6044],{"class":3596,"line":4316},[3594,6040,6041],{"class":3818},"    count = ",[3594,6043,3718],{"class":4303},[3594,6045,4307],{"class":3818},[3594,6047,6048,6050,6052,6055,6057,6059],{"class":3596,"line":4321},[3594,6049,4330],{"class":3897},[3594,6051,5219],{"class":3818},[3594,6053,6054],{"class":3772},"\"Вміст файлу numbers.txt:",[3594,6056,4289],{"class":4288},[3594,6058,4292],{"class":3772},[3594,6060,3923],{"class":3818},[3594,6062,6063],{"class":3596,"line":4327},[3594,6064,3619],{"emptyLinePlaceholder":3618},[3594,6066,6067],{"class":3596,"line":4345},[3594,6068,6069],{"class":3776},"    \u002F\u002F Читаємо поки не кінець файлу\n",[3594,6071,6072,6075,6077,6079,6081,6083,6085,6087,6090,6092],{"class":3596,"line":4361},[3594,6073,6074],{"class":3768},"    while",[3594,6076,3558],{"class":3818},[3594,6078,4608],{"class":3897},[3594,6080,4333],{"class":3818},[3594,6082,4292],{"class":3772},[3594,6084,4970],{"class":3910},[3594,6086,4292],{"class":3772},[3594,6088,6089],{"class":3818},", &value) == ",[3594,6091,3722],{"class":4303},[3594,6093,4268],{"class":3818},[3594,6095,6096],{"class":3596,"line":4366},[3594,6097,4273],{"class":3818},[3594,6099,6100,6102,6104,6107,6109,6112,6114,6116,6118],{"class":3596,"line":4375},[3594,6101,4279],{"class":3897},[3594,6103,5219],{"class":3818},[3594,6105,6106],{"class":3772},"\"[",[3594,6108,4970],{"class":3910},[3594,6110,6111],{"class":3772},"] ",[3594,6113,4970],{"class":3910},[3594,6115,4289],{"class":4288},[3594,6117,4292],{"class":3772},[3594,6119,6120],{"class":3818},", count, value);\n",[3594,6122,6123],{"class":3596,"line":4386},[3594,6124,6125],{"class":3818},"        count++;\n",[3594,6127,6128],{"class":3596,"line":4876},[3594,6129,4313],{"class":3818},[3594,6131,6132],{"class":3596,"line":4881},[3594,6133,3619],{"emptyLinePlaceholder":3618},[3594,6135,6136,6138,6140,6143,6145,6147,6149],{"class":3596,"line":4890},[3594,6137,4330],{"class":3897},[3594,6139,5219],{"class":3818},[3594,6141,6142],{"class":3772},"\"Всього прочитано елементів: ",[3594,6144,4970],{"class":3910},[3594,6146,4289],{"class":4288},[3594,6148,4292],{"class":3772},[3594,6150,6151],{"class":3818},", count);\n",[3594,6153,6154],{"class":3596,"line":5536},[3594,6155,3619],{"emptyLinePlaceholder":3618},[3594,6157,6158,6160],{"class":3596,"line":5542},[3594,6159,4369],{"class":3897},[3594,6161,4372],{"class":3818},[3594,6163,6164,6166,6168],{"class":3596,"line":5581},[3594,6165,4237],{"class":3818},[3594,6167,3952],{"class":3893},[3594,6169,4307],{"class":3818},[3594,6171,6172],{"class":3596,"line":5617},[3594,6173,3619],{"emptyLinePlaceholder":3618},[3594,6175,6176,6178,6180],{"class":3596,"line":5622},[3594,6177,4378],{"class":3768},[3594,6179,4381],{"class":4303},[3594,6181,4307],{"class":3818},[3594,6183,6184],{"class":3596,"line":5641},[3594,6185,4389],{"class":3818},[4391,6187,6189,6198,6202,6210,6217,6224,6231,6238,6245],{"title":6188},".\u002FReadArray",[4395,6190,6192,4403,6195],{"className":6191},[3596],[3594,6193,4402],{"className":6194},[4401],[3424,6196,6188],{"className":6197},[4407],[4395,6199,6201],{"className":6200},[3596],"Вміст файлу numbers.txt:",[4395,6203,6205,6206],{"className":6204},[3596],"[0] ",[3594,6207,5044],{"className":6208},[6209],"text-blue-400",[4395,6211,6213,6214],{"className":6212},[3596],"[1] ",[3594,6215,5049],{"className":6216},[6209],[4395,6218,6220,6221],{"className":6219},[3596],"[2] ",[3594,6222,5054],{"className":6223},[6209],[4395,6225,6227,6228],{"className":6226},[3596],"[3] ",[3594,6229,5059],{"className":6230},[6209],[4395,6232,6234,6235],{"className":6233},[3596],"[4] ",[3594,6236,5064],{"className":6237},[6209],[4395,6239,6241,6242],{"className":6240},[3596],"Всього прочитано елементів: ",[3594,6243,5038],{"className":6244},[4415,4407],[4395,6246,6248,6249,3464],{"className":6247},[3596],"Execution finished with ",[3594,6250,6252],{"className":6251},[4415,4407],"exit code 0",[3418,6254,6255,6256,6259,6260,6263,6264,6266,6267,6269,6270,6272,6273,3460,6275,3464],{},"Зверніть: умова циклу — ",[3439,6257,6258],{},"fscanf(...) == 1",", а не ",[3439,6261,6262],{},"!feof(...)",". Порівняння з поверненим значенням ",[3439,6265,4608],{}," є правильним патерном: ",[3439,6268,3722],{}," означає, що рівно один елемент успішно прочитано. Якщо читання завершилося помилкою або досягнуто EOF — ",[3439,6271,4608],{}," поверне ",[3439,6274,4681],{},[3439,6276,3718],{},[3955,6278,6280],{"id":6279},"приклад-читання-структур-із-файлу","Приклад: читання структур із файлу",[3418,6282,6283,6284,6287],{},"Читання рядків із файлу зі студентами (формат: ",[3439,6285,6286],{},"ім'я вік gpa","):",[3585,6289,6292],{"className":3757,"code":6290,"filename":6291,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nstruct Student\n{\n    char   name[50];\n    int    age;\n    double gpa;\n};\n\nint main()\n{\n    FILE*   dataFile;\n    Student buffer;\n    int     count;\n\n    \u002F\u002F Попередньо запишемо дані без форматування (для читання fscanf)\n    dataFile = fopen(\"raw_students.txt\", \"w\");\n    if (dataFile == NULL) { return 1; }\n\n    fprintf(dataFile, \"Petrenko 20 4.5\\n\");\n    fprintf(dataFile, \"Koval 19 4.8\\n\");\n    fprintf(dataFile, \"Boiko 21 3.9\\n\");\n    fclose(dataFile);\n\n    \u002F\u002F Відкриваємо для читання\n    dataFile = fopen(\"raw_students.txt\", \"r\");\n    if (dataFile == NULL)\n    {\n        fprintf(stderr, \"Файл не знайдено\\n\");\n        return 1;\n    }\n\n    count = 0;\n    \u002F\u002F Перший параметр fscanf — файл, далі — специфікатор і адреси змінних\n    while (fscanf(dataFile, \"%s %d %lf\",\n                  buffer.name, &buffer.age, &buffer.gpa) == 3)\n    {\n        fprintf(stdout, \"%-15s | вік: %d | gpa: %.2f\\n\",\n                buffer.name, buffer.age, buffer.gpa);\n        count++;\n    }\n\n    fprintf(stdout, \"\\nПрочитано %d студентів\\n\", count);\n\n    fclose(dataFile);\n    return 0;\n}\n","ReadStudents.cpp",[3439,6293,6294,6300,6304,6310,6314,6326,6332,6338,6342,6346,6354,6358,6362,6367,6374,6378,6383,6400,6419,6423,6438,6453,6468,6474,6478,6483,6499,6509,6513,6528,6536,6540,6544,6552,6557,6581,6615,6619,6647,6674,6678,6682,6686,6710,6715,6722,6731],{"__ignoreMap":3590},[3594,6295,6296,6298],{"class":3596,"line":3597},[3594,6297,3769],{"class":3768},[3594,6299,4192],{"class":3772},[3594,6301,6302],{"class":3596,"line":3603},[3594,6303,3619],{"emptyLinePlaceholder":3618},[3594,6305,6306,6308],{"class":3596,"line":3609},[3594,6307,5322],{"class":3893},[3594,6309,5325],{"class":3890},[3594,6311,6312],{"class":3596,"line":3615},[3594,6313,4218],{"class":3818},[3594,6315,6316,6318,6320,6322,6324],{"class":3596,"line":3622},[3594,6317,5334],{"class":3893},[3594,6319,5337],{"class":3910},[3594,6321,5035],{"class":3818},[3594,6323,5342],{"class":4303},[3594,6325,5345],{"class":3818},[3594,6327,6328,6330],{"class":3596,"line":3628},[3594,6329,4724],{"class":3893},[3594,6331,5352],{"class":3818},[3594,6333,6334,6336],{"class":3596,"line":3634},[3594,6335,5357],{"class":3893},[3594,6337,5360],{"class":3818},[3594,6339,6340],{"class":3596,"line":3640},[3594,6341,5365],{"class":3818},[3594,6343,6344],{"class":3596,"line":3645},[3594,6345,3619],{"emptyLinePlaceholder":3618},[3594,6347,6348,6350,6352],{"class":3596,"line":3651},[3594,6349,3714],{"class":3893},[3594,6351,4210],{"class":3897},[3594,6353,4213],{"class":3818},[3594,6355,6356],{"class":3596,"line":3657},[3594,6357,4218],{"class":3818},[3594,6359,6360],{"class":3596,"line":3663},[3594,6361,5386],{"class":3818},[3594,6363,6364],{"class":3596,"line":4276},[3594,6365,6366],{"class":3818},"    Student buffer;\n",[3594,6368,6369,6371],{"class":3596,"line":4297},[3594,6370,4724],{"class":3893},[3594,6372,6373],{"class":3818},"     count;\n",[3594,6375,6376],{"class":3596,"line":4310},[3594,6377,3619],{"emptyLinePlaceholder":3618},[3594,6379,6380],{"class":3596,"line":4316},[3594,6381,6382],{"class":3776},"    \u002F\u002F Попередньо запишемо дані без форматування (для читання fscanf)\n",[3594,6384,6385,6387,6389,6391,6394,6396,6398],{"class":3596,"line":4321},[3594,6386,4237],{"class":3818},[3594,6388,4240],{"class":3897},[3594,6390,3901],{"class":3818},[3594,6392,6393],{"class":3772},"\"raw_students.txt\"",[3594,6395,3860],{"class":3818},[3594,6397,4009],{"class":3772},[3594,6399,3923],{"class":3818},[3594,6401,6402,6404,6406,6408,6411,6414,6416],{"class":3596,"line":4327},[3594,6403,4260],{"class":3768},[3594,6405,4263],{"class":3818},[3594,6407,3952],{"class":3893},[3594,6409,6410],{"class":3818},") { ",[3594,6412,6413],{"class":3768},"return",[3594,6415,4304],{"class":4303},[3594,6417,6418],{"class":3818},"; }\n",[3594,6420,6421],{"class":3596,"line":4345},[3594,6422,3619],{"emptyLinePlaceholder":3618},[3594,6424,6425,6427,6429,6432,6434,6436],{"class":3596,"line":4361},[3594,6426,4330],{"class":3897},[3594,6428,4333],{"class":3818},[3594,6430,6431],{"class":3772},"\"Petrenko 20 4.5",[3594,6433,4289],{"class":4288},[3594,6435,4292],{"class":3772},[3594,6437,3923],{"class":3818},[3594,6439,6440,6442,6444,6447,6449,6451],{"class":3596,"line":4366},[3594,6441,4330],{"class":3897},[3594,6443,4333],{"class":3818},[3594,6445,6446],{"class":3772},"\"Koval 19 4.8",[3594,6448,4289],{"class":4288},[3594,6450,4292],{"class":3772},[3594,6452,3923],{"class":3818},[3594,6454,6455,6457,6459,6462,6464,6466],{"class":3596,"line":4375},[3594,6456,4330],{"class":3897},[3594,6458,4333],{"class":3818},[3594,6460,6461],{"class":3772},"\"Boiko 21 3.9",[3594,6463,4289],{"class":4288},[3594,6465,4292],{"class":3772},[3594,6467,3923],{"class":3818},[3594,6469,6470,6472],{"class":3596,"line":4386},[3594,6471,4369],{"class":3897},[3594,6473,4372],{"class":3818},[3594,6475,6476],{"class":3596,"line":4876},[3594,6477,3619],{"emptyLinePlaceholder":3618},[3594,6479,6480],{"class":3596,"line":4881},[3594,6481,6482],{"class":3776},"    \u002F\u002F Відкриваємо для читання\n",[3594,6484,6485,6487,6489,6491,6493,6495,6497],{"class":3596,"line":4890},[3594,6486,4237],{"class":3818},[3594,6488,4240],{"class":3897},[3594,6490,3901],{"class":3818},[3594,6492,6393],{"class":3772},[3594,6494,3860],{"class":3818},[3594,6496,3993],{"class":3772},[3594,6498,3923],{"class":3818},[3594,6500,6501,6503,6505,6507],{"class":3596,"line":5536},[3594,6502,4260],{"class":3768},[3594,6504,4263],{"class":3818},[3594,6506,3952],{"class":3893},[3594,6508,4268],{"class":3818},[3594,6510,6511],{"class":3596,"line":5542},[3594,6512,4273],{"class":3818},[3594,6514,6515,6517,6519,6522,6524,6526],{"class":3596,"line":5581},[3594,6516,4279],{"class":3897},[3594,6518,4282],{"class":3818},[3594,6520,6521],{"class":3772},"\"Файл не знайдено",[3594,6523,4289],{"class":4288},[3594,6525,4292],{"class":3772},[3594,6527,3923],{"class":3818},[3594,6529,6530,6532,6534],{"class":3596,"line":5617},[3594,6531,4300],{"class":3768},[3594,6533,4304],{"class":4303},[3594,6535,4307],{"class":3818},[3594,6537,6538],{"class":3596,"line":5622},[3594,6539,4313],{"class":3818},[3594,6541,6542],{"class":3596,"line":5641},[3594,6543,3619],{"emptyLinePlaceholder":3618},[3594,6545,6546,6548,6550],{"class":3596,"line":5646},[3594,6547,6041],{"class":3818},[3594,6549,3718],{"class":4303},[3594,6551,4307],{"class":3818},[3594,6553,6554],{"class":3596,"line":5670},[3594,6555,6556],{"class":3776},"    \u002F\u002F Перший параметр fscanf — файл, далі — специфікатор і адреси змінних\n",[3594,6558,6559,6561,6563,6565,6567,6569,6571,6574,6577,6579],{"class":3596,"line":5684},[3594,6560,6074],{"class":3768},[3594,6562,3558],{"class":3818},[3594,6564,4608],{"class":3897},[3594,6566,4333],{"class":3818},[3594,6568,4292],{"class":3772},[3594,6570,4976],{"class":3910},[3594,6572,6573],{"class":3910}," %d",[3594,6575,6576],{"class":3910}," %lf",[3594,6578,4292],{"class":3772},[3594,6580,5667],{"class":3818},[3594,6582,6583,6586,6588,6590,6593,6596,6598,6600,6602,6604,6606,6608,6611,6613],{"class":3596,"line":5696},[3594,6584,6585],{"class":3910},"                  buffer",[3594,6587,3464],{"class":3818},[3594,6589,5679],{"class":3910},[3594,6591,6592],{"class":3818},", &",[3594,6594,6595],{"class":3910},"buffer",[3594,6597,3464],{"class":3818},[3594,6599,5691],{"class":3910},[3594,6601,6592],{"class":3818},[3594,6603,6595],{"class":3910},[3594,6605,3464],{"class":3818},[3594,6607,5703],{"class":3910},[3594,6609,6610],{"class":3818},") == ",[3594,6612,5399],{"class":4303},[3594,6614,4268],{"class":3818},[3594,6616,6617],{"class":3596,"line":5708},[3594,6618,4273],{"class":3818},[3594,6620,6621,6623,6625,6627,6630,6633,6635,6638,6641,6643,6645],{"class":3596,"line":5713},[3594,6622,4279],{"class":3897},[3594,6624,5219],{"class":3818},[3594,6626,4292],{"class":3772},[3594,6628,6629],{"class":3910},"%-15s",[3594,6631,6632],{"class":3772}," | вік: ",[3594,6634,4970],{"class":3910},[3594,6636,6637],{"class":3772}," | gpa: ",[3594,6639,6640],{"class":3910},"%.2f",[3594,6642,4289],{"class":4288},[3594,6644,4292],{"class":3772},[3594,6646,5667],{"class":3818},[3594,6648,6649,6652,6654,6656,6658,6660,6662,6664,6666,6668,6670,6672],{"class":3596,"line":5718},[3594,6650,6651],{"class":3910},"                buffer",[3594,6653,3464],{"class":3818},[3594,6655,5679],{"class":3910},[3594,6657,3860],{"class":3818},[3594,6659,6595],{"class":3910},[3594,6661,3464],{"class":3818},[3594,6663,5691],{"class":3910},[3594,6665,3860],{"class":3818},[3594,6667,6595],{"class":3910},[3594,6669,3464],{"class":3818},[3594,6671,5703],{"class":3910},[3594,6673,3923],{"class":3818},[3594,6675,6676],{"class":3596,"line":5725},[3594,6677,6125],{"class":3818},[3594,6679,6680],{"class":3596,"line":5734},[3594,6681,4313],{"class":3818},[3594,6683,6684],{"class":3596,"line":5739},[3594,6685,3619],{"emptyLinePlaceholder":3618},[3594,6687,6688,6690,6692,6694,6696,6699,6701,6704,6706,6708],{"class":3596,"line":5748},[3594,6689,4330],{"class":3897},[3594,6691,5219],{"class":3818},[3594,6693,4292],{"class":3772},[3594,6695,4289],{"class":4288},[3594,6697,6698],{"class":3772},"Прочитано ",[3594,6700,4970],{"class":3910},[3594,6702,6703],{"class":3772}," студентів",[3594,6705,4289],{"class":4288},[3594,6707,4292],{"class":3772},[3594,6709,6151],{"class":3818},[3594,6711,6713],{"class":3596,"line":6712},44,[3594,6714,3619],{"emptyLinePlaceholder":3618},[3594,6716,6718,6720],{"class":3596,"line":6717},45,[3594,6719,4369],{"class":3897},[3594,6721,4372],{"class":3818},[3594,6723,6725,6727,6729],{"class":3596,"line":6724},46,[3594,6726,4378],{"class":3768},[3594,6728,4381],{"class":4303},[3594,6730,4307],{"class":3818},[3594,6732,6734],{"class":3596,"line":6733},47,[3594,6735,4389],{"class":3818},[4391,6737,6739,6748,6759,6770,6781,6784,6790],{"title":6738},".\u002FReadStudents",[4395,6740,6742,4403,6745],{"className":6741},[3596],[3594,6743,4402],{"className":6744},[4401],[3424,6746,6738],{"className":6747},[4407],[4395,6749,6751,6752,6637,6755],{"className":6750},[3596],"Petrenko        | вік: ",[3594,6753,5415],{"className":6754},[6209],[3594,6756,6758],{"className":6757},[6209],"4.50",[4395,6760,6762,6763,6637,6766],{"className":6761},[3596],"Koval           | вік: ",[3594,6764,5436],{"className":6765},[6209],[3594,6767,6769],{"className":6768},[6209],"4.80",[4395,6771,6773,6774,6637,6777],{"className":6772},[3596],"Boiko           | вік: ",[3594,6775,5455],{"className":6776},[6209],[3594,6778,6780],{"className":6779},[6209],"3.90",[4395,6782],{"className":6783},[3596],[4395,6785,6698,6787,6703],{"className":6786},[3596],[3594,6788,5399],{"className":6789},[4415,4407],[4395,6791,6248,6793,3464],{"className":6792},[3596],[3594,6794,6252],{"className":6795},[4415,4407],[3493,6797],{},[3413,6799,6801],{"id":6800},"безпечні-версії-функцій-у-visual-studio","Безпечні версії функцій у Visual Studio",[3418,6803,6804,6805,3860,6807,3860,6809,6811,6812,6815],{},"Деякі компілятори, зокрема Visual Studio 2019 і новіші, вважають функції ",[3439,6806,4240],{},[3439,6808,4608],{},[3439,6810,4605],{}," та інші ",[3424,6813,6814],{},"небезпечними"," — і генерують помилку компіляції або попередження C4996. Причина: ці функції не перевіряють межі буферів і потенційно вразливі до переповнення.",[3418,6817,6818],{},"Є два способи вирішити цю проблему:",[6820,6821,6822,6863],"tabs",{},[6823,6824,6826,6832,6860],"tabs-item",{"label":6825},"Спосіб 1: #define",[3418,6827,6828,6829,6831],{},"Додайте на початку файлу (до будь-яких ",[3439,6830,3769],{},") директиву:",[3585,6833,6835],{"className":3757,"code":6834,"filename":3759,"language":3760,"meta":3761,"style":3590},"#define _CRT_SECURE_NO_WARNINGS\n#include \u003Ccstdio>\n\n\u002F\u002F Тепер fopen, fscanf і т.д. компілюються без помилок\n",[3439,6836,6837,6845,6851,6855],{"__ignoreMap":3590},[3594,6838,6839,6842],{"class":3596,"line":3597},[3594,6840,6841],{"class":3768},"#define",[3594,6843,6844],{"class":3893}," _CRT_SECURE_NO_WARNINGS\n",[3594,6846,6847,6849],{"class":3596,"line":3603},[3594,6848,3769],{"class":3768},[3594,6850,4192],{"class":3772},[3594,6852,6853],{"class":3596,"line":3609},[3594,6854,3619],{"emptyLinePlaceholder":3618},[3594,6856,6857],{"class":3596,"line":3615},[3594,6858,6859],{"class":3776},"\u002F\u002F Тепер fopen, fscanf і т.д. компілюються без помилок\n",[3418,6861,6862],{},"Це відключає попередження для всього файлу.",[6823,6864,6866,6876,7010],{"label":6865},"Спосіб 2: fopen_s",[3418,6867,6868,6869,6871,6872,6875],{},"Замінити ",[3439,6870,4240],{}," на безпечну версію ",[3439,6873,6874],{},"fopen_s"," (доступна лише на Windows\u002FMSVC):",[3585,6877,6879],{"className":3757,"code":6878,"filename":3759,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nint main()\n{\n    FILE* dataFile;\n\n    \u002F\u002F fopen_s приймає покажчик на покажчик як перший аргумент\n    errno_t err = fopen_s(&dataFile, \"data.txt\", \"r\");\n\n    if (err != 0 || dataFile == NULL)\n    {\n        fprintf(stderr, \"Помилка відкриття файлу\\n\");\n        return 1;\n    }\n\n    fclose(dataFile);\n    return 0;\n}\n",[3439,6880,6881,6887,6891,6899,6903,6907,6911,6916,6938,6942,6958,6962,6976,6984,6988,6992,6998,7006],{"__ignoreMap":3590},[3594,6882,6883,6885],{"class":3596,"line":3597},[3594,6884,3769],{"class":3768},[3594,6886,4192],{"class":3772},[3594,6888,6889],{"class":3596,"line":3603},[3594,6890,3619],{"emptyLinePlaceholder":3618},[3594,6892,6893,6895,6897],{"class":3596,"line":3609},[3594,6894,3714],{"class":3893},[3594,6896,4210],{"class":3897},[3594,6898,4213],{"class":3818},[3594,6900,6901],{"class":3596,"line":3615},[3594,6902,4218],{"class":3818},[3594,6904,6905],{"class":3596,"line":3622},[3594,6906,4223],{"class":3818},[3594,6908,6909],{"class":3596,"line":3628},[3594,6910,3619],{"emptyLinePlaceholder":3618},[3594,6912,6913],{"class":3596,"line":3634},[3594,6914,6915],{"class":3776},"    \u002F\u002F fopen_s приймає покажчик на покажчик як перший аргумент\n",[3594,6917,6918,6921,6924,6926,6929,6932,6934,6936],{"class":3596,"line":3640},[3594,6919,6920],{"class":3890},"    errno_t",[3594,6922,6923],{"class":3818}," err = ",[3594,6925,6874],{"class":3897},[3594,6927,6928],{"class":3818},"(&dataFile, ",[3594,6930,6931],{"class":3772},"\"data.txt\"",[3594,6933,3860],{"class":3818},[3594,6935,3993],{"class":3772},[3594,6937,3923],{"class":3818},[3594,6939,6940],{"class":3596,"line":3645},[3594,6941,3619],{"emptyLinePlaceholder":3618},[3594,6943,6944,6946,6949,6951,6954,6956],{"class":3596,"line":3651},[3594,6945,4260],{"class":3768},[3594,6947,6948],{"class":3818}," (err != ",[3594,6950,3718],{"class":4303},[3594,6952,6953],{"class":3818}," || dataFile == ",[3594,6955,3952],{"class":3893},[3594,6957,4268],{"class":3818},[3594,6959,6960],{"class":3596,"line":3657},[3594,6961,4273],{"class":3818},[3594,6963,6964,6966,6968,6970,6972,6974],{"class":3596,"line":3663},[3594,6965,4279],{"class":3897},[3594,6967,4282],{"class":3818},[3594,6969,4773],{"class":3772},[3594,6971,4289],{"class":4288},[3594,6973,4292],{"class":3772},[3594,6975,3923],{"class":3818},[3594,6977,6978,6980,6982],{"class":3596,"line":4276},[3594,6979,4300],{"class":3768},[3594,6981,4304],{"class":4303},[3594,6983,4307],{"class":3818},[3594,6985,6986],{"class":3596,"line":4297},[3594,6987,4313],{"class":3818},[3594,6989,6990],{"class":3596,"line":4310},[3594,6991,3619],{"emptyLinePlaceholder":3618},[3594,6993,6994,6996],{"class":3596,"line":4316},[3594,6995,4369],{"class":3897},[3594,6997,4372],{"class":3818},[3594,6999,7000,7002,7004],{"class":3596,"line":4321},[3594,7001,4378],{"class":3768},[3594,7003,4381],{"class":4303},[3594,7005,4307],{"class":3818},[3594,7007,7008],{"class":3596,"line":4327},[3594,7009,4389],{"class":3818},[3418,7011,7012,7013,4403,7015,7018,7019,7022,7023,3464],{},"Зверніть: ",[3439,7014,6874],{},[3424,7016,7017],{},"не є стандартом ISO C++"," — вона доступна лише в MSVC і деяких інших компіляторах. Якщо пишете переносний код — використовуйте ",[3439,7020,7021],{},"#define _CRT_SECURE_NO_WARNINGS"," і стандартний ",[3439,7024,4240],{},[3478,7026,7027,7028,7030],{},"У цьому курсі ми використовуємо ",[3439,7029,7021],{}," для сумісності з Visual Studio без зміни стандартного API. Якщо ваш компілятор (GCC, Clang) не потребує цього — просто не додавайте цей рядок.",[3493,7032],{},[3413,7034,7036],{"id":7035},"посимвольне-читання-функції-fgetc-і-fputc","Посимвольне читання: функції fgetc і fputc",[3418,7038,7039,7040,7042,7043,7046],{},"Окрім форматованих функцій, бібліотека ",[3439,7041,3695],{}," надає функції ",[3424,7044,7045],{},"посимвольного"," вводу\u002Fвиводу. Вони найпростіші за своєю природою: читають або записують рівно один байт за раз.",[3955,7048,7050],{"id":7049},"fgetc-читання-одного-символу","fgetc — читання одного символу",[3585,7052,7054],{"className":3757,"code":7053,"language":3760,"meta":3590,"style":3590},"int fgetc(FILE* stream);\n",[3439,7055,7056],{"__ignoreMap":3590},[3594,7057,7058,7060,7063,7065,7067,7069,7071],{"class":3596,"line":3597},[3594,7059,3714],{"class":3893},[3594,7061,7062],{"class":3897}," fgetc",[3594,7064,3901],{"class":3818},[3594,7066,3699],{"class":3890},[3594,7068,3894],{"class":3893},[3594,7070,4670],{"class":3910},[3594,7072,3923],{"class":3818},[3418,7074,7075,7076,7078,7079,7081,7082,7084],{},"Зчитує наступний символ із потоку і повертає його у форматі ",[3439,7077,3714],{},". Якщо досягнуто кінця файлу або сталася помилка — повертає ",[3439,7080,4681],{}," (константа зі значенням ",[3439,7083,4685],{},").",[3418,7086,7087,7088,6259,7090,7093,7094,7097,7098,7100,7101,7103,7104,7107,7108,7110,7111,3464],{},"Чому ",[3439,7089,3714],{},[3439,7091,7092],{},"char","? Тому що ",[3439,7095,7096],{},"EOF = -1",", а ",[3439,7099,7092],{}," може бути беззнаковим на деяких платформах (тоді ",[3439,7102,4685],{}," перетвориться на ",[3439,7105,7106],{},"255","). Змінна типу ",[3439,7109,3714],{}," гарантує коректне порівняння з ",[3439,7112,4681],{},[3955,7114,7116],{"id":7115},"fputc-запис-одного-символу","fputc — запис одного символу",[3585,7118,7120],{"className":3757,"code":7119,"language":3760,"meta":3590,"style":3590},"int fputc(int c, FILE* stream);\n",[3439,7121,7122],{"__ignoreMap":3590},[3594,7123,7124,7126,7129,7131,7133,7136,7138,7140,7142,7144],{"class":3596,"line":3597},[3594,7125,3714],{"class":3893},[3594,7127,7128],{"class":3897}," fputc",[3594,7130,3901],{"class":3818},[3594,7132,3714],{"class":3893},[3594,7134,7135],{"class":3910}," c",[3594,7137,3860],{"class":3818},[3594,7139,3699],{"class":3890},[3594,7141,3894],{"class":3893},[3594,7143,4670],{"class":3910},[3594,7145,3923],{"class":3818},[3418,7147,7148,7149,7152,7153,7155],{},"Записує символ ",[3439,7150,7151],{},"c"," у потік. Повертає записаний символ або ",[3439,7154,4681],{}," при помилці.",[3955,7157,7159],{"id":7158},"приклад-підрахунок-довжини-рядків-у-файлі","Приклад: підрахунок довжини рядків у файлі",[3418,7161,7162],{},"Прочитаємо текстовий файл і визначимо довжину кожного рядка:",[3585,7164,7167],{"className":3757,"code":7165,"filename":7166,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nint main()\n{\n    FILE* dataFile;\n    int   ch;\n    int   lineNum;\n    int   lineLen;\n\n    \u002F\u002F Створимо тестовий файл\n    dataFile = fopen(\"text.txt\", \"w\");\n    if (dataFile == NULL) { return 1; }\n    fprintf(dataFile, \"Hello, World!\\n\");\n    fprintf(dataFile, \"C programming\\n\");\n    fprintf(dataFile, \"File I\u002FO\\n\");\n    fclose(dataFile);\n\n    \u002F\u002F Відкриваємо для посимвольного читання\n    dataFile = fopen(\"text.txt\", \"r\");\n    if (dataFile == NULL)\n    {\n        fprintf(stderr, \"Файл не знайдено\\n\");\n        return 1;\n    }\n\n    lineNum = 1;\n    lineLen = 0;\n\n    while ((ch = fgetc(dataFile)) != EOF)\n    {\n        if (ch == '\\n')\n        {\n            fprintf(stdout, \"Рядок %d: %d символів\\n\", lineNum, lineLen);\n            lineNum++;\n            lineLen = 0;\n        }\n        else\n        {\n            lineLen++;\n        }\n    }\n\n    \u002F\u002F Останній рядок без '\\n'\n    if (lineLen > 0)\n    {\n        fprintf(stdout, \"Рядок %d: %d символів\\n\", lineNum, lineLen);\n    }\n\n    fclose(dataFile);\n    return 0;\n}\n","LineLength.cpp",[3439,7168,7169,7175,7179,7187,7191,7195,7202,7209,7216,7220,7225,7242,7258,7273,7288,7303,7309,7313,7318,7334,7344,7348,7362,7370,7374,7378,7387,7396,7400,7413,7417,7434,7439,7465,7470,7479,7484,7489,7493,7498,7502,7506,7510,7515,7526,7530,7552,7556,7561,7568,7577],{"__ignoreMap":3590},[3594,7170,7171,7173],{"class":3596,"line":3597},[3594,7172,3769],{"class":3768},[3594,7174,4192],{"class":3772},[3594,7176,7177],{"class":3596,"line":3603},[3594,7178,3619],{"emptyLinePlaceholder":3618},[3594,7180,7181,7183,7185],{"class":3596,"line":3609},[3594,7182,3714],{"class":3893},[3594,7184,4210],{"class":3897},[3594,7186,4213],{"class":3818},[3594,7188,7189],{"class":3596,"line":3615},[3594,7190,4218],{"class":3818},[3594,7192,7193],{"class":3596,"line":3622},[3594,7194,4223],{"class":3818},[3594,7196,7197,7199],{"class":3596,"line":3628},[3594,7198,4724],{"class":3893},[3594,7200,7201],{"class":3818},"   ch;\n",[3594,7203,7204,7206],{"class":3596,"line":3634},[3594,7205,4724],{"class":3893},[3594,7207,7208],{"class":3818},"   lineNum;\n",[3594,7210,7211,7213],{"class":3596,"line":3640},[3594,7212,4724],{"class":3893},[3594,7214,7215],{"class":3818},"   lineLen;\n",[3594,7217,7218],{"class":3596,"line":3645},[3594,7219,3619],{"emptyLinePlaceholder":3618},[3594,7221,7222],{"class":3596,"line":3651},[3594,7223,7224],{"class":3776},"    \u002F\u002F Створимо тестовий файл\n",[3594,7226,7227,7229,7231,7233,7236,7238,7240],{"class":3596,"line":3657},[3594,7228,4237],{"class":3818},[3594,7230,4240],{"class":3897},[3594,7232,3901],{"class":3818},[3594,7234,7235],{"class":3772},"\"text.txt\"",[3594,7237,3860],{"class":3818},[3594,7239,4009],{"class":3772},[3594,7241,3923],{"class":3818},[3594,7243,7244,7246,7248,7250,7252,7254,7256],{"class":3596,"line":3663},[3594,7245,4260],{"class":3768},[3594,7247,4263],{"class":3818},[3594,7249,3952],{"class":3893},[3594,7251,6410],{"class":3818},[3594,7253,6413],{"class":3768},[3594,7255,4304],{"class":4303},[3594,7257,6418],{"class":3818},[3594,7259,7260,7262,7264,7267,7269,7271],{"class":3596,"line":4276},[3594,7261,4330],{"class":3897},[3594,7263,4333],{"class":3818},[3594,7265,7266],{"class":3772},"\"Hello, World!",[3594,7268,4289],{"class":4288},[3594,7270,4292],{"class":3772},[3594,7272,3923],{"class":3818},[3594,7274,7275,7277,7279,7282,7284,7286],{"class":3596,"line":4297},[3594,7276,4330],{"class":3897},[3594,7278,4333],{"class":3818},[3594,7280,7281],{"class":3772},"\"C programming",[3594,7283,4289],{"class":4288},[3594,7285,4292],{"class":3772},[3594,7287,3923],{"class":3818},[3594,7289,7290,7292,7294,7297,7299,7301],{"class":3596,"line":4310},[3594,7291,4330],{"class":3897},[3594,7293,4333],{"class":3818},[3594,7295,7296],{"class":3772},"\"File I\u002FO",[3594,7298,4289],{"class":4288},[3594,7300,4292],{"class":3772},[3594,7302,3923],{"class":3818},[3594,7304,7305,7307],{"class":3596,"line":4316},[3594,7306,4369],{"class":3897},[3594,7308,4372],{"class":3818},[3594,7310,7311],{"class":3596,"line":4321},[3594,7312,3619],{"emptyLinePlaceholder":3618},[3594,7314,7315],{"class":3596,"line":4327},[3594,7316,7317],{"class":3776},"    \u002F\u002F Відкриваємо для посимвольного читання\n",[3594,7319,7320,7322,7324,7326,7328,7330,7332],{"class":3596,"line":4345},[3594,7321,4237],{"class":3818},[3594,7323,4240],{"class":3897},[3594,7325,3901],{"class":3818},[3594,7327,7235],{"class":3772},[3594,7329,3860],{"class":3818},[3594,7331,3993],{"class":3772},[3594,7333,3923],{"class":3818},[3594,7335,7336,7338,7340,7342],{"class":3596,"line":4361},[3594,7337,4260],{"class":3768},[3594,7339,4263],{"class":3818},[3594,7341,3952],{"class":3893},[3594,7343,4268],{"class":3818},[3594,7345,7346],{"class":3596,"line":4366},[3594,7347,4273],{"class":3818},[3594,7349,7350,7352,7354,7356,7358,7360],{"class":3596,"line":4375},[3594,7351,4279],{"class":3897},[3594,7353,4282],{"class":3818},[3594,7355,6521],{"class":3772},[3594,7357,4289],{"class":4288},[3594,7359,4292],{"class":3772},[3594,7361,3923],{"class":3818},[3594,7363,7364,7366,7368],{"class":3596,"line":4386},[3594,7365,4300],{"class":3768},[3594,7367,4304],{"class":4303},[3594,7369,4307],{"class":3818},[3594,7371,7372],{"class":3596,"line":4876},[3594,7373,4313],{"class":3818},[3594,7375,7376],{"class":3596,"line":4881},[3594,7377,3619],{"emptyLinePlaceholder":3618},[3594,7379,7380,7383,7385],{"class":3596,"line":4890},[3594,7381,7382],{"class":3818},"    lineNum = ",[3594,7384,3722],{"class":4303},[3594,7386,4307],{"class":3818},[3594,7388,7389,7392,7394],{"class":3596,"line":5536},[3594,7390,7391],{"class":3818},"    lineLen = ",[3594,7393,3718],{"class":4303},[3594,7395,4307],{"class":3818},[3594,7397,7398],{"class":3596,"line":5542},[3594,7399,3619],{"emptyLinePlaceholder":3618},[3594,7401,7402,7404,7407,7410],{"class":3596,"line":5581},[3594,7403,6074],{"class":3768},[3594,7405,7406],{"class":3818}," ((ch = ",[3594,7408,7409],{"class":3897},"fgetc",[3594,7411,7412],{"class":3818},"(dataFile)) != EOF)\n",[3594,7414,7415],{"class":3596,"line":5617},[3594,7416,4273],{"class":3818},[3594,7418,7419,7422,7425,7428,7430,7432],{"class":3596,"line":5622},[3594,7420,7421],{"class":3768},"        if",[3594,7423,7424],{"class":3818}," (ch == ",[3594,7426,7427],{"class":3772},"'",[3594,7429,4289],{"class":4288},[3594,7431,7427],{"class":3772},[3594,7433,4268],{"class":3818},[3594,7435,7436],{"class":3596,"line":5641},[3594,7437,7438],{"class":3818},"        {\n",[3594,7440,7441,7444,7446,7449,7451,7453,7455,7458,7460,7462],{"class":3596,"line":5646},[3594,7442,7443],{"class":3897},"            fprintf",[3594,7445,5219],{"class":3818},[3594,7447,7448],{"class":3772},"\"Рядок ",[3594,7450,4970],{"class":3910},[3594,7452,4967],{"class":3772},[3594,7454,4970],{"class":3910},[3594,7456,7457],{"class":3772}," символів",[3594,7459,4289],{"class":4288},[3594,7461,4292],{"class":3772},[3594,7463,7464],{"class":3818},", lineNum, lineLen);\n",[3594,7466,7467],{"class":3596,"line":5670},[3594,7468,7469],{"class":3818},"            lineNum++;\n",[3594,7471,7472,7475,7477],{"class":3596,"line":5684},[3594,7473,7474],{"class":3818},"            lineLen = ",[3594,7476,3718],{"class":4303},[3594,7478,4307],{"class":3818},[3594,7480,7481],{"class":3596,"line":5696},[3594,7482,7483],{"class":3818},"        }\n",[3594,7485,7486],{"class":3596,"line":5708},[3594,7487,7488],{"class":3768},"        else\n",[3594,7490,7491],{"class":3596,"line":5713},[3594,7492,7438],{"class":3818},[3594,7494,7495],{"class":3596,"line":5718},[3594,7496,7497],{"class":3818},"            lineLen++;\n",[3594,7499,7500],{"class":3596,"line":5725},[3594,7501,7483],{"class":3818},[3594,7503,7504],{"class":3596,"line":5734},[3594,7505,4313],{"class":3818},[3594,7507,7508],{"class":3596,"line":5739},[3594,7509,3619],{"emptyLinePlaceholder":3618},[3594,7511,7512],{"class":3596,"line":5748},[3594,7513,7514],{"class":3776},"    \u002F\u002F Останній рядок без '\\n'\n",[3594,7516,7517,7519,7522,7524],{"class":3596,"line":6712},[3594,7518,4260],{"class":3768},[3594,7520,7521],{"class":3818}," (lineLen > ",[3594,7523,3718],{"class":4303},[3594,7525,4268],{"class":3818},[3594,7527,7528],{"class":3596,"line":6717},[3594,7529,4273],{"class":3818},[3594,7531,7532,7534,7536,7538,7540,7542,7544,7546,7548,7550],{"class":3596,"line":6724},[3594,7533,4279],{"class":3897},[3594,7535,5219],{"class":3818},[3594,7537,7448],{"class":3772},[3594,7539,4970],{"class":3910},[3594,7541,4967],{"class":3772},[3594,7543,4970],{"class":3910},[3594,7545,7457],{"class":3772},[3594,7547,4289],{"class":4288},[3594,7549,4292],{"class":3772},[3594,7551,7464],{"class":3818},[3594,7553,7554],{"class":3596,"line":6733},[3594,7555,4313],{"class":3818},[3594,7557,7559],{"class":3596,"line":7558},48,[3594,7560,3619],{"emptyLinePlaceholder":3618},[3594,7562,7564,7566],{"class":3596,"line":7563},49,[3594,7565,4369],{"class":3897},[3594,7567,4372],{"class":3818},[3594,7569,7571,7573,7575],{"class":3596,"line":7570},50,[3594,7572,4378],{"class":3768},[3594,7574,4381],{"class":4303},[3594,7576,4307],{"class":3818},[3594,7578,7580],{"class":3596,"line":7579},51,[3594,7581,4389],{"class":3818},[4391,7583,7585,7594,7602,7609,7617],{"title":7584},".\u002FLineLength",[4395,7586,7588,4403,7591],{"className":7587},[3596],[3594,7589,4402],{"className":7590},[4401],[3424,7592,7584],{"className":7593},[4407],[4395,7595,7597,7598,7457],{"className":7596},[3596],"Рядок 1: ",[3594,7599,7601],{"className":7600},[6209],"13",[4395,7603,7605,7606,7457],{"className":7604},[3596],"Рядок 2: ",[3594,7607,7601],{"className":7608},[6209],[4395,7610,7612,7613,7457],{"className":7611},[3596],"Рядок 3: ",[3594,7614,7616],{"className":7615},[6209],"7",[4395,7618,6248,7620,3464],{"className":7619},[3596],[3594,7621,6252],{"className":7622},[4415,4407],[3955,7624,7626],{"id":7625},"приклад-копіювання-файлу-посимвольно","Приклад: копіювання файлу посимвольно",[3418,7628,7629,7630,4613,7632,7635],{},"Копіювання — класичний сценарій для ",[3439,7631,7409],{},[3439,7633,7634],{},"fputc",". Цей підхід читає і записує по одному символу, що робить його повільним, але гранично простим:",[3585,7637,7640],{"className":3757,"code":7638,"filename":7639,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nint main()\n{\n    FILE* sourceFile;\n    FILE* destFile;\n    int   ch;\n\n    sourceFile = fopen(\"text.txt\", \"r\");\n    if (sourceFile == NULL)\n    {\n        fprintf(stderr, \"Вхідний файл не знайдено\\n\");\n        return 1;\n    }\n\n    destFile = fopen(\"text_copy.txt\", \"w\");\n    if (destFile == NULL)\n    {\n        fprintf(stderr, \"Не вдалося створити вихідний файл\\n\");\n        fclose(sourceFile);\n        return 1;\n    }\n\n    \u002F\u002F Посимвольне копіювання\n    while ((ch = fgetc(sourceFile)) != EOF)\n    {\n        fputc(ch, destFile);\n    }\n\n    fclose(sourceFile);\n    fclose(destFile);\n\n    fprintf(stdout, \"Файл скопійовано у text_copy.txt\\n\");\n    return 0;\n}\n","CopyFile.cpp",[3439,7641,7642,7648,7652,7660,7664,7669,7674,7680,7684,7701,7712,7716,7731,7739,7743,7747,7765,7776,7780,7795,7803,7811,7815,7819,7824,7835,7839,7847,7851,7855,7861,7868,7872,7887,7895],{"__ignoreMap":3590},[3594,7643,7644,7646],{"class":3596,"line":3597},[3594,7645,3769],{"class":3768},[3594,7647,4192],{"class":3772},[3594,7649,7650],{"class":3596,"line":3603},[3594,7651,3619],{"emptyLinePlaceholder":3618},[3594,7653,7654,7656,7658],{"class":3596,"line":3609},[3594,7655,3714],{"class":3893},[3594,7657,4210],{"class":3897},[3594,7659,4213],{"class":3818},[3594,7661,7662],{"class":3596,"line":3615},[3594,7663,4218],{"class":3818},[3594,7665,7666],{"class":3596,"line":3622},[3594,7667,7668],{"class":3818},"    FILE* sourceFile;\n",[3594,7670,7671],{"class":3596,"line":3628},[3594,7672,7673],{"class":3818},"    FILE* destFile;\n",[3594,7675,7676,7678],{"class":3596,"line":3634},[3594,7677,4724],{"class":3893},[3594,7679,7201],{"class":3818},[3594,7681,7682],{"class":3596,"line":3640},[3594,7683,3619],{"emptyLinePlaceholder":3618},[3594,7685,7686,7689,7691,7693,7695,7697,7699],{"class":3596,"line":3645},[3594,7687,7688],{"class":3818},"    sourceFile = ",[3594,7690,4240],{"class":3897},[3594,7692,3901],{"class":3818},[3594,7694,7235],{"class":3772},[3594,7696,3860],{"class":3818},[3594,7698,3993],{"class":3772},[3594,7700,3923],{"class":3818},[3594,7702,7703,7705,7708,7710],{"class":3596,"line":3651},[3594,7704,4260],{"class":3768},[3594,7706,7707],{"class":3818}," (sourceFile == ",[3594,7709,3952],{"class":3893},[3594,7711,4268],{"class":3818},[3594,7713,7714],{"class":3596,"line":3657},[3594,7715,4273],{"class":3818},[3594,7717,7718,7720,7722,7725,7727,7729],{"class":3596,"line":3663},[3594,7719,4279],{"class":3897},[3594,7721,4282],{"class":3818},[3594,7723,7724],{"class":3772},"\"Вхідний файл не знайдено",[3594,7726,4289],{"class":4288},[3594,7728,4292],{"class":3772},[3594,7730,3923],{"class":3818},[3594,7732,7733,7735,7737],{"class":3596,"line":4276},[3594,7734,4300],{"class":3768},[3594,7736,4304],{"class":4303},[3594,7738,4307],{"class":3818},[3594,7740,7741],{"class":3596,"line":4297},[3594,7742,4313],{"class":3818},[3594,7744,7745],{"class":3596,"line":4310},[3594,7746,3619],{"emptyLinePlaceholder":3618},[3594,7748,7749,7752,7754,7756,7759,7761,7763],{"class":3596,"line":4316},[3594,7750,7751],{"class":3818},"    destFile = ",[3594,7753,4240],{"class":3897},[3594,7755,3901],{"class":3818},[3594,7757,7758],{"class":3772},"\"text_copy.txt\"",[3594,7760,3860],{"class":3818},[3594,7762,4009],{"class":3772},[3594,7764,3923],{"class":3818},[3594,7766,7767,7769,7772,7774],{"class":3596,"line":4321},[3594,7768,4260],{"class":3768},[3594,7770,7771],{"class":3818}," (destFile == ",[3594,7773,3952],{"class":3893},[3594,7775,4268],{"class":3818},[3594,7777,7778],{"class":3596,"line":4327},[3594,7779,4273],{"class":3818},[3594,7781,7782,7784,7786,7789,7791,7793],{"class":3596,"line":4345},[3594,7783,4279],{"class":3897},[3594,7785,4282],{"class":3818},[3594,7787,7788],{"class":3772},"\"Не вдалося створити вихідний файл",[3594,7790,4289],{"class":4288},[3594,7792,4292],{"class":3772},[3594,7794,3923],{"class":3818},[3594,7796,7797,7800],{"class":3596,"line":4361},[3594,7798,7799],{"class":3897},"        fclose",[3594,7801,7802],{"class":3818},"(sourceFile);\n",[3594,7804,7805,7807,7809],{"class":3596,"line":4366},[3594,7806,4300],{"class":3768},[3594,7808,4304],{"class":4303},[3594,7810,4307],{"class":3818},[3594,7812,7813],{"class":3596,"line":4375},[3594,7814,4313],{"class":3818},[3594,7816,7817],{"class":3596,"line":4386},[3594,7818,3619],{"emptyLinePlaceholder":3618},[3594,7820,7821],{"class":3596,"line":4876},[3594,7822,7823],{"class":3776},"    \u002F\u002F Посимвольне копіювання\n",[3594,7825,7826,7828,7830,7832],{"class":3596,"line":4881},[3594,7827,6074],{"class":3768},[3594,7829,7406],{"class":3818},[3594,7831,7409],{"class":3897},[3594,7833,7834],{"class":3818},"(sourceFile)) != EOF)\n",[3594,7836,7837],{"class":3596,"line":4890},[3594,7838,4273],{"class":3818},[3594,7840,7841,7844],{"class":3596,"line":5536},[3594,7842,7843],{"class":3897},"        fputc",[3594,7845,7846],{"class":3818},"(ch, destFile);\n",[3594,7848,7849],{"class":3596,"line":5542},[3594,7850,4313],{"class":3818},[3594,7852,7853],{"class":3596,"line":5581},[3594,7854,3619],{"emptyLinePlaceholder":3618},[3594,7856,7857,7859],{"class":3596,"line":5617},[3594,7858,4369],{"class":3897},[3594,7860,7802],{"class":3818},[3594,7862,7863,7865],{"class":3596,"line":5622},[3594,7864,4369],{"class":3897},[3594,7866,7867],{"class":3818},"(destFile);\n",[3594,7869,7870],{"class":3596,"line":5641},[3594,7871,3619],{"emptyLinePlaceholder":3618},[3594,7873,7874,7876,7878,7881,7883,7885],{"class":3596,"line":5646},[3594,7875,4330],{"class":3897},[3594,7877,5219],{"class":3818},[3594,7879,7880],{"class":3772},"\"Файл скопійовано у text_copy.txt",[3594,7882,4289],{"class":4288},[3594,7884,4292],{"class":3772},[3594,7886,3923],{"class":3818},[3594,7888,7889,7891,7893],{"class":3596,"line":5670},[3594,7890,4378],{"class":3768},[3594,7892,4381],{"class":4303},[3594,7894,4307],{"class":3818},[3594,7896,7897],{"class":3596,"line":5684},[3594,7898,4389],{"class":3818},[4391,7900,7902,7911,7918,7928],{"title":7901},".\u002FCopyFile",[4395,7903,7905,4403,7908],{"className":7904},[3596],[3594,7906,4402],{"className":7907},[4401],[3424,7909,7901],{"className":7910},[4407],[4395,7912,7914],{"className":7913},[3596],[3594,7915,7917],{"className":7916},[4415,4407],"Файл скопійовано у text_copy.txt",[4395,7919,7921,4403,7924],{"className":7920},[3596],[3594,7922,4402],{"className":7923},[4401],[3424,7925,7927],{"className":7926},[4407],"diff text.txt text_copy.txt",[4395,7929,7931],{"className":7930},[3596],[3594,7932,7934],{"className":7933},[4415],"(файли ідентичні — diff нічого не виводить)",[3478,7936,7937,7938,7940,7941,7944,7945,7948],{},"Зверніть на важливий патерн у ",[3439,7939,7639],{},": якщо не вдалося відкрити ",[3439,7942,7943],{},"destFile",", ми закриваємо вже відкритий ",[3439,7946,7947],{},"sourceFile"," перед виходом. Це правило ресурсного менеджменту: кожен відкритий ресурс має бути закритий, навіть за аварійного виходу.",[3493,7950],{},[3413,7952,7954],{"id":7953},"порядкове-читання-та-запис-fgets-і-fputs","Порядкове читання та запис: fgets і fputs",[3418,7956,7957,7958,3442,7961,3464],{},"Якщо посимвольні функції зручні для покрокової обробки, то для читання і запису цілих рядків тексту призначені функції ",[3439,7959,7960],{},"fgets",[3439,7962,7963],{},"fputs",[3955,7965,7967],{"id":7966},"fgets-читання-рядка","fgets — читання рядка",[3585,7969,7971],{"className":3757,"code":7970,"language":3760,"meta":3590,"style":3590},"char* fgets(char* s, int n, FILE* stream);\n",[3439,7972,7973],{"__ignoreMap":3590},[3594,7974,7975,7978,7981,7983,7985,7988,7990,7992,7995,7997,7999,8001,8003],{"class":3596,"line":3597},[3594,7976,7977],{"class":3893},"char*",[3594,7979,7980],{"class":3897}," fgets",[3594,7982,3901],{"class":3818},[3594,7984,7977],{"class":3893},[3594,7986,7987],{"class":3910}," s",[3594,7989,3860],{"class":3818},[3594,7991,3714],{"class":3893},[3594,7993,7994],{"class":3910}," n",[3594,7996,3860],{"class":3818},[3594,7998,3699],{"class":3890},[3594,8000,3894],{"class":3893},[3594,8002,4670],{"class":3910},[3594,8004,3923],{"class":3818},[3429,8006,8007,8015,8023],{},[3432,8008,8009,8014],{},[3424,8010,8011],{},[3439,8012,8013],{},"s"," — буфер, куди буде записано зчитаний рядок.",[3432,8016,8017,8022],{},[3424,8018,8019],{},[3439,8020,8021],{},"n"," — максимальна кількість символів для читання (включно з нульовим термінатором).",[3432,8024,8025,8030],{},[3424,8026,8027],{},[3439,8028,8029],{},"stream"," — файловий потік.",[3418,8032,8033,8035,8036,8038,8039,8042,8043,4403,8045,8048,8049,3464],{},[3439,8034,7960],{}," читає символи до тих пір, поки не зустріне символ нового рядка ",[3439,8037,3526],{},", не прочитає ",[3439,8040,8041],{},"n-1"," символів, або не досягне кінця файлу. Символ ",[3439,8044,3526],{},[3424,8046,8047],{},"включається"," в результуючий рядок. Рядок завжди завершується нульовим символом ",[3439,8050,8051],{},"'\\0'",[3418,8053,4675,8054,3947,8056,5850],{},[3439,8055,8013],{},[3439,8057,3952],{},[3955,8059,8061],{"id":8060},"fputs-запис-рядка","fputs — запис рядка",[3585,8063,8065],{"className":3757,"code":8064,"language":3760,"meta":3590,"style":3590},"int fputs(const char* s, FILE* stream);\n",[3439,8066,8067],{"__ignoreMap":3590},[3594,8068,8069,8071,8074,8076,8078,8080,8082,8084,8086,8088,8090],{"class":3596,"line":3597},[3594,8070,3714],{"class":3893},[3594,8072,8073],{"class":3897}," fputs",[3594,8075,3901],{"class":3818},[3594,8077,3904],{"class":3893},[3594,8079,3907],{"class":3893},[3594,8081,7987],{"class":3910},[3594,8083,3860],{"class":3818},[3594,8085,3699],{"class":3890},[3594,8087,3894],{"class":3893},[3594,8089,4670],{"class":3910},[3594,8091,3923],{"class":3818},[3418,8093,8094,8095,8097,8098,8100,8101,4403,8103,8106,8107,7155],{},"Записує рядок ",[3439,8096,8013],{}," у потік. На відміну від ",[3439,8099,7960],{},", символ ",[3439,8102,3526],{},[3424,8104,8105],{},"не додається автоматично"," — його потрібно включити в рядок явно. Повертає невід'ємне значення при успіху або ",[3439,8108,4681],{},[3955,8110,8112],{"id":8111},"приклад-порядкове-читання-файлу","Приклад: порядкове читання файлу",[3585,8114,8117],{"className":3757,"code":8115,"filename":8116,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nint main()\n{\n    FILE* dataFile;\n    char  lineBuffer[256];\n    int   lineNum;\n\n    \u002F\u002F Підготовка тестового файлу\n    dataFile = fopen(\"poem.txt\", \"w\");\n    if (dataFile == NULL) { return 1; }\n    fputs(\"Реве та стогне Дніпр широкий,\\n\", dataFile);\n    fputs(\"Сердитий вітер завива,\\n\", dataFile);\n    fputs(\"Додолу верби гне високі,\\n\", dataFile);\n    fputs(\"Горами хвилю підійма.\\n\", dataFile);\n    fclose(dataFile);\n\n    \u002F\u002F Читаємо рядок за рядком\n    dataFile = fopen(\"poem.txt\", \"r\");\n    if (dataFile == NULL)\n    {\n        fprintf(stderr, \"Файл poem.txt не знайдено\\n\");\n        return 1;\n    }\n\n    lineNum = 0;\n    while (fgets(lineBuffer, sizeof(lineBuffer), dataFile) != NULL)\n    {\n        lineNum++;\n        fprintf(stdout, \"%2d: %s\", lineNum, lineBuffer);\n    }\n\n    fclose(dataFile);\n    return 0;\n}\n","ReadLines.cpp",[3439,8118,8119,8125,8129,8137,8141,8145,8159,8165,8169,8174,8191,8207,8224,8239,8254,8269,8275,8279,8284,8300,8310,8314,8329,8337,8341,8345,8353,8374,8378,8383,8403,8407,8411,8417,8425],{"__ignoreMap":3590},[3594,8120,8121,8123],{"class":3596,"line":3597},[3594,8122,3769],{"class":3768},[3594,8124,4192],{"class":3772},[3594,8126,8127],{"class":3596,"line":3603},[3594,8128,3619],{"emptyLinePlaceholder":3618},[3594,8130,8131,8133,8135],{"class":3596,"line":3609},[3594,8132,3714],{"class":3893},[3594,8134,4210],{"class":3897},[3594,8136,4213],{"class":3818},[3594,8138,8139],{"class":3596,"line":3615},[3594,8140,4218],{"class":3818},[3594,8142,8143],{"class":3596,"line":3622},[3594,8144,4223],{"class":3818},[3594,8146,8147,8149,8152,8154,8157],{"class":3596,"line":3628},[3594,8148,5334],{"class":3893},[3594,8150,8151],{"class":3910},"  lineBuffer",[3594,8153,5035],{"class":3818},[3594,8155,8156],{"class":4303},"256",[3594,8158,5345],{"class":3818},[3594,8160,8161,8163],{"class":3596,"line":3634},[3594,8162,4724],{"class":3893},[3594,8164,7208],{"class":3818},[3594,8166,8167],{"class":3596,"line":3640},[3594,8168,3619],{"emptyLinePlaceholder":3618},[3594,8170,8171],{"class":3596,"line":3645},[3594,8172,8173],{"class":3776},"    \u002F\u002F Підготовка тестового файлу\n",[3594,8175,8176,8178,8180,8182,8185,8187,8189],{"class":3596,"line":3651},[3594,8177,4237],{"class":3818},[3594,8179,4240],{"class":3897},[3594,8181,3901],{"class":3818},[3594,8183,8184],{"class":3772},"\"poem.txt\"",[3594,8186,3860],{"class":3818},[3594,8188,4009],{"class":3772},[3594,8190,3923],{"class":3818},[3594,8192,8193,8195,8197,8199,8201,8203,8205],{"class":3596,"line":3657},[3594,8194,4260],{"class":3768},[3594,8196,4263],{"class":3818},[3594,8198,3952],{"class":3893},[3594,8200,6410],{"class":3818},[3594,8202,6413],{"class":3768},[3594,8204,4304],{"class":4303},[3594,8206,6418],{"class":3818},[3594,8208,8209,8212,8214,8217,8219,8221],{"class":3596,"line":3663},[3594,8210,8211],{"class":3897},"    fputs",[3594,8213,3901],{"class":3818},[3594,8215,8216],{"class":3772},"\"Реве та стогне Дніпр широкий,",[3594,8218,4289],{"class":4288},[3594,8220,4292],{"class":3772},[3594,8222,8223],{"class":3818},", dataFile);\n",[3594,8225,8226,8228,8230,8233,8235,8237],{"class":3596,"line":4276},[3594,8227,8211],{"class":3897},[3594,8229,3901],{"class":3818},[3594,8231,8232],{"class":3772},"\"Сердитий вітер завива,",[3594,8234,4289],{"class":4288},[3594,8236,4292],{"class":3772},[3594,8238,8223],{"class":3818},[3594,8240,8241,8243,8245,8248,8250,8252],{"class":3596,"line":4297},[3594,8242,8211],{"class":3897},[3594,8244,3901],{"class":3818},[3594,8246,8247],{"class":3772},"\"Додолу верби гне високі,",[3594,8249,4289],{"class":4288},[3594,8251,4292],{"class":3772},[3594,8253,8223],{"class":3818},[3594,8255,8256,8258,8260,8263,8265,8267],{"class":3596,"line":4310},[3594,8257,8211],{"class":3897},[3594,8259,3901],{"class":3818},[3594,8261,8262],{"class":3772},"\"Горами хвилю підійма.",[3594,8264,4289],{"class":4288},[3594,8266,4292],{"class":3772},[3594,8268,8223],{"class":3818},[3594,8270,8271,8273],{"class":3596,"line":4316},[3594,8272,4369],{"class":3897},[3594,8274,4372],{"class":3818},[3594,8276,8277],{"class":3596,"line":4321},[3594,8278,3619],{"emptyLinePlaceholder":3618},[3594,8280,8281],{"class":3596,"line":4327},[3594,8282,8283],{"class":3776},"    \u002F\u002F Читаємо рядок за рядком\n",[3594,8285,8286,8288,8290,8292,8294,8296,8298],{"class":3596,"line":4345},[3594,8287,4237],{"class":3818},[3594,8289,4240],{"class":3897},[3594,8291,3901],{"class":3818},[3594,8293,8184],{"class":3772},[3594,8295,3860],{"class":3818},[3594,8297,3993],{"class":3772},[3594,8299,3923],{"class":3818},[3594,8301,8302,8304,8306,8308],{"class":3596,"line":4361},[3594,8303,4260],{"class":3768},[3594,8305,4263],{"class":3818},[3594,8307,3952],{"class":3893},[3594,8309,4268],{"class":3818},[3594,8311,8312],{"class":3596,"line":4366},[3594,8313,4273],{"class":3818},[3594,8315,8316,8318,8320,8323,8325,8327],{"class":3596,"line":4375},[3594,8317,4279],{"class":3897},[3594,8319,4282],{"class":3818},[3594,8321,8322],{"class":3772},"\"Файл poem.txt не знайдено",[3594,8324,4289],{"class":4288},[3594,8326,4292],{"class":3772},[3594,8328,3923],{"class":3818},[3594,8330,8331,8333,8335],{"class":3596,"line":4386},[3594,8332,4300],{"class":3768},[3594,8334,4304],{"class":4303},[3594,8336,4307],{"class":3818},[3594,8338,8339],{"class":3596,"line":4876},[3594,8340,4313],{"class":3818},[3594,8342,8343],{"class":3596,"line":4881},[3594,8344,3619],{"emptyLinePlaceholder":3618},[3594,8346,8347,8349,8351],{"class":3596,"line":4890},[3594,8348,7382],{"class":3818},[3594,8350,3718],{"class":4303},[3594,8352,4307],{"class":3818},[3594,8354,8355,8357,8359,8361,8364,8367,8370,8372],{"class":3596,"line":5536},[3594,8356,6074],{"class":3768},[3594,8358,3558],{"class":3818},[3594,8360,7960],{"class":3897},[3594,8362,8363],{"class":3818},"(lineBuffer, ",[3594,8365,8366],{"class":3893},"sizeof",[3594,8368,8369],{"class":3818},"(lineBuffer), dataFile) != ",[3594,8371,3952],{"class":3893},[3594,8373,4268],{"class":3818},[3594,8375,8376],{"class":3596,"line":5542},[3594,8377,4273],{"class":3818},[3594,8379,8380],{"class":3596,"line":5581},[3594,8381,8382],{"class":3818},"        lineNum++;\n",[3594,8384,8385,8387,8389,8391,8394,8396,8398,8400],{"class":3596,"line":5617},[3594,8386,4279],{"class":3897},[3594,8388,5219],{"class":3818},[3594,8390,4292],{"class":3772},[3594,8392,8393],{"class":3910},"%2d",[3594,8395,4967],{"class":3772},[3594,8397,4976],{"class":3910},[3594,8399,4292],{"class":3772},[3594,8401,8402],{"class":3818},", lineNum, lineBuffer);\n",[3594,8404,8405],{"class":3596,"line":5622},[3594,8406,4313],{"class":3818},[3594,8408,8409],{"class":3596,"line":5641},[3594,8410,3619],{"emptyLinePlaceholder":3618},[3594,8412,8413,8415],{"class":3596,"line":5646},[3594,8414,4369],{"class":3897},[3594,8416,4372],{"class":3818},[3594,8418,8419,8421,8423],{"class":3596,"line":5670},[3594,8420,4378],{"class":3768},[3594,8422,4381],{"class":4303},[3594,8424,4307],{"class":3818},[3594,8426,8427],{"class":3596,"line":5684},[3594,8428,4389],{"class":3818},[4391,8430,8432,8441,8445,8449,8453,8457],{"title":8431},".\u002FReadLines",[4395,8433,8435,4403,8438],{"className":8434},[3596],[3594,8436,4402],{"className":8437},[4401],[3424,8439,8431],{"className":8440},[4407],[4395,8442,8444],{"className":8443},[3596]," 1: Реве та стогне Дніпр широкий,",[4395,8446,8448],{"className":8447},[3596]," 2: Сердитий вітер завива,",[4395,8450,8452],{"className":8451},[3596]," 3: Додолу верби гне високі,",[4395,8454,8456],{"className":8455},[3596]," 4: Горами хвилю підійма.",[4395,8458,6248,8460,3464],{"className":8459},[3596],[3594,8461,6252],{"className":8462},[4415,4407],[3854,8464,8465,8468,8469,8471,8472,8474],{},[3439,8466,8467],{},"sizeof(lineBuffer)"," — найкращий спосіб передати розмір буфера в ",[3439,8470,7960],{},". Він автоматично відстежує розмір масиву і захищає від переповнення буфера (buffer overflow). Ніколи не передавайте магічне число вручну — якщо розмір буфера зміниться, виклик ",[3439,8473,7960],{}," оновиться автоматично.",[3955,8476,8478],{"id":8477},"різниця-між-fgets-і-посимвольним-читанням","Різниця між fgets і посимвольним читанням",[3516,8480,8481,8499],{},[3519,8482,8485],{"icon":8483,"title":8484},"i-lucide-letter-text","fgetc (посимвольно)",[3429,8486,8487,8490,8493,8496],{},[3432,8488,8489],{},"Обробляє по одному символу",[3432,8491,8492],{},"Максимальна гнучкість: можна аналізувати кожен байт",[3432,8494,8495],{},"Повільніше при читанні великих файлів",[3432,8497,8498],{},"Підходить для: парсингу, підрахунку символів, копіювання",[3519,8500,8503],{"icon":8501,"title":8502},"i-lucide-align-justify","fgets (порядково)",[3429,8504,8505,8513,8516,8522],{},[3432,8506,8507,8508,3460,8510,8512],{},"Читає цілий рядок за раз (до ",[3439,8509,3526],{},[3439,8511,8041],{}," символів)",[3432,8514,8515],{},"Простіше для обробки текстових файлів рядок-за-рядком",[3432,8517,8518,8519,8521],{},"Включає ",[3439,8520,3526],{}," у кінці (потрібно обрізати при необхідності)",[3432,8523,8524],{},"Підходить для: читання конфігів, CSV, логів",[3493,8526],{},[3413,8528,8530],{"id":8529},"бінарні-файли-fread-і-fwrite","Бінарні файли: fread і fwrite",[3418,8532,8533,8534,8537,8538,8541],{},"До цього ми працювали виключно з текстовими файлами. Текстовий файл — це послідовність символів, де числа зберігаються у вигляді їхніх рядкових представлень. Наприклад, число ",[3439,8535,8536],{},"12345"," займає в текстовому файлі ",[3424,8539,8540],{},"5 байтів"," (по одному на кожну цифру).",[3418,8543,8544,8547,8548,8550,8551,8553,8554,8557],{},[3424,8545,8546],{},"Бінарний файл"," зберігає дані у тому вигляді, в якому вони знаходяться в оперативній пам'яті. Число ",[3439,8549,8536],{}," типу ",[3439,8552,3714],{}," займатиме рівно ",[3439,8555,8556],{},"sizeof(int) = 4"," байти незалежно від свого значення. Це дає переваги:",[3429,8559,8560,8566,8572],{},[3432,8561,8562,8565],{},[3424,8563,8564],{},"Компактність",": числа, структури займають менше місця.",[3432,8567,8568,8571],{},[3424,8569,8570],{},"Швидкість",": немає витрат на текстове перетворення.",[3432,8573,8574,8577],{},[3424,8575,8576],{},"Точність",": числа з плаваючою крапкою зберігаються без втрати точності.",[3418,8579,8580,8581,8583,8584,4967,8587,3860,8589,3860,8591,4986],{},"За відкриття бінарного файлу другим параметром ",[3439,8582,3879],{}," є рядок із символом ",[3439,8585,8586],{},"'b'",[3439,8588,4086],{},[3439,8590,4100],{},[3439,8592,4130],{},[3418,8594,8595],{},[3575,8596],{"alt":8597,"className":8598,"src":8599},"Порівняння представлення даних у текстовому та бінарному файлах",[3579],"\u002Fimages\u002Fcpp\u002Fc-style-files\u002F03.jpg",[3582,8601,8602],{},[3585,8603,8605],{"className":3587,"code":8604,"language":3589,"meta":3590,"style":3590},"@startuml\nskinparam style plain\nskinparam backgroundColor #ffffff\n\npackage \"Текстовий файл (Число 12345)\" as TxtPkg {\n  map \"Символи\" as txt {\n    0 => \"1 (0x31)\"\n    1 => \"2 (0x32)\"\n    2 => \"3 (0x33)\"\n    3 => \"4 (0x34)\"\n    4 => \"5 (0x35)\"\n  }\n}\nnote top of TxtPkg: Кожна цифра записується як ASCII-символ\\nРозмір: 5 байтів\n\npackage \"Бінарний файл (Число 12345 як int)\" as BinPkg {\n  map \"Байти\" as bin {\n    0 => \"0x39\"\n    1 => \"0x30\"\n    2 => \"0x00\"\n    3 => \"0x00\"\n  }\n}\nnote top of BinPkg: Записується як сирі байти пам'яті\\nРозмір: 4 байти\n@enduml\n",[3439,8606,8607,8611,8615,8619,8623,8628,8633,8638,8643,8648,8653,8658,8663,8667,8672,8676,8681,8686,8691,8696,8701,8706,8710,8714,8719],{"__ignoreMap":3590},[3594,8608,8609],{"class":3596,"line":3597},[3594,8610,3600],{},[3594,8612,8613],{"class":3596,"line":3603},[3594,8614,3606],{},[3594,8616,8617],{"class":3596,"line":3609},[3594,8618,3612],{},[3594,8620,8621],{"class":3596,"line":3615},[3594,8622,3619],{"emptyLinePlaceholder":3618},[3594,8624,8625],{"class":3596,"line":3622},[3594,8626,8627],{},"package \"Текстовий файл (Число 12345)\" as TxtPkg {\n",[3594,8629,8630],{"class":3596,"line":3628},[3594,8631,8632],{},"  map \"Символи\" as txt {\n",[3594,8634,8635],{"class":3596,"line":3634},[3594,8636,8637],{},"    0 => \"1 (0x31)\"\n",[3594,8639,8640],{"class":3596,"line":3640},[3594,8641,8642],{},"    1 => \"2 (0x32)\"\n",[3594,8644,8645],{"class":3596,"line":3645},[3594,8646,8647],{},"    2 => \"3 (0x33)\"\n",[3594,8649,8650],{"class":3596,"line":3651},[3594,8651,8652],{},"    3 => \"4 (0x34)\"\n",[3594,8654,8655],{"class":3596,"line":3657},[3594,8656,8657],{},"    4 => \"5 (0x35)\"\n",[3594,8659,8660],{"class":3596,"line":3663},[3594,8661,8662],{},"  }\n",[3594,8664,8665],{"class":3596,"line":4276},[3594,8666,4389],{},[3594,8668,8669],{"class":3596,"line":4297},[3594,8670,8671],{},"note top of TxtPkg: Кожна цифра записується як ASCII-символ\\nРозмір: 5 байтів\n",[3594,8673,8674],{"class":3596,"line":4310},[3594,8675,3619],{"emptyLinePlaceholder":3618},[3594,8677,8678],{"class":3596,"line":4316},[3594,8679,8680],{},"package \"Бінарний файл (Число 12345 як int)\" as BinPkg {\n",[3594,8682,8683],{"class":3596,"line":4321},[3594,8684,8685],{},"  map \"Байти\" as bin {\n",[3594,8687,8688],{"class":3596,"line":4327},[3594,8689,8690],{},"    0 => \"0x39\"\n",[3594,8692,8693],{"class":3596,"line":4345},[3594,8694,8695],{},"    1 => \"0x30\"\n",[3594,8697,8698],{"class":3596,"line":4361},[3594,8699,8700],{},"    2 => \"0x00\"\n",[3594,8702,8703],{"class":3596,"line":4366},[3594,8704,8705],{},"    3 => \"0x00\"\n",[3594,8707,8708],{"class":3596,"line":4375},[3594,8709,8662],{},[3594,8711,8712],{"class":3596,"line":4386},[3594,8713,4389],{},[3594,8715,8716],{"class":3596,"line":4876},[3594,8717,8718],{},"note top of BinPkg: Записується як сирі байти пам'яті\\nРозмір: 4 байти\n",[3594,8720,8721],{"class":3596,"line":4881},[3594,8722,3666],{},[3955,8724,8726],{"id":8725},"fwrite-запис-бінарних-даних","fwrite — запис бінарних даних",[3585,8728,8730],{"className":3757,"code":8729,"language":3760,"meta":3590,"style":3590},"size_t fwrite(const void* ptr, size_t size, size_t count, FILE* stream);\n",[3439,8731,8732],{"__ignoreMap":3590},[3594,8733,8734,8737,8740,8742,8744,8747,8750,8752,8754,8757,8759,8761,8764,8766,8768,8770,8772],{"class":3596,"line":3597},[3594,8735,8736],{"class":3893},"size_t",[3594,8738,8739],{"class":3897}," fwrite",[3594,8741,3901],{"class":3818},[3594,8743,3904],{"class":3893},[3594,8745,8746],{"class":3893}," void*",[3594,8748,8749],{"class":3910}," ptr",[3594,8751,3860],{"class":3818},[3594,8753,8736],{"class":3893},[3594,8755,8756],{"class":3910}," size",[3594,8758,3860],{"class":3818},[3594,8760,8736],{"class":3893},[3594,8762,8763],{"class":3910}," count",[3594,8765,3860],{"class":3818},[3594,8767,3699],{"class":3890},[3594,8769,3894],{"class":3893},[3594,8771,4670],{"class":3910},[3594,8773,3923],{"class":3818},[3429,8775,8776,8784,8792,8800],{},[3432,8777,8778,8783],{},[3424,8779,8780],{},[3439,8781,8782],{},"ptr"," — покажчик на дані для запису.",[3432,8785,8786,8791],{},[3424,8787,8788],{},[3439,8789,8790],{},"size"," — розмір одного елемента в байтах.",[3432,8793,8794,8799],{},[3424,8795,8796],{},[3439,8797,8798],{},"count"," — кількість елементів для запису.",[3432,8801,8802,8030],{},[3424,8803,8804],{},[3439,8805,8029],{},[3418,8807,8808,8809,8812,8813,3464],{},"Повертає кількість ",[3424,8810,8811],{},"успішно записаних елементів"," (не байтів!). При помилці значення менше ",[3439,8814,8798],{},[3955,8816,8818],{"id":8817},"fread-читання-бінарних-даних","fread — читання бінарних даних",[3585,8820,8822],{"className":3757,"code":8821,"language":3760,"meta":3590,"style":3590},"size_t fread(void* ptr, size_t size, size_t count, FILE* stream);\n",[3439,8823,8824],{"__ignoreMap":3590},[3594,8825,8826,8828,8831,8833,8836,8838,8840,8842,8844,8846,8848,8850,8852,8854,8856,8858],{"class":3596,"line":3597},[3594,8827,8736],{"class":3893},[3594,8829,8830],{"class":3897}," fread",[3594,8832,3901],{"class":3818},[3594,8834,8835],{"class":3893},"void*",[3594,8837,8749],{"class":3910},[3594,8839,3860],{"class":3818},[3594,8841,8736],{"class":3893},[3594,8843,8756],{"class":3910},[3594,8845,3860],{"class":3818},[3594,8847,8736],{"class":3893},[3594,8849,8763],{"class":3910},[3594,8851,3860],{"class":3818},[3594,8853,3699],{"class":3890},[3594,8855,3894],{"class":3893},[3594,8857,4670],{"class":3910},[3594,8859,3923],{"class":3818},[3418,8861,8862,8863,8866],{},"Параметри аналогічні ",[3439,8864,8865],{},"fwrite",". Повертає кількість успішно прочитаних елементів.",[3955,8868,8870],{"id":8869},"приклад-запис-і-читання-масиву-цілих-чисел","Приклад: запис і читання масиву цілих чисел",[3585,8872,8875],{"className":3757,"code":8873,"filename":8874,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nint main()\n{\n    FILE*  binFile;\n    int    writeData[5] = { 100, 200, 300, 400, 500 };\n    int    readData[5]  = { 0, 0, 0, 0, 0 };\n    size_t written;\n    size_t readCount;\n\n    \u002F\u002F --- Запис масиву в бінарний файл ---\n    binFile = fopen(\"array.bin\", \"wb\");\n    if (binFile == NULL)\n    {\n        fprintf(stderr, \"Помилка запису\\n\");\n        return 1;\n    }\n\n    \u002F\u002F Записуємо весь масив одним викликом\n    written = fwrite(writeData, sizeof(int), 5, binFile);\n    fprintf(stdout, \"Записано елементів: %zu\\n\", written);\n\n    fclose(binFile);\n\n    \u002F\u002F --- Читання масиву з бінарного файлу ---\n    binFile = fopen(\"array.bin\", \"rb\");\n    if (binFile == NULL)\n    {\n        fprintf(stderr, \"Помилка читання\\n\");\n        return 1;\n    }\n\n    readCount = fread(readData, sizeof(int), 5, binFile);\n    fprintf(stdout, \"Прочитано елементів: %zu\\n\", readCount);\n\n    fclose(binFile);\n\n    \u002F\u002F Виводимо прочитані дані\n    fprintf(stdout, \"Дані: \");\n    for (int i = 0; i \u003C (int)readCount; i++)\n    {\n        fprintf(stdout, \"%d \", readData[i]);\n    }\n    fprintf(stdout, \"\\n\");\n\n    return 0;\n}\n","BinaryArray.cpp",[3439,8876,8877,8883,8887,8895,8899,8904,8942,8976,8984,8991,8995,9000,9018,9029,9033,9048,9056,9060,9064,9069,9093,9112,9116,9123,9127,9132,9148,9158,9162,9177,9185,9189,9193,9216,9234,9238,9244,9248,9253,9264,9284,9288,9308,9312,9326,9330,9338],{"__ignoreMap":3590},[3594,8878,8879,8881],{"class":3596,"line":3597},[3594,8880,3769],{"class":3768},[3594,8882,4192],{"class":3772},[3594,8884,8885],{"class":3596,"line":3603},[3594,8886,3619],{"emptyLinePlaceholder":3618},[3594,8888,8889,8891,8893],{"class":3596,"line":3609},[3594,8890,3714],{"class":3893},[3594,8892,4210],{"class":3897},[3594,8894,4213],{"class":3818},[3594,8896,8897],{"class":3596,"line":3615},[3594,8898,4218],{"class":3818},[3594,8900,8901],{"class":3596,"line":3622},[3594,8902,8903],{"class":3818},"    FILE*  binFile;\n",[3594,8905,8906,8908,8911,8913,8915,8917,8920,8922,8925,8927,8930,8932,8935,8937,8940],{"class":3596,"line":3628},[3594,8907,4724],{"class":3893},[3594,8909,8910],{"class":3910},"    writeData",[3594,8912,5035],{"class":3818},[3594,8914,5038],{"class":4303},[3594,8916,5041],{"class":3818},[3594,8918,8919],{"class":4303},"100",[3594,8921,3860],{"class":3818},[3594,8923,8924],{"class":4303},"200",[3594,8926,3860],{"class":3818},[3594,8928,8929],{"class":4303},"300",[3594,8931,3860],{"class":3818},[3594,8933,8934],{"class":4303},"400",[3594,8936,3860],{"class":3818},[3594,8938,8939],{"class":4303},"500",[3594,8941,5067],{"class":3818},[3594,8943,8944,8946,8949,8951,8953,8956,8958,8960,8962,8964,8966,8968,8970,8972,8974],{"class":3596,"line":3634},[3594,8945,4724],{"class":3893},[3594,8947,8948],{"class":3910},"    readData",[3594,8950,5035],{"class":3818},[3594,8952,5038],{"class":4303},[3594,8954,8955],{"class":3818},"]  = { ",[3594,8957,3718],{"class":4303},[3594,8959,3860],{"class":3818},[3594,8961,3718],{"class":4303},[3594,8963,3860],{"class":3818},[3594,8965,3718],{"class":4303},[3594,8967,3860],{"class":3818},[3594,8969,3718],{"class":4303},[3594,8971,3860],{"class":3818},[3594,8973,3718],{"class":4303},[3594,8975,5067],{"class":3818},[3594,8977,8978,8981],{"class":3596,"line":3640},[3594,8979,8980],{"class":3893},"    size_t",[3594,8982,8983],{"class":3818}," written;\n",[3594,8985,8986,8988],{"class":3596,"line":3645},[3594,8987,8980],{"class":3893},[3594,8989,8990],{"class":3818}," readCount;\n",[3594,8992,8993],{"class":3596,"line":3651},[3594,8994,3619],{"emptyLinePlaceholder":3618},[3594,8996,8997],{"class":3596,"line":3657},[3594,8998,8999],{"class":3776},"    \u002F\u002F --- Запис масиву в бінарний файл ---\n",[3594,9001,9002,9005,9007,9009,9012,9014,9016],{"class":3596,"line":3663},[3594,9003,9004],{"class":3818},"    binFile = ",[3594,9006,4240],{"class":3897},[3594,9008,3901],{"class":3818},[3594,9010,9011],{"class":3772},"\"array.bin\"",[3594,9013,3860],{"class":3818},[3594,9015,4100],{"class":3772},[3594,9017,3923],{"class":3818},[3594,9019,9020,9022,9025,9027],{"class":3596,"line":4276},[3594,9021,4260],{"class":3768},[3594,9023,9024],{"class":3818}," (binFile == ",[3594,9026,3952],{"class":3893},[3594,9028,4268],{"class":3818},[3594,9030,9031],{"class":3596,"line":4297},[3594,9032,4273],{"class":3818},[3594,9034,9035,9037,9039,9042,9044,9046],{"class":3596,"line":4310},[3594,9036,4279],{"class":3897},[3594,9038,4282],{"class":3818},[3594,9040,9041],{"class":3772},"\"Помилка запису",[3594,9043,4289],{"class":4288},[3594,9045,4292],{"class":3772},[3594,9047,3923],{"class":3818},[3594,9049,9050,9052,9054],{"class":3596,"line":4316},[3594,9051,4300],{"class":3768},[3594,9053,4304],{"class":4303},[3594,9055,4307],{"class":3818},[3594,9057,9058],{"class":3596,"line":4321},[3594,9059,4313],{"class":3818},[3594,9061,9062],{"class":3596,"line":4327},[3594,9063,3619],{"emptyLinePlaceholder":3618},[3594,9065,9066],{"class":3596,"line":4345},[3594,9067,9068],{"class":3776},"    \u002F\u002F Записуємо весь масив одним викликом\n",[3594,9070,9071,9074,9076,9079,9081,9083,9085,9088,9090],{"class":3596,"line":4361},[3594,9072,9073],{"class":3818},"    written = ",[3594,9075,8865],{"class":3897},[3594,9077,9078],{"class":3818},"(writeData, ",[3594,9080,8366],{"class":3893},[3594,9082,3901],{"class":3818},[3594,9084,3714],{"class":3893},[3594,9086,9087],{"class":3818},"), ",[3594,9089,5038],{"class":4303},[3594,9091,9092],{"class":3818},", binFile);\n",[3594,9094,9095,9097,9099,9102,9105,9107,9109],{"class":3596,"line":4366},[3594,9096,4330],{"class":3897},[3594,9098,5219],{"class":3818},[3594,9100,9101],{"class":3772},"\"Записано елементів: ",[3594,9103,9104],{"class":3910},"%zu",[3594,9106,4289],{"class":4288},[3594,9108,4292],{"class":3772},[3594,9110,9111],{"class":3818},", written);\n",[3594,9113,9114],{"class":3596,"line":4375},[3594,9115,3619],{"emptyLinePlaceholder":3618},[3594,9117,9118,9120],{"class":3596,"line":4386},[3594,9119,4369],{"class":3897},[3594,9121,9122],{"class":3818},"(binFile);\n",[3594,9124,9125],{"class":3596,"line":4876},[3594,9126,3619],{"emptyLinePlaceholder":3618},[3594,9128,9129],{"class":3596,"line":4881},[3594,9130,9131],{"class":3776},"    \u002F\u002F --- Читання масиву з бінарного файлу ---\n",[3594,9133,9134,9136,9138,9140,9142,9144,9146],{"class":3596,"line":4890},[3594,9135,9004],{"class":3818},[3594,9137,4240],{"class":3897},[3594,9139,3901],{"class":3818},[3594,9141,9011],{"class":3772},[3594,9143,3860],{"class":3818},[3594,9145,4086],{"class":3772},[3594,9147,3923],{"class":3818},[3594,9149,9150,9152,9154,9156],{"class":3596,"line":5536},[3594,9151,4260],{"class":3768},[3594,9153,9024],{"class":3818},[3594,9155,3952],{"class":3893},[3594,9157,4268],{"class":3818},[3594,9159,9160],{"class":3596,"line":5542},[3594,9161,4273],{"class":3818},[3594,9163,9164,9166,9168,9171,9173,9175],{"class":3596,"line":5581},[3594,9165,4279],{"class":3897},[3594,9167,4282],{"class":3818},[3594,9169,9170],{"class":3772},"\"Помилка читання",[3594,9172,4289],{"class":4288},[3594,9174,4292],{"class":3772},[3594,9176,3923],{"class":3818},[3594,9178,9179,9181,9183],{"class":3596,"line":5617},[3594,9180,4300],{"class":3768},[3594,9182,4304],{"class":4303},[3594,9184,4307],{"class":3818},[3594,9186,9187],{"class":3596,"line":5622},[3594,9188,4313],{"class":3818},[3594,9190,9191],{"class":3596,"line":5641},[3594,9192,3619],{"emptyLinePlaceholder":3618},[3594,9194,9195,9198,9201,9204,9206,9208,9210,9212,9214],{"class":3596,"line":5646},[3594,9196,9197],{"class":3818},"    readCount = ",[3594,9199,9200],{"class":3897},"fread",[3594,9202,9203],{"class":3818},"(readData, ",[3594,9205,8366],{"class":3893},[3594,9207,3901],{"class":3818},[3594,9209,3714],{"class":3893},[3594,9211,9087],{"class":3818},[3594,9213,5038],{"class":4303},[3594,9215,9092],{"class":3818},[3594,9217,9218,9220,9222,9225,9227,9229,9231],{"class":3596,"line":5670},[3594,9219,4330],{"class":3897},[3594,9221,5219],{"class":3818},[3594,9223,9224],{"class":3772},"\"Прочитано елементів: ",[3594,9226,9104],{"class":3910},[3594,9228,4289],{"class":4288},[3594,9230,4292],{"class":3772},[3594,9232,9233],{"class":3818},", readCount);\n",[3594,9235,9236],{"class":3596,"line":5684},[3594,9237,3619],{"emptyLinePlaceholder":3618},[3594,9239,9240,9242],{"class":3596,"line":5696},[3594,9241,4369],{"class":3897},[3594,9243,9122],{"class":3818},[3594,9245,9246],{"class":3596,"line":5708},[3594,9247,3619],{"emptyLinePlaceholder":3618},[3594,9249,9250],{"class":3596,"line":5713},[3594,9251,9252],{"class":3776},"    \u002F\u002F Виводимо прочитані дані\n",[3594,9254,9255,9257,9259,9262],{"class":3596,"line":5718},[3594,9256,4330],{"class":3897},[3594,9258,5219],{"class":3818},[3594,9260,9261],{"class":3772},"\"Дані: \"",[3594,9263,3923],{"class":3818},[3594,9265,9266,9268,9270,9272,9274,9276,9279,9281],{"class":3596,"line":5725},[3594,9267,5143],{"class":3768},[3594,9269,3558],{"class":3818},[3594,9271,3714],{"class":3893},[3594,9273,5150],{"class":3818},[3594,9275,3718],{"class":4303},[3594,9277,9278],{"class":3818},"; i \u003C (",[3594,9280,3714],{"class":3893},[3594,9282,9283],{"class":3818},")readCount; i++)\n",[3594,9285,9286],{"class":3596,"line":5734},[3594,9287,4273],{"class":3818},[3594,9289,9290,9292,9294,9296,9298,9301,9303,9306],{"class":3596,"line":5739},[3594,9291,4279],{"class":3897},[3594,9293,5219],{"class":3818},[3594,9295,4292],{"class":3772},[3594,9297,4970],{"class":3910},[3594,9299,9300],{"class":3772}," \"",[3594,9302,3860],{"class":3818},[3594,9304,9305],{"class":3910},"readData",[3594,9307,5186],{"class":3818},[3594,9309,9310],{"class":3596,"line":5748},[3594,9311,4313],{"class":3818},[3594,9313,9314,9316,9318,9320,9322,9324],{"class":3596,"line":6712},[3594,9315,4330],{"class":3897},[3594,9317,5219],{"class":3818},[3594,9319,4292],{"class":3772},[3594,9321,4289],{"class":4288},[3594,9323,4292],{"class":3772},[3594,9325,3923],{"class":3818},[3594,9327,9328],{"class":3596,"line":6717},[3594,9329,3619],{"emptyLinePlaceholder":3618},[3594,9331,9332,9334,9336],{"class":3596,"line":6724},[3594,9333,4378],{"class":3768},[3594,9335,4381],{"class":4303},[3594,9337,4307],{"class":3818},[3594,9339,9340],{"class":3596,"line":6733},[3594,9341,4389],{"class":3818},[4391,9343,9345,9354,9361,9368,9376],{"title":9344},".\u002FBinaryArray",[4395,9346,9348,4403,9351],{"className":9347},[3596],[3594,9349,4402],{"className":9350},[4401],[3424,9352,9344],{"className":9353},[4407],[4395,9355,9357,9358],{"className":9356},[3596],"Записано елементів: ",[3594,9359,5038],{"className":9360},[6209],[4395,9362,9364,9365],{"className":9363},[3596],"Прочитано елементів: ",[3594,9366,5038],{"className":9367},[6209],[4395,9369,9371,9372],{"className":9370},[3596],"Дані: ",[3594,9373,9375],{"className":9374},[6209],"100 200 300 400 500",[4395,9377,6248,9379,3464],{"className":9378},[3596],[3594,9380,6252],{"className":9381},[4415,4407],[3955,9383,9385],{"id":9384},"запис-структур-у-бінарний-файл","Запис структур у бінарний файл",[3418,9387,9388,9389,9392],{},"Найпотужніший аспект бінарного вводу\u002Fвиводу — можливість зберегти цілу структуру ",[3424,9390,9391],{},"одним викликом",", без розбивки на окремі поля:",[3585,9394,9397],{"className":3757,"code":9395,"filename":9396,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n#include \u003Ccstring>\n\nstruct Student\n{\n    char   name[50];\n    int    age;\n    double gpa;\n};\n\nint main()\n{\n    FILE*   binFile;\n    Student writeStudents[3];\n    Student readStudents[3];\n\n    \u002F\u002F Заповнюємо структури\n    strncpy(writeStudents[0].name, \"Petrenko Ivan\", 49);\n    writeStudents[0].age = 20;\n    writeStudents[0].gpa = 4.5;\n\n    strncpy(writeStudents[1].name, \"Koval Olena\", 49);\n    writeStudents[1].age = 19;\n    writeStudents[1].gpa = 4.8;\n\n    strncpy(writeStudents[2].name, \"Boiko Mykhailo\", 49);\n    writeStudents[2].age = 21;\n    writeStudents[2].gpa = 3.9;\n\n    \u002F\u002F --- Запис ---\n    binFile = fopen(\"students.bin\", \"wb\");\n    if (binFile == NULL) { return 1; }\n\n    \u002F\u002F Записуємо весь масив структур одним викликом fwrite\n    fwrite(writeStudents, sizeof(Student), 3, binFile);\n    fclose(binFile);\n\n    \u002F\u002F --- Читання ---\n    binFile = fopen(\"students.bin\", \"rb\");\n    if (binFile == NULL) { return 1; }\n\n    size_t count = fread(readStudents, sizeof(Student), 3, binFile);\n    fclose(binFile);\n\n    \u002F\u002F Виводимо прочитані дані\n    for (size_t i = 0; i \u003C count; i++)\n    {\n        fprintf(stdout, \"%-20s | %d р. | GPA: %.2f\\n\",\n                readStudents[i].name,\n                readStudents[i].age,\n                readStudents[i].gpa);\n    }\n\n    return 0;\n}\n","BinaryStruct.cpp",[3439,9398,9399,9405,9411,9415,9421,9425,9437,9443,9449,9453,9457,9465,9469,9474,9487,9500,9504,9509,9539,9559,9577,9581,9608,9626,9644,9648,9675,9693,9711,9715,9720,9737,9753,9757,9762,9779,9785,9789,9794,9810,9826,9830,9850,9856,9860,9864,9879,9883,9910,9921,9931,9941,9946,9951,9960],{"__ignoreMap":3590},[3594,9400,9401,9403],{"class":3596,"line":3597},[3594,9402,3769],{"class":3768},[3594,9404,4192],{"class":3772},[3594,9406,9407,9409],{"class":3596,"line":3603},[3594,9408,3769],{"class":3768},[3594,9410,5313],{"class":3772},[3594,9412,9413],{"class":3596,"line":3609},[3594,9414,3619],{"emptyLinePlaceholder":3618},[3594,9416,9417,9419],{"class":3596,"line":3615},[3594,9418,5322],{"class":3893},[3594,9420,5325],{"class":3890},[3594,9422,9423],{"class":3596,"line":3622},[3594,9424,4218],{"class":3818},[3594,9426,9427,9429,9431,9433,9435],{"class":3596,"line":3628},[3594,9428,5334],{"class":3893},[3594,9430,5337],{"class":3910},[3594,9432,5035],{"class":3818},[3594,9434,5342],{"class":4303},[3594,9436,5345],{"class":3818},[3594,9438,9439,9441],{"class":3596,"line":3634},[3594,9440,4724],{"class":3893},[3594,9442,5352],{"class":3818},[3594,9444,9445,9447],{"class":3596,"line":3640},[3594,9446,5357],{"class":3893},[3594,9448,5360],{"class":3818},[3594,9450,9451],{"class":3596,"line":3645},[3594,9452,5365],{"class":3818},[3594,9454,9455],{"class":3596,"line":3651},[3594,9456,3619],{"emptyLinePlaceholder":3618},[3594,9458,9459,9461,9463],{"class":3596,"line":3657},[3594,9460,3714],{"class":3893},[3594,9462,4210],{"class":3897},[3594,9464,4213],{"class":3818},[3594,9466,9467],{"class":3596,"line":3663},[3594,9468,4218],{"class":3818},[3594,9470,9471],{"class":3596,"line":4276},[3594,9472,9473],{"class":3818},"    FILE*   binFile;\n",[3594,9475,9476,9478,9481,9483,9485],{"class":3596,"line":4297},[3594,9477,5391],{"class":3818},[3594,9479,9480],{"class":3910},"writeStudents",[3594,9482,5035],{"class":3818},[3594,9484,5399],{"class":4303},[3594,9486,5345],{"class":3818},[3594,9488,9489,9491,9494,9496,9498],{"class":3596,"line":4310},[3594,9490,5391],{"class":3818},[3594,9492,9493],{"class":3910},"readStudents",[3594,9495,5035],{"class":3818},[3594,9497,5399],{"class":4303},[3594,9499,5345],{"class":3818},[3594,9501,9502],{"class":3596,"line":4316},[3594,9503,3619],{"emptyLinePlaceholder":3618},[3594,9505,9506],{"class":3596,"line":4321},[3594,9507,9508],{"class":3776},"    \u002F\u002F Заповнюємо структури\n",[3594,9510,9511,9514,9516,9518,9520,9522,9525,9527,9529,9532,9534,9537],{"class":3596,"line":4327},[3594,9512,9513],{"class":3897},"    strncpy",[3594,9515,3901],{"class":3818},[3594,9517,9480],{"class":3910},[3594,9519,5035],{"class":3818},[3594,9521,3718],{"class":4303},[3594,9523,9524],{"class":3818},"].",[3594,9526,5679],{"class":3910},[3594,9528,3860],{"class":3818},[3594,9530,9531],{"class":3772},"\"Petrenko Ivan\"",[3594,9533,3860],{"class":3818},[3594,9535,9536],{"class":4303},"49",[3594,9538,3923],{"class":3818},[3594,9540,9541,9544,9546,9548,9550,9552,9555,9557],{"class":3596,"line":4345},[3594,9542,9543],{"class":3910},"    writeStudents",[3594,9545,5035],{"class":3818},[3594,9547,3718],{"class":4303},[3594,9549,9524],{"class":3818},[3594,9551,5691],{"class":3910},[3594,9553,9554],{"class":3818}," = ",[3594,9556,5415],{"class":4303},[3594,9558,4307],{"class":3818},[3594,9560,9561,9563,9565,9567,9569,9571,9573,9575],{"class":3596,"line":4361},[3594,9562,9543],{"class":3910},[3594,9564,5035],{"class":3818},[3594,9566,3718],{"class":4303},[3594,9568,9524],{"class":3818},[3594,9570,5703],{"class":3910},[3594,9572,9554],{"class":3818},[3594,9574,5420],{"class":4303},[3594,9576,4307],{"class":3818},[3594,9578,9579],{"class":3596,"line":4366},[3594,9580,3619],{"emptyLinePlaceholder":3618},[3594,9582,9583,9585,9587,9589,9591,9593,9595,9597,9599,9602,9604,9606],{"class":3596,"line":4375},[3594,9584,9513],{"class":3897},[3594,9586,3901],{"class":3818},[3594,9588,9480],{"class":3910},[3594,9590,5035],{"class":3818},[3594,9592,3722],{"class":4303},[3594,9594,9524],{"class":3818},[3594,9596,5679],{"class":3910},[3594,9598,3860],{"class":3818},[3594,9600,9601],{"class":3772},"\"Koval Olena\"",[3594,9603,3860],{"class":3818},[3594,9605,9536],{"class":4303},[3594,9607,3923],{"class":3818},[3594,9609,9610,9612,9614,9616,9618,9620,9622,9624],{"class":3596,"line":4386},[3594,9611,9543],{"class":3910},[3594,9613,5035],{"class":3818},[3594,9615,3722],{"class":4303},[3594,9617,9524],{"class":3818},[3594,9619,5691],{"class":3910},[3594,9621,9554],{"class":3818},[3594,9623,5436],{"class":4303},[3594,9625,4307],{"class":3818},[3594,9627,9628,9630,9632,9634,9636,9638,9640,9642],{"class":3596,"line":4876},[3594,9629,9543],{"class":3910},[3594,9631,5035],{"class":3818},[3594,9633,3722],{"class":4303},[3594,9635,9524],{"class":3818},[3594,9637,5703],{"class":3910},[3594,9639,9554],{"class":3818},[3594,9641,5441],{"class":4303},[3594,9643,4307],{"class":3818},[3594,9645,9646],{"class":3596,"line":4881},[3594,9647,3619],{"emptyLinePlaceholder":3618},[3594,9649,9650,9652,9654,9656,9658,9660,9662,9664,9666,9669,9671,9673],{"class":3596,"line":4890},[3594,9651,9513],{"class":3897},[3594,9653,3901],{"class":3818},[3594,9655,9480],{"class":3910},[3594,9657,5035],{"class":3818},[3594,9659,3726],{"class":4303},[3594,9661,9524],{"class":3818},[3594,9663,5679],{"class":3910},[3594,9665,3860],{"class":3818},[3594,9667,9668],{"class":3772},"\"Boiko Mykhailo\"",[3594,9670,3860],{"class":3818},[3594,9672,9536],{"class":4303},[3594,9674,3923],{"class":3818},[3594,9676,9677,9679,9681,9683,9685,9687,9689,9691],{"class":3596,"line":5536},[3594,9678,9543],{"class":3910},[3594,9680,5035],{"class":3818},[3594,9682,3726],{"class":4303},[3594,9684,9524],{"class":3818},[3594,9686,5691],{"class":3910},[3594,9688,9554],{"class":3818},[3594,9690,5455],{"class":4303},[3594,9692,4307],{"class":3818},[3594,9694,9695,9697,9699,9701,9703,9705,9707,9709],{"class":3596,"line":5542},[3594,9696,9543],{"class":3910},[3594,9698,5035],{"class":3818},[3594,9700,3726],{"class":4303},[3594,9702,9524],{"class":3818},[3594,9704,5703],{"class":3910},[3594,9706,9554],{"class":3818},[3594,9708,5460],{"class":4303},[3594,9710,4307],{"class":3818},[3594,9712,9713],{"class":3596,"line":5581},[3594,9714,3619],{"emptyLinePlaceholder":3618},[3594,9716,9717],{"class":3596,"line":5617},[3594,9718,9719],{"class":3776},"    \u002F\u002F --- Запис ---\n",[3594,9721,9722,9724,9726,9728,9731,9733,9735],{"class":3596,"line":5622},[3594,9723,9004],{"class":3818},[3594,9725,4240],{"class":3897},[3594,9727,3901],{"class":3818},[3594,9729,9730],{"class":3772},"\"students.bin\"",[3594,9732,3860],{"class":3818},[3594,9734,4100],{"class":3772},[3594,9736,3923],{"class":3818},[3594,9738,9739,9741,9743,9745,9747,9749,9751],{"class":3596,"line":5641},[3594,9740,4260],{"class":3768},[3594,9742,9024],{"class":3818},[3594,9744,3952],{"class":3893},[3594,9746,6410],{"class":3818},[3594,9748,6413],{"class":3768},[3594,9750,4304],{"class":4303},[3594,9752,6418],{"class":3818},[3594,9754,9755],{"class":3596,"line":5646},[3594,9756,3619],{"emptyLinePlaceholder":3618},[3594,9758,9759],{"class":3596,"line":5670},[3594,9760,9761],{"class":3776},"    \u002F\u002F Записуємо весь масив структур одним викликом fwrite\n",[3594,9763,9764,9767,9770,9772,9775,9777],{"class":3596,"line":5684},[3594,9765,9766],{"class":3897},"    fwrite",[3594,9768,9769],{"class":3818},"(writeStudents, ",[3594,9771,8366],{"class":3893},[3594,9773,9774],{"class":3818},"(Student), ",[3594,9776,5399],{"class":4303},[3594,9778,9092],{"class":3818},[3594,9780,9781,9783],{"class":3596,"line":5696},[3594,9782,4369],{"class":3897},[3594,9784,9122],{"class":3818},[3594,9786,9787],{"class":3596,"line":5708},[3594,9788,3619],{"emptyLinePlaceholder":3618},[3594,9790,9791],{"class":3596,"line":5713},[3594,9792,9793],{"class":3776},"    \u002F\u002F --- Читання ---\n",[3594,9795,9796,9798,9800,9802,9804,9806,9808],{"class":3596,"line":5718},[3594,9797,9004],{"class":3818},[3594,9799,4240],{"class":3897},[3594,9801,3901],{"class":3818},[3594,9803,9730],{"class":3772},[3594,9805,3860],{"class":3818},[3594,9807,4086],{"class":3772},[3594,9809,3923],{"class":3818},[3594,9811,9812,9814,9816,9818,9820,9822,9824],{"class":3596,"line":5725},[3594,9813,4260],{"class":3768},[3594,9815,9024],{"class":3818},[3594,9817,3952],{"class":3893},[3594,9819,6410],{"class":3818},[3594,9821,6413],{"class":3768},[3594,9823,4304],{"class":4303},[3594,9825,6418],{"class":3818},[3594,9827,9828],{"class":3596,"line":5734},[3594,9829,3619],{"emptyLinePlaceholder":3618},[3594,9831,9832,9834,9837,9839,9842,9844,9846,9848],{"class":3596,"line":5739},[3594,9833,8980],{"class":3893},[3594,9835,9836],{"class":3818}," count = ",[3594,9838,9200],{"class":3897},[3594,9840,9841],{"class":3818},"(readStudents, ",[3594,9843,8366],{"class":3893},[3594,9845,9774],{"class":3818},[3594,9847,5399],{"class":4303},[3594,9849,9092],{"class":3818},[3594,9851,9852,9854],{"class":3596,"line":5748},[3594,9853,4369],{"class":3897},[3594,9855,9122],{"class":3818},[3594,9857,9858],{"class":3596,"line":6712},[3594,9859,3619],{"emptyLinePlaceholder":3618},[3594,9861,9862],{"class":3596,"line":6717},[3594,9863,9252],{"class":3776},[3594,9865,9866,9868,9870,9872,9874,9876],{"class":3596,"line":6724},[3594,9867,5143],{"class":3768},[3594,9869,3558],{"class":3818},[3594,9871,8736],{"class":3893},[3594,9873,5150],{"class":3818},[3594,9875,3718],{"class":4303},[3594,9877,9878],{"class":3818},"; i \u003C count; i++)\n",[3594,9880,9881],{"class":3596,"line":6733},[3594,9882,4273],{"class":3818},[3594,9884,9885,9887,9889,9891,9894,9897,9899,9902,9904,9906,9908],{"class":3596,"line":7558},[3594,9886,4279],{"class":3897},[3594,9888,5219],{"class":3818},[3594,9890,4292],{"class":3772},[3594,9892,9893],{"class":3910},"%-20s",[3594,9895,9896],{"class":3772}," | ",[3594,9898,4970],{"class":3910},[3594,9900,9901],{"class":3772}," р. | GPA: ",[3594,9903,6640],{"class":3910},[3594,9905,4289],{"class":4288},[3594,9907,4292],{"class":3772},[3594,9909,5667],{"class":3818},[3594,9911,9912,9915,9917,9919],{"class":3596,"line":7563},[3594,9913,9914],{"class":3910},"                readStudents",[3594,9916,5676],{"class":3818},[3594,9918,5679],{"class":3910},[3594,9920,5667],{"class":3818},[3594,9922,9923,9925,9927,9929],{"class":3596,"line":7570},[3594,9924,9914],{"class":3910},[3594,9926,5676],{"class":3818},[3594,9928,5691],{"class":3910},[3594,9930,5667],{"class":3818},[3594,9932,9933,9935,9937,9939],{"class":3596,"line":7579},[3594,9934,9914],{"class":3910},[3594,9936,5676],{"class":3818},[3594,9938,5703],{"class":3910},[3594,9940,3923],{"class":3818},[3594,9942,9944],{"class":3596,"line":9943},52,[3594,9945,4313],{"class":3818},[3594,9947,9949],{"class":3596,"line":9948},53,[3594,9950,3619],{"emptyLinePlaceholder":3618},[3594,9952,9954,9956,9958],{"class":3596,"line":9953},54,[3594,9955,4378],{"class":3768},[3594,9957,4381],{"class":4303},[3594,9959,4307],{"class":3818},[3594,9961,9963],{"class":3596,"line":9962},55,[3594,9964,4389],{"class":3818},[4391,9966,9968,9977,9987,9997,10007],{"title":9967},".\u002FBinaryStruct",[4395,9969,9971,4403,9974],{"className":9970},[3596],[3594,9972,4402],{"className":9973},[4401],[3424,9975,9967],{"className":9976},[4407],[4395,9978,9980,9981,9901,9984],{"className":9979},[3596],"Petrenko Ivan        | ",[3594,9982,5415],{"className":9983},[6209],[3594,9985,6758],{"className":9986},[6209],[4395,9988,9990,9991,9901,9994],{"className":9989},[3596],"Koval Olena          | ",[3594,9992,5436],{"className":9993},[6209],[3594,9995,6769],{"className":9996},[6209],[4395,9998,10000,10001,9901,10004],{"className":9999},[3596],"Boiko Mykhailo       | ",[3594,10002,5455],{"className":10003},[6209],[3594,10005,6780],{"className":10006},[6209],[4395,10008,6248,10010,3464],{"className":10009},[3596],[3594,10011,6252],{"className":10012},[4415,4407],[4154,10014,10015,10016,10019],{},"Бінарні файли ",[3424,10017,10018],{},"непереносні між платформами",": структура може мати різний вирівнюваний відступ (padding) на різних компіляторах. Файл, записаний на Windows x64, може бути неправильно прочитаний на ARM64. Для переносних форматів використовуйте текстові файли або стандартизовані формати (JSON, XML, Protocol Buffers).",[3493,10021],{},[3413,10023,10025],{"id":10024},"довільний-доступ-до-файлу-fseek-ftell-rewind","Довільний доступ до файлу: fseek, ftell, rewind",[3418,10027,10028,10029,10032,10033,10036],{},"Усі розглянуті вище функції реалізують ",[3424,10030,10031],{},"послідовний доступ"," — читання або запис відбувається від початку файлу до кінця, байт за байтом. Але іноді потрібно перейти до конкретної позиції у файлі, не читаючи всього, що перед нею. Це називається ",[3424,10034,10035],{},"довільним доступом"," (random access).",[3418,10038,10039,10040,10043,10044,3860,10046,3860,10048,10050,10051,10053],{},"Кожен відкритий файл має внутрішній ",[3424,10041,10042],{},"покажчик поточної позиції"," (file position indicator). При відкритті він встановлюється на початок файлу (у режимах ",[3439,10045,3993],{},[3439,10047,4009],{},[3439,10049,4043],{},") або на кінець (у режимі ",[3439,10052,4028],{},"). Після кожної операції читання або запису покажчик автоматично зсувається на кількість прочитаних\u002Fзаписаних байтів.",[3955,10055,10057],{"id":10056},"fseek-переміщення-покажчика","fseek — переміщення покажчика",[3585,10059,10061],{"className":3757,"code":10060,"language":3760,"meta":3590,"style":3590},"int fseek(FILE* stream, long int offset, int origin);\n",[3439,10062,10063],{"__ignoreMap":3590},[3594,10064,10065,10067,10070,10072,10074,10076,10078,10080,10083,10086,10089,10091,10093,10096],{"class":3596,"line":3597},[3594,10066,3714],{"class":3893},[3594,10068,10069],{"class":3897}," fseek",[3594,10071,3901],{"class":3818},[3594,10073,3699],{"class":3890},[3594,10075,3894],{"class":3893},[3594,10077,4670],{"class":3910},[3594,10079,3860],{"class":3818},[3594,10081,10082],{"class":3893},"long",[3594,10084,10085],{"class":3893}," int",[3594,10087,10088],{"class":3910}," offset",[3594,10090,3860],{"class":3818},[3594,10092,3714],{"class":3893},[3594,10094,10095],{"class":3910}," origin",[3594,10097,3923],{"class":3818},[3429,10099,10100,10107,10115],{},[3432,10101,10102,10106],{},[3424,10103,10104],{},[3439,10105,8029],{}," — файловий покажчик.",[3432,10108,10109,10114],{},[3424,10110,10111],{},[3439,10112,10113],{},"offset"," — зсув у байтах від точки відліку (може бути від'ємним).",[3432,10116,10117,10122],{},[3424,10118,10119],{},[3439,10120,10121],{},"origin"," — точка відліку:",[3960,10124,10125,10138],{},[3963,10126,10127],{},[3966,10128,10129,10132,10135],{},[3969,10130,10131],{"align":3975},"Константа",[3969,10133,10134],{"align":3971},"Значення",[3969,10136,10137],{"align":3975},"Позиція",[3984,10139,10140,10154,10168],{},[3966,10141,10142,10147,10151],{},[3989,10143,10144],{"align":3975},[3439,10145,10146],{},"SEEK_SET",[3989,10148,10149],{"align":3971},[3439,10150,3718],{},[3989,10152,10153],{"align":3975},"Початок файлу",[3966,10155,10156,10161,10165],{},[3989,10157,10158],{"align":3975},[3439,10159,10160],{},"SEEK_CUR",[3989,10162,10163],{"align":3971},[3439,10164,3722],{},[3989,10166,10167],{"align":3975},"Поточна позиція",[3966,10169,10170,10175,10179],{},[3989,10171,10172],{"align":3975},[3439,10173,10174],{},"SEEK_END",[3989,10176,10177],{"align":3971},[3439,10178,3726],{},[3989,10180,10181],{"align":3975},"Кінець файлу",[3418,10183,4675,10184,10186],{},[3439,10185,3718],{}," при успіху і ненульове значення при помилці.",[3418,10188,10189],{},[3575,10190],{"alt":10191,"className":10192,"src":10193},"Візуалізація позиціонування у файлі за допомогою функцій fseek ftell",[3579],"\u002Fimages\u002Fcpp\u002Fc-style-files\u002F04.jpg",[3582,10195,10196],{},[3585,10197,10199],{"className":3587,"code":10198,"language":3589,"meta":3590,"style":3590},"@startuml\nskinparam style plain\nskinparam backgroundColor #ffffff\n\nrectangle \"Файл як послідовність байтів\" {\n  card \"Байти: [ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]\" as File\n}\n\nlabel \"SEEK_SET (Початок)\" as set\nlabel \"SEEK_CUR (Поточна)\" as cur\nlabel \"SEEK_END (Кінець)\" as end\n\nset --> File : \"Зсув +offset\"\ncur --> File : \"Зсув +\u002F-offset\"\nend --> File : \"Зсув -offset\"\n\nnote top of File: fseek(stream, offset, origin)\n@enduml\n",[3439,10200,10201,10205,10209,10213,10217,10222,10227,10231,10235,10240,10245,10250,10254,10259,10264,10269,10273,10278],{"__ignoreMap":3590},[3594,10202,10203],{"class":3596,"line":3597},[3594,10204,3600],{},[3594,10206,10207],{"class":3596,"line":3603},[3594,10208,3606],{},[3594,10210,10211],{"class":3596,"line":3609},[3594,10212,3612],{},[3594,10214,10215],{"class":3596,"line":3615},[3594,10216,3619],{"emptyLinePlaceholder":3618},[3594,10218,10219],{"class":3596,"line":3622},[3594,10220,10221],{},"rectangle \"Файл як послідовність байтів\" {\n",[3594,10223,10224],{"class":3596,"line":3628},[3594,10225,10226],{},"  card \"Байти: [ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ]\" as File\n",[3594,10228,10229],{"class":3596,"line":3634},[3594,10230,4389],{},[3594,10232,10233],{"class":3596,"line":3640},[3594,10234,3619],{"emptyLinePlaceholder":3618},[3594,10236,10237],{"class":3596,"line":3645},[3594,10238,10239],{},"label \"SEEK_SET (Початок)\" as set\n",[3594,10241,10242],{"class":3596,"line":3651},[3594,10243,10244],{},"label \"SEEK_CUR (Поточна)\" as cur\n",[3594,10246,10247],{"class":3596,"line":3657},[3594,10248,10249],{},"label \"SEEK_END (Кінець)\" as end\n",[3594,10251,10252],{"class":3596,"line":3663},[3594,10253,3619],{"emptyLinePlaceholder":3618},[3594,10255,10256],{"class":3596,"line":4276},[3594,10257,10258],{},"set --> File : \"Зсув +offset\"\n",[3594,10260,10261],{"class":3596,"line":4297},[3594,10262,10263],{},"cur --> File : \"Зсув +\u002F-offset\"\n",[3594,10265,10266],{"class":3596,"line":4310},[3594,10267,10268],{},"end --> File : \"Зсув -offset\"\n",[3594,10270,10271],{"class":3596,"line":4316},[3594,10272,3619],{"emptyLinePlaceholder":3618},[3594,10274,10275],{"class":3596,"line":4321},[3594,10276,10277],{},"note top of File: fseek(stream, offset, origin)\n",[3594,10279,10280],{"class":3596,"line":4327},[3594,10281,3666],{},[3955,10283,10285],{"id":10284},"ftell-отримання-поточної-позиції","ftell — отримання поточної позиції",[3585,10287,10289],{"className":3757,"code":10288,"language":3760,"meta":3590,"style":3590},"long int ftell(FILE* stream);\n",[3439,10290,10291],{"__ignoreMap":3590},[3594,10292,10293,10295,10297,10300,10302,10304,10306,10308],{"class":3596,"line":3597},[3594,10294,10082],{"class":3893},[3594,10296,10085],{"class":3893},[3594,10298,10299],{"class":3897}," ftell",[3594,10301,3901],{"class":3818},[3594,10303,3699],{"class":3890},[3594,10305,3894],{"class":3893},[3594,10307,4670],{"class":3910},[3594,10309,3923],{"class":3818},[3418,10311,10312,10313,3464],{},"Повертає поточну позицію файлового покажчика в байтах від початку файлу. При помилці повертає ",[3439,10314,10315],{},"-1L",[3955,10317,10319],{"id":10318},"rewind-повернення-на-початок","rewind — повернення на початок",[3585,10321,10323],{"className":3757,"code":10322,"language":3760,"meta":3590,"style":3590},"void rewind(FILE* stream);\n",[3439,10324,10325],{"__ignoreMap":3590},[3594,10326,10327,10330,10333,10335,10337,10339,10341],{"class":3596,"line":3597},[3594,10328,10329],{"class":3893},"void",[3594,10331,10332],{"class":3897}," rewind",[3594,10334,3901],{"class":3818},[3594,10336,3699],{"class":3890},[3594,10338,3894],{"class":3893},[3594,10340,4670],{"class":3910},[3594,10342,3923],{"class":3818},[3418,10344,10345,10346,10349],{},"Еквівалент ",[3439,10347,10348],{},"fseek(stream, 0, SEEK_SET)"," — переміщує покажчик на початок файлу і скидає прапорці помилок.",[3955,10351,10353],{"id":10352},"приклад-визначення-розміру-файлу","Приклад: визначення розміру файлу",[3418,10355,10356,10357,3442,10360,4526],{},"Класичний спосіб визначити розмір файлу за допомогою ",[3439,10358,10359],{},"fseek",[3439,10361,10362],{},"ftell",[3585,10364,10367],{"className":3757,"code":10365,"filename":10366,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nlong getFileSize(const char* filename)\n{\n    FILE*    file;\n    long     size;\n\n    file = fopen(filename, \"rb\");\n    if (file == NULL)\n    {\n        return -1;\n    }\n\n    \u002F\u002F Переміщуємо покажчик у кінець файлу\n    fseek(file, 0, SEEK_END);\n\n    \u002F\u002F Отримуємо поточну позицію — це і є розмір файлу\n    size = ftell(file);\n\n    fclose(file);\n    return size;\n}\n\nint main()\n{\n    long size;\n\n    size = getFileSize(\"students.bin\");\n    if (size == -1)\n    {\n        fprintf(stderr, \"Файл не знайдено\\n\");\n        return 1;\n    }\n\n    fprintf(stdout, \"Розмір students.bin: %ld байтів\\n\", size);\n    return 0;\n}\n","FileSize.cpp",[3439,10368,10369,10375,10379,10396,10400,10405,10413,10417,10431,10442,10446,10457,10461,10465,10470,10483,10487,10492,10502,10506,10512,10519,10523,10527,10535,10539,10545,10549,10562,10573,10577,10591,10599,10603,10607,10628,10636],{"__ignoreMap":3590},[3594,10370,10371,10373],{"class":3596,"line":3597},[3594,10372,3769],{"class":3768},[3594,10374,4192],{"class":3772},[3594,10376,10377],{"class":3596,"line":3603},[3594,10378,3619],{"emptyLinePlaceholder":3618},[3594,10380,10381,10383,10386,10388,10390,10392,10394],{"class":3596,"line":3609},[3594,10382,10082],{"class":3893},[3594,10384,10385],{"class":3897}," getFileSize",[3594,10387,3901],{"class":3818},[3594,10389,3904],{"class":3893},[3594,10391,3907],{"class":3893},[3594,10393,3911],{"class":3910},[3594,10395,4268],{"class":3818},[3594,10397,10398],{"class":3596,"line":3615},[3594,10399,4218],{"class":3818},[3594,10401,10402],{"class":3596,"line":3622},[3594,10403,10404],{"class":3818},"    FILE*    file;\n",[3594,10406,10407,10410],{"class":3596,"line":3628},[3594,10408,10409],{"class":3893},"    long",[3594,10411,10412],{"class":3818},"     size;\n",[3594,10414,10415],{"class":3596,"line":3634},[3594,10416,3619],{"emptyLinePlaceholder":3618},[3594,10418,10419,10422,10424,10427,10429],{"class":3596,"line":3640},[3594,10420,10421],{"class":3818},"    file = ",[3594,10423,4240],{"class":3897},[3594,10425,10426],{"class":3818},"(filename, ",[3594,10428,4086],{"class":3772},[3594,10430,3923],{"class":3818},[3594,10432,10433,10435,10438,10440],{"class":3596,"line":3645},[3594,10434,4260],{"class":3768},[3594,10436,10437],{"class":3818}," (file == ",[3594,10439,3952],{"class":3893},[3594,10441,4268],{"class":3818},[3594,10443,10444],{"class":3596,"line":3651},[3594,10445,4273],{"class":3818},[3594,10447,10448,10450,10453,10455],{"class":3596,"line":3657},[3594,10449,4300],{"class":3768},[3594,10451,10452],{"class":3818}," -",[3594,10454,3722],{"class":4303},[3594,10456,4307],{"class":3818},[3594,10458,10459],{"class":3596,"line":3663},[3594,10460,4313],{"class":3818},[3594,10462,10463],{"class":3596,"line":4276},[3594,10464,3619],{"emptyLinePlaceholder":3618},[3594,10466,10467],{"class":3596,"line":4297},[3594,10468,10469],{"class":3776},"    \u002F\u002F Переміщуємо покажчик у кінець файлу\n",[3594,10471,10472,10475,10478,10480],{"class":3596,"line":4310},[3594,10473,10474],{"class":3897},"    fseek",[3594,10476,10477],{"class":3818},"(file, ",[3594,10479,3718],{"class":4303},[3594,10481,10482],{"class":3818},", SEEK_END);\n",[3594,10484,10485],{"class":3596,"line":4316},[3594,10486,3619],{"emptyLinePlaceholder":3618},[3594,10488,10489],{"class":3596,"line":4321},[3594,10490,10491],{"class":3776},"    \u002F\u002F Отримуємо поточну позицію — це і є розмір файлу\n",[3594,10493,10494,10497,10499],{"class":3596,"line":4327},[3594,10495,10496],{"class":3818},"    size = ",[3594,10498,10362],{"class":3897},[3594,10500,10501],{"class":3818},"(file);\n",[3594,10503,10504],{"class":3596,"line":4345},[3594,10505,3619],{"emptyLinePlaceholder":3618},[3594,10507,10508,10510],{"class":3596,"line":4361},[3594,10509,4369],{"class":3897},[3594,10511,10501],{"class":3818},[3594,10513,10514,10516],{"class":3596,"line":4366},[3594,10515,4378],{"class":3768},[3594,10517,10518],{"class":3818}," size;\n",[3594,10520,10521],{"class":3596,"line":4375},[3594,10522,4389],{"class":3818},[3594,10524,10525],{"class":3596,"line":4386},[3594,10526,3619],{"emptyLinePlaceholder":3618},[3594,10528,10529,10531,10533],{"class":3596,"line":4876},[3594,10530,3714],{"class":3893},[3594,10532,4210],{"class":3897},[3594,10534,4213],{"class":3818},[3594,10536,10537],{"class":3596,"line":4881},[3594,10538,4218],{"class":3818},[3594,10540,10541,10543],{"class":3596,"line":4890},[3594,10542,10409],{"class":3893},[3594,10544,10518],{"class":3818},[3594,10546,10547],{"class":3596,"line":5536},[3594,10548,3619],{"emptyLinePlaceholder":3618},[3594,10550,10551,10553,10556,10558,10560],{"class":3596,"line":5542},[3594,10552,10496],{"class":3818},[3594,10554,10555],{"class":3897},"getFileSize",[3594,10557,3901],{"class":3818},[3594,10559,9730],{"class":3772},[3594,10561,3923],{"class":3818},[3594,10563,10564,10566,10569,10571],{"class":3596,"line":5581},[3594,10565,4260],{"class":3768},[3594,10567,10568],{"class":3818}," (size == -",[3594,10570,3722],{"class":4303},[3594,10572,4268],{"class":3818},[3594,10574,10575],{"class":3596,"line":5617},[3594,10576,4273],{"class":3818},[3594,10578,10579,10581,10583,10585,10587,10589],{"class":3596,"line":5622},[3594,10580,4279],{"class":3897},[3594,10582,4282],{"class":3818},[3594,10584,6521],{"class":3772},[3594,10586,4289],{"class":4288},[3594,10588,4292],{"class":3772},[3594,10590,3923],{"class":3818},[3594,10592,10593,10595,10597],{"class":3596,"line":5641},[3594,10594,4300],{"class":3768},[3594,10596,4304],{"class":4303},[3594,10598,4307],{"class":3818},[3594,10600,10601],{"class":3596,"line":5646},[3594,10602,4313],{"class":3818},[3594,10604,10605],{"class":3596,"line":5670},[3594,10606,3619],{"emptyLinePlaceholder":3618},[3594,10608,10609,10611,10613,10616,10618,10621,10623,10625],{"class":3596,"line":5684},[3594,10610,4330],{"class":3897},[3594,10612,5219],{"class":3818},[3594,10614,10615],{"class":3772},"\"Розмір students.bin: ",[3594,10617,4982],{"class":3910},[3594,10619,10620],{"class":3772}," байтів",[3594,10622,4289],{"class":4288},[3594,10624,4292],{"class":3772},[3594,10626,10627],{"class":3818},", size);\n",[3594,10629,10630,10632,10634],{"class":3596,"line":5696},[3594,10631,4378],{"class":3768},[3594,10633,4381],{"class":4303},[3594,10635,4307],{"class":3818},[3594,10637,10638],{"class":3596,"line":5708},[3594,10639,4389],{"class":3818},[4391,10641,10643,10652,10660,10667],{"title":10642},".\u002FFileSize",[4395,10644,10646,4403,10649],{"className":10645},[3596],[3594,10647,4402],{"className":10648},[4401],[3424,10650,10642],{"className":10651},[4407],[4395,10653,10655,10656,10620],{"className":10654},[3596],"Розмір students.bin: ",[3594,10657,10659],{"className":10658},[6209],"276",[4395,10661,10663],{"className":10662},[3596],[3594,10664,10666],{"className":10665},[4423],"(3 структури × sizeof(Student) = 3 × 92 байти)",[4395,10668,6248,10670,3464],{"className":10669},[3596],[3594,10671,6252],{"className":10672},[4415,4407],[3955,10674,10676],{"id":10675},"приклад-читання-конкретного-елемента-бінарного-файлу","Приклад: читання конкретного елемента бінарного файлу",[3418,10678,10679,10680,10683,10684,10687],{},"Довільний доступ особливо корисний для бінарних файлів зі структурами однакового розміру. Якщо кожен запис займає ",[3439,10681,10682],{},"sizeof(Student)"," байтів, то N-й запис знаходиться на зміщенні ",[3439,10685,10686],{},"N * sizeof(Student)"," від початку файлу.",[3585,10689,10692],{"className":3757,"code":10690,"filename":10691,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n#include \u003Ccstring>\n\nstruct Student\n{\n    char   name[50];\n    int    age;\n    double gpa;\n};\n\n\u002F\u002F Читає студента за індексом (0-based) з бінарного файлу\nint readStudentAt(const char* filename, int index, Student* result)\n{\n    FILE*    file;\n    long     offset;\n\n    file = fopen(filename, \"rb\");\n    if (file == NULL) { return -1; }\n\n    \u002F\u002F Переміщуємо покажчик до потрібного запису\n    offset = (long)(index * sizeof(Student));\n    if (fseek(file, offset, SEEK_SET) != 0)\n    {\n        fclose(file);\n        return -1;\n    }\n\n    \u002F\u002F Читаємо один запис\n    if (fread(result, sizeof(Student), 1, file) != 1)\n    {\n        fclose(file);\n        return -1;\n    }\n\n    fclose(file);\n    return 0;\n}\n\nint main()\n{\n    Student s;\n\n    \u002F\u002F Читаємо другого студента (індекс 1)\n    if (readStudentAt(\"students.bin\", 1, &s) == 0)\n    {\n        fprintf(stdout, \"Студент[1]: %s, вік %d, GPA %.2f\\n\",\n                s.name, s.age, s.gpa);\n    }\n\n    \u002F\u002F Читаємо третього студента (індекс 2)\n    if (readStudentAt(\"students.bin\", 2, &s) == 0)\n    {\n        fprintf(stdout, \"Студент[2]: %s, вік %d, GPA %.2f\\n\",\n                s.name, s.age, s.gpa);\n    }\n\n    return 0;\n}\n","RandomAccess.cpp",[3439,10693,10694,10700,10706,10710,10716,10720,10732,10738,10744,10748,10752,10757,10791,10795,10799,10806,10810,10822,10840,10844,10849,10864,10879,10883,10889,10899,10903,10907,10912,10936,10940,10946,10956,10960,10964,10970,10978,10982,10986,10994,10998,11003,11007,11012,11036,11040,11067,11094,11098,11102,11107,11129,11133,11158,11184,11188,11193,11202],{"__ignoreMap":3590},[3594,10695,10696,10698],{"class":3596,"line":3597},[3594,10697,3769],{"class":3768},[3594,10699,4192],{"class":3772},[3594,10701,10702,10704],{"class":3596,"line":3603},[3594,10703,3769],{"class":3768},[3594,10705,5313],{"class":3772},[3594,10707,10708],{"class":3596,"line":3609},[3594,10709,3619],{"emptyLinePlaceholder":3618},[3594,10711,10712,10714],{"class":3596,"line":3615},[3594,10713,5322],{"class":3893},[3594,10715,5325],{"class":3890},[3594,10717,10718],{"class":3596,"line":3622},[3594,10719,4218],{"class":3818},[3594,10721,10722,10724,10726,10728,10730],{"class":3596,"line":3628},[3594,10723,5334],{"class":3893},[3594,10725,5337],{"class":3910},[3594,10727,5035],{"class":3818},[3594,10729,5342],{"class":4303},[3594,10731,5345],{"class":3818},[3594,10733,10734,10736],{"class":3596,"line":3634},[3594,10735,4724],{"class":3893},[3594,10737,5352],{"class":3818},[3594,10739,10740,10742],{"class":3596,"line":3640},[3594,10741,5357],{"class":3893},[3594,10743,5360],{"class":3818},[3594,10745,10746],{"class":3596,"line":3645},[3594,10747,5365],{"class":3818},[3594,10749,10750],{"class":3596,"line":3651},[3594,10751,3619],{"emptyLinePlaceholder":3618},[3594,10753,10754],{"class":3596,"line":3657},[3594,10755,10756],{"class":3776},"\u002F\u002F Читає студента за індексом (0-based) з бінарного файлу\n",[3594,10758,10759,10761,10764,10766,10768,10770,10772,10774,10776,10779,10781,10784,10786,10789],{"class":3596,"line":3663},[3594,10760,3714],{"class":3893},[3594,10762,10763],{"class":3897}," readStudentAt",[3594,10765,3901],{"class":3818},[3594,10767,3904],{"class":3893},[3594,10769,3907],{"class":3893},[3594,10771,3911],{"class":3910},[3594,10773,3860],{"class":3818},[3594,10775,3714],{"class":3893},[3594,10777,10778],{"class":3910}," index",[3594,10780,3860],{"class":3818},[3594,10782,10783],{"class":3890},"Student",[3594,10785,3894],{"class":3893},[3594,10787,10788],{"class":3910}," result",[3594,10790,4268],{"class":3818},[3594,10792,10793],{"class":3596,"line":4276},[3594,10794,4218],{"class":3818},[3594,10796,10797],{"class":3596,"line":4297},[3594,10798,10404],{"class":3818},[3594,10800,10801,10803],{"class":3596,"line":4310},[3594,10802,10409],{"class":3893},[3594,10804,10805],{"class":3818},"     offset;\n",[3594,10807,10808],{"class":3596,"line":4316},[3594,10809,3619],{"emptyLinePlaceholder":3618},[3594,10811,10812,10814,10816,10818,10820],{"class":3596,"line":4321},[3594,10813,10421],{"class":3818},[3594,10815,4240],{"class":3897},[3594,10817,10426],{"class":3818},[3594,10819,4086],{"class":3772},[3594,10821,3923],{"class":3818},[3594,10823,10824,10826,10828,10830,10832,10834,10836,10838],{"class":3596,"line":4327},[3594,10825,4260],{"class":3768},[3594,10827,10437],{"class":3818},[3594,10829,3952],{"class":3893},[3594,10831,6410],{"class":3818},[3594,10833,6413],{"class":3768},[3594,10835,10452],{"class":3818},[3594,10837,3722],{"class":4303},[3594,10839,6418],{"class":3818},[3594,10841,10842],{"class":3596,"line":4345},[3594,10843,3619],{"emptyLinePlaceholder":3618},[3594,10845,10846],{"class":3596,"line":4361},[3594,10847,10848],{"class":3776},"    \u002F\u002F Переміщуємо покажчик до потрібного запису\n",[3594,10850,10851,10854,10856,10859,10861],{"class":3596,"line":4366},[3594,10852,10853],{"class":3818},"    offset = (",[3594,10855,10082],{"class":3893},[3594,10857,10858],{"class":3818},")(index * ",[3594,10860,8366],{"class":3893},[3594,10862,10863],{"class":3818},"(Student));\n",[3594,10865,10866,10868,10870,10872,10875,10877],{"class":3596,"line":4375},[3594,10867,4260],{"class":3768},[3594,10869,3558],{"class":3818},[3594,10871,10359],{"class":3897},[3594,10873,10874],{"class":3818},"(file, offset, SEEK_SET) != ",[3594,10876,3718],{"class":4303},[3594,10878,4268],{"class":3818},[3594,10880,10881],{"class":3596,"line":4386},[3594,10882,4273],{"class":3818},[3594,10884,10885,10887],{"class":3596,"line":4876},[3594,10886,7799],{"class":3897},[3594,10888,10501],{"class":3818},[3594,10890,10891,10893,10895,10897],{"class":3596,"line":4881},[3594,10892,4300],{"class":3768},[3594,10894,10452],{"class":3818},[3594,10896,3722],{"class":4303},[3594,10898,4307],{"class":3818},[3594,10900,10901],{"class":3596,"line":4890},[3594,10902,4313],{"class":3818},[3594,10904,10905],{"class":3596,"line":5536},[3594,10906,3619],{"emptyLinePlaceholder":3618},[3594,10908,10909],{"class":3596,"line":5542},[3594,10910,10911],{"class":3776},"    \u002F\u002F Читаємо один запис\n",[3594,10913,10914,10916,10918,10920,10923,10925,10927,10929,10932,10934],{"class":3596,"line":5581},[3594,10915,4260],{"class":3768},[3594,10917,3558],{"class":3818},[3594,10919,9200],{"class":3897},[3594,10921,10922],{"class":3818},"(result, ",[3594,10924,8366],{"class":3893},[3594,10926,9774],{"class":3818},[3594,10928,3722],{"class":4303},[3594,10930,10931],{"class":3818},", file) != ",[3594,10933,3722],{"class":4303},[3594,10935,4268],{"class":3818},[3594,10937,10938],{"class":3596,"line":5617},[3594,10939,4273],{"class":3818},[3594,10941,10942,10944],{"class":3596,"line":5622},[3594,10943,7799],{"class":3897},[3594,10945,10501],{"class":3818},[3594,10947,10948,10950,10952,10954],{"class":3596,"line":5641},[3594,10949,4300],{"class":3768},[3594,10951,10452],{"class":3818},[3594,10953,3722],{"class":4303},[3594,10955,4307],{"class":3818},[3594,10957,10958],{"class":3596,"line":5646},[3594,10959,4313],{"class":3818},[3594,10961,10962],{"class":3596,"line":5670},[3594,10963,3619],{"emptyLinePlaceholder":3618},[3594,10965,10966,10968],{"class":3596,"line":5684},[3594,10967,4369],{"class":3897},[3594,10969,10501],{"class":3818},[3594,10971,10972,10974,10976],{"class":3596,"line":5696},[3594,10973,4378],{"class":3768},[3594,10975,4381],{"class":4303},[3594,10977,4307],{"class":3818},[3594,10979,10980],{"class":3596,"line":5708},[3594,10981,4389],{"class":3818},[3594,10983,10984],{"class":3596,"line":5713},[3594,10985,3619],{"emptyLinePlaceholder":3618},[3594,10987,10988,10990,10992],{"class":3596,"line":5718},[3594,10989,3714],{"class":3893},[3594,10991,4210],{"class":3897},[3594,10993,4213],{"class":3818},[3594,10995,10996],{"class":3596,"line":5725},[3594,10997,4218],{"class":3818},[3594,10999,11000],{"class":3596,"line":5734},[3594,11001,11002],{"class":3818},"    Student s;\n",[3594,11004,11005],{"class":3596,"line":5739},[3594,11006,3619],{"emptyLinePlaceholder":3618},[3594,11008,11009],{"class":3596,"line":5748},[3594,11010,11011],{"class":3776},"    \u002F\u002F Читаємо другого студента (індекс 1)\n",[3594,11013,11014,11016,11018,11021,11023,11025,11027,11029,11032,11034],{"class":3596,"line":6712},[3594,11015,4260],{"class":3768},[3594,11017,3558],{"class":3818},[3594,11019,11020],{"class":3897},"readStudentAt",[3594,11022,3901],{"class":3818},[3594,11024,9730],{"class":3772},[3594,11026,3860],{"class":3818},[3594,11028,3722],{"class":4303},[3594,11030,11031],{"class":3818},", &s) == ",[3594,11033,3718],{"class":4303},[3594,11035,4268],{"class":3818},[3594,11037,11038],{"class":3596,"line":6717},[3594,11039,4273],{"class":3818},[3594,11041,11042,11044,11046,11049,11051,11054,11056,11059,11061,11063,11065],{"class":3596,"line":6724},[3594,11043,4279],{"class":3897},[3594,11045,5219],{"class":3818},[3594,11047,11048],{"class":3772},"\"Студент[1]: ",[3594,11050,4976],{"class":3910},[3594,11052,11053],{"class":3772},", вік ",[3594,11055,4970],{"class":3910},[3594,11057,11058],{"class":3772},", GPA ",[3594,11060,6640],{"class":3910},[3594,11062,4289],{"class":4288},[3594,11064,4292],{"class":3772},[3594,11066,5667],{"class":3818},[3594,11068,11069,11072,11074,11076,11078,11080,11082,11084,11086,11088,11090,11092],{"class":3596,"line":6733},[3594,11070,11071],{"class":3910},"                s",[3594,11073,3464],{"class":3818},[3594,11075,5679],{"class":3910},[3594,11077,3860],{"class":3818},[3594,11079,8013],{"class":3910},[3594,11081,3464],{"class":3818},[3594,11083,5691],{"class":3910},[3594,11085,3860],{"class":3818},[3594,11087,8013],{"class":3910},[3594,11089,3464],{"class":3818},[3594,11091,5703],{"class":3910},[3594,11093,3923],{"class":3818},[3594,11095,11096],{"class":3596,"line":7558},[3594,11097,4313],{"class":3818},[3594,11099,11100],{"class":3596,"line":7563},[3594,11101,3619],{"emptyLinePlaceholder":3618},[3594,11103,11104],{"class":3596,"line":7570},[3594,11105,11106],{"class":3776},"    \u002F\u002F Читаємо третього студента (індекс 2)\n",[3594,11108,11109,11111,11113,11115,11117,11119,11121,11123,11125,11127],{"class":3596,"line":7579},[3594,11110,4260],{"class":3768},[3594,11112,3558],{"class":3818},[3594,11114,11020],{"class":3897},[3594,11116,3901],{"class":3818},[3594,11118,9730],{"class":3772},[3594,11120,3860],{"class":3818},[3594,11122,3726],{"class":4303},[3594,11124,11031],{"class":3818},[3594,11126,3718],{"class":4303},[3594,11128,4268],{"class":3818},[3594,11130,11131],{"class":3596,"line":9943},[3594,11132,4273],{"class":3818},[3594,11134,11135,11137,11139,11142,11144,11146,11148,11150,11152,11154,11156],{"class":3596,"line":9948},[3594,11136,4279],{"class":3897},[3594,11138,5219],{"class":3818},[3594,11140,11141],{"class":3772},"\"Студент[2]: ",[3594,11143,4976],{"class":3910},[3594,11145,11053],{"class":3772},[3594,11147,4970],{"class":3910},[3594,11149,11058],{"class":3772},[3594,11151,6640],{"class":3910},[3594,11153,4289],{"class":4288},[3594,11155,4292],{"class":3772},[3594,11157,5667],{"class":3818},[3594,11159,11160,11162,11164,11166,11168,11170,11172,11174,11176,11178,11180,11182],{"class":3596,"line":9953},[3594,11161,11071],{"class":3910},[3594,11163,3464],{"class":3818},[3594,11165,5679],{"class":3910},[3594,11167,3860],{"class":3818},[3594,11169,8013],{"class":3910},[3594,11171,3464],{"class":3818},[3594,11173,5691],{"class":3910},[3594,11175,3860],{"class":3818},[3594,11177,8013],{"class":3910},[3594,11179,3464],{"class":3818},[3594,11181,5703],{"class":3910},[3594,11183,3923],{"class":3818},[3594,11185,11186],{"class":3596,"line":9962},[3594,11187,4313],{"class":3818},[3594,11189,11191],{"class":3596,"line":11190},56,[3594,11192,3619],{"emptyLinePlaceholder":3618},[3594,11194,11196,11198,11200],{"class":3596,"line":11195},57,[3594,11197,4378],{"class":3768},[3594,11199,4381],{"class":4303},[3594,11201,4307],{"class":3818},[3594,11203,11205],{"class":3596,"line":11204},58,[3594,11206,4389],{"class":3818},[4391,11208,11210,11219,11233,11247],{"title":11209},".\u002FRandomAccess",[4395,11211,11213,4403,11216],{"className":11212},[3596],[3594,11214,4402],{"className":11215},[4401],[3424,11217,11209],{"className":11218},[4407],[4395,11220,11222,11223,11053,11227,11058,11230],{"className":11221},[3596],"Студент[1]: ",[3594,11224,11226],{"className":11225},[6209],"Koval Olena",[3594,11228,5436],{"className":11229},[6209],[3594,11231,6769],{"className":11232},[6209],[4395,11234,11236,11237,11053,11241,11058,11244],{"className":11235},[3596],"Студент[2]: ",[3594,11238,11240],{"className":11239},[6209],"Boiko Mykhailo",[3594,11242,5455],{"className":11243},[6209],[3594,11245,6780],{"className":11246},[6209],[4395,11248,6248,11250,3464],{"className":11249},[3596],[3594,11251,6252],{"className":11252},[4415,4407],[3955,11254,11256],{"id":11255},"приклад-заміна-запису-у-бінарному-файлі","Приклад: заміна запису у бінарному файлі",[3418,11258,4156,11259,11261,11262,11265],{},[3439,11260,4130],{}," дозволяє ",[3424,11263,11264],{},"одночасно читати і записувати"," у файл — без його очищення. Це необхідно для модифікації окремих записів:",[3585,11267,11270],{"className":3757,"code":11268,"filename":11269,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n#include \u003Ccstring>\n\nstruct Student\n{\n    char   name[50];\n    int    age;\n    double gpa;\n};\n\n\u002F\u002F Оновлює GPA студента за індексом\nint updateGpa(const char* filename, int index, double newGpa)\n{\n    FILE*    file;\n    Student  s;\n    long     offset;\n\n    file = fopen(filename, \"r+b\");\n    if (file == NULL) { return -1; }\n\n    offset = (long)(index * sizeof(Student));\n    fseek(file, offset, SEEK_SET);\n\n    \u002F\u002F Спочатку читаємо існуючий запис\n    if (fread(&s, sizeof(Student), 1, file) != 1)\n    {\n        fclose(file);\n        return -1;\n    }\n\n    \u002F\u002F Модифікуємо поле\n    s.gpa = newGpa;\n\n    \u002F\u002F Повертаємося до початку запису і записуємо оновлений\n    fseek(file, offset, SEEK_SET);\n    fwrite(&s, sizeof(Student), 1, file);\n\n    fclose(file);\n    return 0;\n}\n\nint main()\n{\n    Student s;\n    FILE*   file;\n\n    \u002F\u002F Оновлюємо GPA другого студента\n    if (updateGpa(\"students.bin\", 1, 4.95) == 0)\n    {\n        fprintf(stdout, \"GPA оновлено успішно\\n\");\n    }\n\n    \u002F\u002F Перевіряємо результат\n    file = fopen(\"students.bin\", \"rb\");\n    if (file != NULL)\n    {\n        fseek(file, sizeof(Student), SEEK_SET);\n        fread(&s, sizeof(Student), 1, file);\n        fclose(file);\n\n        fprintf(stdout, \"Оновлений запис: %s — GPA: %.2f\\n\", s.name, s.gpa);\n    }\n\n    return 0;\n}\n","UpdateRecord.cpp",[3439,11271,11272,11278,11284,11288,11294,11298,11310,11316,11322,11326,11330,11335,11366,11370,11374,11379,11385,11389,11401,11419,11423,11435,11442,11446,11451,11474,11478,11484,11494,11498,11502,11507,11519,11523,11528,11534,11549,11553,11559,11567,11571,11575,11583,11587,11591,11596,11600,11605,11633,11637,11652,11656,11660,11665,11681,11692,11696,11708,11723,11730,11735,11774,11779,11784,11793],{"__ignoreMap":3590},[3594,11273,11274,11276],{"class":3596,"line":3597},[3594,11275,3769],{"class":3768},[3594,11277,4192],{"class":3772},[3594,11279,11280,11282],{"class":3596,"line":3603},[3594,11281,3769],{"class":3768},[3594,11283,5313],{"class":3772},[3594,11285,11286],{"class":3596,"line":3609},[3594,11287,3619],{"emptyLinePlaceholder":3618},[3594,11289,11290,11292],{"class":3596,"line":3615},[3594,11291,5322],{"class":3893},[3594,11293,5325],{"class":3890},[3594,11295,11296],{"class":3596,"line":3622},[3594,11297,4218],{"class":3818},[3594,11299,11300,11302,11304,11306,11308],{"class":3596,"line":3628},[3594,11301,5334],{"class":3893},[3594,11303,5337],{"class":3910},[3594,11305,5035],{"class":3818},[3594,11307,5342],{"class":4303},[3594,11309,5345],{"class":3818},[3594,11311,11312,11314],{"class":3596,"line":3634},[3594,11313,4724],{"class":3893},[3594,11315,5352],{"class":3818},[3594,11317,11318,11320],{"class":3596,"line":3640},[3594,11319,5357],{"class":3893},[3594,11321,5360],{"class":3818},[3594,11323,11324],{"class":3596,"line":3645},[3594,11325,5365],{"class":3818},[3594,11327,11328],{"class":3596,"line":3651},[3594,11329,3619],{"emptyLinePlaceholder":3618},[3594,11331,11332],{"class":3596,"line":3657},[3594,11333,11334],{"class":3776},"\u002F\u002F Оновлює GPA студента за індексом\n",[3594,11336,11337,11339,11342,11344,11346,11348,11350,11352,11354,11356,11358,11361,11364],{"class":3596,"line":3663},[3594,11338,3714],{"class":3893},[3594,11340,11341],{"class":3897}," updateGpa",[3594,11343,3901],{"class":3818},[3594,11345,3904],{"class":3893},[3594,11347,3907],{"class":3893},[3594,11349,3911],{"class":3910},[3594,11351,3860],{"class":3818},[3594,11353,3714],{"class":3893},[3594,11355,10778],{"class":3910},[3594,11357,3860],{"class":3818},[3594,11359,11360],{"class":3893},"double",[3594,11362,11363],{"class":3910}," newGpa",[3594,11365,4268],{"class":3818},[3594,11367,11368],{"class":3596,"line":4276},[3594,11369,4218],{"class":3818},[3594,11371,11372],{"class":3596,"line":4297},[3594,11373,10404],{"class":3818},[3594,11375,11376],{"class":3596,"line":4310},[3594,11377,11378],{"class":3818},"    Student  s;\n",[3594,11380,11381,11383],{"class":3596,"line":4316},[3594,11382,10409],{"class":3893},[3594,11384,10805],{"class":3818},[3594,11386,11387],{"class":3596,"line":4321},[3594,11388,3619],{"emptyLinePlaceholder":3618},[3594,11390,11391,11393,11395,11397,11399],{"class":3596,"line":4327},[3594,11392,10421],{"class":3818},[3594,11394,4240],{"class":3897},[3594,11396,10426],{"class":3818},[3594,11398,4130],{"class":3772},[3594,11400,3923],{"class":3818},[3594,11402,11403,11405,11407,11409,11411,11413,11415,11417],{"class":3596,"line":4345},[3594,11404,4260],{"class":3768},[3594,11406,10437],{"class":3818},[3594,11408,3952],{"class":3893},[3594,11410,6410],{"class":3818},[3594,11412,6413],{"class":3768},[3594,11414,10452],{"class":3818},[3594,11416,3722],{"class":4303},[3594,11418,6418],{"class":3818},[3594,11420,11421],{"class":3596,"line":4361},[3594,11422,3619],{"emptyLinePlaceholder":3618},[3594,11424,11425,11427,11429,11431,11433],{"class":3596,"line":4366},[3594,11426,10853],{"class":3818},[3594,11428,10082],{"class":3893},[3594,11430,10858],{"class":3818},[3594,11432,8366],{"class":3893},[3594,11434,10863],{"class":3818},[3594,11436,11437,11439],{"class":3596,"line":4375},[3594,11438,10474],{"class":3897},[3594,11440,11441],{"class":3818},"(file, offset, SEEK_SET);\n",[3594,11443,11444],{"class":3596,"line":4386},[3594,11445,3619],{"emptyLinePlaceholder":3618},[3594,11447,11448],{"class":3596,"line":4876},[3594,11449,11450],{"class":3776},"    \u002F\u002F Спочатку читаємо існуючий запис\n",[3594,11452,11453,11455,11457,11459,11462,11464,11466,11468,11470,11472],{"class":3596,"line":4881},[3594,11454,4260],{"class":3768},[3594,11456,3558],{"class":3818},[3594,11458,9200],{"class":3897},[3594,11460,11461],{"class":3818},"(&s, ",[3594,11463,8366],{"class":3893},[3594,11465,9774],{"class":3818},[3594,11467,3722],{"class":4303},[3594,11469,10931],{"class":3818},[3594,11471,3722],{"class":4303},[3594,11473,4268],{"class":3818},[3594,11475,11476],{"class":3596,"line":4890},[3594,11477,4273],{"class":3818},[3594,11479,11480,11482],{"class":3596,"line":5536},[3594,11481,7799],{"class":3897},[3594,11483,10501],{"class":3818},[3594,11485,11486,11488,11490,11492],{"class":3596,"line":5542},[3594,11487,4300],{"class":3768},[3594,11489,10452],{"class":3818},[3594,11491,3722],{"class":4303},[3594,11493,4307],{"class":3818},[3594,11495,11496],{"class":3596,"line":5581},[3594,11497,4313],{"class":3818},[3594,11499,11500],{"class":3596,"line":5617},[3594,11501,3619],{"emptyLinePlaceholder":3618},[3594,11503,11504],{"class":3596,"line":5622},[3594,11505,11506],{"class":3776},"    \u002F\u002F Модифікуємо поле\n",[3594,11508,11509,11512,11514,11516],{"class":3596,"line":5641},[3594,11510,11511],{"class":3910},"    s",[3594,11513,3464],{"class":3818},[3594,11515,5703],{"class":3910},[3594,11517,11518],{"class":3818}," = newGpa;\n",[3594,11520,11521],{"class":3596,"line":5646},[3594,11522,3619],{"emptyLinePlaceholder":3618},[3594,11524,11525],{"class":3596,"line":5670},[3594,11526,11527],{"class":3776},"    \u002F\u002F Повертаємося до початку запису і записуємо оновлений\n",[3594,11529,11530,11532],{"class":3596,"line":5684},[3594,11531,10474],{"class":3897},[3594,11533,11441],{"class":3818},[3594,11535,11536,11538,11540,11542,11544,11546],{"class":3596,"line":5696},[3594,11537,9766],{"class":3897},[3594,11539,11461],{"class":3818},[3594,11541,8366],{"class":3893},[3594,11543,9774],{"class":3818},[3594,11545,3722],{"class":4303},[3594,11547,11548],{"class":3818},", file);\n",[3594,11550,11551],{"class":3596,"line":5708},[3594,11552,3619],{"emptyLinePlaceholder":3618},[3594,11554,11555,11557],{"class":3596,"line":5713},[3594,11556,4369],{"class":3897},[3594,11558,10501],{"class":3818},[3594,11560,11561,11563,11565],{"class":3596,"line":5718},[3594,11562,4378],{"class":3768},[3594,11564,4381],{"class":4303},[3594,11566,4307],{"class":3818},[3594,11568,11569],{"class":3596,"line":5725},[3594,11570,4389],{"class":3818},[3594,11572,11573],{"class":3596,"line":5734},[3594,11574,3619],{"emptyLinePlaceholder":3618},[3594,11576,11577,11579,11581],{"class":3596,"line":5739},[3594,11578,3714],{"class":3893},[3594,11580,4210],{"class":3897},[3594,11582,4213],{"class":3818},[3594,11584,11585],{"class":3596,"line":5748},[3594,11586,4218],{"class":3818},[3594,11588,11589],{"class":3596,"line":6712},[3594,11590,11002],{"class":3818},[3594,11592,11593],{"class":3596,"line":6717},[3594,11594,11595],{"class":3818},"    FILE*   file;\n",[3594,11597,11598],{"class":3596,"line":6724},[3594,11599,3619],{"emptyLinePlaceholder":3618},[3594,11601,11602],{"class":3596,"line":6733},[3594,11603,11604],{"class":3776},"    \u002F\u002F Оновлюємо GPA другого студента\n",[3594,11606,11607,11609,11611,11614,11616,11618,11620,11622,11624,11627,11629,11631],{"class":3596,"line":7558},[3594,11608,4260],{"class":3768},[3594,11610,3558],{"class":3818},[3594,11612,11613],{"class":3897},"updateGpa",[3594,11615,3901],{"class":3818},[3594,11617,9730],{"class":3772},[3594,11619,3860],{"class":3818},[3594,11621,3722],{"class":4303},[3594,11623,3860],{"class":3818},[3594,11625,11626],{"class":4303},"4.95",[3594,11628,6610],{"class":3818},[3594,11630,3718],{"class":4303},[3594,11632,4268],{"class":3818},[3594,11634,11635],{"class":3596,"line":7563},[3594,11636,4273],{"class":3818},[3594,11638,11639,11641,11643,11646,11648,11650],{"class":3596,"line":7570},[3594,11640,4279],{"class":3897},[3594,11642,5219],{"class":3818},[3594,11644,11645],{"class":3772},"\"GPA оновлено успішно",[3594,11647,4289],{"class":4288},[3594,11649,4292],{"class":3772},[3594,11651,3923],{"class":3818},[3594,11653,11654],{"class":3596,"line":7579},[3594,11655,4313],{"class":3818},[3594,11657,11658],{"class":3596,"line":9943},[3594,11659,3619],{"emptyLinePlaceholder":3618},[3594,11661,11662],{"class":3596,"line":9948},[3594,11663,11664],{"class":3776},"    \u002F\u002F Перевіряємо результат\n",[3594,11666,11667,11669,11671,11673,11675,11677,11679],{"class":3596,"line":9953},[3594,11668,10421],{"class":3818},[3594,11670,4240],{"class":3897},[3594,11672,3901],{"class":3818},[3594,11674,9730],{"class":3772},[3594,11676,3860],{"class":3818},[3594,11678,4086],{"class":3772},[3594,11680,3923],{"class":3818},[3594,11682,11683,11685,11688,11690],{"class":3596,"line":9962},[3594,11684,4260],{"class":3768},[3594,11686,11687],{"class":3818}," (file != ",[3594,11689,3952],{"class":3893},[3594,11691,4268],{"class":3818},[3594,11693,11694],{"class":3596,"line":11190},[3594,11695,4273],{"class":3818},[3594,11697,11698,11701,11703,11705],{"class":3596,"line":11195},[3594,11699,11700],{"class":3897},"        fseek",[3594,11702,10477],{"class":3818},[3594,11704,8366],{"class":3893},[3594,11706,11707],{"class":3818},"(Student), SEEK_SET);\n",[3594,11709,11710,11713,11715,11717,11719,11721],{"class":3596,"line":11204},[3594,11711,11712],{"class":3897},"        fread",[3594,11714,11461],{"class":3818},[3594,11716,8366],{"class":3893},[3594,11718,9774],{"class":3818},[3594,11720,3722],{"class":4303},[3594,11722,11548],{"class":3818},[3594,11724,11726,11728],{"class":3596,"line":11725},59,[3594,11727,7799],{"class":3897},[3594,11729,10501],{"class":3818},[3594,11731,11733],{"class":3596,"line":11732},60,[3594,11734,3619],{"emptyLinePlaceholder":3618},[3594,11736,11738,11740,11742,11745,11747,11750,11752,11754,11756,11758,11760,11762,11764,11766,11768,11770,11772],{"class":3596,"line":11737},61,[3594,11739,4279],{"class":3897},[3594,11741,5219],{"class":3818},[3594,11743,11744],{"class":3772},"\"Оновлений запис: ",[3594,11746,4976],{"class":3910},[3594,11748,11749],{"class":3772}," — GPA: ",[3594,11751,6640],{"class":3910},[3594,11753,4289],{"class":4288},[3594,11755,4292],{"class":3772},[3594,11757,3860],{"class":3818},[3594,11759,8013],{"class":3910},[3594,11761,3464],{"class":3818},[3594,11763,5679],{"class":3910},[3594,11765,3860],{"class":3818},[3594,11767,8013],{"class":3910},[3594,11769,3464],{"class":3818},[3594,11771,5703],{"class":3910},[3594,11773,3923],{"class":3818},[3594,11775,11777],{"class":3596,"line":11776},62,[3594,11778,4313],{"class":3818},[3594,11780,11782],{"class":3596,"line":11781},63,[3594,11783,3619],{"emptyLinePlaceholder":3618},[3594,11785,11787,11789,11791],{"class":3596,"line":11786},64,[3594,11788,4378],{"class":3768},[3594,11790,4381],{"class":4303},[3594,11792,4307],{"class":3818},[3594,11794,11796],{"class":3596,"line":11795},65,[3594,11797,4389],{"class":3818},[4391,11799,11801,11810,11817,11827],{"title":11800},".\u002FUpdateRecord",[4395,11802,11804,4403,11807],{"className":11803},[3596],[3594,11805,4402],{"className":11806},[4401],[3424,11808,11800],{"className":11809},[4407],[4395,11811,11813],{"className":11812},[3596],[3594,11814,11816],{"className":11815},[4415,4407],"GPA оновлено успішно",[4395,11818,11820,11821,11749,11824],{"className":11819},[3596],"Оновлений запис: ",[3594,11822,11226],{"className":11823},[6209],[3594,11825,11626],{"className":11826},[6209],[4395,11828,6248,11830,3464],{"className":11829},[3596],[3594,11831,6252],{"className":11832},[4415,4407],[3493,11834],{},[3413,11836,11838],{"id":11837},"очищення-буфера-fflush","Очищення буфера: fflush",[3418,11840,3876,11841,11843],{},[3439,11842,3570],{}," примусово скидає вміст буфера виводу на фізичний пристрій (диск, екран) без закриття потоку.",[3585,11845,11847],{"className":3757,"code":11846,"language":3760,"meta":3590,"style":3590},"int fflush(FILE* stream);\n",[3439,11848,11849],{"__ignoreMap":3590},[3594,11850,11851,11853,11856,11858,11860,11862,11864],{"class":3596,"line":3597},[3594,11852,3714],{"class":3893},[3594,11854,11855],{"class":3897}," fflush",[3594,11857,3901],{"class":3818},[3594,11859,3699],{"class":3890},[3594,11861,3894],{"class":3893},[3594,11863,4670],{"class":3910},[3594,11865,3923],{"class":3818},[3418,11867,4675,11868,4678,11870,7155],{},[3439,11869,3718],{},[3439,11871,4681],{},[3418,11873,11874,11875,11877,11878,11881,11882,3464],{},"Передача ",[3439,11876,3952],{}," як аргумент скидає ",[3424,11879,11880],{},"всі"," відкриті буферизовані потоки: ",[3439,11883,11884],{},"fflush(NULL)",[3955,11886,11888],{"id":11887},"коли-потрібен-fflush","Коли потрібен fflush?",[3418,11890,11891,11892,11895,11896,11898,11899,11901],{},"У більшості сценаріїв ",[3439,11893,11894],{},"fflush"," не потрібен: дані скидаються автоматично при ",[3439,11897,3561],{},". Але є ситуації, де явний ",[3439,11900,11894],{}," необхідний:",[3545,11903,11904,11916,11924],{},[3432,11905,11906,11909,11910,11912,11913,11915],{},[3424,11907,11908],{},"Перед читанням після запису",": якщо ви записали дані у файл у режимі ",[3439,11911,4130],{}," і хочете одразу прочитати їх назад, без ",[3439,11914,11894],{}," можна прочитати застарілі дані з буфера.",[3432,11917,11918,11921,11922,3464],{},[3424,11919,11920],{},"Лог-файли при аварійному завершенні",": якщо програма може аварійно завершитися, запишіть критичні повідомлення і одразу виконайте ",[3439,11923,11894],{},[3432,11925,11926,11929],{},[3424,11927,11928],{},"Тривала взаємодія з бінарним файлом",": при частих зчитуваннях і записах у одному файлі очищення буфера між ними запобігає неузгодженості.",[3585,11931,11934],{"className":3757,"code":11932,"filename":11933,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n#include \u003Ccstring>\n\nint main()\n{\n    FILE* logFile;\n\n    logFile = fopen(\"critical.log\", \"w\");\n    if (logFile == NULL) { return 1; }\n\n    fprintf(logFile, \"[START] Програма запущена\\n\");\n    fflush(logFile);  \u002F\u002F Гарантуємо запис на диск одразу\n\n    \u002F\u002F ... довга операція ...\n    fprintf(logFile, \"[INFO] Операція розпочата\\n\");\n    fflush(logFile);  \u002F\u002F Ще одне примусове скидання\n\n    \u002F\u002F Якщо після цього рядка програма впаде —\n    \u002F\u002F попередні записи вже є на диску\n    fprintf(logFile, \"[END] Завершено\\n\");\n\n    fclose(logFile);\n    return 0;\n}\n","FlushExample.cpp",[3439,11935,11936,11942,11948,11952,11960,11964,11968,11972,11989,12005,12009,12024,12035,12039,12044,12059,12068,12072,12077,12082,12097,12101,12107,12115],{"__ignoreMap":3590},[3594,11937,11938,11940],{"class":3596,"line":3597},[3594,11939,3769],{"class":3768},[3594,11941,4192],{"class":3772},[3594,11943,11944,11946],{"class":3596,"line":3603},[3594,11945,3769],{"class":3768},[3594,11947,5313],{"class":3772},[3594,11949,11950],{"class":3596,"line":3609},[3594,11951,3619],{"emptyLinePlaceholder":3618},[3594,11953,11954,11956,11958],{"class":3596,"line":3615},[3594,11955,3714],{"class":3893},[3594,11957,4210],{"class":3897},[3594,11959,4213],{"class":3818},[3594,11961,11962],{"class":3596,"line":3622},[3594,11963,4218],{"class":3818},[3594,11965,11966],{"class":3596,"line":3628},[3594,11967,4719],{"class":3818},[3594,11969,11970],{"class":3596,"line":3634},[3594,11971,3619],{"emptyLinePlaceholder":3618},[3594,11973,11974,11976,11978,11980,11983,11985,11987],{"class":3596,"line":3640},[3594,11975,4736],{"class":3818},[3594,11977,4240],{"class":3897},[3594,11979,3901],{"class":3818},[3594,11981,11982],{"class":3772},"\"critical.log\"",[3594,11984,3860],{"class":3818},[3594,11986,4009],{"class":3772},[3594,11988,3923],{"class":3818},[3594,11990,11991,11993,11995,11997,11999,12001,12003],{"class":3596,"line":3645},[3594,11992,4260],{"class":3768},[3594,11994,4756],{"class":3818},[3594,11996,3952],{"class":3893},[3594,11998,6410],{"class":3818},[3594,12000,6413],{"class":3768},[3594,12002,4304],{"class":4303},[3594,12004,6418],{"class":3818},[3594,12006,12007],{"class":3596,"line":3651},[3594,12008,3619],{"emptyLinePlaceholder":3618},[3594,12010,12011,12013,12015,12018,12020,12022],{"class":3596,"line":3657},[3594,12012,4330],{"class":3897},[3594,12014,4802],{"class":3818},[3594,12016,12017],{"class":3772},"\"[START] Програма запущена",[3594,12019,4289],{"class":4288},[3594,12021,4292],{"class":3772},[3594,12023,3923],{"class":3818},[3594,12025,12026,12029,12032],{"class":3596,"line":3663},[3594,12027,12028],{"class":3897},"    fflush",[3594,12030,12031],{"class":3818},"(logFile);",[3594,12033,12034],{"class":3776},"  \u002F\u002F Гарантуємо запис на диск одразу\n",[3594,12036,12037],{"class":3596,"line":4276},[3594,12038,3619],{"emptyLinePlaceholder":3618},[3594,12040,12041],{"class":3596,"line":4297},[3594,12042,12043],{"class":3776},"    \u002F\u002F ... довга операція ...\n",[3594,12045,12046,12048,12050,12053,12055,12057],{"class":3596,"line":4310},[3594,12047,4330],{"class":3897},[3594,12049,4802],{"class":3818},[3594,12051,12052],{"class":3772},"\"[INFO] Операція розпочата",[3594,12054,4289],{"class":4288},[3594,12056,4292],{"class":3772},[3594,12058,3923],{"class":3818},[3594,12060,12061,12063,12065],{"class":3596,"line":4316},[3594,12062,12028],{"class":3897},[3594,12064,12031],{"class":3818},[3594,12066,12067],{"class":3776},"  \u002F\u002F Ще одне примусове скидання\n",[3594,12069,12070],{"class":3596,"line":4321},[3594,12071,3619],{"emptyLinePlaceholder":3618},[3594,12073,12074],{"class":3596,"line":4327},[3594,12075,12076],{"class":3776},"    \u002F\u002F Якщо після цього рядка програма впаде —\n",[3594,12078,12079],{"class":3596,"line":4345},[3594,12080,12081],{"class":3776},"    \u002F\u002F попередні записи вже є на диску\n",[3594,12083,12084,12086,12088,12091,12093,12095],{"class":3596,"line":4361},[3594,12085,4330],{"class":3897},[3594,12087,4802],{"class":3818},[3594,12089,12090],{"class":3772},"\"[END] Завершено",[3594,12092,4289],{"class":4288},[3594,12094,4292],{"class":3772},[3594,12096,3923],{"class":3818},[3594,12098,12099],{"class":3596,"line":4366},[3594,12100,3619],{"emptyLinePlaceholder":3618},[3594,12102,12103,12105],{"class":3596,"line":4375},[3594,12104,4369],{"class":3897},[3594,12106,4831],{"class":3818},[3594,12108,12109,12111,12113],{"class":3596,"line":4386},[3594,12110,4378],{"class":3768},[3594,12112,4381],{"class":4303},[3594,12114,4307],{"class":3818},[3594,12116,12117],{"class":3596,"line":4876},[3594,12118,4389],{"class":3818},[3478,12120,12121,12123,12124,12127,12128,12130,12131,12134,12135,12138,12139,12141],{},[3439,12122,11894],{}," застосовується лише до ",[3424,12125,12126],{},"вихідних"," потоків. Виклик ",[3439,12129,3570],{}," для вхідного потоку (наприклад, ",[3439,12132,12133],{},"fflush(stdin)",") — це ",[3424,12136,12137],{},"невизначена поведінка"," за стандартом C і дає різні результати на різних компіляторах. Ніколи не використовуйте ",[3439,12140,12133],{}," для очищення буфера вводу.",[3493,12143],{},[3413,12145,12147],{"id":12146},"перевірка-стану-файлу-ferror-та-clearerr","Перевірка стану файлу: ferror та clearerr",[3418,12149,12150,12151,12153],{},"При роботі з файлами можуть виникати помилки (диск переповнений, пристрій відключено). Бібліотека ",[3439,12152,3695],{}," надає функції для перевірки та скидання прапорців стану:",[3585,12155,12157],{"className":3757,"code":12156,"language":3760,"meta":3590,"style":3590},"int ferror(FILE* stream);   \u002F\u002F Повертає ненуль при помилці потоку\nint feof(FILE* stream);     \u002F\u002F Повертає ненуль при досягненні EOF\nvoid clearerr(FILE* stream); \u002F\u002F Скидає прапорці помилки та EOF\n",[3439,12158,12159,12180,12199],{"__ignoreMap":3590},[3594,12160,12161,12163,12166,12168,12170,12172,12174,12177],{"class":3596,"line":3597},[3594,12162,3714],{"class":3893},[3594,12164,12165],{"class":3897}," ferror",[3594,12167,3901],{"class":3818},[3594,12169,3699],{"class":3890},[3594,12171,3894],{"class":3893},[3594,12173,4670],{"class":3910},[3594,12175,12176],{"class":3818},");",[3594,12178,12179],{"class":3776},"   \u002F\u002F Повертає ненуль при помилці потоку\n",[3594,12181,12182,12184,12186,12188,12190,12192,12194,12196],{"class":3596,"line":3603},[3594,12183,3714],{"class":3893},[3594,12185,5872],{"class":3897},[3594,12187,3901],{"class":3818},[3594,12189,3699],{"class":3890},[3594,12191,3894],{"class":3893},[3594,12193,4670],{"class":3910},[3594,12195,12176],{"class":3818},[3594,12197,12198],{"class":3776},"     \u002F\u002F Повертає ненуль при досягненні EOF\n",[3594,12200,12201,12203,12206,12208,12210,12212,12214,12216],{"class":3596,"line":3609},[3594,12202,10329],{"class":3893},[3594,12204,12205],{"class":3897}," clearerr",[3594,12207,3901],{"class":3818},[3594,12209,3699],{"class":3890},[3594,12211,3894],{"class":3893},[3594,12213,4670],{"class":3910},[3594,12215,12176],{"class":3818},[3594,12217,12218],{"class":3776}," \u002F\u002F Скидає прапорці помилки та EOF\n",[3418,12220,12221,12222,12224,12225,12227,12228,12230,12231,12234,12235,3464],{},"Прапорці помилки і EOF зберігаються у структурі ",[3439,12223,3699],{}," і не скидаються автоматично. Це означає: якщо ",[3439,12226,4608],{}," повернув ",[3439,12229,4681],{}," і ви хочете читати файл знову після ",[3439,12232,12233],{},"rewind()",", слід спочатку викликати ",[3439,12236,12237],{},"clearerr()",[3585,12239,12242],{"className":3757,"code":12240,"filename":12241,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nint main()\n{\n    FILE* dataFile;\n    int   value;\n\n    dataFile = fopen(\"numbers.txt\", \"r\");\n    if (dataFile == NULL) { return 1; }\n\n    \u002F\u002F Читаємо всі числа\n    while (fscanf(dataFile, \"%d\", &value) == 1)\n    {\n        fprintf(stdout, \"%d\\n\", value);\n    }\n\n    \u002F\u002F Перевіряємо, чому зупинились\n    if (feof(dataFile))\n    {\n        fprintf(stdout, \"\\nДосягнуто кінець файлу\\n\");\n    }\n    else if (ferror(dataFile))\n    {\n        fprintf(stderr, \"\\nПомилка читання файлу!\\n\");\n    }\n\n    \u002F\u002F Скидаємо прапорці і повертаємось до початку\n    clearerr(dataFile);\n    rewind(dataFile);\n\n    \u002F\u002F Тепер можемо читати знову\n    fprintf(stdout, \"Перше число: \");\n    fscanf(dataFile, \"%d\", &value);\n    fprintf(stdout, \"%d\\n\", value);\n\n    fclose(dataFile);\n    return 0;\n}\n","ErrorCheck.cpp",[3439,12243,12244,12250,12254,12262,12266,12270,12276,12280,12296,12312,12316,12321,12343,12347,12364,12368,12372,12377,12389,12393,12412,12416,12431,12435,12454,12458,12462,12467,12474,12481,12485,12490,12501,12517,12533,12537,12543,12551],{"__ignoreMap":3590},[3594,12245,12246,12248],{"class":3596,"line":3597},[3594,12247,3769],{"class":3768},[3594,12249,4192],{"class":3772},[3594,12251,12252],{"class":3596,"line":3603},[3594,12253,3619],{"emptyLinePlaceholder":3618},[3594,12255,12256,12258,12260],{"class":3596,"line":3609},[3594,12257,3714],{"class":3893},[3594,12259,4210],{"class":3897},[3594,12261,4213],{"class":3818},[3594,12263,12264],{"class":3596,"line":3615},[3594,12265,4218],{"class":3818},[3594,12267,12268],{"class":3596,"line":3622},[3594,12269,4223],{"class":3818},[3594,12271,12272,12274],{"class":3596,"line":3628},[3594,12273,4724],{"class":3893},[3594,12275,5964],{"class":3818},[3594,12277,12278],{"class":3596,"line":3634},[3594,12279,3619],{"emptyLinePlaceholder":3618},[3594,12281,12282,12284,12286,12288,12290,12292,12294],{"class":3596,"line":3640},[3594,12283,4237],{"class":3818},[3594,12285,4240],{"class":3897},[3594,12287,3901],{"class":3818},[3594,12289,5082],{"class":3772},[3594,12291,3860],{"class":3818},[3594,12293,3993],{"class":3772},[3594,12295,3923],{"class":3818},[3594,12297,12298,12300,12302,12304,12306,12308,12310],{"class":3596,"line":3645},[3594,12299,4260],{"class":3768},[3594,12301,4263],{"class":3818},[3594,12303,3952],{"class":3893},[3594,12305,6410],{"class":3818},[3594,12307,6413],{"class":3768},[3594,12309,4304],{"class":4303},[3594,12311,6418],{"class":3818},[3594,12313,12314],{"class":3596,"line":3651},[3594,12315,3619],{"emptyLinePlaceholder":3618},[3594,12317,12318],{"class":3596,"line":3657},[3594,12319,12320],{"class":3776},"    \u002F\u002F Читаємо всі числа\n",[3594,12322,12323,12325,12327,12329,12331,12333,12335,12337,12339,12341],{"class":3596,"line":3663},[3594,12324,6074],{"class":3768},[3594,12326,3558],{"class":3818},[3594,12328,4608],{"class":3897},[3594,12330,4333],{"class":3818},[3594,12332,4292],{"class":3772},[3594,12334,4970],{"class":3910},[3594,12336,4292],{"class":3772},[3594,12338,6089],{"class":3818},[3594,12340,3722],{"class":4303},[3594,12342,4268],{"class":3818},[3594,12344,12345],{"class":3596,"line":4276},[3594,12346,4273],{"class":3818},[3594,12348,12349,12351,12353,12355,12357,12359,12361],{"class":3596,"line":4297},[3594,12350,4279],{"class":3897},[3594,12352,5219],{"class":3818},[3594,12354,4292],{"class":3772},[3594,12356,4970],{"class":3910},[3594,12358,4289],{"class":4288},[3594,12360,4292],{"class":3772},[3594,12362,12363],{"class":3818},", value);\n",[3594,12365,12366],{"class":3596,"line":4310},[3594,12367,4313],{"class":3818},[3594,12369,12370],{"class":3596,"line":4316},[3594,12371,3619],{"emptyLinePlaceholder":3618},[3594,12373,12374],{"class":3596,"line":4321},[3594,12375,12376],{"class":3776},"    \u002F\u002F Перевіряємо, чому зупинились\n",[3594,12378,12379,12381,12383,12386],{"class":3596,"line":4327},[3594,12380,4260],{"class":3768},[3594,12382,3558],{"class":3818},[3594,12384,12385],{"class":3897},"feof",[3594,12387,12388],{"class":3818},"(dataFile))\n",[3594,12390,12391],{"class":3596,"line":4345},[3594,12392,4273],{"class":3818},[3594,12394,12395,12397,12399,12401,12403,12406,12408,12410],{"class":3596,"line":4361},[3594,12396,4279],{"class":3897},[3594,12398,5219],{"class":3818},[3594,12400,4292],{"class":3772},[3594,12402,4289],{"class":4288},[3594,12404,12405],{"class":3772},"Досягнуто кінець файлу",[3594,12407,4289],{"class":4288},[3594,12409,4292],{"class":3772},[3594,12411,3923],{"class":3818},[3594,12413,12414],{"class":3596,"line":4366},[3594,12415,4313],{"class":3818},[3594,12417,12418,12421,12424,12426,12429],{"class":3596,"line":4375},[3594,12419,12420],{"class":3768},"    else",[3594,12422,12423],{"class":3768}," if",[3594,12425,3558],{"class":3818},[3594,12427,12428],{"class":3897},"ferror",[3594,12430,12388],{"class":3818},[3594,12432,12433],{"class":3596,"line":4386},[3594,12434,4273],{"class":3818},[3594,12436,12437,12439,12441,12443,12445,12448,12450,12452],{"class":3596,"line":4876},[3594,12438,4279],{"class":3897},[3594,12440,4282],{"class":3818},[3594,12442,4292],{"class":3772},[3594,12444,4289],{"class":4288},[3594,12446,12447],{"class":3772},"Помилка читання файлу!",[3594,12449,4289],{"class":4288},[3594,12451,4292],{"class":3772},[3594,12453,3923],{"class":3818},[3594,12455,12456],{"class":3596,"line":4881},[3594,12457,4313],{"class":3818},[3594,12459,12460],{"class":3596,"line":4890},[3594,12461,3619],{"emptyLinePlaceholder":3618},[3594,12463,12464],{"class":3596,"line":5536},[3594,12465,12466],{"class":3776},"    \u002F\u002F Скидаємо прапорці і повертаємось до початку\n",[3594,12468,12469,12472],{"class":3596,"line":5542},[3594,12470,12471],{"class":3897},"    clearerr",[3594,12473,4372],{"class":3818},[3594,12475,12476,12479],{"class":3596,"line":5581},[3594,12477,12478],{"class":3897},"    rewind",[3594,12480,4372],{"class":3818},[3594,12482,12483],{"class":3596,"line":5617},[3594,12484,3619],{"emptyLinePlaceholder":3618},[3594,12486,12487],{"class":3596,"line":5622},[3594,12488,12489],{"class":3776},"    \u002F\u002F Тепер можемо читати знову\n",[3594,12491,12492,12494,12496,12499],{"class":3596,"line":5641},[3594,12493,4330],{"class":3897},[3594,12495,5219],{"class":3818},[3594,12497,12498],{"class":3772},"\"Перше число: \"",[3594,12500,3923],{"class":3818},[3594,12502,12503,12506,12508,12510,12512,12514],{"class":3596,"line":5646},[3594,12504,12505],{"class":3897},"    fscanf",[3594,12507,4333],{"class":3818},[3594,12509,4292],{"class":3772},[3594,12511,4970],{"class":3910},[3594,12513,4292],{"class":3772},[3594,12515,12516],{"class":3818},", &value);\n",[3594,12518,12519,12521,12523,12525,12527,12529,12531],{"class":3596,"line":5670},[3594,12520,4330],{"class":3897},[3594,12522,5219],{"class":3818},[3594,12524,4292],{"class":3772},[3594,12526,4970],{"class":3910},[3594,12528,4289],{"class":4288},[3594,12530,4292],{"class":3772},[3594,12532,12363],{"class":3818},[3594,12534,12535],{"class":3596,"line":5684},[3594,12536,3619],{"emptyLinePlaceholder":3618},[3594,12538,12539,12541],{"class":3596,"line":5696},[3594,12540,4369],{"class":3897},[3594,12542,4372],{"class":3818},[3594,12544,12545,12547,12549],{"class":3596,"line":5708},[3594,12546,4378],{"class":3768},[3594,12548,4381],{"class":4303},[3594,12550,4307],{"class":3818},[3594,12552,12553],{"class":3596,"line":5713},[3594,12554,4389],{"class":3818},[4391,12556,12558,12567,12570,12573,12576,12579,12582,12585,12588,12595],{"title":12557},".\u002FErrorCheck",[4395,12559,12561,4403,12564],{"className":12560},[3596],[3594,12562,4402],{"className":12563},[4401],[3424,12565,12557],{"className":12566},[4407],[4395,12568,5044],{"className":12569},[3596],[4395,12571,5049],{"className":12572},[3596],[4395,12574,5054],{"className":12575},[3596],[4395,12577,5059],{"className":12578},[3596],[4395,12580,5064],{"className":12581},[3596],[4395,12583],{"className":12584},[3596],[4395,12586,12405],{"className":12587},[3596],[4395,12589,12591,12592],{"className":12590},[3596],"Перше число: ",[3594,12593,5044],{"className":12594},[6209],[4395,12596,6248,12598,3464],{"className":12597},[3596],[3594,12599,6252],{"className":12600},[4415,4407],[3493,12602],{},[3413,12604,12606],{"id":12605},"функції-fgetpos-і-fsetpos","Функції fgetpos і fsetpos",[3418,12608,12609,12610,4613,12613,12616,12617,12620,12621,12623,12624,12626],{},"Для більш надійного збереження і відновлення позицій у файлах стандарт C надає пару функцій ",[3439,12611,12612],{},"fgetpos",[3439,12614,12615],{},"fsetpos",", що використовують тип ",[3439,12618,12619],{},"fpos_t"," замість ",[3439,12622,10082],{},". Це важливо для файлів розміром понад 2 Гб (на 32-бітних системах ",[3439,12625,10082],{}," обмежений 2 Гб).",[3585,12628,12630],{"className":3757,"code":12629,"language":3760,"meta":3590,"style":3590},"int fgetpos(FILE* stream, fpos_t* pos);  \u002F\u002F Зберігає позицію\nint fsetpos(FILE* stream, const fpos_t* pos);  \u002F\u002F Відновлює позицію\n",[3439,12631,12632,12661],{"__ignoreMap":3590},[3594,12633,12634,12636,12639,12641,12643,12645,12647,12649,12651,12653,12656,12658],{"class":3596,"line":3597},[3594,12635,3714],{"class":3893},[3594,12637,12638],{"class":3897}," fgetpos",[3594,12640,3901],{"class":3818},[3594,12642,3699],{"class":3890},[3594,12644,3894],{"class":3893},[3594,12646,4670],{"class":3910},[3594,12648,3860],{"class":3818},[3594,12650,12619],{"class":3890},[3594,12652,3894],{"class":3893},[3594,12654,12655],{"class":3910}," pos",[3594,12657,12176],{"class":3818},[3594,12659,12660],{"class":3776},"  \u002F\u002F Зберігає позицію\n",[3594,12662,12663,12665,12668,12670,12672,12674,12676,12678,12680,12683,12685,12687,12689],{"class":3596,"line":3603},[3594,12664,3714],{"class":3893},[3594,12666,12667],{"class":3897}," fsetpos",[3594,12669,3901],{"class":3818},[3594,12671,3699],{"class":3890},[3594,12673,3894],{"class":3893},[3594,12675,4670],{"class":3910},[3594,12677,3860],{"class":3818},[3594,12679,3904],{"class":3893},[3594,12681,12682],{"class":3890}," fpos_t",[3594,12684,3894],{"class":3893},[3594,12686,12655],{"class":3910},[3594,12688,12176],{"class":3818},[3594,12690,12691],{"class":3776},"  \u002F\u002F Відновлює позицію\n",[3585,12693,12696],{"className":3757,"code":12694,"filename":12695,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nint main()\n{\n    FILE*  dataFile;\n    fpos_t savedPos;\n    int    value;\n\n    dataFile = fopen(\"numbers.txt\", \"r\");\n    if (dataFile == NULL) { return 1; }\n\n    \u002F\u002F Читаємо перші два числа\n    fscanf(dataFile, \"%d\", &value);\n    fprintf(stdout, \"1-е: %d\\n\", value);\n\n    fscanf(dataFile, \"%d\", &value);\n    fprintf(stdout, \"2-е: %d\\n\", value);\n\n    \u002F\u002F Зберігаємо поточну позицію\n    fgetpos(dataFile, &savedPos);\n    fprintf(stdout, \"Позицію збережено\\n\");\n\n    \u002F\u002F Читаємо ще два числа\n    fscanf(dataFile, \"%d\", &value);\n    fprintf(stdout, \"3-є: %d\\n\", value);\n\n    fscanf(dataFile, \"%d\", &value);\n    fprintf(stdout, \"4-е: %d\\n\", value);\n\n    \u002F\u002F Відновлюємо збережену позицію\n    fsetpos(dataFile, &savedPos);\n\n    \u002F\u002F Читаємо з тієї ж позиції знову\n    fscanf(dataFile, \"%d\", &value);\n    fprintf(stdout, \"Знову 3-є: %d\\n\", value);\n\n    fclose(dataFile);\n    return 0;\n}\n","FposExample.cpp",[3439,12697,12698,12704,12708,12716,12720,12725,12733,12740,12744,12760,12776,12780,12785,12799,12816,12820,12834,12851,12855,12860,12868,12883,12887,12892,12906,12923,12927,12941,12958,12962,12967,12974,12978,12983,12997,13014,13018,13024,13032],{"__ignoreMap":3590},[3594,12699,12700,12702],{"class":3596,"line":3597},[3594,12701,3769],{"class":3768},[3594,12703,4192],{"class":3772},[3594,12705,12706],{"class":3596,"line":3603},[3594,12707,3619],{"emptyLinePlaceholder":3618},[3594,12709,12710,12712,12714],{"class":3596,"line":3609},[3594,12711,3714],{"class":3893},[3594,12713,4210],{"class":3897},[3594,12715,4213],{"class":3818},[3594,12717,12718],{"class":3596,"line":3615},[3594,12719,4218],{"class":3818},[3594,12721,12722],{"class":3596,"line":3622},[3594,12723,12724],{"class":3818},"    FILE*  dataFile;\n",[3594,12726,12727,12730],{"class":3596,"line":3628},[3594,12728,12729],{"class":3890},"    fpos_t",[3594,12731,12732],{"class":3818}," savedPos;\n",[3594,12734,12735,12737],{"class":3596,"line":3634},[3594,12736,4724],{"class":3893},[3594,12738,12739],{"class":3818},"    value;\n",[3594,12741,12742],{"class":3596,"line":3640},[3594,12743,3619],{"emptyLinePlaceholder":3618},[3594,12745,12746,12748,12750,12752,12754,12756,12758],{"class":3596,"line":3645},[3594,12747,4237],{"class":3818},[3594,12749,4240],{"class":3897},[3594,12751,3901],{"class":3818},[3594,12753,5082],{"class":3772},[3594,12755,3860],{"class":3818},[3594,12757,3993],{"class":3772},[3594,12759,3923],{"class":3818},[3594,12761,12762,12764,12766,12768,12770,12772,12774],{"class":3596,"line":3651},[3594,12763,4260],{"class":3768},[3594,12765,4263],{"class":3818},[3594,12767,3952],{"class":3893},[3594,12769,6410],{"class":3818},[3594,12771,6413],{"class":3768},[3594,12773,4304],{"class":4303},[3594,12775,6418],{"class":3818},[3594,12777,12778],{"class":3596,"line":3657},[3594,12779,3619],{"emptyLinePlaceholder":3618},[3594,12781,12782],{"class":3596,"line":3663},[3594,12783,12784],{"class":3776},"    \u002F\u002F Читаємо перші два числа\n",[3594,12786,12787,12789,12791,12793,12795,12797],{"class":3596,"line":4276},[3594,12788,12505],{"class":3897},[3594,12790,4333],{"class":3818},[3594,12792,4292],{"class":3772},[3594,12794,4970],{"class":3910},[3594,12796,4292],{"class":3772},[3594,12798,12516],{"class":3818},[3594,12800,12801,12803,12805,12808,12810,12812,12814],{"class":3596,"line":4297},[3594,12802,4330],{"class":3897},[3594,12804,5219],{"class":3818},[3594,12806,12807],{"class":3772},"\"1-е: ",[3594,12809,4970],{"class":3910},[3594,12811,4289],{"class":4288},[3594,12813,4292],{"class":3772},[3594,12815,12363],{"class":3818},[3594,12817,12818],{"class":3596,"line":4310},[3594,12819,3619],{"emptyLinePlaceholder":3618},[3594,12821,12822,12824,12826,12828,12830,12832],{"class":3596,"line":4316},[3594,12823,12505],{"class":3897},[3594,12825,4333],{"class":3818},[3594,12827,4292],{"class":3772},[3594,12829,4970],{"class":3910},[3594,12831,4292],{"class":3772},[3594,12833,12516],{"class":3818},[3594,12835,12836,12838,12840,12843,12845,12847,12849],{"class":3596,"line":4321},[3594,12837,4330],{"class":3897},[3594,12839,5219],{"class":3818},[3594,12841,12842],{"class":3772},"\"2-е: ",[3594,12844,4970],{"class":3910},[3594,12846,4289],{"class":4288},[3594,12848,4292],{"class":3772},[3594,12850,12363],{"class":3818},[3594,12852,12853],{"class":3596,"line":4327},[3594,12854,3619],{"emptyLinePlaceholder":3618},[3594,12856,12857],{"class":3596,"line":4345},[3594,12858,12859],{"class":3776},"    \u002F\u002F Зберігаємо поточну позицію\n",[3594,12861,12862,12865],{"class":3596,"line":4361},[3594,12863,12864],{"class":3897},"    fgetpos",[3594,12866,12867],{"class":3818},"(dataFile, &savedPos);\n",[3594,12869,12870,12872,12874,12877,12879,12881],{"class":3596,"line":4366},[3594,12871,4330],{"class":3897},[3594,12873,5219],{"class":3818},[3594,12875,12876],{"class":3772},"\"Позицію збережено",[3594,12878,4289],{"class":4288},[3594,12880,4292],{"class":3772},[3594,12882,3923],{"class":3818},[3594,12884,12885],{"class":3596,"line":4375},[3594,12886,3619],{"emptyLinePlaceholder":3618},[3594,12888,12889],{"class":3596,"line":4386},[3594,12890,12891],{"class":3776},"    \u002F\u002F Читаємо ще два числа\n",[3594,12893,12894,12896,12898,12900,12902,12904],{"class":3596,"line":4876},[3594,12895,12505],{"class":3897},[3594,12897,4333],{"class":3818},[3594,12899,4292],{"class":3772},[3594,12901,4970],{"class":3910},[3594,12903,4292],{"class":3772},[3594,12905,12516],{"class":3818},[3594,12907,12908,12910,12912,12915,12917,12919,12921],{"class":3596,"line":4881},[3594,12909,4330],{"class":3897},[3594,12911,5219],{"class":3818},[3594,12913,12914],{"class":3772},"\"3-є: ",[3594,12916,4970],{"class":3910},[3594,12918,4289],{"class":4288},[3594,12920,4292],{"class":3772},[3594,12922,12363],{"class":3818},[3594,12924,12925],{"class":3596,"line":4890},[3594,12926,3619],{"emptyLinePlaceholder":3618},[3594,12928,12929,12931,12933,12935,12937,12939],{"class":3596,"line":5536},[3594,12930,12505],{"class":3897},[3594,12932,4333],{"class":3818},[3594,12934,4292],{"class":3772},[3594,12936,4970],{"class":3910},[3594,12938,4292],{"class":3772},[3594,12940,12516],{"class":3818},[3594,12942,12943,12945,12947,12950,12952,12954,12956],{"class":3596,"line":5542},[3594,12944,4330],{"class":3897},[3594,12946,5219],{"class":3818},[3594,12948,12949],{"class":3772},"\"4-е: ",[3594,12951,4970],{"class":3910},[3594,12953,4289],{"class":4288},[3594,12955,4292],{"class":3772},[3594,12957,12363],{"class":3818},[3594,12959,12960],{"class":3596,"line":5581},[3594,12961,3619],{"emptyLinePlaceholder":3618},[3594,12963,12964],{"class":3596,"line":5617},[3594,12965,12966],{"class":3776},"    \u002F\u002F Відновлюємо збережену позицію\n",[3594,12968,12969,12972],{"class":3596,"line":5622},[3594,12970,12971],{"class":3897},"    fsetpos",[3594,12973,12867],{"class":3818},[3594,12975,12976],{"class":3596,"line":5641},[3594,12977,3619],{"emptyLinePlaceholder":3618},[3594,12979,12980],{"class":3596,"line":5646},[3594,12981,12982],{"class":3776},"    \u002F\u002F Читаємо з тієї ж позиції знову\n",[3594,12984,12985,12987,12989,12991,12993,12995],{"class":3596,"line":5670},[3594,12986,12505],{"class":3897},[3594,12988,4333],{"class":3818},[3594,12990,4292],{"class":3772},[3594,12992,4970],{"class":3910},[3594,12994,4292],{"class":3772},[3594,12996,12516],{"class":3818},[3594,12998,12999,13001,13003,13006,13008,13010,13012],{"class":3596,"line":5684},[3594,13000,4330],{"class":3897},[3594,13002,5219],{"class":3818},[3594,13004,13005],{"class":3772},"\"Знову 3-є: ",[3594,13007,4970],{"class":3910},[3594,13009,4289],{"class":4288},[3594,13011,4292],{"class":3772},[3594,13013,12363],{"class":3818},[3594,13015,13016],{"class":3596,"line":5696},[3594,13017,3619],{"emptyLinePlaceholder":3618},[3594,13019,13020,13022],{"class":3596,"line":5708},[3594,13021,4369],{"class":3897},[3594,13023,4372],{"class":3818},[3594,13025,13026,13028,13030],{"class":3596,"line":5713},[3594,13027,4378],{"class":3768},[3594,13029,4381],{"class":4303},[3594,13031,4307],{"class":3818},[3594,13033,13034],{"class":3596,"line":5718},[3594,13035,4389],{"class":3818},[4391,13037,13039,13048,13055,13062,13066,13073,13080,13087],{"title":13038},".\u002FFposExample",[4395,13040,13042,4403,13045],{"className":13041},[3596],[3594,13043,4402],{"className":13044},[4401],[3424,13046,13038],{"className":13047},[4407],[4395,13049,13051,13052],{"className":13050},[3596],"1-е: ",[3594,13053,5044],{"className":13054},[6209],[4395,13056,13058,13059],{"className":13057},[3596],"2-е: ",[3594,13060,5049],{"className":13061},[6209],[4395,13063,13065],{"className":13064},[3596],"Позицію збережено",[4395,13067,13069,13070],{"className":13068},[3596],"3-є: ",[3594,13071,5054],{"className":13072},[6209],[4395,13074,13076,13077],{"className":13075},[3596],"4-е: ",[3594,13078,5059],{"className":13079},[6209],[4395,13081,13083,13084],{"className":13082},[3596],"Знову 3-є: ",[3594,13085,5054],{"className":13086},[6209],[4395,13088,6248,13090,3464],{"className":13089},[3596],[3594,13091,6252],{"className":13092},[4415,4407],[3493,13094],{},[3413,13096,13098],{"id":13097},"практичний-приклад-база-даних-студентів","Практичний приклад: база даних студентів",[3418,13100,13101],{},"Об'єднаємо всі вивчені концепції в один повноцінний приклад — просту базу даних студентів у бінарному файлі з підтримкою додавання, перегляду, пошуку та оновлення записів.",[3585,13103,13106],{"className":3757,"code":13104,"filename":13105,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n#include \u003Ccstring>\n#include \u003Ccstdlib>\n\n#define MAX_NAME_LEN 50\n#define DB_FILENAME  \"students.db\"\n\nstruct Student\n{\n    char   name[MAX_NAME_LEN];\n    int    age;\n    double gpa;\n    int    isActive;  \u002F\u002F 1 = активний, 0 = видалений\n};\n\n\u002F\u002F Додати студента у файл (дозапис)\nint addStudent(const char* name, int age, double gpa)\n{\n    FILE*   dbFile;\n    Student s;\n\n    strncpy(s.name, name, MAX_NAME_LEN - 1);\n    s.name[MAX_NAME_LEN - 1] = '\\0';\n    s.age      = age;\n    s.gpa      = gpa;\n    s.isActive = 1;\n\n    dbFile = fopen(DB_FILENAME, \"ab\");\n    if (dbFile == NULL) { return -1; }\n\n    fwrite(&s, sizeof(Student), 1, dbFile);\n    fclose(dbFile);\n    return 0;\n}\n\n\u002F\u002F Вивести всіх активних студентів\nvoid listStudents()\n{\n    FILE*   dbFile;\n    Student s;\n    int     index;\n\n    dbFile = fopen(DB_FILENAME, \"rb\");\n    if (dbFile == NULL)\n    {\n        fprintf(stdout, \"(база порожня)\\n\");\n        return;\n    }\n\n    fprintf(stdout, \"\\n%-4s %-20s %-5s %-6s\\n\",\n            \"№\", \"Ім'я\", \"Вік\", \"GPA\");\n    fprintf(stdout, \"----+--------------------+-----+------\\n\");\n\n    index = 0;\n    while (fread(&s, sizeof(Student), 1, dbFile) == 1)\n    {\n        if (s.isActive)\n        {\n            fprintf(stdout, \"%-4d %-20s %-5d %.2f\\n\",\n                    index, s.name, s.age, s.gpa);\n        }\n        index++;\n    }\n\n    fclose(dbFile);\n}\n\n\u002F\u002F Знайти студента за ім'ям\nint findStudent(const char* name, Student* result)\n{\n    FILE*   dbFile;\n    Student s;\n    int     index;\n\n    dbFile = fopen(DB_FILENAME, \"rb\");\n    if (dbFile == NULL) { return -1; }\n\n    index = 0;\n    while (fread(&s, sizeof(Student), 1, dbFile) == 1)\n    {\n        if (s.isActive && strncmp(s.name, name, MAX_NAME_LEN) == 0)\n        {\n            *result = s;\n            fclose(dbFile);\n            return index;\n        }\n        index++;\n    }\n\n    fclose(dbFile);\n    return -1;  \u002F\u002F Не знайдено\n}\n\n\u002F\u002F Оновити GPA за індексом\nint updateGpa(int index, double newGpa)\n{\n    FILE*   dbFile;\n    Student s;\n    long    offset;\n\n    dbFile = fopen(DB_FILENAME, \"r+b\");\n    if (dbFile == NULL) { return -1; }\n\n    offset = (long)(index * sizeof(Student));\n    fseek(dbFile, offset, SEEK_SET);\n\n    if (fread(&s, sizeof(Student), 1, dbFile) != 1)\n    {\n        fclose(dbFile);\n        return -1;\n    }\n\n    s.gpa = newGpa;\n\n    fseek(dbFile, offset, SEEK_SET);\n    fwrite(&s, sizeof(Student), 1, dbFile);\n\n    fclose(dbFile);\n    return 0;\n}\n\nint main()\n{\n    Student found;\n    int     idx;\n\n    \u002F\u002F Додаємо кількох студентів\n    addStudent(\"Petrenko Ivan\",  20, 4.5);\n    addStudent(\"Koval Olena\",    19, 4.8);\n    addStudent(\"Boiko Mykhailo\", 21, 3.9);\n    addStudent(\"Savchenko Anna\", 20, 4.2);\n\n    fprintf(stdout, \"=== Список студентів ===\");\n    listStudents();\n\n    \u002F\u002F Пошук\n    idx = findStudent(\"Koval Olena\", &found);\n    if (idx >= 0)\n    {\n        fprintf(stdout, \"\\nЗнайдено [%d]: %s, GPA: %.2f\\n\",\n                idx, found.name, found.gpa);\n\n        \u002F\u002F Оновлюємо GPA\n        updateGpa(idx, 4.95);\n        fprintf(stdout, \"GPA оновлено до 4.95\\n\");\n    }\n\n    fprintf(stdout, \"\\n=== Після оновлення ===\");\n    listStudents();\n\n    return 0;\n}\n","StudentDB.cpp",[3439,13107,13108,13114,13120,13126,13130,13140,13150,13154,13160,13164,13173,13179,13185,13195,13199,13203,13208,13240,13244,13249,13253,13257,13276,13301,13312,13323,13338,13342,13356,13375,13379,13394,13401,13409,13413,13417,13422,13431,13435,13439,13443,13450,13454,13466,13476,13480,13495,13501,13505,13509,13537,13557,13572,13576,13585,13608,13612,13626,13630,13655,13684,13688,13693,13697,13701,13707,13712,13717,13723,13749,13754,13759,13764,13771,13776,13789,13808,13813,13822,13845,13850,13884,13889,13895,13903,13912,13917,13922,13927,13932,13939,13954,13959,13964,13970,13991,13996,14001,14006,14014,14019,14032,14051,14056,14069,14077,14082,14106,14111,14118,14129,14134,14139,14150,14155,14162,14177,14182,14189,14198,14203,14208,14217,14222,14228,14236,14241,14247,14267,14287,14306,14327,14332,14344,14353,14358,14364,14380,14392,14397,14429,14452,14457,14463,14476,14492,14497,14502,14518,14525,14530,14539],{"__ignoreMap":3590},[3594,13109,13110,13112],{"class":3596,"line":3597},[3594,13111,3769],{"class":3768},[3594,13113,4192],{"class":3772},[3594,13115,13116,13118],{"class":3596,"line":3603},[3594,13117,3769],{"class":3768},[3594,13119,5313],{"class":3772},[3594,13121,13122,13124],{"class":3596,"line":3609},[3594,13123,3769],{"class":3768},[3594,13125,4199],{"class":3772},[3594,13127,13128],{"class":3596,"line":3615},[3594,13129,3619],{"emptyLinePlaceholder":3618},[3594,13131,13132,13134,13137],{"class":3596,"line":3622},[3594,13133,6841],{"class":3768},[3594,13135,13136],{"class":3893}," MAX_NAME_LEN ",[3594,13138,13139],{"class":4303},"50\n",[3594,13141,13142,13144,13147],{"class":3596,"line":3628},[3594,13143,6841],{"class":3768},[3594,13145,13146],{"class":3893}," DB_FILENAME  ",[3594,13148,13149],{"class":3772},"\"students.db\"\n",[3594,13151,13152],{"class":3596,"line":3634},[3594,13153,3619],{"emptyLinePlaceholder":3618},[3594,13155,13156,13158],{"class":3596,"line":3640},[3594,13157,5322],{"class":3893},[3594,13159,5325],{"class":3890},[3594,13161,13162],{"class":3596,"line":3645},[3594,13163,4218],{"class":3818},[3594,13165,13166,13168,13170],{"class":3596,"line":3651},[3594,13167,5334],{"class":3893},[3594,13169,5337],{"class":3910},[3594,13171,13172],{"class":3818},"[MAX_NAME_LEN];\n",[3594,13174,13175,13177],{"class":3596,"line":3657},[3594,13176,4724],{"class":3893},[3594,13178,5352],{"class":3818},[3594,13180,13181,13183],{"class":3596,"line":3663},[3594,13182,5357],{"class":3893},[3594,13184,5360],{"class":3818},[3594,13186,13187,13189,13192],{"class":3596,"line":4276},[3594,13188,4724],{"class":3893},[3594,13190,13191],{"class":3818},"    isActive;",[3594,13193,13194],{"class":3776},"  \u002F\u002F 1 = активний, 0 = видалений\n",[3594,13196,13197],{"class":3596,"line":4297},[3594,13198,5365],{"class":3818},[3594,13200,13201],{"class":3596,"line":4310},[3594,13202,3619],{"emptyLinePlaceholder":3618},[3594,13204,13205],{"class":3596,"line":4316},[3594,13206,13207],{"class":3776},"\u002F\u002F Додати студента у файл (дозапис)\n",[3594,13209,13210,13212,13215,13217,13219,13221,13224,13226,13228,13231,13233,13235,13238],{"class":3596,"line":4321},[3594,13211,3714],{"class":3893},[3594,13213,13214],{"class":3897}," addStudent",[3594,13216,3901],{"class":3818},[3594,13218,3904],{"class":3893},[3594,13220,3907],{"class":3893},[3594,13222,13223],{"class":3910}," name",[3594,13225,3860],{"class":3818},[3594,13227,3714],{"class":3893},[3594,13229,13230],{"class":3910}," age",[3594,13232,3860],{"class":3818},[3594,13234,11360],{"class":3893},[3594,13236,13237],{"class":3910}," gpa",[3594,13239,4268],{"class":3818},[3594,13241,13242],{"class":3596,"line":4327},[3594,13243,4218],{"class":3818},[3594,13245,13246],{"class":3596,"line":4345},[3594,13247,13248],{"class":3818},"    FILE*   dbFile;\n",[3594,13250,13251],{"class":3596,"line":4361},[3594,13252,11002],{"class":3818},[3594,13254,13255],{"class":3596,"line":4366},[3594,13256,3619],{"emptyLinePlaceholder":3618},[3594,13258,13259,13261,13263,13265,13267,13269,13272,13274],{"class":3596,"line":4375},[3594,13260,9513],{"class":3897},[3594,13262,3901],{"class":3818},[3594,13264,8013],{"class":3910},[3594,13266,3464],{"class":3818},[3594,13268,5679],{"class":3910},[3594,13270,13271],{"class":3818},", name, MAX_NAME_LEN - ",[3594,13273,3722],{"class":4303},[3594,13275,3923],{"class":3818},[3594,13277,13278,13280,13282,13284,13287,13289,13292,13294,13297,13299],{"class":3596,"line":4386},[3594,13279,11511],{"class":3910},[3594,13281,3464],{"class":3818},[3594,13283,5679],{"class":3910},[3594,13285,13286],{"class":3818},"[MAX_NAME_LEN - ",[3594,13288,3722],{"class":4303},[3594,13290,13291],{"class":3818},"] = ",[3594,13293,7427],{"class":3772},[3594,13295,13296],{"class":4288},"\\0",[3594,13298,7427],{"class":3772},[3594,13300,4307],{"class":3818},[3594,13302,13303,13305,13307,13309],{"class":3596,"line":4876},[3594,13304,11511],{"class":3910},[3594,13306,3464],{"class":3818},[3594,13308,5691],{"class":3910},[3594,13310,13311],{"class":3818},"      = age;\n",[3594,13313,13314,13316,13318,13320],{"class":3596,"line":4881},[3594,13315,11511],{"class":3910},[3594,13317,3464],{"class":3818},[3594,13319,5703],{"class":3910},[3594,13321,13322],{"class":3818},"      = gpa;\n",[3594,13324,13325,13327,13329,13332,13334,13336],{"class":3596,"line":4890},[3594,13326,11511],{"class":3910},[3594,13328,3464],{"class":3818},[3594,13330,13331],{"class":3910},"isActive",[3594,13333,9554],{"class":3818},[3594,13335,3722],{"class":4303},[3594,13337,4307],{"class":3818},[3594,13339,13340],{"class":3596,"line":5536},[3594,13341,3619],{"emptyLinePlaceholder":3618},[3594,13343,13344,13347,13349,13352,13354],{"class":3596,"line":5542},[3594,13345,13346],{"class":3818},"    dbFile = ",[3594,13348,4240],{"class":3897},[3594,13350,13351],{"class":3818},"(DB_FILENAME, ",[3594,13353,4116],{"class":3772},[3594,13355,3923],{"class":3818},[3594,13357,13358,13360,13363,13365,13367,13369,13371,13373],{"class":3596,"line":5581},[3594,13359,4260],{"class":3768},[3594,13361,13362],{"class":3818}," (dbFile == ",[3594,13364,3952],{"class":3893},[3594,13366,6410],{"class":3818},[3594,13368,6413],{"class":3768},[3594,13370,10452],{"class":3818},[3594,13372,3722],{"class":4303},[3594,13374,6418],{"class":3818},[3594,13376,13377],{"class":3596,"line":5617},[3594,13378,3619],{"emptyLinePlaceholder":3618},[3594,13380,13381,13383,13385,13387,13389,13391],{"class":3596,"line":5622},[3594,13382,9766],{"class":3897},[3594,13384,11461],{"class":3818},[3594,13386,8366],{"class":3893},[3594,13388,9774],{"class":3818},[3594,13390,3722],{"class":4303},[3594,13392,13393],{"class":3818},", dbFile);\n",[3594,13395,13396,13398],{"class":3596,"line":5641},[3594,13397,4369],{"class":3897},[3594,13399,13400],{"class":3818},"(dbFile);\n",[3594,13402,13403,13405,13407],{"class":3596,"line":5646},[3594,13404,4378],{"class":3768},[3594,13406,4381],{"class":4303},[3594,13408,4307],{"class":3818},[3594,13410,13411],{"class":3596,"line":5670},[3594,13412,4389],{"class":3818},[3594,13414,13415],{"class":3596,"line":5684},[3594,13416,3619],{"emptyLinePlaceholder":3618},[3594,13418,13419],{"class":3596,"line":5696},[3594,13420,13421],{"class":3776},"\u002F\u002F Вивести всіх активних студентів\n",[3594,13423,13424,13426,13429],{"class":3596,"line":5708},[3594,13425,10329],{"class":3893},[3594,13427,13428],{"class":3897}," listStudents",[3594,13430,4213],{"class":3818},[3594,13432,13433],{"class":3596,"line":5713},[3594,13434,4218],{"class":3818},[3594,13436,13437],{"class":3596,"line":5718},[3594,13438,13248],{"class":3818},[3594,13440,13441],{"class":3596,"line":5725},[3594,13442,11002],{"class":3818},[3594,13444,13445,13447],{"class":3596,"line":5734},[3594,13446,4724],{"class":3893},[3594,13448,13449],{"class":3818},"     index;\n",[3594,13451,13452],{"class":3596,"line":5739},[3594,13453,3619],{"emptyLinePlaceholder":3618},[3594,13455,13456,13458,13460,13462,13464],{"class":3596,"line":5748},[3594,13457,13346],{"class":3818},[3594,13459,4240],{"class":3897},[3594,13461,13351],{"class":3818},[3594,13463,4086],{"class":3772},[3594,13465,3923],{"class":3818},[3594,13467,13468,13470,13472,13474],{"class":3596,"line":6712},[3594,13469,4260],{"class":3768},[3594,13471,13362],{"class":3818},[3594,13473,3952],{"class":3893},[3594,13475,4268],{"class":3818},[3594,13477,13478],{"class":3596,"line":6717},[3594,13479,4273],{"class":3818},[3594,13481,13482,13484,13486,13489,13491,13493],{"class":3596,"line":6724},[3594,13483,4279],{"class":3897},[3594,13485,5219],{"class":3818},[3594,13487,13488],{"class":3772},"\"(база порожня)",[3594,13490,4289],{"class":4288},[3594,13492,4292],{"class":3772},[3594,13494,3923],{"class":3818},[3594,13496,13497,13499],{"class":3596,"line":6733},[3594,13498,4300],{"class":3768},[3594,13500,4307],{"class":3818},[3594,13502,13503],{"class":3596,"line":7558},[3594,13504,4313],{"class":3818},[3594,13506,13507],{"class":3596,"line":7563},[3594,13508,3619],{"emptyLinePlaceholder":3618},[3594,13510,13511,13513,13515,13517,13519,13522,13525,13528,13531,13533,13535],{"class":3596,"line":7570},[3594,13512,4330],{"class":3897},[3594,13514,5219],{"class":3818},[3594,13516,4292],{"class":3772},[3594,13518,4289],{"class":4288},[3594,13520,13521],{"class":3910},"%-4s",[3594,13523,13524],{"class":3910}," %-20s",[3594,13526,13527],{"class":3910}," %-5s",[3594,13529,13530],{"class":3910}," %-6s",[3594,13532,4289],{"class":4288},[3594,13534,4292],{"class":3772},[3594,13536,5667],{"class":3818},[3594,13538,13539,13542,13544,13546,13548,13550,13552,13555],{"class":3596,"line":7579},[3594,13540,13541],{"class":3772},"            \"№\"",[3594,13543,3860],{"class":3818},[3594,13545,5566],{"class":3772},[3594,13547,3860],{"class":3818},[3594,13549,5571],{"class":3772},[3594,13551,3860],{"class":3818},[3594,13553,13554],{"class":3772},"\"GPA\"",[3594,13556,3923],{"class":3818},[3594,13558,13559,13561,13563,13566,13568,13570],{"class":3596,"line":9943},[3594,13560,4330],{"class":3897},[3594,13562,5219],{"class":3818},[3594,13564,13565],{"class":3772},"\"----+--------------------+-----+------",[3594,13567,4289],{"class":4288},[3594,13569,4292],{"class":3772},[3594,13571,3923],{"class":3818},[3594,13573,13574],{"class":3596,"line":9948},[3594,13575,3619],{"emptyLinePlaceholder":3618},[3594,13577,13578,13581,13583],{"class":3596,"line":9953},[3594,13579,13580],{"class":3818},"    index = ",[3594,13582,3718],{"class":4303},[3594,13584,4307],{"class":3818},[3594,13586,13587,13589,13591,13593,13595,13597,13599,13601,13604,13606],{"class":3596,"line":9962},[3594,13588,6074],{"class":3768},[3594,13590,3558],{"class":3818},[3594,13592,9200],{"class":3897},[3594,13594,11461],{"class":3818},[3594,13596,8366],{"class":3893},[3594,13598,9774],{"class":3818},[3594,13600,3722],{"class":4303},[3594,13602,13603],{"class":3818},", dbFile) == ",[3594,13605,3722],{"class":4303},[3594,13607,4268],{"class":3818},[3594,13609,13610],{"class":3596,"line":11190},[3594,13611,4273],{"class":3818},[3594,13613,13614,13616,13618,13620,13622,13624],{"class":3596,"line":11195},[3594,13615,7421],{"class":3768},[3594,13617,3558],{"class":3818},[3594,13619,8013],{"class":3910},[3594,13621,3464],{"class":3818},[3594,13623,13331],{"class":3910},[3594,13625,4268],{"class":3818},[3594,13627,13628],{"class":3596,"line":11204},[3594,13629,7438],{"class":3818},[3594,13631,13632,13634,13636,13638,13641,13643,13646,13649,13651,13653],{"class":3596,"line":11725},[3594,13633,7443],{"class":3897},[3594,13635,5219],{"class":3818},[3594,13637,4292],{"class":3772},[3594,13639,13640],{"class":3910},"%-4d",[3594,13642,13524],{"class":3910},[3594,13644,13645],{"class":3910}," %-5d",[3594,13647,13648],{"class":3910}," %.2f",[3594,13650,4289],{"class":4288},[3594,13652,4292],{"class":3772},[3594,13654,5667],{"class":3818},[3594,13656,13657,13660,13662,13664,13666,13668,13670,13672,13674,13676,13678,13680,13682],{"class":3596,"line":11732},[3594,13658,13659],{"class":3818},"                    index, ",[3594,13661,8013],{"class":3910},[3594,13663,3464],{"class":3818},[3594,13665,5679],{"class":3910},[3594,13667,3860],{"class":3818},[3594,13669,8013],{"class":3910},[3594,13671,3464],{"class":3818},[3594,13673,5691],{"class":3910},[3594,13675,3860],{"class":3818},[3594,13677,8013],{"class":3910},[3594,13679,3464],{"class":3818},[3594,13681,5703],{"class":3910},[3594,13683,3923],{"class":3818},[3594,13685,13686],{"class":3596,"line":11737},[3594,13687,7483],{"class":3818},[3594,13689,13690],{"class":3596,"line":11776},[3594,13691,13692],{"class":3818},"        index++;\n",[3594,13694,13695],{"class":3596,"line":11781},[3594,13696,4313],{"class":3818},[3594,13698,13699],{"class":3596,"line":11786},[3594,13700,3619],{"emptyLinePlaceholder":3618},[3594,13702,13703,13705],{"class":3596,"line":11795},[3594,13704,4369],{"class":3897},[3594,13706,13400],{"class":3818},[3594,13708,13710],{"class":3596,"line":13709},66,[3594,13711,4389],{"class":3818},[3594,13713,13715],{"class":3596,"line":13714},67,[3594,13716,3619],{"emptyLinePlaceholder":3618},[3594,13718,13720],{"class":3596,"line":13719},68,[3594,13721,13722],{"class":3776},"\u002F\u002F Знайти студента за ім'ям\n",[3594,13724,13726,13728,13731,13733,13735,13737,13739,13741,13743,13745,13747],{"class":3596,"line":13725},69,[3594,13727,3714],{"class":3893},[3594,13729,13730],{"class":3897}," findStudent",[3594,13732,3901],{"class":3818},[3594,13734,3904],{"class":3893},[3594,13736,3907],{"class":3893},[3594,13738,13223],{"class":3910},[3594,13740,3860],{"class":3818},[3594,13742,10783],{"class":3890},[3594,13744,3894],{"class":3893},[3594,13746,10788],{"class":3910},[3594,13748,4268],{"class":3818},[3594,13750,13752],{"class":3596,"line":13751},70,[3594,13753,4218],{"class":3818},[3594,13755,13757],{"class":3596,"line":13756},71,[3594,13758,13248],{"class":3818},[3594,13760,13762],{"class":3596,"line":13761},72,[3594,13763,11002],{"class":3818},[3594,13765,13767,13769],{"class":3596,"line":13766},73,[3594,13768,4724],{"class":3893},[3594,13770,13449],{"class":3818},[3594,13772,13774],{"class":3596,"line":13773},74,[3594,13775,3619],{"emptyLinePlaceholder":3618},[3594,13777,13779,13781,13783,13785,13787],{"class":3596,"line":13778},75,[3594,13780,13346],{"class":3818},[3594,13782,4240],{"class":3897},[3594,13784,13351],{"class":3818},[3594,13786,4086],{"class":3772},[3594,13788,3923],{"class":3818},[3594,13790,13792,13794,13796,13798,13800,13802,13804,13806],{"class":3596,"line":13791},76,[3594,13793,4260],{"class":3768},[3594,13795,13362],{"class":3818},[3594,13797,3952],{"class":3893},[3594,13799,6410],{"class":3818},[3594,13801,6413],{"class":3768},[3594,13803,10452],{"class":3818},[3594,13805,3722],{"class":4303},[3594,13807,6418],{"class":3818},[3594,13809,13811],{"class":3596,"line":13810},77,[3594,13812,3619],{"emptyLinePlaceholder":3618},[3594,13814,13816,13818,13820],{"class":3596,"line":13815},78,[3594,13817,13580],{"class":3818},[3594,13819,3718],{"class":4303},[3594,13821,4307],{"class":3818},[3594,13823,13825,13827,13829,13831,13833,13835,13837,13839,13841,13843],{"class":3596,"line":13824},79,[3594,13826,6074],{"class":3768},[3594,13828,3558],{"class":3818},[3594,13830,9200],{"class":3897},[3594,13832,11461],{"class":3818},[3594,13834,8366],{"class":3893},[3594,13836,9774],{"class":3818},[3594,13838,3722],{"class":4303},[3594,13840,13603],{"class":3818},[3594,13842,3722],{"class":4303},[3594,13844,4268],{"class":3818},[3594,13846,13848],{"class":3596,"line":13847},80,[3594,13849,4273],{"class":3818},[3594,13851,13853,13855,13857,13859,13861,13863,13866,13869,13871,13873,13875,13877,13880,13882],{"class":3596,"line":13852},81,[3594,13854,7421],{"class":3768},[3594,13856,3558],{"class":3818},[3594,13858,8013],{"class":3910},[3594,13860,3464],{"class":3818},[3594,13862,13331],{"class":3910},[3594,13864,13865],{"class":3818}," && ",[3594,13867,13868],{"class":3897},"strncmp",[3594,13870,3901],{"class":3818},[3594,13872,8013],{"class":3910},[3594,13874,3464],{"class":3818},[3594,13876,5679],{"class":3910},[3594,13878,13879],{"class":3818},", name, MAX_NAME_LEN) == ",[3594,13881,3718],{"class":4303},[3594,13883,4268],{"class":3818},[3594,13885,13887],{"class":3596,"line":13886},82,[3594,13888,7438],{"class":3818},[3594,13890,13892],{"class":3596,"line":13891},83,[3594,13893,13894],{"class":3818},"            *result = s;\n",[3594,13896,13898,13901],{"class":3596,"line":13897},84,[3594,13899,13900],{"class":3897},"            fclose",[3594,13902,13400],{"class":3818},[3594,13904,13906,13909],{"class":3596,"line":13905},85,[3594,13907,13908],{"class":3768},"            return",[3594,13910,13911],{"class":3818}," index;\n",[3594,13913,13915],{"class":3596,"line":13914},86,[3594,13916,7483],{"class":3818},[3594,13918,13920],{"class":3596,"line":13919},87,[3594,13921,13692],{"class":3818},[3594,13923,13925],{"class":3596,"line":13924},88,[3594,13926,4313],{"class":3818},[3594,13928,13930],{"class":3596,"line":13929},89,[3594,13931,3619],{"emptyLinePlaceholder":3618},[3594,13933,13935,13937],{"class":3596,"line":13934},90,[3594,13936,4369],{"class":3897},[3594,13938,13400],{"class":3818},[3594,13940,13942,13944,13946,13948,13951],{"class":3596,"line":13941},91,[3594,13943,4378],{"class":3768},[3594,13945,10452],{"class":3818},[3594,13947,3722],{"class":4303},[3594,13949,13950],{"class":3818},";",[3594,13952,13953],{"class":3776},"  \u002F\u002F Не знайдено\n",[3594,13955,13957],{"class":3596,"line":13956},92,[3594,13958,4389],{"class":3818},[3594,13960,13962],{"class":3596,"line":13961},93,[3594,13963,3619],{"emptyLinePlaceholder":3618},[3594,13965,13967],{"class":3596,"line":13966},94,[3594,13968,13969],{"class":3776},"\u002F\u002F Оновити GPA за індексом\n",[3594,13971,13973,13975,13977,13979,13981,13983,13985,13987,13989],{"class":3596,"line":13972},95,[3594,13974,3714],{"class":3893},[3594,13976,11341],{"class":3897},[3594,13978,3901],{"class":3818},[3594,13980,3714],{"class":3893},[3594,13982,10778],{"class":3910},[3594,13984,3860],{"class":3818},[3594,13986,11360],{"class":3893},[3594,13988,11363],{"class":3910},[3594,13990,4268],{"class":3818},[3594,13992,13994],{"class":3596,"line":13993},96,[3594,13995,4218],{"class":3818},[3594,13997,13999],{"class":3596,"line":13998},97,[3594,14000,13248],{"class":3818},[3594,14002,14004],{"class":3596,"line":14003},98,[3594,14005,11002],{"class":3818},[3594,14007,14009,14011],{"class":3596,"line":14008},99,[3594,14010,10409],{"class":3893},[3594,14012,14013],{"class":3818},"    offset;\n",[3594,14015,14017],{"class":3596,"line":14016},100,[3594,14018,3619],{"emptyLinePlaceholder":3618},[3594,14020,14022,14024,14026,14028,14030],{"class":3596,"line":14021},101,[3594,14023,13346],{"class":3818},[3594,14025,4240],{"class":3897},[3594,14027,13351],{"class":3818},[3594,14029,4130],{"class":3772},[3594,14031,3923],{"class":3818},[3594,14033,14035,14037,14039,14041,14043,14045,14047,14049],{"class":3596,"line":14034},102,[3594,14036,4260],{"class":3768},[3594,14038,13362],{"class":3818},[3594,14040,3952],{"class":3893},[3594,14042,6410],{"class":3818},[3594,14044,6413],{"class":3768},[3594,14046,10452],{"class":3818},[3594,14048,3722],{"class":4303},[3594,14050,6418],{"class":3818},[3594,14052,14054],{"class":3596,"line":14053},103,[3594,14055,3619],{"emptyLinePlaceholder":3618},[3594,14057,14059,14061,14063,14065,14067],{"class":3596,"line":14058},104,[3594,14060,10853],{"class":3818},[3594,14062,10082],{"class":3893},[3594,14064,10858],{"class":3818},[3594,14066,8366],{"class":3893},[3594,14068,10863],{"class":3818},[3594,14070,14072,14074],{"class":3596,"line":14071},105,[3594,14073,10474],{"class":3897},[3594,14075,14076],{"class":3818},"(dbFile, offset, SEEK_SET);\n",[3594,14078,14080],{"class":3596,"line":14079},106,[3594,14081,3619],{"emptyLinePlaceholder":3618},[3594,14083,14085,14087,14089,14091,14093,14095,14097,14099,14102,14104],{"class":3596,"line":14084},107,[3594,14086,4260],{"class":3768},[3594,14088,3558],{"class":3818},[3594,14090,9200],{"class":3897},[3594,14092,11461],{"class":3818},[3594,14094,8366],{"class":3893},[3594,14096,9774],{"class":3818},[3594,14098,3722],{"class":4303},[3594,14100,14101],{"class":3818},", dbFile) != ",[3594,14103,3722],{"class":4303},[3594,14105,4268],{"class":3818},[3594,14107,14109],{"class":3596,"line":14108},108,[3594,14110,4273],{"class":3818},[3594,14112,14114,14116],{"class":3596,"line":14113},109,[3594,14115,7799],{"class":3897},[3594,14117,13400],{"class":3818},[3594,14119,14121,14123,14125,14127],{"class":3596,"line":14120},110,[3594,14122,4300],{"class":3768},[3594,14124,10452],{"class":3818},[3594,14126,3722],{"class":4303},[3594,14128,4307],{"class":3818},[3594,14130,14132],{"class":3596,"line":14131},111,[3594,14133,4313],{"class":3818},[3594,14135,14137],{"class":3596,"line":14136},112,[3594,14138,3619],{"emptyLinePlaceholder":3618},[3594,14140,14142,14144,14146,14148],{"class":3596,"line":14141},113,[3594,14143,11511],{"class":3910},[3594,14145,3464],{"class":3818},[3594,14147,5703],{"class":3910},[3594,14149,11518],{"class":3818},[3594,14151,14153],{"class":3596,"line":14152},114,[3594,14154,3619],{"emptyLinePlaceholder":3618},[3594,14156,14158,14160],{"class":3596,"line":14157},115,[3594,14159,10474],{"class":3897},[3594,14161,14076],{"class":3818},[3594,14163,14165,14167,14169,14171,14173,14175],{"class":3596,"line":14164},116,[3594,14166,9766],{"class":3897},[3594,14168,11461],{"class":3818},[3594,14170,8366],{"class":3893},[3594,14172,9774],{"class":3818},[3594,14174,3722],{"class":4303},[3594,14176,13393],{"class":3818},[3594,14178,14180],{"class":3596,"line":14179},117,[3594,14181,3619],{"emptyLinePlaceholder":3618},[3594,14183,14185,14187],{"class":3596,"line":14184},118,[3594,14186,4369],{"class":3897},[3594,14188,13400],{"class":3818},[3594,14190,14192,14194,14196],{"class":3596,"line":14191},119,[3594,14193,4378],{"class":3768},[3594,14195,4381],{"class":4303},[3594,14197,4307],{"class":3818},[3594,14199,14201],{"class":3596,"line":14200},120,[3594,14202,4389],{"class":3818},[3594,14204,14206],{"class":3596,"line":14205},121,[3594,14207,3619],{"emptyLinePlaceholder":3618},[3594,14209,14211,14213,14215],{"class":3596,"line":14210},122,[3594,14212,3714],{"class":3893},[3594,14214,4210],{"class":3897},[3594,14216,4213],{"class":3818},[3594,14218,14220],{"class":3596,"line":14219},123,[3594,14221,4218],{"class":3818},[3594,14223,14225],{"class":3596,"line":14224},124,[3594,14226,14227],{"class":3818},"    Student found;\n",[3594,14229,14231,14233],{"class":3596,"line":14230},125,[3594,14232,4724],{"class":3893},[3594,14234,14235],{"class":3818},"     idx;\n",[3594,14237,14239],{"class":3596,"line":14238},126,[3594,14240,3619],{"emptyLinePlaceholder":3618},[3594,14242,14244],{"class":3596,"line":14243},127,[3594,14245,14246],{"class":3776},"    \u002F\u002F Додаємо кількох студентів\n",[3594,14248,14250,14253,14255,14257,14259,14261,14263,14265],{"class":3596,"line":14249},128,[3594,14251,14252],{"class":3897},"    addStudent",[3594,14254,3901],{"class":3818},[3594,14256,9531],{"class":3772},[3594,14258,5433],{"class":3818},[3594,14260,5415],{"class":4303},[3594,14262,3860],{"class":3818},[3594,14264,5420],{"class":4303},[3594,14266,3923],{"class":3818},[3594,14268,14270,14272,14274,14276,14279,14281,14283,14285],{"class":3596,"line":14269},129,[3594,14271,14252],{"class":3897},[3594,14273,3901],{"class":3818},[3594,14275,9601],{"class":3772},[3594,14277,14278],{"class":3818},",    ",[3594,14280,5436],{"class":4303},[3594,14282,3860],{"class":3818},[3594,14284,5441],{"class":4303},[3594,14286,3923],{"class":3818},[3594,14288,14290,14292,14294,14296,14298,14300,14302,14304],{"class":3596,"line":14289},130,[3594,14291,14252],{"class":3897},[3594,14293,3901],{"class":3818},[3594,14295,9668],{"class":3772},[3594,14297,3860],{"class":3818},[3594,14299,5455],{"class":4303},[3594,14301,3860],{"class":3818},[3594,14303,5460],{"class":4303},[3594,14305,3923],{"class":3818},[3594,14307,14309,14311,14313,14316,14318,14320,14322,14325],{"class":3596,"line":14308},131,[3594,14310,14252],{"class":3897},[3594,14312,3901],{"class":3818},[3594,14314,14315],{"class":3772},"\"Savchenko Anna\"",[3594,14317,3860],{"class":3818},[3594,14319,5415],{"class":4303},[3594,14321,3860],{"class":3818},[3594,14323,14324],{"class":4303},"4.2",[3594,14326,3923],{"class":3818},[3594,14328,14330],{"class":3596,"line":14329},132,[3594,14331,3619],{"emptyLinePlaceholder":3618},[3594,14333,14335,14337,14339,14342],{"class":3596,"line":14334},133,[3594,14336,4330],{"class":3897},[3594,14338,5219],{"class":3818},[3594,14340,14341],{"class":3772},"\"=== Список студентів ===\"",[3594,14343,3923],{"class":3818},[3594,14345,14347,14350],{"class":3596,"line":14346},134,[3594,14348,14349],{"class":3897},"    listStudents",[3594,14351,14352],{"class":3818},"();\n",[3594,14354,14356],{"class":3596,"line":14355},135,[3594,14357,3619],{"emptyLinePlaceholder":3618},[3594,14359,14361],{"class":3596,"line":14360},136,[3594,14362,14363],{"class":3776},"    \u002F\u002F Пошук\n",[3594,14365,14367,14370,14373,14375,14377],{"class":3596,"line":14366},137,[3594,14368,14369],{"class":3818},"    idx = ",[3594,14371,14372],{"class":3897},"findStudent",[3594,14374,3901],{"class":3818},[3594,14376,9601],{"class":3772},[3594,14378,14379],{"class":3818},", &found);\n",[3594,14381,14383,14385,14388,14390],{"class":3596,"line":14382},138,[3594,14384,4260],{"class":3768},[3594,14386,14387],{"class":3818}," (idx >= ",[3594,14389,3718],{"class":4303},[3594,14391,4268],{"class":3818},[3594,14393,14395],{"class":3596,"line":14394},139,[3594,14396,4273],{"class":3818},[3594,14398,14400,14402,14404,14406,14408,14411,14413,14416,14418,14421,14423,14425,14427],{"class":3596,"line":14399},140,[3594,14401,4279],{"class":3897},[3594,14403,5219],{"class":3818},[3594,14405,4292],{"class":3772},[3594,14407,4289],{"class":4288},[3594,14409,14410],{"class":3772},"Знайдено [",[3594,14412,4970],{"class":3910},[3594,14414,14415],{"class":3772},"]: ",[3594,14417,4976],{"class":3910},[3594,14419,14420],{"class":3772},", GPA: ",[3594,14422,6640],{"class":3910},[3594,14424,4289],{"class":4288},[3594,14426,4292],{"class":3772},[3594,14428,5667],{"class":3818},[3594,14430,14432,14435,14438,14440,14442,14444,14446,14448,14450],{"class":3596,"line":14431},141,[3594,14433,14434],{"class":3818},"                idx, ",[3594,14436,14437],{"class":3910},"found",[3594,14439,3464],{"class":3818},[3594,14441,5679],{"class":3910},[3594,14443,3860],{"class":3818},[3594,14445,14437],{"class":3910},[3594,14447,3464],{"class":3818},[3594,14449,5703],{"class":3910},[3594,14451,3923],{"class":3818},[3594,14453,14455],{"class":3596,"line":14454},142,[3594,14456,3619],{"emptyLinePlaceholder":3618},[3594,14458,14460],{"class":3596,"line":14459},143,[3594,14461,14462],{"class":3776},"        \u002F\u002F Оновлюємо GPA\n",[3594,14464,14466,14469,14472,14474],{"class":3596,"line":14465},144,[3594,14467,14468],{"class":3897},"        updateGpa",[3594,14470,14471],{"class":3818},"(idx, ",[3594,14473,11626],{"class":4303},[3594,14475,3923],{"class":3818},[3594,14477,14479,14481,14483,14486,14488,14490],{"class":3596,"line":14478},145,[3594,14480,4279],{"class":3897},[3594,14482,5219],{"class":3818},[3594,14484,14485],{"class":3772},"\"GPA оновлено до 4.95",[3594,14487,4289],{"class":4288},[3594,14489,4292],{"class":3772},[3594,14491,3923],{"class":3818},[3594,14493,14495],{"class":3596,"line":14494},146,[3594,14496,4313],{"class":3818},[3594,14498,14500],{"class":3596,"line":14499},147,[3594,14501,3619],{"emptyLinePlaceholder":3618},[3594,14503,14505,14507,14509,14511,14513,14516],{"class":3596,"line":14504},148,[3594,14506,4330],{"class":3897},[3594,14508,5219],{"class":3818},[3594,14510,4292],{"class":3772},[3594,14512,4289],{"class":4288},[3594,14514,14515],{"class":3772},"=== Після оновлення ===\"",[3594,14517,3923],{"class":3818},[3594,14519,14521,14523],{"class":3596,"line":14520},149,[3594,14522,14349],{"class":3897},[3594,14524,14352],{"class":3818},[3594,14526,14528],{"class":3596,"line":14527},150,[3594,14529,3619],{"emptyLinePlaceholder":3618},[3594,14531,14533,14535,14537],{"class":3596,"line":14532},151,[3594,14534,4378],{"class":3768},[3594,14536,4381],{"class":4303},[3594,14538,4307],{"class":3818},[3594,14540,14542],{"class":3596,"line":14541},152,[3594,14543,4389],{"class":3818},[4391,14545,14547,14556,14560,14563,14567,14571,14575,14579,14583,14587,14590,14598,14605,14608,14612,14615,14618,14621,14624,14631,14634,14637],{"title":14546},".\u002FStudentDB",[4395,14548,14550,4403,14553],{"className":14549},[3596],[3594,14551,4402],{"className":14552},[4401],[3424,14554,14546],{"className":14555},[4407],[4395,14557,14559],{"className":14558},[3596],"=== Список студентів ===",[4395,14561],{"className":14562},[3596],[4395,14564,14566],{"className":14565},[3596],"№    Ім'я                 Вік   GPA",[4395,14568,14570],{"className":14569},[3596],"----+--------------------+-----+------",[4395,14572,14574],{"className":14573},[3596],"0    Petrenko Ivan        20    4.50",[4395,14576,14578],{"className":14577},[3596],"1    Koval Olena          19    4.80",[4395,14580,14582],{"className":14581},[3596],"2    Boiko Mykhailo       21    3.90",[4395,14584,14586],{"className":14585},[3596],"3    Savchenko Anna       20    4.20",[4395,14588],{"className":14589},[3596],[4395,14591,14593,14594,14597],{"className":14592},[3596],"Знайдено [1]: ",[3594,14595,11226],{"className":14596},[6209],", GPA: 4.80",[4395,14599,14601],{"className":14600},[3596],[3594,14602,14604],{"className":14603},[4415,4407],"GPA оновлено до 4.95",[4395,14606],{"className":14607},[3596],[4395,14609,14611],{"className":14610},[3596],"=== Після оновлення ===",[4395,14613],{"className":14614},[3596],[4395,14616,14566],{"className":14617},[3596],[4395,14619,14570],{"className":14620},[3596],[4395,14622,14574],{"className":14623},[3596],[4395,14625,14627,14628],{"className":14626},[3596],"1    Koval Olena          19    ",[3594,14629,11626],{"className":14630},[4415,4407],[4395,14632,14582],{"className":14633},[3596],[4395,14635,14586],{"className":14636},[3596],[4395,14638,6248,14640,3464],{"className":14639},[3596],[3594,14641,6252],{"className":14642},[4415,4407],[3493,14644],{},[3413,14646,14648],{"id":14647},"порівняльна-таблиця-функцій-stdioh","Порівняльна таблиця функцій stdio.h",[14650,14651,14653],"collapsible",{"title":14652},"Показати повну таблицю функцій",[3960,14654,14655,14667],{},[3963,14656,14657],{},[3966,14658,14659,14662,14665],{},[3969,14660,14661],{"align":3975},"Функція",[3969,14663,14664],{"align":3975},"Прототип",[3969,14666,4541],{"align":3975},[3984,14668,14669,14683,14697,14711,14725,14739,14753,14767,14781,14795,14809,14823,14837,14851,14866,14880,14894,14908,14922,14937,14952,14967],{},[3966,14670,14671,14675,14680],{},[3989,14672,14673],{"align":3975},[3439,14674,4240],{},[3989,14676,14677],{"align":3975},[3439,14678,14679],{},"FILE* fopen(const char*, const char*)",[3989,14681,14682],{"align":3975},"Відкрити файл",[3966,14684,14685,14689,14694],{},[3989,14686,14687],{"align":3975},[3439,14688,4828],{},[3989,14690,14691],{"align":3975},[3439,14692,14693],{},"int fclose(FILE*)",[3989,14695,14696],{"align":3975},"Закрити файл",[3966,14698,14699,14703,14708],{},[3989,14700,14701],{"align":3975},[3439,14702,11894],{},[3989,14704,14705],{"align":3975},[3439,14706,14707],{},"int fflush(FILE*)",[3989,14709,14710],{"align":3975},"Примусово скинути буфер",[3966,14712,14713,14717,14722],{},[3989,14714,14715],{"align":3975},[3439,14716,4605],{},[3989,14718,14719],{"align":3975},[3439,14720,14721],{},"int fprintf(FILE*, const char*, ...)",[3989,14723,14724],{"align":3975},"Форматований запис",[3966,14726,14727,14731,14736],{},[3989,14728,14729],{"align":3975},[3439,14730,4608],{},[3989,14732,14733],{"align":3975},[3439,14734,14735],{},"int fscanf(FILE*, const char*, ...)",[3989,14737,14738],{"align":3975},"Форматоване читання",[3966,14740,14741,14745,14750],{},[3989,14742,14743],{"align":3975},[3439,14744,7634],{},[3989,14746,14747],{"align":3975},[3439,14748,14749],{},"int fputc(int, FILE*)",[3989,14751,14752],{"align":3975},"Записати один символ",[3966,14754,14755,14759,14764],{},[3989,14756,14757],{"align":3975},[3439,14758,7409],{},[3989,14760,14761],{"align":3975},[3439,14762,14763],{},"int fgetc(FILE*)",[3989,14765,14766],{"align":3975},"Прочитати один символ",[3966,14768,14769,14773,14778],{},[3989,14770,14771],{"align":3975},[3439,14772,7963],{},[3989,14774,14775],{"align":3975},[3439,14776,14777],{},"int fputs(const char*, FILE*)",[3989,14779,14780],{"align":3975},"Записати рядок",[3966,14782,14783,14787,14792],{},[3989,14784,14785],{"align":3975},[3439,14786,7960],{},[3989,14788,14789],{"align":3975},[3439,14790,14791],{},"char* fgets(char*, int, FILE*)",[3989,14793,14794],{"align":3975},"Прочитати рядок",[3966,14796,14797,14801,14806],{},[3989,14798,14799],{"align":3975},[3439,14800,8865],{},[3989,14802,14803],{"align":3975},[3439,14804,14805],{},"size_t fwrite(const void*, size_t, size_t, FILE*)",[3989,14807,14808],{"align":3975},"Бінарний запис",[3966,14810,14811,14815,14820],{},[3989,14812,14813],{"align":3975},[3439,14814,9200],{},[3989,14816,14817],{"align":3975},[3439,14818,14819],{},"size_t fread(void*, size_t, size_t, FILE*)",[3989,14821,14822],{"align":3975},"Бінарне читання",[3966,14824,14825,14829,14834],{},[3989,14826,14827],{"align":3975},[3439,14828,10359],{},[3989,14830,14831],{"align":3975},[3439,14832,14833],{},"int fseek(FILE*, long, int)",[3989,14835,14836],{"align":3975},"Перемістити покажчик",[3966,14838,14839,14843,14848],{},[3989,14840,14841],{"align":3975},[3439,14842,10362],{},[3989,14844,14845],{"align":3975},[3439,14846,14847],{},"long ftell(FILE*)",[3989,14849,14850],{"align":3975},"Отримати позицію",[3966,14852,14853,14858,14863],{},[3989,14854,14855],{"align":3975},[3439,14856,14857],{},"rewind",[3989,14859,14860],{"align":3975},[3439,14861,14862],{},"void rewind(FILE*)",[3989,14864,14865],{"align":3975},"Повернутись на початок",[3966,14867,14868,14872,14877],{},[3989,14869,14870],{"align":3975},[3439,14871,12612],{},[3989,14873,14874],{"align":3975},[3439,14875,14876],{},"int fgetpos(FILE*, fpos_t*)",[3989,14878,14879],{"align":3975},"Зберегти позицію",[3966,14881,14882,14886,14891],{},[3989,14883,14884],{"align":3975},[3439,14885,12615],{},[3989,14887,14888],{"align":3975},[3439,14889,14890],{},"int fsetpos(FILE*, const fpos_t*)",[3989,14892,14893],{"align":3975},"Відновити позицію",[3966,14895,14896,14900,14905],{},[3989,14897,14898],{"align":3975},[3439,14899,12385],{},[3989,14901,14902],{"align":3975},[3439,14903,14904],{},"int feof(FILE*)",[3989,14906,14907],{"align":3975},"Перевірка кінця файлу",[3966,14909,14910,14914,14919],{},[3989,14911,14912],{"align":3975},[3439,14913,12428],{},[3989,14915,14916],{"align":3975},[3439,14917,14918],{},"int ferror(FILE*)",[3989,14920,14921],{"align":3975},"Перевірка помилки",[3966,14923,14924,14929,14934],{},[3989,14925,14926],{"align":3975},[3439,14927,14928],{},"clearerr",[3989,14930,14931],{"align":3975},[3439,14932,14933],{},"void clearerr(FILE*)",[3989,14935,14936],{"align":3975},"Скинути прапорці",[3966,14938,14939,14944,14949],{},[3989,14940,14941],{"align":3975},[3439,14942,14943],{},"remove",[3989,14945,14946],{"align":3975},[3439,14947,14948],{},"int remove(const char*)",[3989,14950,14951],{"align":3975},"Видалити файл",[3966,14953,14954,14959,14964],{},[3989,14955,14956],{"align":3975},[3439,14957,14958],{},"rename",[3989,14960,14961],{"align":3975},[3439,14962,14963],{},"int rename(const char*, const char*)",[3989,14965,14966],{"align":3975},"Перейменувати файл",[3966,14968,14969,14974,14979],{},[3989,14970,14971],{"align":3975},[3439,14972,14973],{},"tmpfile",[3989,14975,14976],{"align":3975},[3439,14977,14978],{},"FILE* tmpfile()",[3989,14980,14981],{"align":3975},"Тимчасовий файл",[3493,14983],{},[3413,14985,14987],{"id":14986},"додаткові-корисні-функції","Додаткові корисні функції",[3955,14989,14991],{"id":14990},"remove-і-rename","remove і rename",[3418,14993,14994,14995,14997],{},"Бібліотека ",[3439,14996,3695],{}," також надає функції для роботи з файлами на рівні файлової системи — без необхідності відкривати їх:",[3585,14999,15002],{"className":3757,"code":15000,"filename":15001,"language":3760,"meta":3761,"style":3590},"#include \u003Ccstdio>\n\nint main()\n{\n    FILE* f;\n\n    \u002F\u002F Створимо тестовий файл\n    f = fopen(\"temp.txt\", \"w\");\n    fprintf(f, \"test data\\n\");\n    fclose(f);\n\n    \u002F\u002F Перейменовуємо файл\n    if (rename(\"temp.txt\", \"renamed.txt\") == 0)\n    {\n        fprintf(stdout, \"Файл перейменовано\\n\");\n    }\n\n    \u002F\u002F Видаляємо файл\n    if (remove(\"renamed.txt\") == 0)\n    {\n        fprintf(stdout, \"Файл видалено\\n\");\n    }\n    else\n    {\n        fprintf(stderr, \"Помилка видалення\\n\");\n    }\n\n    return 0;\n}\n","FileOps.cpp",[3439,15003,15004,15010,15014,15022,15026,15031,15035,15039,15057,15073,15080,15084,15089,15112,15116,15131,15135,15139,15144,15162,15166,15181,15185,15190,15194,15209,15213,15217,15225],{"__ignoreMap":3590},[3594,15005,15006,15008],{"class":3596,"line":3597},[3594,15007,3769],{"class":3768},[3594,15009,4192],{"class":3772},[3594,15011,15012],{"class":3596,"line":3603},[3594,15013,3619],{"emptyLinePlaceholder":3618},[3594,15015,15016,15018,15020],{"class":3596,"line":3609},[3594,15017,3714],{"class":3893},[3594,15019,4210],{"class":3897},[3594,15021,4213],{"class":3818},[3594,15023,15024],{"class":3596,"line":3615},[3594,15025,4218],{"class":3818},[3594,15027,15028],{"class":3596,"line":3622},[3594,15029,15030],{"class":3818},"    FILE* f;\n",[3594,15032,15033],{"class":3596,"line":3628},[3594,15034,3619],{"emptyLinePlaceholder":3618},[3594,15036,15037],{"class":3596,"line":3634},[3594,15038,7224],{"class":3776},[3594,15040,15041,15044,15046,15048,15051,15053,15055],{"class":3596,"line":3640},[3594,15042,15043],{"class":3818},"    f = ",[3594,15045,4240],{"class":3897},[3594,15047,3901],{"class":3818},[3594,15049,15050],{"class":3772},"\"temp.txt\"",[3594,15052,3860],{"class":3818},[3594,15054,4009],{"class":3772},[3594,15056,3923],{"class":3818},[3594,15058,15059,15061,15064,15067,15069,15071],{"class":3596,"line":3645},[3594,15060,4330],{"class":3897},[3594,15062,15063],{"class":3818},"(f, ",[3594,15065,15066],{"class":3772},"\"test data",[3594,15068,4289],{"class":4288},[3594,15070,4292],{"class":3772},[3594,15072,3923],{"class":3818},[3594,15074,15075,15077],{"class":3596,"line":3651},[3594,15076,4369],{"class":3897},[3594,15078,15079],{"class":3818},"(f);\n",[3594,15081,15082],{"class":3596,"line":3657},[3594,15083,3619],{"emptyLinePlaceholder":3618},[3594,15085,15086],{"class":3596,"line":3663},[3594,15087,15088],{"class":3776},"    \u002F\u002F Перейменовуємо файл\n",[3594,15090,15091,15093,15095,15097,15099,15101,15103,15106,15108,15110],{"class":3596,"line":4276},[3594,15092,4260],{"class":3768},[3594,15094,3558],{"class":3818},[3594,15096,14958],{"class":3897},[3594,15098,3901],{"class":3818},[3594,15100,15050],{"class":3772},[3594,15102,3860],{"class":3818},[3594,15104,15105],{"class":3772},"\"renamed.txt\"",[3594,15107,6610],{"class":3818},[3594,15109,3718],{"class":4303},[3594,15111,4268],{"class":3818},[3594,15113,15114],{"class":3596,"line":4297},[3594,15115,4273],{"class":3818},[3594,15117,15118,15120,15122,15125,15127,15129],{"class":3596,"line":4310},[3594,15119,4279],{"class":3897},[3594,15121,5219],{"class":3818},[3594,15123,15124],{"class":3772},"\"Файл перейменовано",[3594,15126,4289],{"class":4288},[3594,15128,4292],{"class":3772},[3594,15130,3923],{"class":3818},[3594,15132,15133],{"class":3596,"line":4316},[3594,15134,4313],{"class":3818},[3594,15136,15137],{"class":3596,"line":4321},[3594,15138,3619],{"emptyLinePlaceholder":3618},[3594,15140,15141],{"class":3596,"line":4327},[3594,15142,15143],{"class":3776},"    \u002F\u002F Видаляємо файл\n",[3594,15145,15146,15148,15150,15152,15154,15156,15158,15160],{"class":3596,"line":4345},[3594,15147,4260],{"class":3768},[3594,15149,3558],{"class":3818},[3594,15151,14943],{"class":3897},[3594,15153,3901],{"class":3818},[3594,15155,15105],{"class":3772},[3594,15157,6610],{"class":3818},[3594,15159,3718],{"class":4303},[3594,15161,4268],{"class":3818},[3594,15163,15164],{"class":3596,"line":4361},[3594,15165,4273],{"class":3818},[3594,15167,15168,15170,15172,15175,15177,15179],{"class":3596,"line":4366},[3594,15169,4279],{"class":3897},[3594,15171,5219],{"class":3818},[3594,15173,15174],{"class":3772},"\"Файл видалено",[3594,15176,4289],{"class":4288},[3594,15178,4292],{"class":3772},[3594,15180,3923],{"class":3818},[3594,15182,15183],{"class":3596,"line":4375},[3594,15184,4313],{"class":3818},[3594,15186,15187],{"class":3596,"line":4386},[3594,15188,15189],{"class":3768},"    else\n",[3594,15191,15192],{"class":3596,"line":4876},[3594,15193,4273],{"class":3818},[3594,15195,15196,15198,15200,15203,15205,15207],{"class":3596,"line":4881},[3594,15197,4279],{"class":3897},[3594,15199,4282],{"class":3818},[3594,15201,15202],{"class":3772},"\"Помилка видалення",[3594,15204,4289],{"class":4288},[3594,15206,4292],{"class":3772},[3594,15208,3923],{"class":3818},[3594,15210,15211],{"class":3596,"line":4890},[3594,15212,4313],{"class":3818},[3594,15214,15215],{"class":3596,"line":5536},[3594,15216,3619],{"emptyLinePlaceholder":3618},[3594,15218,15219,15221,15223],{"class":3596,"line":5542},[3594,15220,4378],{"class":3768},[3594,15222,4381],{"class":4303},[3594,15224,4307],{"class":3818},[3594,15226,15227],{"class":3596,"line":5581},[3594,15228,4389],{"class":3818},[4391,15230,15232,15241,15248,15255],{"title":15231},".\u002FFileOps",[4395,15233,15235,4403,15238],{"className":15234},[3596],[3594,15236,4402],{"className":15237},[4401],[3424,15239,15231],{"className":15240},[4407],[4395,15242,15244],{"className":15243},[3596],[3594,15245,15247],{"className":15246},[4415],"Файл перейменовано",[4395,15249,15251],{"className":15250},[3596],[3594,15252,15254],{"className":15253},[4415],"Файл видалено",[4395,15256,6248,15258,3464],{"className":15257},[3596],[3594,15259,6252],{"className":15260},[4415,4407],[3493,15262],{},[3413,15264,15266],{"id":15265},"схема-циклу-роботи-з-файлом","Схема циклу роботи з файлом",[15268,15269,15270],"mermaid",{},[3585,15271,15274],{"className":15272,"code":15273,"language":15268,"meta":3590,"style":3590},"language-mermaid shiki shiki-themes light-plus dark-plus dark-plus","flowchart TD\n    A[\"Оголосити FILE*\"] --> B[\"fopen(filename, mode)\"]\n    B --> C{result == NULL?}\n    C -- Так --> D[\"Обробка помилки\\nперевірити errno\"]\n    D --> Z[\"return 1\"]\n    C -- Ні --> E[\"Операції з файлом\\nfscanf \u002F fprintf\\nfread \u002F fwrite\\nfgetc \u002F fputc\"]\n    E --> F{Потрібен fflush?}\n    F -- Так --> G[\"fflush(stream)\"]\n    G --> E\n    F -- Ні --> H[\"fclose(stream)\"]\n    H --> I[\"покажчик = NULL\"]\n    I --> J[\"return 0\"]\n\n    style A fill:#3b82f6,stroke:#1d4ed8,color:#ffffff\n    style B fill:#3b82f6,stroke:#1d4ed8,color:#ffffff\n    style C fill:#f59e0b,stroke:#b45309,color:#ffffff\n    style D fill:#ef4444,stroke:#dc2626,color:#ffffff\n    style E fill:#3b82f6,stroke:#1d4ed8,color:#ffffff\n    style F fill:#f59e0b,stroke:#b45309,color:#ffffff\n    style G fill:#64748b,stroke:#334155,color:#ffffff\n    style H fill:#3b82f6,stroke:#1d4ed8,color:#ffffff\n    style I fill:#64748b,stroke:#334155,color:#ffffff\n    style J fill:#22c55e,stroke:#16a34a,color:#ffffff\n    style Z fill:#ef4444,stroke:#dc2626,color:#ffffff\n",[3439,15275,15276,15281,15286,15291,15296,15301,15306,15311,15316,15321,15326,15331,15336,15340,15345,15350,15355,15360,15365,15370,15375,15380,15385,15390],{"__ignoreMap":3590},[3594,15277,15278],{"class":3596,"line":3597},[3594,15279,15280],{},"flowchart TD\n",[3594,15282,15283],{"class":3596,"line":3603},[3594,15284,15285],{},"    A[\"Оголосити FILE*\"] --> B[\"fopen(filename, mode)\"]\n",[3594,15287,15288],{"class":3596,"line":3609},[3594,15289,15290],{},"    B --> C{result == NULL?}\n",[3594,15292,15293],{"class":3596,"line":3615},[3594,15294,15295],{},"    C -- Так --> D[\"Обробка помилки\\nперевірити errno\"]\n",[3594,15297,15298],{"class":3596,"line":3622},[3594,15299,15300],{},"    D --> Z[\"return 1\"]\n",[3594,15302,15303],{"class":3596,"line":3628},[3594,15304,15305],{},"    C -- Ні --> E[\"Операції з файлом\\nfscanf \u002F fprintf\\nfread \u002F fwrite\\nfgetc \u002F fputc\"]\n",[3594,15307,15308],{"class":3596,"line":3634},[3594,15309,15310],{},"    E --> F{Потрібен fflush?}\n",[3594,15312,15313],{"class":3596,"line":3640},[3594,15314,15315],{},"    F -- Так --> G[\"fflush(stream)\"]\n",[3594,15317,15318],{"class":3596,"line":3645},[3594,15319,15320],{},"    G --> E\n",[3594,15322,15323],{"class":3596,"line":3651},[3594,15324,15325],{},"    F -- Ні --> H[\"fclose(stream)\"]\n",[3594,15327,15328],{"class":3596,"line":3657},[3594,15329,15330],{},"    H --> I[\"покажчик = NULL\"]\n",[3594,15332,15333],{"class":3596,"line":3663},[3594,15334,15335],{},"    I --> J[\"return 0\"]\n",[3594,15337,15338],{"class":3596,"line":4276},[3594,15339,3619],{"emptyLinePlaceholder":3618},[3594,15341,15342],{"class":3596,"line":4297},[3594,15343,15344],{},"    style A fill:#3b82f6,stroke:#1d4ed8,color:#ffffff\n",[3594,15346,15347],{"class":3596,"line":4310},[3594,15348,15349],{},"    style B fill:#3b82f6,stroke:#1d4ed8,color:#ffffff\n",[3594,15351,15352],{"class":3596,"line":4316},[3594,15353,15354],{},"    style C fill:#f59e0b,stroke:#b45309,color:#ffffff\n",[3594,15356,15357],{"class":3596,"line":4321},[3594,15358,15359],{},"    style D fill:#ef4444,stroke:#dc2626,color:#ffffff\n",[3594,15361,15362],{"class":3596,"line":4327},[3594,15363,15364],{},"    style E fill:#3b82f6,stroke:#1d4ed8,color:#ffffff\n",[3594,15366,15367],{"class":3596,"line":4345},[3594,15368,15369],{},"    style F fill:#f59e0b,stroke:#b45309,color:#ffffff\n",[3594,15371,15372],{"class":3596,"line":4361},[3594,15373,15374],{},"    style G fill:#64748b,stroke:#334155,color:#ffffff\n",[3594,15376,15377],{"class":3596,"line":4366},[3594,15378,15379],{},"    style H fill:#3b82f6,stroke:#1d4ed8,color:#ffffff\n",[3594,15381,15382],{"class":3596,"line":4375},[3594,15383,15384],{},"    style I fill:#64748b,stroke:#334155,color:#ffffff\n",[3594,15386,15387],{"class":3596,"line":4386},[3594,15388,15389],{},"    style J fill:#22c55e,stroke:#16a34a,color:#ffffff\n",[3594,15391,15392],{"class":3596,"line":4876},[3594,15393,15394],{},"    style Z fill:#ef4444,stroke:#dc2626,color:#ffffff\n",[3493,15396],{},[3413,15398,15400],{"id":15399},"практика","Практика",[3955,15402,15404],{"id":15403},"рівень-1-базовий","Рівень 1 — Базовий",[15406,15407,15408,15448,15483],"accordion",{},[15409,15410,15413,15416,15436],"accordion-item",{"icon":15411,"label":15412},"i-lucide-circle-help","Завдання 1.1: Перший текстовий файл",[3418,15414,15415],{},"Напишіть програму, яка:",[3545,15417,15418,15421,15427,15430,15433],{},[3432,15419,15420],{},"Запитує у користувача 5 цілих чисел.",[3432,15422,15423,15424,15426],{},"Записує їх у текстовий файл ",[3439,15425,5924],{}," (кожне на новому рядку).",[3432,15428,15429],{},"Закриває файл.",[3432,15431,15432],{},"Відкриває файл повторно для читання.",[3432,15434,15435],{},"Читає числа та виводить їх суму і середнє значення на екран.",[3418,15437,15438,15439,15441,15442,15444,15445,15447],{},"Вимоги: перевіряти результат ",[3439,15440,3879],{}," при кожному відкритті. Використати ",[3439,15443,4605],{}," для запису і ",[3439,15446,4608],{}," для читання.",[15409,15449,15451,15461,15480],{"icon":15411,"label":15450},"Завдання 1.2: Підрахунок символів",[3418,15452,15453,15454,15457,15458,15460],{},"Напишіть програму, що зчитує текстовий файл ",[3439,15455,15456],{},"input.txt"," посимвольно (за допомогою ",[3439,15459,7409],{},") і підраховує:",[3429,15462,15463,15466,15471,15474,15477],{},[3432,15464,15465],{},"Загальну кількість символів.",[3432,15467,15468,15469,7084],{},"Кількість рядків (символів ",[3439,15470,3526],{},[3432,15472,15473],{},"Кількість пробілів.",[3432,15475,15476],{},"Кількість великих латинських літер (A–Z).",[3432,15478,15479],{},"Кількість малих латинських літер (a–z).",[3418,15481,15482],{},"Результати вивести у форматованому вигляді на екран.",[15409,15484,15486,15487,15490,15491,15493,15494,15497,15498,15501],{"icon":15411,"label":15485},"Завдання 1.3: Копіювання з перетворенням","Напишіть програму, яка читає файл ",[3439,15488,15489],{},"source.txt"," рядок за рядком (за допомогою ",[3439,15492,7960],{},") і записує його у ",[3439,15495,15496],{},"output.txt",", де кожен рядок пронумерований: ",[3439,15499,15500],{},"001: текст рядка",". Максимальна довжина рядка — 200 символів.",[3955,15503,15505],{"id":15504},"рівень-2-бінарні-файли","Рівень 2 — Бінарні файли",[15406,15507,15508,15578],{},[15409,15509,15511,15517,15543,15546,15572],{"icon":15411,"label":15510},"Завдання 2.1: Журнал оцінок",[3418,15512,15513,15514,4526],{},"Реалізуйте бінарний журнал оцінок. Структура ",[3439,15515,15516],{},"GradeRecord",[3429,15518,15519,15525,15531,15537],{},[3432,15520,15521,15524],{},[3439,15522,15523],{},"char subject[40]"," — назва предмету",[3432,15526,15527,15530],{},[3439,15528,15529],{},"char student[50]"," — ім'я студента",[3432,15532,15533,15536],{},[3439,15534,15535],{},"int grade"," — оцінка (1–100)",[3432,15538,15539,15542],{},[3439,15540,15541],{},"int year"," — рік",[3418,15544,15545],{},"Функції:",[3429,15547,15548,15554,15560,15566],{},[3432,15549,15550,15553],{},[3439,15551,15552],{},"addRecord(filename, record)"," — додати запис у кінець файлу.",[3432,15555,15556,15559],{},[3439,15557,15558],{},"printAllRecords(filename)"," — вивести всі записи.",[3432,15561,15562,15565],{},[3439,15563,15564],{},"printByStudent(filename, name)"," — вивести всі оцінки одного студента.",[3432,15567,15568,15571],{},[3439,15569,15570],{},"calcAverage(filename, name)"," — обчислити середню оцінку студента.",[3418,15573,15574,15577],{},[3439,15575,15576],{},"main()"," демонструє роботу всіх функцій.",[15409,15579,15581,15591,15594],{"icon":15411,"label":15580},"Завдання 2.2: Зміна двох елементів",[3418,15582,15583,15584,15587,15588,3464],{},"У бінарному файлі ",[3439,15585,15586],{},"float_data.bin"," записано 10 дійсних чисел типу ",[3439,15589,15590],{},"float",[3418,15592,15593],{},"Завдання:",[3545,15595,15596,15610,15613,15619],{},[3432,15597,15598,15599,15602,15603,15606,15607,7084],{},"Записати у файл числа від ",[3439,15600,15601],{},"1.5"," до ",[3439,15604,15605],{},"10.5"," (крок ",[3439,15608,15609],{},"1.0",[3432,15611,15612],{},"Знайти у масиві максимальний і мінімальний елементи та їхні індекси.",[3432,15614,15615,15616,15618],{},"За допомогою ",[3439,15617,10359],{}," перейти до позиції максимального елемента і записати на його місце мінімальний, і навпаки.",[3432,15620,15621],{},"Зчитати весь масив заново і вивести результат.",[3955,15623,15625],{"id":15624},"рівень-3-комплексний","Рівень 3 — Комплексний",[15406,15627,15628],{},[15409,15629,15631,15637,15651,15654,15669],{"icon":15411,"label":15630},"Завдання 3.1: Словник",[3418,15632,15633,15634,4526],{},"Реалізуйте простий двомовний словник з персистентним зберіганням. Структура ",[3439,15635,15636],{},"DictEntry",[3429,15638,15639,15645],{},[3432,15640,15641,15644],{},[3439,15642,15643],{},"char wordUkr[50]"," — слово українською",[3432,15646,15647,15650],{},[3439,15648,15649],{},"char wordEng[50]"," — слово англійською",[3418,15652,15653],{},"Програма повинна:",[3545,15655,15656,15663,15666],{},[3432,15657,15658,15659,15662],{},"При запуску завантажити всі записи з ",[3439,15660,15661],{},"dictionary.bin"," у масив.",[3432,15664,15665],{},"Надавати текстове меню: (1) Додати слово, (2) Знайти переклад, (3) Вивести всі слова, (4) Вийти.",[3432,15667,15668],{},"При виході зберегти оновлений словник у файл.",[3418,15670,15671,15672,15674,15675,15677,15678,3464],{},"Для пошуку — перебір всіх записів через ",[3439,15673,9200],{}," у циклі. Для збереження — відкриття у режимі ",[3439,15676,4100],{}," і запис всього масиву через ",[3439,15679,8865],{},[3493,15681],{},[3413,15683,15685],{"id":15684},"резюме","Резюме",[3516,15687,15688,15709,15736,15744,15764,15774],{},[3519,15689,15692,15693,15695,15696,3460,15698,15700,15701,15703,15704,15706,15707,3464],{"icon":15690,"title":15691},"i-lucide-folder-open","📁 Відкриття і закриття","Кожен файл відкривається через ",[3439,15694,3879],{},", яка повертає ",[3439,15697,3750],{},[3439,15699,3952],{},". Завжди перевіряйте результат. Закривайте файл через ",[3439,15702,3561],{}," — це скидає буфер і звільняє ресурси. Після ",[3439,15705,3561],{}," присвоюйте покажчику ",[3439,15708,3952],{},[3519,15710,15712,4613,15714,15716,15717,4613,15719,15721,15722,4613,15724,15726,15727,4613,15729,15731,15732,3460,15734,3464],{"icon":3521,"title":15711},"📝 Текстові файли",[3439,15713,4605],{},[3439,15715,4608],{}," — форматований запис\u002Fчитання (аналоги ",[3439,15718,4612],{},[3439,15720,4616],{},"). ",[3439,15723,7634],{},[3439,15725,7409],{}," — посимвольно. ",[3439,15728,7963],{},[3439,15730,7960],{}," — порядково. Перевірка кінця файлу — через повернене значення ",[3439,15733,4608],{},[3439,15735,5860],{},[3519,15737,15739,4613,15741,15743],{"icon":3530,"title":15738},"🔢 Бінарні файли",[3439,15740,8865],{},[3439,15742,9200],{}," — блокова передача байтів. Дані зберігаються точно як у пам'яті — без текстового перетворення. Ідеально для масивів і структур. Не переносні між різними архітектурами без додаткових заходів.",[3519,15745,15748,15751,15752,15755,15756,15758,15759,4613,15761,15763],{"icon":15746,"title":15747},"i-lucide-move-horizontal","📍 Позиціонування",[3439,15749,15750],{},"fseek(file, offset, SEEK_SET\u002FCUR\u002FEND)"," — перемістити покажчик. ",[3439,15753,15754],{},"ftell()"," — отримати поточну позицію. ",[3439,15757,12233],{}," — повернутись на початок. ",[3439,15760,12612],{},[3439,15762,12615],{}," — надійне збереження позиції для великих файлів.",[3519,15765,15768,15771,15772,3464],{"icon":15766,"title":15767},"i-lucide-settings","⚙️ Управління буфером",[3439,15769,15770],{},"fflush(stream)"," — примусово скидає буфер на диск без закриття файлу. Критично важливо для лог-файлів і при перемежованих записах\u002Fчитаннях. Ніколи не використовуйте ",[3439,15773,12133],{},[3519,15775,15777,15779,15780,15783,15784,15786,15787,15789],{"icon":1348,"title":15776},"🔍 Стан потоку",[3439,15778,5860],{}," — перевірка кінця файлу. ",[3439,15781,15782],{},"ferror()"," — перевірка помилки. ",[3439,15785,12237],{}," — скидання обох прапорців (необхідно перед ",[3439,15788,12233],{}," для повторного читання).",[3478,15791,15792,15793,3860,15796,3442,15799,15802,15803,3464],{},"Розглянутий C-style API є фундаментом, на якому побудована вся файлова екосистема Unix і Windows. Незважаючи на вік (він з'явився у 1970-х роках разом із мовою C), ці функції залишаються ефективними, переносними й повсюдно підтримуваними. Знання C-style IO — обов'язкова базова компетенція для будь-якого системного програміста. У наступному розділі ми розглянемо сучасну C++-альтернативу: потоки ",[3439,15794,15795],{},"ifstream",[3439,15797,15798],{},"ofstream",[3439,15800,15801],{},"fstream"," із бібліотеки ",[3439,15804,15805],{},"\u003Cfstream>",[15807,15808,15809],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s8xlr, html code.shiki .s8xlr{--shiki-light:#AF00DB;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sbdoH, html code.shiki .sbdoH{--shiki-light:#A31515;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .spJ8K, html code.shiki .spJ8K{--shiki-light:#008000;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .sHH4Y, html code.shiki .sHH4Y{--shiki-light:#000000;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .sN1BT, html code.shiki .sN1BT{--shiki-light:#267F99;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .su1O8, html code.shiki .su1O8{--shiki-light:#0000FF;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s8Opu, html code.shiki .s8Opu{--shiki-light:#795E26;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .siwwj, html code.shiki .siwwj{--shiki-light:#001080;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sjcCO, html code.shiki .sjcCO{--shiki-light:#EE0000;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sJj4R, html code.shiki .sJj4R{--shiki-light:#098658;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}",{"title":3590,"searchDepth":3603,"depth":3603,"links":15811},[15812,15813,15814,15815,15816,15820,15821,15822,15826,15831,15832,15838,15844,15850,15858,15861,15862,15863,15864,15865,15868,15869,15874],{"id":3415,"depth":3603,"text":3416},{"id":3497,"depth":3603,"text":3498},{"id":3682,"depth":3603,"text":3683},{"id":3797,"depth":3603,"text":3798},{"id":3872,"depth":3603,"text":3873,"children":15817},[15818,15819],{"id":3957,"depth":3609,"text":3958},{"id":4169,"depth":3609,"text":4170},{"id":4429,"depth":3603,"text":4430},{"id":4638,"depth":3603,"text":4639},{"id":4914,"depth":3603,"text":4915,"children":15823},[15824,15825],{"id":4989,"depth":3609,"text":4990},{"id":5290,"depth":3609,"text":5291},{"id":5801,"depth":3603,"text":5802,"children":15827},[15828,15829,15830],{"id":5853,"depth":3609,"text":5854},{"id":5917,"depth":3609,"text":5918},{"id":6279,"depth":3609,"text":6280},{"id":6800,"depth":3603,"text":6801},{"id":7035,"depth":3603,"text":7036,"children":15833},[15834,15835,15836,15837],{"id":7049,"depth":3609,"text":7050},{"id":7115,"depth":3609,"text":7116},{"id":7158,"depth":3609,"text":7159},{"id":7625,"depth":3609,"text":7626},{"id":7953,"depth":3603,"text":7954,"children":15839},[15840,15841,15842,15843],{"id":7966,"depth":3609,"text":7967},{"id":8060,"depth":3609,"text":8061},{"id":8111,"depth":3609,"text":8112},{"id":8477,"depth":3609,"text":8478},{"id":8529,"depth":3603,"text":8530,"children":15845},[15846,15847,15848,15849],{"id":8725,"depth":3609,"text":8726},{"id":8817,"depth":3609,"text":8818},{"id":8869,"depth":3609,"text":8870},{"id":9384,"depth":3609,"text":9385},{"id":10024,"depth":3603,"text":10025,"children":15851},[15852,15853,15854,15855,15856,15857],{"id":10056,"depth":3609,"text":10057},{"id":10284,"depth":3609,"text":10285},{"id":10318,"depth":3609,"text":10319},{"id":10352,"depth":3609,"text":10353},{"id":10675,"depth":3609,"text":10676},{"id":11255,"depth":3609,"text":11256},{"id":11837,"depth":3603,"text":11838,"children":15859},[15860],{"id":11887,"depth":3609,"text":11888},{"id":12146,"depth":3603,"text":12147},{"id":12605,"depth":3603,"text":12606},{"id":13097,"depth":3603,"text":13098},{"id":14647,"depth":3603,"text":14648},{"id":14986,"depth":3603,"text":14987,"children":15866},[15867],{"id":14990,"depth":3609,"text":14991},{"id":15265,"depth":3603,"text":15266},{"id":15399,"depth":3603,"text":15400,"children":15870},[15871,15872,15873],{"id":15403,"depth":3609,"text":15404},{"id":15504,"depth":3609,"text":15505},{"id":15624,"depth":3609,"text":15625},{"id":15684,"depth":3603,"text":15685},"Класичний підхід до роботи з файлами в C\u002FC++ через бібліотеку stdio.h. Структура FILE, функції fopen\u002Ffclose, текстові та бінарні файли, форматований і посимвольний ввід\u002Fвивід, прямий доступ та функції позиціонування.","md",null,{},{"title":1901,"description":15875},"fozvLgxl-sxQ0ONGiBizlZgfcZsFc-fRa2hfQZTpyu8",[15882,15884],{"title":1897,"path":1898,"stem":1899,"description":15883,"children":-1},"Одиниця трансляції та роль лінкера, попереднє оголошення і ODR, встановлення g++ на Windows\u002FmacOS\u002FLinux, заголовкові файли і пара .h\u002F.cpp, директиви препроцесора (#include, #define, умовна компіляція), header guards і #pragma once, простори імен namespace та оператор ::.",{"title":1905,"path":1906,"stem":1907,"description":15885,"children":-1},"Сучасний об'єктно-орієнтований підхід до роботи з файлами в C++ через бібліотеку fstream. Класи ifstream, ofstream, fstream, режими відкриття, потокові оператори \u003C\u003C та >>, рядкове читання, позиціонування та бінарний ввід\u002Fвивід.",1784194420700]