Реализация и результаты работы
Сведения о веществе выполнены в программе в виде структуры данных, следовательно, список веществ – массив структур.
В программе организован ввод данных из текстового файла «Subst.txt». Содержимое текстового файла приведено на .

Рисунок 4.1 – Текстовый файл «Subst.txt»
Как видно из файла, разделителем полей служит символ «;».
Нумерация полей начинается с 0.
Ввод данных в файл и задание требуемой проводимости приведен на рисунок 4.2, результаты работы – на рисунок 4.3.

Рисунок 4.2 – Ввод данных и выбор требуемой проводимости

Рисунок 4.3 – Результаты работы программы
Листинг программы
Листинг программы приведен ниже.
#include <fstream>
#include <iostream>
#include <cstdlib>
#include "windows.h"
#include "string.h"
#include <locale.h>
#include <cstring>
using namespace std;
//==================================Функция позиционирования курсора
void gotoxy(int xpos, int ypos)
{
COORD scrn;
HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
scrn.X = xpos; scrn.Y = ypos;
SetConsoleCursorPosition(hOuput,scrn);
}
//=====================================Основная функция
int main()
{
const int Nmax = 50; //Максимальное кол-во элементов в массиве веществ
//===========Объявление структуры
struct Substance
{
char Name[20]; //Наименование вещества
double SpecificGravity; //Удельный вес
int Conductivity; //Проводимость (0-нет проводимости, 1-полупроводник, 2 - проводник)
};
Substance SubstanceArr[Nmax]; //Массив структур
Substance SubstanceArrSort[Nmax];
int N = 0; //Реальное кол-во элементов в массиве структур
int Nsort = 0; //Размерность получаемого массива
int ConType; //Введенная проводимость
char Sp[20]; //Служебная переменная для ввода удельного веса
char Co[20]; //Служеюная переменная для ввода проводимости
char NameTemp[20]; //Служебная переменная
double SpecificGravityTemp; //Служебная переменная
int ConductivityTemp; //Служебная переменная
//===========================Ввод элементов в массив структур из файла Subst.txt
setlocale(LC_ALL,"RUS");
system("CLS");
fstream inp("Subst.txt");
if (!inp.is_open())
{
cout << "Ошибка открытия файла!\n";
system("PAUSE");
return 0;
}
while(!inp.eof())
{
inp.getline(SubstanceArr[N].Name,20,';');
inp.getline(Sp,20,';');
inp.getline(Co,20);
SubstanceArr[N].SpecificGravity = atof(Sp);
SubstanceArr[N].Conductivity=atoi(Co);
N++;
}
inp.close();
//=====================Вывод массива структур на экран
system("CLS");
cout<<" Исходный список веществ\n\n ";
cout<<"Наименование Удельный вес Проводимость[0 - нет, 1 - полу, 2 - да]\n\n";
for (int i=0;i<N;i++)
{
cout<<SubstanceArr[i].Name<<" ";
gotoxy(21,4+i);
cout<<SubstanceArr[i].SpecificGravity<<" ";
gotoxy(40,4+i);
cout<<SubstanceArr[i].Conductivity<<"\n";
}
cout<<"\n\n";
cout << "Введите тип проводимости [0,1,2]: ";
cin >> ConType;
//=========================Поиск веществ с заданной проводимостью
for (int i=0;i<N;i++)
if (SubstanceArr[i].Conductivity == ConType)
{
strcpy(SubstanceArrSort[Nsort].Name,SubstanceArr[i].Name);
SubstanceArrSort[Nsort].SpecificGravity = SubstanceArr[i].SpecificGravity;
SubstanceArrSort[Nsort].Conductivity=SubstanceArr[i].Conductivity;
Nsort++;
}
//===========Нет таких веществ
if (Nsort==0)
{
cout<<"\n\n Нет веществ с таким типом проводимости\n\n";
system("PAUSE");
return 0;
}
//==============Такие вещества есть - сортируем по удельному весу
for(int i=0;i<Nsort-1;i++)
for(int j=i+1;j<Nsort;j++)
if (SubstanceArrSort[j].SpecificGravity<SubstanceArrSort[i].SpecificGravity)
{
//================Замена мест
strcpy(NameTemp,SubstanceArrSort[i].Name);
SpecificGravityTemp = SubstanceArrSort[i].SpecificGravity;
ConductivityTemp = SubstanceArrSort[i].Conductivity;
strcpy(SubstanceArrSort[i].Name,SubstanceArrSort[j].Name);
SubstanceArrSort[i].SpecificGravity = SubstanceArrSort[j].SpecificGravity;
SubstanceArrSort[i].Conductivity = SubstanceArrSort[j].Conductivity;
strcpy(SubstanceArrSort[j].Name,NameTemp);
SubstanceArrSort[j].SpecificGravity = SpecificGravityTemp;
SubstanceArrSort[j].Conductivity = ConductivityTemp;
}
//=======================Вывод отсортированного массива на печеть
system("CLS");
cout<<" Отсортированный список веществ\n\n ";
cout<<"Наименование Удельный вес Проводимость[0 - нет, 1 - полу, 2 - да]\n\n";
for (int i=0;i<Nsort;i++)
{
cout<<SubstanceArrSort[i].Name<<" ";
gotoxy(21,4+i);
cout<<SubstanceArrSort[i].SpecificGravity<<" ";
gotoxy(40,4+i);
cout<<SubstanceArrSort[i].Conductivity<<"\n";
}
cout<<"\n\n";
system("PAUSE");
return 0;
}
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2023 stydopedia.ru Все материалы защищены законодательством РФ.
|