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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2011, 00:38   #1
TheKostarico
Пользователь
 
Регистрация: 22.05.2010
Сообщений: 15
Восклицание Никак не пойму: НЕКОТОРЫЕ элементы массива НЕ меняют ЗНАЧЕНИЕ!

Пытаюсь сделать треугольную матрицу(занулить эл-ты под главной диаганалью путем последовательного вычитания строк).
Всё отлично зануляется, а саму главную диагональ и остальные элементы строк оставляет не тронутыми! ПОЧЕМУ?

#include<stdio.h>

int main()
{
int code[100],key[100][100],m,l,i,j;

printf("Input rank of key\n");
scanf("%d",&m);
printf("Input the key\n");
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
scanf("%d",&key[i][j]);
}
printf("The key:\n");
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
printf("%d\t",key[i][j]);
printf("\n");
}
for(l=0;l<m-1;l++)
{
for(i=l+1;i<m;i++)
{
for(j=0;j<m;j++)
key[i][j]-=key[l][j]*key[i][l]/key[l][l];
}
}
printf("The new key:\n");
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
printf("%d\t",key[i][j]);
printf("\n");
}


return 0;
}

Последний раз редактировалось TheKostarico; 08.12.2011 в 21:36.
TheKostarico вне форума Ответить с цитированием
Старый 08.12.2011, 21:42   #2
TheKostarico
Пользователь
 
Регистрация: 22.05.2010
Сообщений: 15
По умолчанию

Когда записываю результат в новый массив,изменяются все элементы, кроме res[m][m].
Кто-нибудь может объяснить это старнное явление??


for(l=0;l<m-1;l++)
{
for(i=l+1;i<m;i++)
{
for(j=0;j<m;j++)
res[i][j]=key[i][j]-key[l][j]*key[i][l]/key[l][l];
}
}

Последний раз редактировалось TheKostarico; 08.12.2011 в 23:16.
TheKostarico вне форума Ответить с цитированием
Старый 08.12.2011, 22:15   #3
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Тут ты пишешь
Цитата:
Пытаюсь сделать треугольную матрицу(занулить эл-ты под главной диаганалью путем последовательного вычитания строк).
далее
Цитата:
а саму главную диагональ и остальные элементы строк оставляет не тронутыми! ПОЧЕМУ?
Так ты хочешь сделать треугольную матрицу(занулить эл-ты под главной диаганалью путем последовательного вычитания строк) или главную диагональ и остальные элементы строк тоже занулить?
У меня делает верхнетреугольную матрицу.
JuniorProger вне форума Ответить с цитированием
Старый 08.12.2011, 23:22   #4
TheKostarico
Пользователь
 
Регистрация: 22.05.2010
Сообщений: 15
По умолчанию

в консоли выходит, например, при m=3, произвольно заполнив массив, следующее:

The key:
1 2 3
4 5 6
7 8 9
The new key:
1 2 3
0 5 6
0 0 9
TheKostarico вне форума Ответить с цитированием
Старый 08.12.2011, 23:34   #5
TheKostarico
Пользователь
 
Регистрация: 22.05.2010
Сообщений: 15
По умолчанию

Да, получается верхнетреугольная матрица. Но вычитание я провожу со всеми элементами строки, а изменяются(обращаются в нуль) только стоящие под главной диаганалью.

Вот чтобы понятно:
из каждого элемента 2-ой строки вычитаются соответствующие элементы 1-ой, умноженные на key[1][0]/key[0][0].
Так вот изменяется в данной строке лишь key[1][0], который зануляется, а остальные - это key[1][1] key[1][2] - не изменяются, из них не вычитаются соответственно key[0][1] key[0][2], умноженные на key[1][0]/key[0][0] !!!! Либо в ячейку памяти не перезаписывается!

Вот что я имел в виду!

Последний раз редактировалось TheKostarico; 08.12.2011 в 23:40.
TheKostarico вне форума Ответить с цитированием
Старый 09.12.2011, 00:01   #6
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Косяк тут
Код:
key[i][j]-=key[l][j]*key[i][l]/key[l][l];
Ты при l=0 выбираешь key[i][l], а он изменен на 0 на первом шаге. Поэтому все произведение равно 0. Понял?
JuniorProger вне форума Ответить с цитированием
Старый 10.12.2011, 00:24   #7
TheKostarico
Пользователь
 
Регистрация: 22.05.2010
Сообщений: 15
По умолчанию

Спасибо) Теперь понял!!!
TheKostarico вне форума Ответить с цитированием
Старый 10.12.2011, 01:04   #8
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Хорошо! И еще совет: пиши код "лесенкой", чтобы было видно логические блоки в программе. Если не для себя, то хоть когда вопрос задаешь. А то я когда посмотрел твой код, мне сразу расхотелось в нем разбираться. Хорошо что его(кода) было не много, а то может и не стал бы смотреть.
Да и самому искать ошибки и разбираться в алгоритме будет гораздо легче. Вот тебе пример, если не знаешь как:
Код:
#include<stdio.h>

int main() {
  int code[100],key[100][100],m,l,i,j;

  printf("Input rank of key\n");
  scanf("%d",&m);  

  printf("Input the key\n");
  for(i=0;i<m;i++){
    for(j=0;j<m;j++)
      scanf("%d",&key[i][j]);
  }

  printf("The key:\n");
  for(i=0;i<m;i++){
    for(j=0;j<m;j++)
      printf("%d\t",key[i][j]);
    printf("\n");
  }

  for(l=0;l<m-1;l++){
    for(i=l+1;i<m;i++){
      for(j=0;j<m;j++)
        key[i][j]-=key[l][j]*key[i][l]/key[l][l];
    }
  }
  
  printf("The new key:\n");
  for(i=0;i<m;i++){
    for(j=0;j<m;j++)
      printf("%d\t",key[i][j]);
    printf("\n");
  }

  return 0;
}
JuniorProger вне форума Ответить с цитированием
Старый 11.12.2011, 20:53   #9
TheKostarico
Пользователь
 
Регистрация: 22.05.2010
Сообщений: 15
По умолчанию

Я просто не понимал до недавнего времени, вроде копирую текст с исходника, где всё по блокам и с отступами, а отправляю - всё в столбик.
Теперь понял, что программу нужно заключать в "#"
TheKostarico вне форума Ответить с цитированием
Старый 11.05.2014, 18:31   #10
Max161995
 
Регистрация: 11.05.2014
Сообщений: 6
По умолчанию

Не могу понять все-таки в чем ошибка.Как исправить код?
Max161995 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определитель матрицы Rekky Свободное общение 10 24.05.2011 20:40
Задание с курсовой.программа для решения дифференциальных уравнений произвольного порядка. saydmc Помощь студентам 5 29.12.2010 23:10
Определитель матрицы Snake_ua Помощь студентам 7 10.02.2010 10:44
Матрицы:функция изменения порядка столбцов матрицы Fajyz Помощь студентам 0 13.01.2010 09:40