Помощь - Поиск - Пользователи - Календарь
Полная версия: Многомерные массивы
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
trew
1. Определите двумерный массив размером 4*4 из целых чисел в тексте программы. Вычислите минимальное значение в каждой строке, сумму элементов массива в каждом столбце. Найдите сумму и произведение элементов главной и побочной диагонали.
2. Решите предыдущую задачу, вводя матрицу значений с консоли.
3. Написать программу, которая вводит целое число n и выделяет память для массива из n данных типа: char, int, double. Перед завершением работы программы память освободить.
4. Улучшить программу решения систем линейных уравнений (листинг 4.3) и снять ограничения на максимальный размер системы. Этого можно добиться, если не описывать явно размер массивов double a[10][11],x[10], а выделить память динамически оператором new
trew
 #include <iostream.h>
#include <string.h>
#include <math.h>
int main()
{
char *p,str[256];
int i, j, k, n;
double a[10][11],x[10],q,z;
cout << "The decision of systems of the linear equations\n"
<< "Enter factors of system on lines\n";
// Ввод первой строки и определение размерности системы
cin.getline(str,256); //Ввод первой строки
p = strtok(str," \t,;");//Выделение первой лексемы
i = 0;
do { a[0][i++] = atof(p);
p = strtok(NULL," \t,;");//Выделение следующей лексемы
} while (p);
n = --i; // Размерность системы
// ввод остальных строк
for (k = 1; k < n; k++)
{ cin.getline(str,80); //Ввод следующей строки
p = strtok(str," \t,;");
i = 0;
do { a[k][i++] = atof(p);
p = strtok(NULL," \t,;");
} while (p);
}
// прямой ход метода Гаусса
for (i = 0; i < n - 1; i++)
{ // выбор главного элемента
////Для начала этот блок можно опусить////
z = fabs(a[i][i]);
for (j = i,k = i + 1;k < n;k++)
if ((q = fabs(a[k][i])) > z) z = q, j = k;
if (j != i){ for (k = i;k <= n;k++) // обмен строк
z = a[i][k], a[i][k] = a[j][k], a[j][k] = z;
}
////////////////////////////////////////////////////////////
for (j = i + 1;j < n;j++)
{ q = a[i][i];
if (fabs(q) < 1e-300)
{ cout << "The system is incompatible\n"; return 1; }
z = a[j][i]/q;
for (k = i + 1;k <= n;k++) a[j][k] -= a[i][k]*z; }
} k = n - 1;
if (fabs(q = a[k][k]) < 1e-300)
{ cout << "The system is incompatible\n"; return 1; }
// обратный ход метода Гаусса
x[k] = a[k][n]/q;
for (i = k-1; i >= 0;i--)
{ z = 0.0;
for (j = k; j > i; j--) z += a[i][j]*x[j];
x[i] = (a[i][n] - z)/a[i][i];
}
cout << "\nThe decision of system of the equations:\n";
for(i = 0;i<n;i++) cout << "x(" << i + 1 << ")=" << x[i] << endl;
return 0;
}

к 4 задачи
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.