Автор Тема: Помогите решить задание на С++  (Прочитано 6833 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн chezen

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Помогите решить задание на С++
« : 28 Сентября 2009, 03:31:54 »
Задание: Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы.
С помощью допустимых преобразований привести систему к треугольному виду.

У вас есть такой раздел в онлайн решениях - Преобразование матрицы до треугольной...
Если можно, хотя бы тогда, алгоритм решения, а я уж как-нибудь сам разберусь...

Оффлайн lu

  • Модератор
  • *****
  • Сообщений: 3126
  • ~~~~^_^~~~~
    • Просмотр профиля
Re: Помогите решить задание на С++
« Ответ #1 : 28 Сентября 2009, 07:43:09 »
недоработанную версию выложила, может поможет чем нить...когда с++ проходили, должна была написать, но так и не дописала почему то =)))

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
main()
{ int n,m,p=0,q=0,a[100][100],i,j,k=0,t;
randomize();
clrscr();
printf("n=:");
scanf("%d",&n);
printf("m=:");
scanf("%d",&m);
printf("\n");
for(i=0;i<n;i++)
 {for(j=0;j<m;j++)
   {a[j]=rand()%8-4;
    printf("%d\t",a[j]);
   }
   printf("\n");
 }
t=1;p=0;q=0;
if(a[0][0]==0) a[0][0]=1;  \\доработать

while(k<n)
{
printf("\n\n");

for(i=t;i<n;i++)
   {
    for(j=t-1;j<m;j++)
    {
    if(a[j]!=0&&p==0&&q==0)
      {if(a[j]%a[k][j]==0)
   {
   p=a[j]/a[k][j];q=1;
   }else if(a[k][j]%a[j]==0)
         {
         q=a[k][j]/a[j]; p=1;
         }else
       {
       p=a[j]; q=a[k][j];
       if(p%9==0&&q%9==0) {p=p/9; q=q/9;}
       if(p%8==0&&q%8==0) {p=p/8; q=q/8;}
       if(p%7==0&&q%7==0) {p=p/7; q=q/7;}
       if(p%6==0&&q%6==0) {p=p/6; q=q/6;}
       if(p%5==0&&q%5==0) {p=p/5; q=q/5;}
       if(p%4==0&&q%4==0) {p=p/4; q=q/4;}
       if(p%3==0&&q%3==0) {p=p/3; q=q/3;}
       if(p%2==0&&q%2==0) {p=p/2; q=q/2;}
       }
      }else if(a[j]==0&&p==0&&q==0) {p=0; q=1;}

      a[j]=a[j]*q-a[k][j]*p;

     printf("%d  ",a[j]);
    }
    printf("\n");
    p=0;q=0;
   }
p=0;q=0;t++;
k++;
}
printf("\n\n\n");
for(i=0;i<n;i++)
 {for(j=0;j<m;j++)
   {
    printf("%d\t",a[j]);
   }
   printf("\n");
 }
getch();
}

в общем тут надо условие для прямоугольной матрицы добавить... еще там условие if(a[0][0]==0) a[0][0]=1... неправильно) если первый элемент матрицы  нулевая...то строки надо поменять так чтобы первый элемент не был нулевым...

думаю если с вещественными а не с целыми числами работать как здесь на сайте программа то намного попроще прога будет...
с большими числами тут большие значения получаются...где то в цикле надо еще один цикл создать или че нить придумать...чтоб можно было сократить если в строчке  такие числа появятся которых можно сократить (например строчка получилась 0 4 12 64 надо скоратить на 4)
вот эта программа работает только для n=m и не сокращает если в строке есть числа, которых можно сократить...
Мы помогаем, а не решаем за Вас !!!

Полезные обозначения:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ∂ ℮ ∩ ≡  ≠ ≤ ≥ ≈ ∩   α β γ δ ε ζ η θ λ μ ξ π ρ σ φ ψ