powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа с массивами
8 сообщений из 8, страница 1 из 1
работа с массивами
    #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
работа с массивами
    #38865550
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rublick2,

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


индексация сбилась.
...
Рейтинг: 0 / 0
работа с массивами
    #38865551
rublick2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RWolf,
да, заметили сейчас. но до этого места программа даже не доходит собственно
...
Рейтинг: 0 / 0
работа с массивами
    #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
работа с массивами
    #38865565
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rublick2,

у меня всё работает.
...
Рейтинг: 0 / 0
работа с массивами
    #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
работа с массивами
    #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
работа с массивами
    #38866131
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSrublick2,

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

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


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