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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2011, 17:29   #11
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от a.n.o.n.i.m Посмотреть сообщение
Код:
cout<<"X["<<i<<","<<j<<"] = "; //На экран выводится 'X[i][j] = '
                    cin>>X[i][j]; //вводим с клавиатуры целые числа
А это как будет в си?
Цитата:
Код:
printf("X[%d][%d] = %d\t", i, j, X[i][j]);
Или ввод тоже нужен?
Код:
scanf("%d", &X[i][j]);
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 01.06.2011, 17:42   #12
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Цитата:
Или ввод тоже нужен?
да,нужен ввод

Код:
cout<<"X["<<i<<","<<j<<"] = "; //На экран выводится 'X[i][j] = '
                    cin>>X[i][j]; //вводим с клавиатуры целые числа
ты заменил только вторую а как насчет первой
Код:
cout<<"X["<<i<<","<<j<<"] = "; //На экран выводится 'X[i][j] = ' А ЭТУ СТРОКУ КАК ПРЕДСТАВИТЬ
                    scanf("%d", &X[i][j]); //вводим с клавиатуры целые числа
И как сумму двух матриц возмести в степень?(B+C)^3 например
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 01.06.2011, 17:55   #13
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
ты заменил только вторую а как насчет первой
Кхм... что ты куришь?
Третий раз пишу команду вывода
Цитата:
Код:
printf("X[%d][%d] = %d\t", i, j, X[i][j]);

Цитата:
И как сумму двух матриц возмести в степень?(B+C)^3 например
Учебник математики в помощь. Сложение и умножение матриц.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 01.06.2011, 18:00   #14
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Цитата:
Кхм... что ты куришь?
Третий раз пишу команду вывода
Цитата:
Код:


printf("X[%d][%d] = %d\t", i, j, X[i][j]);
неправильно это,если так то верно printf("X[%d][%d] = %d\t", i, j, X[i][j]);
Код:
for (j = 0; j < n ; j++)
                    {
                    cout<<"X["<<i<<"]"<<"["<<j<<"] = "<<X[i][j]<<"\t"; //На экран выводится результат нашего ввода
                    }
А если так
Код:
 for (i = 0; i < n ; i++)
             for (j = 0; j < n ; j++)//цикл ввода массива
                   { 
                    cout<<"X["<<i<<","<<j<<"] = "; //Если здест напишу printf("X[%d][%d] = %d\t", i, j, X[i][j]); эту строку будет ошибка
                    scanf("%d", &A[i][j]);//вводим с клавиатуры целые числа
                   }
    printf("\n"); //Переход на следующую строку
то
printf("X[%d][%d] = %d\t", i, j, X[i][j]); неверно вот я и спрашиваю как заменить

так нужно чтобы было http://i017.radikal.ru/1106/0c/ac7427f26f26.png
а он пишет http://s52.radikal.ru/i135/1106/2e/1f6c0e9d98ea.jpg

Последний раз редактировалось a.n.o.n.i.m; 01.06.2011 в 18:11.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 01.06.2011, 18:13   #15
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Код:
 for (i = 0; i < n ; i++)
             for (j = 0; j < n ; j++)//цикл ввода массива
                   { 
                    cout<<"X["<<i<<","<<j<<"] = "; //Если здест напишу printf("X[%d][%d] = %d\t", i, j, X[i][j]); эту строку будет ошибка
                    scanf("%d", &A[i][j]);//вводим с клавиатуры целые числа
                   }
    printf("\n"); //Переход на следующую строку
Конечно тут это неверно. X[i][j] ты же еще не ввел.
Это для вывода, вместо этой строчки
Код:
cout<<"X["<<i<<"]"<<"["<<j<<"] = "<<X[i][j]<<"\t";
А в цикле ввода надо просто убрать вывод элемента массива
Код:
printf("X[%d][%d] = \t", i, j);
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 01.06.2011, 18:23   #16
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Код:
printf("X[%d][%d] = \t", i, j);
Во во во это и надо было,завтро буду искать как сложить 2 матрицы,одна из которых единичная и возвести их сумму в степень

Последний раз редактировалось a.n.o.n.i.m; 01.06.2011 в 18:26.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 01.06.2011, 18:44   #17
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Сложение матриц -- элементарная процедура.
Элементами результирующей матрицы будут суммы соответствующих элементов.
Код:
for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
        C[i][j] = A[i][j] + B[i][j];
Естественно, матрицы должны иметь одинаковую размерность.

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

Код:
for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
    {
        C[i][j] = 0;
        for (k = 0; k < m; k++)
            C[i][j] += A[i][k] * B[k][j];
    }
Главное помнить -- количество столбцов первой матрицы должно быть равно количеству строк второй матрицы (умножение матриц некоммутативно: A * B != B * A). Кстати, отсюда следует, что возводить в степень можно только квадратные матрицы.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 01.06.2011, 19:06   #18
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Первый вопрос
Код:
for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
        C[i][j] = A[i][j] + B[i][j];
j<m тут точно m не n?

Второй вопрос

Чтобы сумму двух матриц возвести в степень надо оба цикла делать или только
Код:
for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
    {
        C[i][j] = 0;
        for (k = 0; k < m; k++)
            C[i][j] += A[i][k] * B[k][j];
    }
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 01.06.2011, 19:30   #19
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
j<m тут точно m не n?
Это общий случай. В твоем случае разницы нет. У тебя m и n равны.


Цитата:
Чтобы сумму двух матриц возвести в степень надо оба цикла делать
Тебе же надо сначала сложить исходную матрицу с единичной, а потом результат возвести в квадрат.
Короче, вот для твоей задачи:

Код:
for (int i = 0; i < n; i++)
        X[i][i]++;    // Складываем исходную матрицу с единичной (исходная матрица перезаписывается)
       

for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
    {
        Y[i][j] = 0;
        for (k = 0; k < n; k++)
            Y[i][j] += X[i][k] * X[k][j];   
    }
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 02.06.2011, 08:16   #20
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

в этом коже X это исходная матрица
Y это сумма двух матриц в степени
а единичую матрицу как представить в цикле Z [n][n];?
а дальше как указать что она единичная?

и еще что такое k?

Написал такой код
Код:
#include <stdio.h>
#include <conio.h>
#include <locale.h>   
#include<stdlib.h>
int main () 
{
    setlocale(LC_ALL,"Rus");//русский язык
    int i, j, n;//переменные
        char nameInput[30];//имя файла(длина)
        char nameOutput[30];//имя файла(длина)
        FILE *f1,*f2;//используем 2 файла
        printf("Введите имя файла: ");
        scanf("%s",&nameInput);
        f1=fopen(nameInput,"w");//открываем файл1
    printf("Введите порядок матриц:\n");
    printf("n = "); 
    scanf("%u", &n);
    int E[n][n];//единичная матрица
    int A[n][n]; //квадратичная матрица
    int resultat[n][n];//сумма 2ух матриц в квадрате
         for (i=0; i<n; i++)//цикл заполнения единичной матрицы
                for (j=0; j<n; j++) 
                {
                        if (i==j)
                        E[i][j]=1;
                        else 
                        E[i][j]=0;
                }
          for (i = 0; i < n ; i++)//цикл ввода массива
          {
             for (j = 0; j < n ; j++)
                   { 
                    printf("A[%d][%d] = ", i, j); //На экран выводится 'X[i][j] = '
                    scanf("%d", &A[i][j]);//вводим с клавиатуры целые числа
                   }
          }
    printf("\nВведите имя файла с результатом: ");
    scanf("%s",&nameOutput);
    f2=fopen(nameOutput,"w");//открываем файл2
              for (i=0; i<n; i++) //цикл вычесления результативной матрицы 
                {
                for (j=0; j<n; j++) 
                    {
                        A[i][j]*=A[i][j];
                        resultat[i][j]=(E[i][j]+A[i][j]);//получение резудьтативной матрицы
                        fprintf(f2,"%d ",resultat[i][j]);//сохранение данных результата
                    }
                fprintf(f2,"\n");
                }
    printf("\n"); //Переход на следующую строку
    printf("\tОперация выполнена(результат)\n");
          for (i = 0; i < n ; i++) //цикл вывода результата на экран монитора
          { 
    printf("\n\n"); //Переход на следующую строку
             for (j = 0; j < n ; j++)
                    {
                    printf(" %i", resultat[i][j]); //На экран выводится результат нашего ввода
                    }
          }
fclose(f1);//закрытие файла1
fclose(f2);//закрытие файла2
getch(); //Экран не закрывается, пока не нажата любая клавиша
}
Вообщем сделал чтобы писалось имя файла где будет сохранять результат,он сохраняется туда(выходной файл f2),но проблема в том что программа должна считывать давнные из исходного файла(f1) имя которого вводится с клвиатуры,но она почему то этого не делает

p.s А возможно ли так,что ввод данных масива с клавиатуры и считывание его из файла в одной программе??

Думаю сделать меню 1)ввести вручную 2)ввести из файла

Последний раз редактировалось a.n.o.n.i.m; 02.06.2011 в 20:29.
a.n.o.n.i.m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрица на c++ leha_demi Помощь студентам 11 21.12.2010 00:18
Матрица Игорь Алёхин Помощь студентам 3 28.11.2010 19:53
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
Матрица fort-_-minor Общие вопросы C/C++ 5 05.08.2010 20:57
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11