Подпрограммы 2 и файлы
.docxГлава VIII
Файлы
Ивин П.А.
ЭИС-14
Вариант 6
Задание: Код программы: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
ofstream fY;
fY.open("FileY.txt");
ifstream fin;
fin.open("FileX.txt");
if (!fin.is_open())
MessageBox::Show("Ошибка считывания файла");
double x, y;
while (!fin.eof())
{
fin >> x;
y = (pow(x, 2) + 1) / (pow(x, 3) + 2);
fY << "y=" << y << endl;
}
fin.close();
fY.close();
Process::Start("notepad.exe", "FileY");
} Результат работы программы: FileX – входной файл с переменными X FileY – выходной файл с переменными Y
Глава VII
Подпрограммы
Ивин П.А.
ЭИС-14
Вариант 6
Раздел 2
Задание: Заданы три матрицы А(второго порядка), В(третьего порядка) и С(четвертого порядка). Выяснить и напечатать, сколько из них являются симметричными (Матрица называется симметричной, если транспонированная матрица равна исходной). Транспонирование матрицы оформить в виде процедуры.
Код программы:
#pragma endregion
int TRe(int a, int b, int dT, double **massB)
{
dT = massB[a][b] * massB[a + 1][b + 1] * massB[a + 2][b + 2] + massB[a][b + 1] * massB[a + 1][b + 2] * massB[a + 2][b] + massB[a + 1][b] * massB[a][b + 2] * massB[a + 2][b + 1] - massB[a + 2][b] * massB[a + 1][b + 1] * massB[a][b + 2] - massB[a][b + 1] * massB[a + 2][b + 2] * massB[1][0] - massB[0][0] * massB[1][2] * massB[2][1]; // вычисление определителя третьего порядка методом треугольников
return dT;
}
void form(double **massA, double **massB, double **massC)
{
int dA;
int dB, dC, dT;
while (dA == 0)
{
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
massA[i][j] = rand() % 2;
dA = massA[0][0] * massA[1][1] - massA[0][1] * massA[1][0];
}
while (dB == 0)
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
massB[i][j] = rand() % 2; // (rand() % 500) /10.0 (для проверки используем целочисленные массивы)
dB = TRe(0, 0, dT, massB);
}
while (dC == 0)
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
massC[i][j] = rand() % 2;
dC = massC[0][0] * TRe(0, 0, dT, massC) - massC[0][1] * TRe(0, 1, dT, massC) + massC[0][2] * TRe(1, 0, dT, massC) - massC[0][3] * TRe(1, 1, dT, massC);
}
}
bool ch = false;
void tr(double **A, int n)
{
int t, a = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
t = A[i][j];
if (t == A[j][i]) a++;
A[i][j] = A[j][i];
A[j][i] = t;
}
if (a == n * n) ch = true; else ch = false;
}
void show(double **massA, double **massB, double **massC)
{
dataGridView1->TopLeftHeaderCell->Value = "Матрица A";
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
{
dataGridView1->Columns[j]->HeaderCell->Value = Convert::ToString(j + 1);
dataGridView1->Rows[i]->HeaderCell->Value = Convert::ToString(i + 1);
dataGridView1->Rows[i]->Cells[j]->Value = massA[i][j];
}
dataGridView2->TopLeftHeaderCell->Value = "Матрица B";
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
{
dataGridView2->Columns[j]->HeaderCell->Value = Convert::ToString(j + 1);
dataGridView2->Rows[i]->HeaderCell->Value = Convert::ToString(i + 1);
dataGridView2->Rows[i]->Cells[j]->Value = massB[i][j];
}
dataGridView3->TopLeftHeaderCell->Value = "Матрица C";
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
{
dataGridView3->Columns[j]->HeaderCell->Value = Convert::ToString(j + 1);
dataGridView3->Rows[i]->HeaderCell->Value = Convert::ToString(i + 1);
dataGridView3->Rows[i]->Cells[j]->Value = massC[i][j];
}
}
void ms3(double **A, int n)
{
for (int i = 0; i < n; i++)
A[i] = new double[n];
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
double **massA = new double *[2];
double **massB = new double *[3];
double **massC = new double *[4];
int k = 0;
ms3(massA, 2);
ms3(massB, 3);
ms3(massC, 4);
dataGridView1->ColumnCount = 2;
dataGridView1->RowCount = 2;
dataGridView2->ColumnCount = 3;
dataGridView2->RowCount = 3;
dataGridView3->ColumnCount = 4;
dataGridView3->RowCount = 4;
form(massA, massB, massC);
tr(massA, 2);
if (ch == true) k++;
tr(massB, 3);
if (ch == true) k++;
tr(massC, 4);
if (ch == true) k++;
show(massA, massB, massC);
textBox1->Text = Convert::ToString(k);
dataGridView1->AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode::AutoSizeToAllHeaders);
dataGridView1->AutoResizeColumns();
dataGridView2->AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode::AutoSizeToAllHeaders);
dataGridView2->AutoResizeColumns();
dataGridView3->AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode::AutoSizeToAllHeaders);
dataGridView3->AutoResizeColumns();
}