Пример программы из 3-х файлов.



ОЧЕРЕДЬ на основе массива

//queue3f.h -интерфейсный файл

#include <iostream>

#include <fstream>

using namespace std;

const int NN=100;

typedef int tip;

Struct queue

{ int beg;

Int size;

tip x[NN];

};

 void clrqu(queue &q);

 void insqu(queue &q, tip a);

 void remqu (queue &q);

 tip topqu (queue q);

 bool emptyqu (queue q);

 bool overqu (queue q);

 void wrfqu(ofstream &fout,queue q);

 

//queue3fR.cpp  - файл реализации

 #include "queue3f.h"

//очистка очереди

 void clrqu(queue &q){q.beg=0;q.size=0;}

//добавление элемента в очередь

 void insqu(queue &q, tip a)

 {q.x[(q.beg+q.size)%NN]=a;

 q.size++;

 }

Удаление элемента из непустой очереди

 void remqu (queue &q)

 {q.size--;

 if(q.beg==NN-1) q.beg=0;

else q.beg++;

 }

Выбрать элемент из очереди без удаления

Tip topqu (queue q)

 {return q.x[q.beg];}

 

//проверка очереди на пустоту

 bool emptyqu (queue q){return q.size==0;}

 

//проверка очереди на заполненность

 bool over (queue q){return q.size==NN;}

//вывод элементов очереди в файл

void wrfqu(ofstream &fout,queue s)

{while (!empty(s))

{fout<<s.x[s.beg]<<"\n";remqu(s);}}

// queue 3 fgl . cpp -главная программа (клиентская часть)

#include <iomanip>

#include "queue3f.h"

//использование очереди: записать в файл // первые N чисел,

//в разложение которых на простые

//множители входят заданные в файле числа

const int N=100;

const int nq=10;

Int main()

{ifstream fin;

ofstream fout;

int b[nq];

queue w[nq];

fin.open("dan.txt");

If (fin.fail())

 {cout<<"error open \n"; return(1);}

fout.open("rez.txt");

If (fout.fail())

{cout<<"error open rez.txt \n"; return(1);}

 fout<<"mnojiteli: " ;

 int l=0;

 while (fin>>b[l])

 { fout<<setw(6)<<b[l];

l++;

 }

 fout<<endl;

 fin.close();

 

//1)сделать очереди пустыми

 for (int i=0; i<l; i++) clrqu(w[i]);

 int x=1,k=1;

 

//2)записать x в файл

 fout<<setw(6)<<x;

 

//3)основной цикл

 while (k<N)

 { //3.1)записать элемент x * b [ i ]  в очередь w [ i ]

  for (int i=0; i<l; i++) insqu(w[i], x*b[i]);

Найти и поместить в x минимальный

// элемент из первых в w [ i ]

x=topqu(w[0]);

for (int i=1;i<l;i++)

{int t=topqu(w[i]);

if (t<x)x=t;

}

Добавить x в fout

fout<<setw(6)<<x;   k++;

if (k%10==0) fout<<endl;

//3.4 убрать из очередей элементы == x

for (int i=0;i<l;i++)

if (x==topqu(w[i])) remqu(w[i]);

 }

 fout<<endl;

Fout.close();

return 0; }

Dan.txt

2   7   13

Rez.txt

Mnojiteli: 2 7 13

 1     2     4 7   8 13 14 16 26 28

32 49 52 56 64 91 98 104 112 128

169 182 196 208 224 256 338 343 364 392

416 448 512 637 676 686 728 784 832 896

1024 1183 1274 1352 1372 1456 1568 1664 1792 2048

2197 2366 2401 2548 2704 2744 2912 3136 3328 3584

4096 4394 4459 4732 4802 5096 5408 5488 5824 6272

6656 7168 8192 8281 8788 8918 9464 9604 10192 10816

 10976 11648 12544 13312 14336 15379 16384 16562 16807 17576

 17836 18928 19208 20384 21632 21952 23296 25088 26624 28561


Дата добавления: 2021-03-18; просмотров: 95; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!