Условие задачи
Описать класс, реализующий стек. Написать программу, использующую этот класс для моделирования Т-образного сортировочного узла на железной дороге. Программа должна разделять на два направления состав, состоящий из вагонов двух типов (на каждое направление формируется состав вагонов одного типа). Предусмотреть возможность формирования состава из файла и с клавиатуры.
Алгоритм работы
1) тип – чётные числа,2) тип – нечетные.
1. Заполнить стек из файла;
2. Заполнить с клавиатуры;
3. Просмотреть содержимое стека;
4. Разделение содержимого стека;
5. Просмотреть массив из четных данных;
6. Просмотреть массив из нечетных данных;
1. Создается файл. В него заносятся данные, сгенерированные случайным образом. После генерации данные из файла записываются в стек.
2. Данные вводятся с клавиатуры и сразу записываются в стек.
3. Вывод на экран содержимого стека.
4. Разделение содержимого стека на два: chet и nechet. При этом записанный в какой-либо массив элемент из стека удаляется. После выполнения этой операции в стеке данных нет.
5. Вывод на экран данных массива chet.
6. Вывод на экран данных массива nechet.
Листинг программы
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
class Stek{
int m[100],chet[100],nechet[100],n,kch,kn;
public:
void iz_fail();
void s_klav();
void prosm();
void razdelenie();
void prosm_chet();
void prosm_nechet();
};
void main()
{ Stek s;int vibor;
randomize();
clrscr();
while (vibor!=7)
{
cout<<"\n"<<endl;
cout<<"Выберите нужный пункт меню:";cout<<endl;
cout<<"\n1. Заполнить стек из файла;";cout<<endl;
cout<<"2. Заполнить с клавиатуры;";cout<<endl;
cout<<"3. Просмотреть содержимое стека;";cout<<endl;
cout<<"4. Разделение содержимого стека;";cout<<endl;
cout<<"5. Просмотреть массив из четных данных;";cout<<endl;
cout<<"6. Просмотреть массив из нечетных данных;";cout<<endl;
cout<<"7. Закончить выбор пунктов меню.";cout<<endl;
cout<<"\n";
cin>>vibor;
switch (vibor)
{
case 1:{s.iz_fail();break;}
case 2:{s.s_klav();break;}
case 3:{s.prosm();break;}
case 4:{s.razdelenie();break;}
case 5:{s.prosm_chet();break;}
case 6:{s.prosm_nechet();break;}
case 7:{break;}
default:{cout<<"Такого пункта меню нет!"<<endl; }
}
}
}
void Stek::iz_fail()
{FILE *f;int a,i;
f=fopen("s", "wb");
cout<<"Заполнение файла данными -";
cout<<endl;
cout << "Введите количество элементов: ";
cin >> n;
for (i=1; i<=n; i++)
{ //cout << "Значение элемента: ";
//cin>>a;
a=random(50)-25;
fwrite(&a, sizeof(int), 1, f);
}
fclose(f);
f=fopen("s", "rb");
i=0;
while (fread(&a,sizeof(int),1,f))
{
m[i]=a;
i++;
}
fclose(f);
cout<<endl<<”Файл заполнен!!!”;<<endl;
};
void Stek::s_klav()
{ int i,a;
cout << "Введите количество элементов: ";
cin >> n;
for (i=1; i<=n; i++)
{ cout << "Значение элемента: ";
cin>>a;
//a=random(50)-25;
m[i-1]=a;
}
}
void Stek::prosm()
{ int i;
if (n==0) cout<<"Элементов в стеке нет!";
else
{
cout<<"Содержимое стека на данном этапе:";cout<<endl;
for (i=0; i<n; i++) { cout<<m[i]<<" "; }
cout<<"Просмотр выполнен!!!"<<endl;
}
}
void Stek::razdelenie()
{int i;
if (n==0) cout<<" Элементов в стеке нет!";
else
{
i=n-1;
kch=0;
kn=0;
while (i>=0)
{
if (m[i]%2==0) {chet[kch]=m[i];kch++;n--;}
else {nechet[kn]=m[i];kn++;n--;}
i--;
}
cout<<"Разделение выполнено!!!"<<endl;
}
}
void Stek::prosm_chet()
{int i;
if (kch==0) cout<<"Элементов в массиве нет!";
else
{
cout<<"Содержимое массива четных чисел:"<<endl;
for (i=0; i<kch; i++)
{
cout<<chet[i]<<" ";
}
}
}
void Stek::prosm_nechet()
{int i;
if (kn==0) cout<<" Элементов в массиве нет!";
else
{
cout<<" Содержимое массива нечетных чисел endl;
for (i=0; i<kn; i++)
{
cout<<nechet[i]<<" ";
}
}
}
|
Набор тестов к программе
Задача решена:
Автор: Груздева Илона
группа: 121Ми
год: 2008
|