Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Рассчитать Матрицы, Предмет: Алгоритмы 
:(
    Опции темы
KatrinIceLand
Дата 11.9.2008, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



Всем привет! У меня задание:


Это сообщение отредактировал(а) KatrinIceLand - 21.9.2008, 15:12
--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
KatrinIceLand
Дата 11.9.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



Input в деталях:

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

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


--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
Sartorius
Дата 11.9.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



Цитата(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 зачем?

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

Это сообщение отредактировал(а) Sartorius - 11.9.2008, 15:28
PM MAIL ICQ   Вверх
KatrinIceLand
Дата 11.9.2008, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



Это формула матриц в "строчку". 

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

user posted image

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

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




Это сообщение отредактировал(а) KatrinIceLand - 11.9.2008, 15:54
--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
Sartorius
Дата 11.9.2008, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



Код

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)));
    }
}


Это сообщение отредактировал(а) Sartorius - 11.9.2008, 16:11
PM MAIL ICQ   Вверх
KatrinIceLand
Дата 11.9.2008, 16:26 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



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 << выводим?
--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
Sartorius
Дата 11.9.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 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]
}

PM MAIL ICQ   Вверх
KatrinIceLand
Дата 11.9.2008, 16:53 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



Не могу разобраться: 
Код

   
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:05
--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
KatrinIceLand
Дата 11.9.2008, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



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

--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
Sartorius
Дата 12.9.2008, 09:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



 Тебе нужно из входного файла прочитать данные. Получаешь из каждой строчки по три цифры: размерность матрицы, строка, столбец элемента, который нужно посчитать. Тебе нужно передать эти три числа getItem и в выходной файл записать результат ее работы каждый в отдельной строчке. Попробуй  smile 
PM MAIL ICQ   Вверх
KatrinIceLand
Дата 12.9.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



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. Это правильно или мне надо как то по другому считывать данные?
--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
Sartorius
Дата 12.9.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



вот как это выглядит для 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));
     }
}

PM MAIL ICQ   Вверх
KatrinIceLand
Дата 12.9.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.3.2006

Репутация: нет
Всего: нет



Sartorius, спасибо за помощь!  smile 

--------------------
[... кто изобрел математику? А зачем?...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1950 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.