Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2017, 17:05   #1
lloudb
Пользователь
 
Регистрация: 08.11.2016
Сообщений: 25
По умолчанию [Си] Значение матричного многочлена

Задание:


Код:
Код:
#include <stdio.h>

int main(void) {
	int a[2][2],i,j,b[2][2],c[2][2],n[2][2],k;
	for(i=1; i<=2; i++){
		for(j=1; j<=2; j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(i=1; i<=2; i++){
		for(j=1; j<=2; j++){
			c[i][j]=(-2)*a[i][j];
			b[i][j]=5*a[i][j];
		}
	}
	for(i=1;i<=2;i++){
		for(j=1;j<=2;j++){
			for(k=1;k<=2;k++){
				c[i][j]+=c[i][k]*a[k][j];
			}
		}
	}
	n[1][1]=9; n[1][2]=0; n[2][1]=0; n[2][2]=9;
	for(i=1; i<=2; i++){
		for(j=1; j<=2; j++){
			a[i][j]=c[i][j]+b[i][j]+n[i][j];
		}
	}
	for(i=1; i<=2; i++){
		for(j=1; j<=2; j++){
			printf("%d ",&a[i][j]);
			a[i][j]=0;
			b[i][j]=0;
			c[i][j]=0;
		}
		printf("\n");
	}
	return 0;
}
Вывод:
-2038203204 -2038203200
-2038203196 -2038203192

Почему он выводит такие большие числа? Спасибо
lloudb вне форума Ответить с цитированием
Старый 17.04.2017, 17:13   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

нумерация с 0
в принтф не нужен &, вы же не адрес вывдите
p51x вне форума Ответить с цитированием
Старый 18.04.2017, 16:18   #3
lloudb
Пользователь
 
Регистрация: 08.11.2016
Сообщений: 25
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
нумерация с 0
в принтф не нужен &, вы же не адрес вывдите
Спасибо за ответ. Всё исправил, всё равно выводит не то, что надо, большие числа.

Решил взять другое задание (транспонировать матрицу)
Код:
#include <stdio.h>

int main(void) {
	int a[2][3],b[3][2],i,j;
	for(i = 0; i<2; i++){
		for (j=0; j<3; j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(i = 0; i<2; i++){
		for (j=0; j<3; j++){
			a[i][j]=b[j][i];
			
		}
	}
	for(i = 0; i<3; i++){
		for (j=0; j<2; j++){
			printf("%d ",b[i][j]);
		}
		printf("\n");
	}
	return 0;
}
Ввод:
Код:
1 2 3
4 5 6
Вывод:
Код:
1 0 
758417613 11127 
0 0
Откуда берутся эти числа и почему при запуске программ эти числа меняются?
lloudb вне форума Ответить с цитированием
Старый 18.04.2017, 16:25   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Потому что вы никак не заполняете массив b и т.к. он локальный, то там может быть что угодно.
p51x вне форума Ответить с цитированием
Старый 18.04.2017, 16:26   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
a[i][j]=b[j][i];
Это заполнение мусором матрицы a
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.04.2017, 21:55   #6
lloudb
Пользователь
 
Регистрация: 08.11.2016
Сообщений: 25
По умолчанию

Цитата:
Сообщение от lloudb Посмотреть сообщение
Задание:


Код:
Код:
#include <stdio.h>

int main(void) {
	int a[2][2],i,j,b[2][2],c[2][2],n[2][2],k;
	for(i=1; i<=2; i++){
		for(j=1; j<=2; j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(i=1; i<=2; i++){
		for(j=1; j<=2; j++){
			c[i][j]=(-2)*a[i][j];
			b[i][j]=5*a[i][j];
		}
	}
	for(i=1;i<=2;i++){
		for(j=1;j<=2;j++){
			for(k=1;k<=2;k++){
				c[i][j]+=c[i][k]*a[k][j];
			}
		}
	}
	n[1][1]=9; n[1][2]=0; n[2][1]=0; n[2][2]=9;
	for(i=1; i<=2; i++){
		for(j=1; j<=2; j++){
			a[i][j]=c[i][j]+b[i][j]+n[i][j];
		}
	}
	for(i=1; i<=2; i++){
		for(j=1; j<=2; j++){
			printf("%d ",&a[i][j]);
			a[i][j]=0;
			b[i][j]=0;
			c[i][j]=0;
		}
		printf("\n");
	}
	return 0;
}
Вывод:
-2038203204 -2038203200
-2038203196 -2038203192

Почему он выводит такие большие числа? Спасибо
В чем тут проблема всё таки?

Спасибо, прошлое задание выполнил. Дело было в том, что перепутал местами массивы.

Взял еще одно задание: умножить матрицу на транспонированную матрицу. И опять какой-то мусор в выводе
Подскажите, пожалуйста
Код:
#include <stdio.h>

int main(void) {
    int a[2][4]={{1,2,1,3},{4,-1,5,-1}};
    int at[4][2],b[4][4],i,j,k;
    for(i = 0; i<4; i++){
        for (j=0; j<2; j++){
            at[i][j]=a[j][i];
        }
    }
    for(i = 0; i<4; i++){
        for (j=0; j<4; j++){
            for(k=0;k<4;k++){
                b[i][j]+=a[i][k]*at[k][j]; // матрица * транспонированная матрица
             }
        }
    }
    for(i = 0; i<4; i++){
        for (j=0; j<4; j++){
            printf("%d ",b[i][j]);
        }
        printf("\n");
    }
    return 0;
}
Вывод:
Код:
-163754435 4 -487068152 20 
3 43 -109717295 32746 
-1480756736 32698 -1310882049 32700 
-1474625069 32702 163754451 17
lloudb вне форума Ответить с цитированием
Старый 22.04.2017, 22:18   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Та же проблема - у вас b не инициализирован и т.к. он локальный, то там мусор
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить по схеме Горнера значение многочлена Needfor5 Паскаль, Turbo Pascal, PascalABC.NET 2 05.12.2014 11:23
Найти значение многочлена по схеме Горнера на Си majuw Помощь студентам 8 21.04.2013 13:43
[Pascal] Значение k-й производной записанного по убывающим степеням многочлена в точке t0 Grozglaz Помощь студентам 0 20.11.2010 19:20
вычислить значение многочлена. С++ varlonec Помощь студентам 0 26.01.2010 17:55
Получить значение многочлена при данном x Aleksandr Паскаль, Turbo Pascal, PascalABC.NET 7 07.03.2008 18:54