IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Многомерные массивы, помощь очень нужна
trew
сообщение 6.06.2008 20:42
Сообщение #1


Пионер в программировании
**

Группа: Пользователи
Сообщений: 66
Пол: Мужской

Репутация: -  0  +


1. Определите двумерный массив размером 4*4 из целых чисел в тексте программы. Вычислите минимальное значение в каждой строке, сумму элементов массива в каждом столбце. Найдите сумму и произведение элементов главной и побочной диагонали.
2. Решите предыдущую задачу, вводя матрицу значений с консоли.
3. Написать программу, которая вводит целое число n и выделяет память для массива из n данных типа: char, int, double. Перед завершением работы программы память освободить.
4. Улучшить программу решения систем линейных уравнений (листинг 4.3) и снять ограничения на максимальный размер системы. Этого можно добиться, если не описывать явно размер массивов double a[10][11],x[10], а выделить память динамически оператором new
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 1)
trew
сообщение 6.06.2008 21:02
Сообщение #2


Пионер в программировании
**

Группа: Пользователи
Сообщений: 66
Пол: Мужской

Репутация: -  0  +


 #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 задачи
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 31.07.2025 2:05
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"