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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2013, 16:10   #1
drKoks
 
Регистрация: 25.05.2013
Сообщений: 3
По умолчанию Меняется значение флага

помогите не могу понять, почему меняется значение флага в указанном месте, задача: составить квадратную матрицу и определить является ли она ортонормированной (еденицы по диагонали)
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <stdbool.h>
 
main ()
{
bool flag;
int skal, i,j,k,m,n;
 
do
{
    printf ("Vvedite razmeri matricy: (n,m) \n");
    scanf ("%d %d", &n, &m);
    if (n!=m) 
        printf ("Matrica dolgna byt' kvadratnoi!! \n");
} while (n != m);
 
int matrix [n][m];
 
printf ("Vvedite elementy matricy \n");
for (i = 0; i < n; i++)
{
    for (j = 0; j < m; j++)
    {
        printf ("a [ %d , %d ] ", i+1, j+1);
        scanf ("%d", & matrix [i][j]);
    } 
}
 
printf ("Ishodnaya matrica: \n");
for (i = 0; i < n; i++)
{ 
    for (j = 0; j < m; j++)
        printf ("%d ", matrix[i][j]);
    printf ("\n");
}
 
i = 1;
flag = true;
 
do {
    j = 1; 
    do {
        skal = 0;
        for (k = 0; k < n; k++)
            skal = skal + matrix [i][k] * matrix [j][k]; 
        if ((i == j && skal != 1) || (i == j && skal)) 
            flag = false; 
        
        ++j;
    } while (flag || (j != n+1));
    
    //здесь меняется значение flag на противоположное 
    
    ++i;
} while (flag || (i != n+1));
 
if (flag) printf ("Ortonormirovana");
else printf ("Ne ortonormirovana"); 
getch ();
 
}

Последний раз редактировалось Stilet; 25.05.2013 в 19:06.
drKoks вне форума Ответить с цитированием
Старый 25.05.2013, 16:27   #2
Prog C++
 
Аватар для Prog C++
 
Регистрация: 25.05.2013
Сообщений: 4
По умолчанию

Ортонормированная матрица - это матрица, у которой столбцы (строки) представляют собой ортонормированный базис. Этот базис может состоять не только из стандартных декартовых векторов с "гуляющей" единицей и нулями.
В принципе нет смысла смотреть, почему у вас флаг меняется, т.к. подход изначально неверен.
***
У вас лишний код: нет смысла для квадратной матрицы вводит две размерности m и n. Достаточно одной.

Еще: если флаг стал false, то ваш цикл не остановится пока j не достигнет значения n+1. Аналогично для второго цикла.
Учиться. Учиться. Учиться.

Последний раз редактировалось Stilet; 25.05.2013 в 19:10.
Prog C++ вне форума Ответить с цитированием
Старый 25.05.2013, 16:34   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
помогите не могу понять, почему меняется значение флага в указанном месте
Подозреваю - потому, что происходит выход за пределы массива (возможно обращение к matrix[n][n-1], в частности).

Также присоединяюсь к замечанию Prog C++, с алгоритмом что-то не то.
Abstraction вне форума Ответить с цитированием
Старый 25.05.2013, 18:19   #4
drKoks
 
Регистрация: 25.05.2013
Сообщений: 3
По умолчанию

приведите пример ортонормированной матрицы, то есть прогу вообще надо переделывать?
drKoks вне форума Ответить с цитированием
Старый 25.05.2013, 18:56   #5
drKoks
 
Регистрация: 25.05.2013
Сообщений: 3
По умолчанию

решил проблему, спасибо за помощь
drKoks вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
записываю значение в regedit а файл C:\Windows\System32\config\software не меняется goluzov Win Api 4 26.11.2011 16:08
Создание флага. BogSerVik Microsoft Office Excel 9 22.07.2011 18:26
Вывод развевающегося флага AndAsh Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 12.10.2010 05:39
в массиве последнее значение само меняется при использовании оператор printf Petruha-nsk Общие вопросы C/C++ 2 19.09.2010 12:45
Меняется значение текстовой ячейки при удалении пробелов. symix Microsoft Office Excel 4 26.06.2009 11:03