Приклад. #include <iostream.h>
#include <iostream.h>
#include <conio.h>
struct person
{
int dat;
person *next;
};
void Add_cherga(person *&elem,person *&cherga,person *&head)
{
if (head == 0)
{ head = elem;
cherga = elem;}
else {cherga->next=elem;
cherga=elem; }
}
void print_cherga(person *&cherga)
{
while (cherga!=0)
void main()
{
clrscr();
int data=10;
person *elem;
person *cherga;
person *head;
head = 0;
do
{
if (data!=0)
{ elem = new(person);
elem->dat = data;
Add_cherga(elem,cherga,head); }
data--;
}
while (data!=0);
print_cherga(head);
}
Результат робот програми: 10 9 8 7 6 5 4 3 2 1
Спочатку в список добавляється елемент 10, потім за ним 9, …. Тобто кожен наступний елемент добавляється в кінець списку. Самий останній елемент буде на останньому місці, тобто вийде зі списку останнім. Черга– це список, що працює за принципом «перший зайшов – першим вийшов»
Процедуру Add_cherga(person *&elem,person *&cherga,person *&) добавляє елемент elem в кінець списку cherga (cherga->next=elem). Після цього необхідно направити вказівник cherga на елемент elem, який є в кінці списку (cherga = elem). Вказівник head вказує на перший елемент черги (голова черги).
Тема.Файли в мові С++. Двійкові і текстові файли. Ввід-вивід даних.
План.
1. Призначення файлів.
2. Режими файлів.
3. Ознаки файлів.
4. Зчитування даних з файлу та ввід у файл.
5. Перевірка помилок виконання файлових операцій
1. Призначення файлів.
У всіх що розглядалися дотепер програмах введення даних проводилося тільки з клавіатури, а висновок - тільки на екран. Якщо як пристрої вводу/виводу обмежитися тільки клавіатурою і екраном, то у такому разі буде складно обробити великі об'єми вхідних даних. Вихідні дані, відображені на екрані, після виключення комп'ютера безповоротно втрачаються. Для усунення подібних проблем зручно зберігати дані на запам’ятовуючих носіях, призначених для довготривалого зберігання даних. Дані, що згенерували за допомогою однієї програми, можна зберегти на диску і надалі, при необхідності, витягнути і обробити в іншій програмі.
На дисках дані зберігаються у вигляді структур даних, що обслуговуються операційною системою, - у вигляді файлів. Файл простіше всього представити як лінійну послідовність символів.
Файл - це сукупність даних, які розміщені на зовнішньому носії, зокрема, на жорсткому диску. Дані у файлі називаються елементами. Кількість даних під час опрацювання файлів не зазначають. Файли можуть містити як текстову, так і числову інформацію.
Перед початком вивчення файлових операцій в Си++, згадаємо поняття потоку вводу-виводу. Потік нагадує "канал" або "трубу", через яку дані поступають від передавача до приймача. Виключно важлива особливість потокової обробки даних полягає в тому, що елементи даних можна посилати або прочитувати з потоку тільки поодинці за раз, тобто послідовно.З програми дані можна відправити (записати) в потік виводу, а отримати (прочитати) їх в програмі з потоку введення. Наприклад, відразу після запуску програми, потік стандартного введення "cin" підключається до клавіатури, а потік стандартного висновку "cout" - до екрану.
Існує декілька бібліотечних функцій, які дають змогу зчитати інформацію з файлу або спрямовувати потік виведення у файл. Функції, які розглядатимемо, описані в бібліотеці fstream.h. Тому для роботи з файлами насамперед необхідно підключити саме цю бібліотеку:
#include<fstream.h>
У модулі fstream.h також містяться описи стандартних потоків cout і сіn. Тому, щоб зчитати інформацію з файлу і вивести її на екран монітора, модуль iostream.h підключати не обов'язково.
2. Режими файлів.
При роботі з файловим вводом-виводом дуже важливо знати відмінність між текстовим і двійковим режимами. Текстовий режим був призначений для текстових файлів, в яких є рядки звичайного тексту. Двійковий режим використовується для будь-яких інших і особливо для файлів, які зберігаються у форматах, незручних для читання людиною. Існує деяка особлива тонкість, пов'язана з файлами текстового режиму, на які слід звернути особливу увагу і запам'ятати. Перша з них - символ EOF (26 в коді ASCII або Ctrl+Z) - є міткою (символ) кінця файлу. В текстовому режимі, де зустрічається символ EOF, система C++ низького рівня автоматично просувається до кінця файлу; ви нічого не можете прочитати після спеціального символу. Це може викликати проблеми, якщо такий спеціальний символ виявиться в середині файлу. Інша особливість текстового режиму полягає в тому, як інтерпретуються рядки текстового файлу. Кожний рядок закінчується послідовністю кінця рядка (EOL).
3. Ознаки файлів.
Ознаки слугують для зміни правил доступу до файлу. Розглянемо деякі з них:
Ознака | Призначення |
ios::in | Відкриває файл для читання з нього інформації. Вміст файлу зберігається |
ios::out | Відкриває файл для запису інформації. Якщо файл не існує, то буде створений |
ios::app | Відкриває файл для дописування інформації. Дані будуть записані в кінець файлу. |
ios::trunk | Якщо файл, який відкривають для записування вже існує, то його вміст буде вилучено. |
ios::nocreate | Забороняє створювати файл, який відкривають |
ios::noreplace | Забороняє перезаписати існуючий файл. |
ios:: binary | Відкрити файл в двійковому режимі. |
4. Зчитування даних з файлу та ввід у файл
В програмі перед першим зверненням до потоку введення або висновку необхідно "створити" потік. Оператори для створення потоків схожі на описи змінних, і вони звичайно розміщуються на початку програми або функції поряд з описами змінних.
Щоб зчитати вхідні дані з файлу, необхідно оголосити файлову змінну та відкрити файл для читання так (розглянемо два способи):
ifstream <назва файлової змінної>(<зовнішня назва>, ознака! |ознака2 | ... | ознакам);
або так:
ifstream <назва файлової змінної>;<назва файлової змінної>.ореп(<зовнішня назва>);
Дія команд. Підключаємо потік введення даних із файлу та налагоджуємо зв'язок між файловою змінною у програмі та файлом на зовнішньому носії. Назву зовнішнього файлу треба записувати у лапках. Ознаки слугують для визначення прав доступу до файлу Ознаки зазначати необов'язково. У випадку, коли їх задавати не потрібно, наведені дві форми запису тотожні, і можна обирати одну з них.
Приклад . Відкрити зовнішній файл MyText.txt для читання з нього даних можна так: ifstream MyFile("MyText.txt");
або так:
ifstream MyFile; MyFile.openfMyText.txt");
Тут MyFile - це файлова змінна, що асоціюється у програмі з відповідним зовнішнім файлом на диску. Введення даних виконують командою введення ».
Наприклад, команда MyFile » text;
зчитає одне дане з початку файлу MyText.txt до першого пропуску чи до символу „кінець рядка" у змінну text. Якщо треба зчитати наступне дане (яке розміщене між першим і другим пропусками), необхідно повторити попередню команду, тобто записати команди MyFile » text; MyFile » textl; або використати команду MyFile » text»textl;.
Наприклад, оператори
ifstream in_stream;
ofstream out_stream;
створюють потік з ім'ям "in_stream", ("ifstream" -input-file-stream, файловий потік введення), і потік з ім'ям "out_stream" ("ofstream" -output-file-stream, файловий потік виводу).
До потоків не можна застосовувати оператор присвоєння (наприклад, не можна записати "in_stream1 = in_stream2").
Отже, зчитати дані з файлу можна за допомогою команди:
< назва файлової змінної> » <змінна 1> » <змінна 2> » ... » <змінна N>
Після опрацювання файлу його потрібно закрити. Це роблять так:
<назва файлової змінної>.сlose()
Наприклад, MyFile.close(). Файл MyText.txt буде закрито. Після цього файлову змінну MyFile у разі потреби можна зв'язати з іншим файлом на диску.
Визначити кінець файлу можна за допомогою функції eof() (eof - end of file, кінець файлу) так:
<назва файлової змінно>eоf();
Ця функція повертає нульове значення, якщо досягнуто кінця файлу.
Приклад. Нехай у деякому текстовому редакторі створено файли textl.dat і text2.dat. Послідовно зчитаємо з них дані та виведемо їх вміст на екран.
#include <fstream.h> // Виведення інформації із файлів
void main()
{
ifstream File1("text1.dat");
// Поки не досягнуто кінця файлу text1.dat
while (!File1 .eof()) // Знак! означає операцію не
{
//надаємо місце в пам'яті для зчитуваного даного
char *t = new char[30]; // do ЗО символів
Filel »t; // Зчитуємо дане з файлу
cout«t« “\n”; // Виводимо це дане на екран
delete[] t; // Вивільняємо пам'ять
}
// Повертаємось на початок команди while
Filel .close(); // коли досягнуто кінця файлу, закриваємо його
Filel.open("text2.dat");// Відкриваємо файл text2.dat для читання
while (!File1 .eof()) // Поки не досягнуто кінця файлу
{
char *t = new char[30];
File1»t;
cout«t« "\n";
delete[] t;Filel.close(); }
Дата добавления: 2015-08-26; просмотров: 745;