Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Нижняя треугольная матрица

Автор: 18192123 5.06.2007 13:14

Дана матрица 5 на 5. Определить массив из 5-ти элементов, каждый из которых равен произведению элементов соответствующего столбца нижней треугольной матрицы.

Проблема как раз в формировании массива:


int *mas_x (int (*a)[n], int *x)
{
int i,j;

for (j=1; j < n; j++)
{
int pro=1;
for (i=1; i < j; i++)
pro*= a[i][j];
x[j] = pro;
}

return x;
}



Выдаются совершенно посторонние значения....

Автор: volvo 5.06.2007 13:16

Вызов этой функции покажи... Под массив X где место отводится?

Добавлено через 11 мин.
Кстати, почему индексация с 1? Надо бы с 0, иначе получишь мусор как минимум в первом элементе вектора X ...

Автор: 18192123 5.06.2007 15:09

Цитата(volvo @ 5.06.2007 10:16) *

Вызов этой функции покажи... Под массив X где место отводится?

Добавлено через 11 мин.
Кстати, почему индексация с 1? Надо бы с 0, иначе получишь мусор как минимум в первом элементе вектора X ...



#include <STDIO.H>
#define n 3
#include <CONIO.H>
void input_matr (int a[n][n])
{
int i,j;
printf ("Vvedite elementi matrici: \n");
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf ("%d", &a[i][j]);
}
void input_matr_fail (int a[n][n])
{
int i,j;
FILE *fp;
fp=fopen("IN4-2.txt", "r");
for (i = 0; i < n; i++)
for (j = 0; j <n; j++)
fscanf (fp,"%d" , & a[i] [j]);
fclose(fp);
}

int *mas_x (int (*a)[n], int *x)
{
int i,j;

for (j=0; j < n; j++)
{
int pro=1;
for (i=0; i < j; i++)
pro*= a[i][j];
x[j] = pro;
}



return x;
}
void output (int a[n][n], int x[n])
{
int i,j;
FILE *fp;
printf ("Matrica a: \n");
for ( i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
printf ("%5d", a[i][j]);
printf ("\n");
}
printf ("Massiv x: \n");
for ( i= 0; i < n; i++)
printf ("%5d", x[i]);
printf ("\n");
fp = fopen ("out4-2.txt", "w");
fprintf (fp,"Matrica a: \n");
for ( i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
fprintf (fp, "%5d", a[i][j]);
fprintf (fp,"\n");
}
fprintf (fp,"Massiv x: \n");
for ( i= 0; i < n; i++)
fprintf (fp, "%5d", x[i]);
fprintf (fp,"\n");
fclose (fp);
}

void main ()
{
clrscr();
int a[n][n], x[n],c;
do
{
printf("vvod matr:\n1 - s klaviatyri\n2 - iz faila\n");
scanf("%d",&c);
}
while (c!=1 && c!=2);
switch ©
{
case 1: input_matr(a);
break;
case 2: input_matr_fail(a);
}
output(a,mas_x(a,x));
}





путаница какая-то со значениями массива х....

Автор: volvo 5.06.2007 16:43

Цитата
нижней треугольной матрицы
- это той, которая под главной диагональю? Тогда так:

int *mas_x (int (*a)[n], int *x) {
int i, j;
for (j=0; j < n; j++) {

int pro=1;
for (i=j; i < n; i++)
pro*= a[i][j];
x[j] = pro;
}
return x;
}