Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2010, 01:07   #1
Trinity13
Пользователь
 
Регистрация: 06.12.2009
Сообщений: 11
По умолчанию C++. Двумерный массив

Помогите, пожалуйста, решить задачу:
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к треугольному виду. Найти количество строк, среднее арифметическое элементов которых меньше заданной величины.
Усть некоторые соображения по этому поводу, но прога не работает =(
#include <iostream>
#include <ctime>
using namespace std;

int NOD (int a, int b)
{
int c;
c=(a>b)?a:b;
while (!((c%b==0)&&(c%a==0)))
c++;
return c;
}

void main()
{
int n, i, j, k, l, c, sign;
cout<<"Write how many equations?-->";
cin>>n;
int **mas=new int *[n];
for (i=0;i<n;i++)
mas[i]=new int[n];
srand(time(NULL));
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
mas[i][j]=rand()%9+1;
sign=rand()%4;
if (sign==0)
mas[i][j]=mas[i][j]*(-1);
cout<<mas[i][j]<<'\t';
}
cout<<'\n';
}
for (j=n-1;j>0;j--)
{
for(i=n-1;i>0;i--)
{
c=NOD(mas[i][j],mas[i-1][j]);
for (k=0;k<n;k++)
{
mas[i][k]=mas[i][k]*(c%mas[i][k]);
mas[i-1][k]=mas[i-1][k]*(c%mas[i-1][k]);
mas[i][k]=mas[i][k]-mas[i-1][k];
}
}
}
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
cout<<mas[i][j]<<'\t';
cout<<'\n';
}
}
Заранее спасибо! =)
Trinity13 вне форума Ответить с цитированием
Старый 01.04.2010, 12:31   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

1. П/п следовало бы, всё-таки, назвать NOK

2. Фокусы с нахождением наименьшего общего кратного вообще-то имеют смысл только если заведомо известно, что система имеет целочисленное решение. Что на практике бывает редко. Но если уж очень хочется...

Верхняя треугольная матрица:
Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-

from numpy import array

def NOK( a, b ):

    if a > b:
        c = a
    else:
        c = b

    while ( not ((c % b == 0) and (c % a == 0)) ):
        c += 1

    return c


mas = array( [[ 3, 3, 6], [ -2, 2, 5], [-4, 1, 7]], dtype = int )
print mas
n = len( mas )

for i in range ( 0, n-1 ):
    for j in range ( i+1, n ):
        c = NOK( mas[i][i], mas[j][i] )
        c1 = c / mas[i][i]
        c2 = c / mas[j][i]
        for k in range( i, n ):
            mas[j][k] = mas[i][k] * c1 - mas[j][k] * c2

print mas
#
3. Питоновский
Код:
for k in range( i, n )
эквивалентен C-шному
Код:
for ( k = i; k < n; k++ )
Остальные вычисления переводятся на C практически автоматически.

4. Понятно, что если a или b окажутся равными нулю, то п/п выдаст бред. Но эту ситуацию уж сами обходите...
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерный массив.. uropb992 Помощь студентам 6 23.10.2010 01:40
Двумерный массив Бибик Помощь студентам 18 06.01.2010 15:31
двумерный массив! euhenia Помощь студентам 5 08.12.2009 22:49
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40
Двумерный массив... Seriy8888 Паскаль, Turbo Pascal, PascalABC.NET 1 24.12.2008 21:26