Файлове

Задача 7. Решението на задачата изисква да се въведат данни от клавиатурата, след което да се запишат във файл.

За въвеждане на данните от клавиатурата са нужни съответни променливи, в които те да се съхранят. Тъй като единствената обработка на данните е те да бъдат записани във файл, то всички те могат да се представят като низ.. Така може да се използва само една променлива от тип низ, в която да се въвежда съответната стойност от клавиатурата, след което тази стойност да се записва във файла. Следващата стойност се записва в същата променлива и отново се записва във файла, и т.н.

Данните за всеки човек се въвеждат на един ред, разделени с интервал.

Решение:

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
   char str[21]; /*Въвеждането се извършва 
   само в една низова променлива*/
   ofstream file_out; //Файлова променлива за запис
   int i;
   file_out.open("MyFile.txt");
   for(i=0;i<10;i++)
   {
      cin>>str;
      //Въвежда в file_out второто поле до срещане на интервал
      file_out<<str<<" ";
      cin>>str;
      //Въвежда в file_out третото поле до срещане на интервал
      file_out<<str<<" ";
      cin>>str;
      //Въвежда в file_out четвъртото поле
      file_out<<str<<'\n';
   }
   file_out.close();
   return 0;
}

Задача 8. В задачата е необходимо да се отворят два файла. Първият от тях (MyFile.txt) ще се ползва за четене, а вторият – за запис (MyFile1.txt). Както в предходната задача, и тук ще се ползва една низова променлива, в която ще се записва всяка стойност от първия файл, след което тази стойност ще се записва във втория файл.

Решение:

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
   char str[21];
   ofstream file_out;
   ifstream file_in;
   int i;
   //Отваряне на файл за четене на данните
   file_in.open("MyFile.txt");
   //Отваряне на файл за запис, в който се копират данните
   file_out.open("MyFile1.txt");
   for(i=0;i<10;i++)
   {
       //Копиране на името
       file_in>>str;
       file_out<<str<<" ";
       //Копиране на презимето
       file_in>>str;
       file_out<<str<<" ";
       //Копиране на фамилията
       file_in>>str;
       file_out<<str<<" ";
       //Копиране на ЕГН
       file_in>>str;
       file_out<<str<<'\n';
   }
   //Затваряне на двата файла
   file_in.close();
   file_out.close();
   cout<<"Копирането завърши.";
   return 0;
}

Задача 9. Задачата може да се реши по няколко начина. Едно от решенията е следното:

1) Дефинира се структура Book.

2) Въвежда се броят на книгите.

3) Данните за всяка книга се въвеждат последователно в масив от тип Book.

4) Отваря се файл за запис и в него се записват всички книги от масива, след което файлът се затваря.

5) От клавиатурата се въвежда ISBN номер.

6) Файлът се отваря за четене. В цикъл се извличат последователно всички елементи (всички полета на елемент от тип Book). За всеки запис се извършва сравнение на ISBN номера с този, въведен от клавиатурата. Когато се намери съвпадение на номерата, цикълът се прекратява.

7) Проверява се стойността на брояча. Ако тази стойност е по-малка от броя на книгите, то е намерена книга, съответстваща на въведения ISBN номер. Извежда се подходящо съобщение. В противен случай се извежда съобщение, че не е намерена такава книга.

Решение:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct Book
{
   char title[51];
   char author[51];
   double price;
   char ISBN_num[16];
};
int main()
{
   Book books[50];
   int i,n;
   cout<<"Въведи брой книги:";
   cin>>n;
   //Въвеждане на книгите в масива books
   for(i=0;i<n;i++)
   {
       cin.get();
       cout<<"Заглавие:";
       cin.getline(books[i].title,51);
       cout<<"Автор:";
       cin.getline(books[i].author,51);
       cout<<"Цена:";
       cin>>books[i].price;
       cout<<"ISBN номер:";
       cin>>books[i].ISBN_num;
   }
   ofstream file_out;
   //Отваряне на файл за запис, в който се копират данните
   file_out.open("file_1.txt");
   //Въвеждане на книгите във файла
   for(i=0;i<n;i++)
   {
        file_out<<books[i].title<<'\n';
        file_out<<books[i].author<<'\n';
        file_out<<books[i].price<<'\n';
        file_out<<books[i].ISBN_num<<'\n';
   }
   //Затваряне на файла
   file_out.close();
   char buf_str[51],isbn[16];
   double buf;
   ifstream file_in;
   //Отваряне на файл за четене
   file_in.open("file_1.txt");
   cout<<"Въведи ISBN номер:";
   cin>>isbn;
   for(i=0;i<n;i++)
   {
        file_in.getline(buf_str,51);
        file_in.getline(buf_str,51);
        file_in>>buf;
        file_in>>buf_str;
        if(strcmp(buf_str,isbn)==0)break;
   }
   if(i<n)cout<<"Yes"<<endl;
   else cout<<"No"<<endl;
   file_in.close();
   return 0;
}