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

> Внимание!

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

 
 Ответить  Открыть новую тему 
> Нижняя треугольная матрица, Си
18192123
сообщение 5.06.2007 9:14
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

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


Дана матрица 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;
}



Выдаются совершенно посторонние значения....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.06.2007 9:16
Сообщение #2


Гость






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

Добавлено через 11 мин.
Кстати, почему индексация с 1? Надо бы с 0, иначе получишь мусор как минимум в первом элементе вектора X ...
 К началу страницы 
+ Ответить 
18192123
сообщение 5.06.2007 11:09
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

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


Цитата(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 (c)
  {
    case 1: input_matr(a);
	    break;
    case 2: input_matr_fail(a);
  }
 output(a,mas_x(a,x));
}





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

Сообщение отредактировано: 18192123 - 5.06.2007 11:14
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.06.2007 12:43
Сообщение #4


Гость






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

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;
}
 К началу страницы 
+ Ответить 

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

 

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