Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Рассчитать Матрицы


Автор: KatrinIceLand 11.9.2008, 14:42
Всем привет! У меня задание:

Автор: KatrinIceLand 11.9.2008, 15:06
Input в деталях:

t - колличество тестов
n1 r1 c1
n2 r2 c2
 .    .    .
 .    .    .
nt  rt  ct

где r - raw(ряд), c-column(колонка)


Автор: Sartorius 11.9.2008, 15:21
Цитата(KatrinIceLand @  11.9.2008,  15:42 Найти цитируемый пост)
    H_{2^k} = \begin{bmatrix} H_{2^{k-1}} & H_{2^{k-1}}\\ H_{2^{k-1}} & -H_{2^{k-1}}\end{bmatrix},

Что значат эти операции "&", "\\"? begin и end зачем?

ЗЫ если &-вертикальная граница, а \\ - горизонтальная - то сделай рекурсию и усе

Автор: KatrinIceLand 11.9.2008, 15:53
Это формула матриц в "строчку". 

Вот как это картинкой выглядит:

http://img117.imageshack.us/my.php?image=matrixdp3.png

Цитата(Sartorius @  11.9.2008,  15:21 Найти цитируемый пост)
ЗЫ если &-вертикальная граница, а \\ - горизонтальная - то сделай рекурсию и усе

Как раз с использование рекурсии ее и советуют решать. Только как ее сделать эту рекурсию?  smile



Автор: Sartorius 11.9.2008, 16:10
Код

int getItem(int n, int i, int j)
{
    if (n == 1) return (1);

    if ((i < n /2) || (j < n/2)) 
    {
        return (getItem(n/2, i % (n/2), j % (n/2)));
    }
    else
    {
        return (-getItem(n/2, i % (n/2), j % (n/2)));
    }
}

Автор: KatrinIceLand 11.9.2008, 16:26
Sartorius, спасибо за помощь  smile 

Но что то не компайлится:
Код

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
   
//read the input from a file, but read from standard input when compiled on the server
int main(int argc, char **argv) 
{
    #ifdef _MSC_VER
       ifstream inFile((argc > 1)? argv[1] : "input.txt");
    #define cin  inFile
    #endif
        
    int getItem(int n, int i, int j){  //ERROR local function defenition is illigal

    if (n == 1) return (1);
    if ((i < n /2) || (j < n/2)) 
    {
        return (getItem(n/2, i % (n/2), j % (n/2)));
    }
    else
    {
        return (-getItem(n/2, i % (n/2), j % (n/2)));
    }
    }
}



и еще что в cout << выводим?

Автор: Sartorius 11.9.2008, 16:37
KatrinIceLand, вы функции еще не проходили?  smile 
Код

#include <stdio.h>

int getItem(int n, int i, int j)
{
    if (n == 1) return (1);

    if ((i < n /2) || (j < n/2)) 
    {
        return (getItem(n/2, i % (n/2), j % (n/2)));
    }
    else
    {
        return (-getItem(n/2, i % (n/2), j % (n/2)));
    }
}
void main()
{
    printf("%d", getItem(4, 2, 2)); // getItem вернет соответственно H{4x4}[2][2]
}

Автор: KatrinIceLand 11.9.2008, 16:53
Не могу разобраться: 
Код

   
int getItem(int n, int i, int j)
{
    if (n == 1) return (1);
    if ((i < n /2) || (j < n/2)) 
    {
        return (getItem(n/2, i % (n/2), j % (n/2)));
    }
    else
    {
        return (-getItem(n/2, i % (n/2), j % (n/2)));
    }
}
//read the input from a file, but read from standard input when compiled on the server
int main(int argc, char **argv) 
{
    #ifdef _MSC_VER
       ifstream getItem((argc > 1)? argv[1] : "program.in");
    #define cin  getItem
    #endif
       
       printf("%d", getItem); 
}


Автор: KatrinIceLand 11.9.2008, 20:08
Цитата(Sartorius @  11.9.2008,  16:37 Найти цитируемый пост)
KatrinIceLand, вы функции еще не проходили?  smile 
 Ладно, не издевайся, лучше помоги. А в правилах сказано что бы себя чайниками не называли  smile 

Автор: Sartorius 12.9.2008, 09:42
 Тебе нужно из входного файла прочитать данные. Получаешь из каждой строчки по три цифры: размерность матрицы, строка, столбец элемента, который нужно посчитать. Тебе нужно передать эти три числа getItem и в выходной файл записать результат ее работы каждый в отдельной строчке. Попробуй  smile 

Автор: KatrinIceLand 12.9.2008, 13:45
Sartorius, давай поэтапно..


Цитата(Sartorius @  12.9.2008,  09:42 Найти цитируемый пост)
Получаешь из каждой строчки по три цифры: размерность матрицы, строка, столбец элемента, который нужно посчитать. 

вот здесь я читаю из файла:
 ifstream getItem((argc > 1)? argv[1] : "program.in");
    #define cin  getItem
все дата в getItem

мне наверное стоит переименовать переменную для данных:

fromFile((argc > 1)? argv[1] : "program.in");
 #define cin fromFile

вся дата в fromFile. Это правильно или мне надо как то по другому считывать данные?

Автор: Sartorius 12.9.2008, 14:50
вот как это выглядит для stdin/stdout

Код

#include <stdio.h>

int getItem(int n, int i, int j)
{
    if (n == 1) return (1);

    if ((i < n /2) || (j < n/2)) 
    {
        return (getItem(n/2, i % (n/2), j % (n/2)));
    }
    else
    {
        return (-getItem(n/2, i % (n/2), j % (n/2)));
    }
}

void main()
{
     int count = 0;
     int n, i, j, k;

     scanf("%d", &count);
     for (k = 0; k < count; k++)
     {
          scanf("%d%d%d", &n, &i, &j);
          printf("%d\n", getItem(n, i, j));
     }
}

Автор: KatrinIceLand 12.9.2008, 18:20
Sartorius, спасибо за помощь!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)