Форум программистов, компьютерный форум CyberForum.ru

Пытаюсь рекурсивно сделать задачу. гляньте код плз) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ как передать struct в list http://www.cyberforum.ru/cpp-beginners/thread896855.html
Доброго времени суток. Такой вопрос: есть определенная структура, в которой есть несколько полей typedef struct _person{ long id; char name; size_t age; }person; далее есть группа данных персонов: typedef person** group_t;
C++ Ошибка с библиотеками, что-то клинит Выбивает целую кучу ошибок. может я что-то забыл.. 1>f:\lessons\c++\projects-2013\fileotl\fileotl\otladka.cpp(47): error C2059: синтаксическая ошибка: if 1>f:\lessons\c++\projects-2013\fileotl\fileotl\otladka.cpp(47): error C2143: синтаксическая ошибка: отсутствие ";" перед "{" 1>f:\lessons\c++\projects-2013\fileotl\fileotl\otladka.cpp(47): error C2447: {: отсутствует заголовок функции... http://www.cyberforum.ru/cpp-beginners/thread896852.html
C++ Что это такое?
Написал большую программу (курсовая работа), после многочисленных правок закончились красные подчеркивания в тексте программы, но при попытке собрать проект выдает вот это Программа - NetBeans IDE7.3 Компиляторы Cygwin "/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf cygwin warning: MS-DOS style path detected:...
Обработка двустороннего списка C++
Здравствуйте. Помогите или подскажите в написании обрабатывающей части в программе. Есть задание: тип информ поля. char*. Добавить в список элементы с номерами 1,3,5.. Написал часть программы, но не знаю, как написать добавление элементов в список. #include <iostream>
C++ есть ли аналог ДЛЛ в линукс http://www.cyberforum.ru/cpp-beginners/thread896840.html
возникла потребность запилить себе приложение под винду и линь (пишу на с++). тык вот, чтобы не делать своё приложение как в каменном веке монолитным, конечно же под виндой я смотрю в сторону DLL. Под виндой я их замечательно юзаю никаких проблем, весь избыточный код пихаю туда, а клиенотом так скажем остается дергать рычаги :) . решил попробовать портировать это дело под линь, (это не конечно...
C++ Где взять исходники stl? Не заголовочные файлы, а реализации. Слышал что в gcc где-то есть, но не нашел. подробнее

Показать сообщение отдельно
Strain
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 18
10.06.2013, 11:34  [ТС]     Пытаюсь рекурсивно сделать задачу. гляньте код плз)
MrGluck, спасибо за участие, код удалось пофиксить.
Насчёт counter - было ошибкой вообще вводить эту переменную, я убрал её из кода.
От преобразования int->double я ушёл, используя более простые условные операции cpp

в общем всё заработало, вот работоспособный код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <iomanip>
#include <fstream>
 
//программа читает из файла размерность квадратной матрицы, затем саму матрицу
//затем вычисляет её определитель
 
 
using namespace std;
 
int DET(int S, int size, int*massive[]);
//рекурсивная функция, вычисляющая определитель размера size.
//counter - номер строки в исходном определителе, по которой раскладывается данный определитель
//S - сумма элементов строки, умноженная на их алгебраические дополнения
//massive[size][size] - матрица, для которой вычисляется определитель
 
int main(){
    ifstream input("input.txt");
    ofstream output("output.txt");
    int size,s1; //обе переменные - размер исходной матрицы
    int result; //результат вычисления определителя
    input >> size;
    s1=size;
    //создаём динамический массив size x size элементов, заполняем его числами из файла
    //и выводим на экран
    int **mass=new int*[size];
    for (int i=0;i<size;i++)
        mass[i]=new int[size];
    for (int i=0;i<size;i++){
        for (int j=0;j<size;j++){
            input >> mass[i][j];
            cout << setw(5) << mass[i][j];
        }
        cout << endl;
    }
    cout << endl;
    //обнуляем счётчик строк и суммы
    int S = 0;
    result=DET(S,size,mass);
    cout <<endl<<"DET = "<<result<<endl<<endl; //находим определитель
    output << result; //записываем результат в файл
    //освобождаем память
    for (int i=0;i<s1;i++)
        delete[]mass[i];
    delete[]mass;
    system("pause");
    return 0;
}
 
int DET(int S, int size, int*massive[]){
    S=0; //на каждом рекурсивном вызове обнуляем сумму, чтобы новые определители
    //считались корректно
    //тут два базовых случая, простых для рассчёта. 
    //используем обычные школьные формулы вычисления определителя 
    //матрицы 1x1 и 2x2
    if (size == 1)
        return massive[0][0];
    else if (size == 2)
        return massive[0][0]*massive[1][1]-massive[1][0]*massive[0][1];
    //если размерность матрицы больше 2, прибегаем к рекурсивному вызову
    else{
        size--; //размер алгебраического дополнения на 1 меньше исходного
 
        //тут пробегаем по всем элементом строки по которой раскладываем
        for (int k=0;k<size+1;k++){
// создаём динамический массив алгебраического дополнения
            int **alg=new int*[size];
            for (int i=0;i<size;i++)
                alg[i]=new int[size];
    //и заполняем его соответствующими элементами исходного массива
    //затем выводим алгебраическое дополнение на экран
        for (int i=0;i<size;i++){
            for (int j=0;j<size;j++){
                if (j>=k)
                    alg[i][j]=massive[i+1][j+1];
                if (j<k)
                    alg[i][j]=massive[i+1][j];
                cout <<setw(5)<<alg[i][j];
            }
        cout <<endl;
        }
    //тут школьная формула разложения определителя по строке.
    //продолжаем рекурсивно вызывать функцию DET пока не придём к базовому случаю
        S+=(((k+1)%2)?1:-1)*massive[0][k]*DET(S,size,alg);
        cout <<k<<") "<<S<<endl;
    //освобождаем память
    for (int i=0;i<size;i++)
        delete[]alg[i];
    delete[]alg;
        }}
    //в случае размера >2 возвращаем S, рассчитанную по школьной формуле
    return S;
}
 
Текущее время: 04:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru