Skip to content

Instantly share code, notes, and snippets.

@qutal
Created May 7, 2020 09:38
Show Gist options
  • Save qutal/7d645689882f24da4edf1c2056acc0cf to your computer and use it in GitHub Desktop.
Save qutal/7d645689882f24da4edf1c2056acc0cf to your computer and use it in GitHub Desktop.
// laba3.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
#include <iostream>
#include "fstream"
using namespace std;
void func4() {
ofstream write;
write.open("ouput.txt");
int n;
int k;
/*Ввод n и k с проверками*/
cout << "Введите n" << '\t';
cin >> n;
cout << endl;
while (!(n > 0 && n <=7)) {
cout << "Неправильный ввод n";
cout << endl;
cout << "Введите n" << '\t';
cin >> n;
cout << endl;
}
cout << "Введите k" << '\t';
cin >> k;
cout << endl;
while (!(k > 0 && k <=27)) {
cout << "Неправильный ввод k";
cout << endl;
cout << "Введите k" << '\t';
cin >> k;
cout << endl;
}
/*Конец ввода*/
//Матрица инцидентности. Двумерный массив на n столбцов и k строк
int** incidenceMatrix;
/*Создание матрицы и заполнение ее 0*/
incidenceMatrix = new int* [n];
for (int i = 0;i < n;i++) {
incidenceMatrix[i] = new int[k];
for (int j = 0;j < k;j++) {
incidenceMatrix[i][j] = 0;
}
}
/*Конец создания*/
/*Заолнение матрицы инцидентности с клавиатуры*/
int a=0, b=0,c;
//заполнение прекратится, при вводе двух -1
while (true)
{
cout << "Введите вершину" << '\t';
cin >> a;
cout << endl;
cout << "Введите ребро" << '\t';
cin >> b;
cout << endl;
cout << "Если это петля, введите 1, иначе - 0" << '\t';
cin >> c;
cout << endl;
//конец ввода
if (a == -1 && b == -1) {
cout << "Конец ввода" << endl;
break;
}
//ошибки
if (a < 0 || b < 0 || a>=n || b>=k || c<0 ||c>1) {
cout << "Неправильная вершина или ребро, или указание петли" << endl;
continue;
}
//если все норм, сохраняем связь в матрице
incidenceMatrix[a][b] = c == 1 ? 1 : 2;
}
/*Конец заполнения*/
/*Вывод матрицы в консоль*/
cout << "\n\n" << "ВЫВОД МАТРИЦЫ" << "\n\n";
cout << '\t';
for (int j = 0;j < k;j++) {
cout << j << '\t';
}
cout << endl;
for (int j = 0;j < k;j++) {
cout << "-----";
}
cout << endl;
for (int i = 0;i < n;i++) {
cout << i <<'|'<< '\t';
for (int j = 0;j < k;j++) {
cout << incidenceMatrix[i][j] << '\t';
}
cout << endl;
}
/*Конец вывода*/
/*Вывод матрицы в файл*/
write << "\n\n" << "ВЫВОД МАТРИЦЫ" << "\n\n";
write << '\t';
for (int j = 0;j < k;j++) {
write << j << '\t';
}
write << endl;
for (int j = 0;j < k;j++) {
write << "-----";
}
write << endl;
for (int i = 0;i < n;i++) {
write << i << '|' << '\t';
for (int j = 0;j < k;j++) {
write << incidenceMatrix[i][j] << '\t';
}
write << endl;
}
/*Конец вывода*/
//переменная для посчета степеней
int r = 0;
/*Вывод результатов в консоль(степень вершин вычисляем тут же)*/
cout << "\n\n" << "ВЫВОД СТЕПЕНЕЙ" << "\n\n";
for (int i = 0;i < n;i++) {
r = 0;
for (int j = 0;j < k;j++) {
if (incidenceMatrix[i][j] != 0) {
r += incidenceMatrix[i][j];
}
}
cout << "Вершина" << i << ": " << r << endl;
}
/*Конец*/
/*Вывод результатов в файл(степень вершин вычисляем тут же)*/
write << "\n\n" << "ВЫВОД СТЕПЕНЕЙ" << "\n\n";
for (int i = 0;i < n;i++) {
r = 0;
for (int j = 0;j < k;j++) {
if (incidenceMatrix[i][j] != 0) {
r+=incidenceMatrix[i][j];
}
}
write << "Вершина"<<i<<": " << r << endl;
}
/*Конец*/
write.close();
}
int main()
{
setlocale(LC_ALL, "Rus");
func4();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment