Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа с массивами / 8 сообщений из 8, страница 1 из 1
28.01.2015, 14:45
    #38865543
rublick2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами
Здравствуйте. В общем ситуация наиглупейшая. Пишем программу для решения уравнений методом Крамера. Есть массив А[3][3] и есть массив В[3]. Имеется цикл, который переписывает элементы массива А и В в массив С, заменяя один из столбцов А на массив В. Пошагово проверяем массив, прога идет туда куда надо. Проблема начинается с элемента [1][1]. То есть на пятом шаге ловко пропадает элемент А[1][1].... соответственно С[1][1] равен NAN. За ним исчезают все остальные элементы.
Уважаемые форумчане помогите решить проблему. Ткните нас в ошибку пожалуйста.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
#include<conio.h>
#include<stdio.h>
#include<math.h>
    void main()
{
     int i,j;
     float  A[3][3]={1,2,3,4,5,6,7,8,9};
     float С[3][3]; // osn matr
     float az,x1,x2,x3,y; // glavnaya delta
     float B[3]={1,2,3}; // svob chleni
     int c;// shag
     float Z[3];// del'ta
     clrscr();
    printf("Vvedite matrcu A[3][3]\n");
//    for(i=0;i<3;i++)
//    for(j=0;j<3;j++)
//  scanf("%f",&A[i][j]);

  az=A[0][0]*(A[1][1]*A[2][2]-A[1][2]*A[2][1])-A[0][1]*(A[1][0]*A[2][2]-A[1][2]*A[2][0])+A[0][2]*(A[1][0]*A[2][1]-A[1][1]*A[2][0]);
   printf("opred glavn matr = %f\n", az);

    printf("Vvedite svob cleni\n");
//	for(i=0;i<3;i++)
//	scanf("%f",&B[i]);


    for(c=0;c<3;c++)
      {
      for(i=0;i<3;i++)

      {
      printf("\n");
	for(j=0;j<3;j++)
	    {   if(c!=j)
	        C[i][j]=A[i][j];

	  else

	   C[i][j]=B[i];

	
	  printf(" |%d %d| %f ",i,j, A[i][j]);
       }
	}
//      Z[c]=C[0][0]*(C[1][1]*C[2][2]-C[1][2]*C[2][1])-C[0][1]*(C[1][0]*C[2][2]-C[1][2]*C[2][0])+C[0][2]*(C[1][0]*C[2][1]-C[1][1]*C[2][0]);
    }
  if(az!=0)
  {  x1=Z[0]/az;
     x2=Z[1]/az;
     x3=Z[2]/az;
     printf("x1 = %f ",x1);
     printf("x2 = %f ",x2);
     printf("x3 = %f ",x3);
   }
     else
     if(Z[1]==0&&Z[2]==0&&Z[3])
     printf("mnozestvo rehenii");
     else
     printf("net reheniya");

   // printf("%f",Z[c]);

     return;
    }
...
Рейтинг: 0 / 0
28.01.2015, 14:50
    #38865550
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами
rublick2,

Код: plaintext
1.
  if(Z[1]==0&&Z[2]==0&&Z[3])


индексация сбилась.
...
Рейтинг: 0 / 0
28.01.2015, 14:53
    #38865551
rublick2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами
RWolf,
да, заметили сейчас. но до этого места программа даже не доходит собственно
...
Рейтинг: 0 / 0
28.01.2015, 14:55
    #38865552
rublick2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами
Вот перед этим циклом проверяем наличие А 1 1, все есть А=5, пытались проверять внутри. На пятом шаге А11=NAN....
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 for(c=0;c<3;c++)
      {
      for(i=0;i<3;i++)

      {
      printf("\n");
	for(j=0;j<3;j++)
	    {   if(c!=j)
	        C[i][j]=A[i][j];

	  else

	   C[i][j]=B[i];

	
	  printf(" |%d %d| %f ",i,j, A[i][j]);
       }
	}
...
Рейтинг: 0 / 0
28.01.2015, 15:07
    #38865565
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами
rublick2,

у меня всё работает.
...
Рейтинг: 0 / 0
28.01.2015, 15:07
    #38865567
RWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами
rublick2,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
C:\2\x>a
Vvedite matrcu A[3][3]
1 0 0 0 1 0 0 0 1
opred glavn matr = 1.000000
Vvedite svob cleni
33 44 55

 |0 0| 1.000000  |0 1| 0.000000  |0 2| 0.000000
 |1 0| 0.000000  |1 1| 1.000000  |1 2| 0.000000
 |2 0| 0.000000  |2 1| 0.000000  |2 2| 1.000000
 |0 0| 1.000000  |0 1| 0.000000  |0 2| 0.000000
 |1 0| 0.000000  |1 1| 1.000000  |1 2| 0.000000
 |2 0| 0.000000  |2 1| 0.000000  |2 2| 1.000000
 |0 0| 1.000000  |0 1| 0.000000  |0 2| 0.000000
 |1 0| 0.000000  |1 1| 1.000000  |1 2| 0.000000
 |2 0| 0.000000  |2 1| 0.000000  |2 2| 1.000000 x1 = 33.000000 x2 = 44.000000 x3 = 55.000000
...
Рейтинг: 0 / 0
29.01.2015, 02:09
    #38866122
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами
rublick2,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
#include<conio.h>
#include<stdio.h>
#include<math.h>

float det3x3(float A[][3])
{
	return A[0][0] * (A[1][1] * A[2][2] - A[1][2] * A[2][1]) - A[0][1] * (A[1][0] * A[2][2] - A[1][2] * A[2][0]) + A[0][2] * (A[1][0] * A[2][1] - A[1][1] * A[2][0]);
}



void main()
{
	int i, j;
	float  A[3][3] = { 6, 8, 10, 1, 1, 2, 1, 7, 7 };
	float С[3][3]; // osn matr
	float az, x1, x2, x3, y; // glavnaya delta
	float B[3] = { 1, 6, 12 }; // svob chleni
	float Z[3];// del'ta

	az = det3x3(A);
	printf("det A = %f\n", az);

	for (int c = 0; c<3; c++)
	{
		for (i = 0; i<3; i++)
		{
			for (j = 0; j<3; j++)
			{
				if (c != j)
					С[i][j] = A[i][j];
				else
					С[i][j] = B[i];
			}
		}
		Z[c] = det3x3(С);
	}
	if (az != 0)
	{
		x1 = Z[0] / az;
		x2 = Z[1] / az;
		x3 = Z[2] / az;
		printf("x1 = %f ", x1);
		printf("x2 = %f ", x2);
		printf("x3 = %f ", x3);
	}
	else
	if (Z[1] == 0 && Z[2] == 0 && Z[3])
		printf("mnozestvo rehenii");
	else
		printf("net reheniya");


	return;
}



ок.

за исключением алгоритма и именования переменных
...
Рейтинг: 0 / 0
29.01.2015, 03:10
    #38866131
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
работа с массивами
SSrublick2,

за исключением алгоритма и именования переменных

это значит что программа работает так как вы этого хотите(то есть для вас, по вашему мнению, согласно тому что вы ожидаете, она работает правильно), но на самом деле это не так.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа с массивами / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]