Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Глассные буквы Нужно подсчитать все гласные буквы написал код, работает не нормально, исправьте плз. Спасибо. #include <iostream> #include <string.h> #include <stdio.h> using namespace std; int vowel(char *str) // Нахождение количества глассных букв в строке Line https://www.cyberforum.ru/ cpp-beginners/ thread844676.html C++ Проблемы с программой
Недавно попросил знакомого помочь с программой, он написал, скинул но комментариев не оставил... курсовую нужно сдать завтра... Извините за эту тупую просьбу, просто очень нужно.. #include <stdlib.h> #include <stdio.h> #include <math.h> #include <conio.h> double a=0, b=1,c=1.5,d=3; void Sims(float);
C++ Функция-член принимает указатель на функцию-член https://www.cyberforum.ru/ cpp-beginners/ thread844673.html
Задача состоит в следующем. Нужно реализовать функцию-член которая принимает указатель функцию-член из класса. Но встретился с такой ошибкой "Ошибка 7 error C2064: результатом вычисления фрагмента не является функция, принимающая 2 аргументов" Вот часть кода. class people { public: people (){} ~people(){} ....... bool sAge(people st1, people st2) {
C++ Segmentation fault при работе с потоковым файлом https://www.cyberforum.ru/ cpp-beginners/ thread844667.html
Здравствуйте , возникает проблема при чтении из файла fstream. Записывайте из списка нормально , а при попытке считать , она то выводит содержимое файла , но при попытке закрыть обращается куда-то не ту да в память , подскажите пожалуйста в чем проблема . int save_fst(fstream *f,list_head *list) { if (f->fail()){ cerr<<"File open error\n"; return 0; ...
Как реализовать остановку цикла с условием cin >> a? C++
Здравствуйте. Программа пишет не более двух элементов в вектор, после нажатия Enter - их выводит. Как сделать, чтобы она выводила их при появлении в потоке ввода символа "|" ? int main() { vector<double> d; double a=0; int j=0; while (cin>>a && j<2){ d.push_back(a);
C++ Ошибки класс https://www.cyberforum.ru/ cpp-beginners/ thread844659.html
Как исправить такое чудо? Checking project dependencies... Compiling Project1.cbproj (Debug, Win32) bcc32 command line for "..\..\..\Desktop\File1.cpp" c:\program files (x86)\embarcadero\rad studio\10.0\bin\bcc32.exe -D_DEBUG -D_RTLDLL -n.\Win32\Debug -I..\..\..\Desktop;"C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\include\boost_1_39\boost\tr1\tr1";"C:\Program Files...
C++ Обработка исключений https://www.cyberforum.ru/ cpp-beginners/ thread844655.html
Здравствуйте! Есть вот такое выражение: Подскажите пожалуйста, как правильно реализовать обработку исключений. И у меня не правильно считает данное выражение. Где ошибка? int main(void) {
Существует ли ограничение при использовании new? C++
Здравствуйте. Ситуация: Я создала класс, описание которого ниже, и хочу выделить память под массив экземпляров этого класса размерностью 28000. Проблема в следующем:Во время выполнения программы, в момент выделения памяти вылетает ошибка: Необработанное исключение в "0x74a34b32" в "SPH_var2.exe": Исключение Microsoft C++: std::bad_alloc по адресу 0x00c3f2c4.. В чем может быть проблема?...
C++ из C# в C++ Доброго времени суток. Помогите перевести код из C# В C++ код C#: using System; using System.Collections.Generic; https://www.cyberforum.ru/ cpp-beginners/ thread844650.html C++ Массив. По данному времени определить, какие из поездов стоят сейчас на станции Дан массив, в котором хранятся данные о расписании поездов:номер поезда, название (откуда-куда, например, Астана-Алматы), время прибытия на станцию, время отправления (часы, минуты). Будем считать, что все поезда приходят каждый день. По данному времени определить, какие из поездов стоят сейчас на станции (время вводить с клавиатуры). (С++) https://www.cyberforum.ru/ cpp-beginners/ thread844590.html
Проблемы в результате работы программы C++
Добрый день. Помогите разобраться в 1) Почему не работает setw() при ошибке. 2) Что такое #inf и как избавиться от него. 3) Как сделать так чтобы "Y" были в столбик, независимо от длинны значения "Х". 4) Как сделать пустую строчку между вводом и результатом. http://pikucha.ru/iaUpf/thumbnail/10.jpeg #include <iostream> #include <conio.h> #include <iomanip>
C++ Поиск компонент связности графа, заданного списками смежности Описываю класс Граф, задавая его с помощью списков смежности. Требуется найти кол-во компонент связности. Применяю метод обхода в ширину. Однако, не получается создать указатель на список a(Строка в коде с комментарием "ОШИБКА"). Не могу понять, в чем может быть проблема. #include "stdafx.h" #include <iostream> #include <queue> using namespace std; struct E { int info ; https:
1 / 1 / 0
Регистрация: 15.11.2011
Сообщений: 34
0

Реализовать код данной функции, но через рекурсию - C++ - Ответ 4449846

21.04.2013, 22:06. Показов 2181. Ответов 31
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Прошу помочь реализовать функцию Mult с помощью рекурсии. Там формируется матрица произведений. Вот сделть, чтобы она формировалась рекурсивно. Эта функция находится в function.cpp. Заранее большое спасибо за ответы и советы)

Собственно вот задание Имеется 2*N чисел. Известно, что их можно разбить на пары таким образом, что произведения чисел в пара:х равны. Сделать разбиение, если числа:
а) натуральные;
б) целые.
Решение: В качестве входных данных будет массив, записанный в файл. Количество элементов в нем должно быть четное, для того, чтобы можно было сформировать пары чисел. Задача будет решена путем построения двумерной матрицы (n*n), где n – количество элементов в исходном массиве. Каждый элемент такой матрицы будет содержать произведение элементов из исходного массива, рассматриваемого относительно индексов в двумерном массиве. Например, в двумерной матрице элемент с индексами (1,2) будет являться произведением элементов из исходного массива с индексами (1) и (2) соответственно. Если исходный массив можно разбить на пары чисел с одинаковым произведением между ними, то любая строка двумерной матрицы будет содержать одно повторяющееся значение. Цель программы – построить двумерную матрицу и отыскать такое произведение. Отыскав это произведение, будет несложно построить пары чисел с одинаковым произведением. Замечание: исходные пары будут содержать числа в единственном экземпляре, или другими словами, повторяющиеся пары не будут учитываться. Это будет продемонстрировано в контрольном примере ниже.
Программа написана таким образом, что она учитывает сразу 2 варианта задания, когда числа натуральные и когда числа целые.
Я не прикрепил файл с входными данными и заголовочный файл.
файл Function.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include <iostream>
#include <math.h>
#include "Function.h"
using namespace std;
 
int StrToInt(char * str) 
{
    int len=strlen(str);
    int temp=0;
    //переменная для формирования числа
    int i;
    if (str[0]!='-')
        i=0;
    //условие на проверку какое число: отрицательное или положительное
    else
        i=1;
    for (i;i<len;i++)
    {
        switch (str[i])
        {
            case '1':
                temp+=1*pow(10.0,double(len-i-1));
                break;
            case '2':
                temp+=2*pow(10.0,double(len-i-1));
                break;
            case '3':
                temp+=3*pow(10.0,double(len-i-1));
                break;
            case '4':
                temp+=4*pow(10.0,double(len-i-1));
                break;
            case '5':
                temp+=5*pow(10.0,double(len-i-1));
                break;
            case '6':
                temp+=6*pow(10.0,double(len-i-1));
                break;
            case '7':
                temp+=7*pow(10.0,double(len-i-1));
                break;
            case '8':
                temp+=8*pow(10.0,double(len-i-1));
                break;
            case '9':
                temp+=9*pow(10.0,double(len-i-1));
                break;
            case '0':
                temp+=0*pow(10.0,double(len-i-1));
                break;
        }
    }
    if (str[0]=='-')
        temp=-temp;
    //если число отрицательное
    return temp;
}
 
void AnalizingStr(char * str, int * arr1, int n)
{
    int i=0;
    char * tmpstr = new char [10];
    //временная строка для каждого числа из файла
    int j=0;
    int k=0;
    while (str[i]!='\0')
    {
        if (str[i]!=' ')
        {
            tmpstr[j]=str[i];
            j++;
            if ((str[i+1]==' ') || (str[i+1]=='\0'))
            {
                tmpstr[j]='\0';
                j=0;
                arr1[k]=StrToInt(tmpstr);
                //вызов функции перевода числа из символьного типа в числовой
                k++;
            }
        }
        i++;
    }
    delete [] tmpstr;
}
 
int Mult(int * arr1, int * arr2, int n, int & m)
{
    m=0;
    //количество элементов в массиве, содержащий пары
    int ** indexes = new int * [n];
    //двумерная матрица для построения произведений различных пар
    int i,j,k;
    //счетчики
    for (i=0;i<n;i++)
        indexes[i]=new int [n];
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
        {
            indexes[i][j]=arr1[i]*arr1[j];
            //формирование произведений чисел в каждой паре
        }
    }
    int mult;
    //переменная для поиска одинакового произведения в парах
    int count;
    //переменная, отвечающая за количество встретившихся одинаковых произведений в строках двумерной матирцы
    int globalflag=0;
    //флаг, отвечающий за то, были ли построены все пары из входного массива
    int flag;
    //локальный флаг для исключения повторений в результирующих парах
    for (i=1;i<n;i++)
    {
        count=0;
        mult=indexes[0][i];
        for (j=1;j<n;j++)
        {
            for (k=0;k<n;k++)
            {
                if ((j!=k) && (indexes[j][k]==mult))
                {
                    //если в строке найдено искомое произведение
                    count++;
                    break;
                }
            }
        }
        if (count==(n-1))
        {
            //если искомое произведение есть во всех строках двумерной матрицы
            globalflag=1;
            for (j=0;j<n;j++)
            {
                for (k=0;k<n;k++)
                {
                    //циклы по двумерной матрице для формирования пар
                    if (indexes[j][k]==mult)
                    {
                        //если в строке найдено искомое произведение
                        flag=0;
                        for (int h=0;h<m;h+=2)
                        {
                            //проверка на иключение повторения пар
                            if ((arr2[h]==arr1[j]) && (arr2[h+1]==arr1[k]))
                                flag=1;
                            if ((arr2[h]==arr1[k]) && (arr2[h+1]==arr1[j]))
                                flag=1;
                        }
                        if (flag==0)
                        {
                            //если пара чисел не встречается в уже составленных парах, то записываем ее в результирующий массив
                            arr2[m++]=arr1[j];
                            arr2[m++]=arr1[k];
                        }
                    }
                }
            }
        }
    }
    for (i=0;i<n;i++)
        delete [] indexes[i];
    delete [] indexes;
    if (globalflag==1)
        return 1;   //если пары были построены
    else
        return 0;   //если пары не были построены
}
файл main.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
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include "Function.h"
using namespace std;
 
void main(int argc, char* argv[])
{
setlocale(0, "rus");
    char * filestr = new char [100];
    //строка для ввода адреса к файлу
    cout<<"Укажите адрес к файлу (с расширением):"<<endl;
    cin>>filestr;
    FILE * fr = fopen(filestr,"r");
 
    /*FILE * fr;
    if(argc!=2)//проверка аргументов на наличе
    {
        cout<<"Ошибка!"<<endl;
        exit(-1);
    }
    fr=fopen(argv[1],"r");//открываем файл на чтение, r-значит на чтение
    if(!fr) exit(-1);//проверка есть ли файл*/
 
    if (!fr)
    {
        //если файл не был найден
        delete [] filestr;
        cout<<"Файл не найден. Программа закрывается!"<<endl;
        system("pause");
        return;
    }
    delete [] filestr;
    cout<<endl;
    int count=0;
    //переменная для количества чисел в файле
    int countch=0;
    //переменная для количества символов в файле
    char ch;
    while ((ch=fgetc(fr))!='\n')
    {
        countch++;
        if (ch==' ')
            count++;
    }
    if ((count+1)%2!=0)
    {
        //если количество чисел в файле не четное
        fclose(fr);
        cout<<"Количество чисел в не четное! Пожалуйста исправьте входные данные и перезапустите программу."<<endl;
        return;
    }
    char * str = new char [countch+1];
    int * arr1 = new int [count+1];
    int * arr2 = new int [count+1];
    fseek(fr,0,SEEK_SET);
    //смещаем указатель на файл
    fgets(str,countch+1,fr);
    //считываем первую строку из файла с числами
    AnalizingStr(str,arr1,count+1);
    //вызов функции для анализа и перевода чисел из символьного типа в числовой
    int check;
    //переменная для проверки, построены ли пары чисел
    int m;
    //количество элементов в результирующем массиве, содержащем пары
    check=Mult(arr1,arr2,count+1,m);
    cout<<"Входной массив:"<<endl;
    for (int i=0;i<count+1;i++)
        cout<<arr1[i]<<" ";
    //вывод исходного массива
    cout<<endl;
    if (check==1)
    {
        //вывод пар чисел
        cout<<"Пары:"<<endl;
        for (int i=0;i<m;i+=2)
            cout<<"("<<arr2[i]<<","<<arr2[i+1]<<")"<<endl;
    }
    else
        cout<<"Не удалось сформировать пары"<<endl;
    delete [] str;
    delete [] arr1;
    delete [] arr2;
    fclose(fr);
    getch();
}


Вернуться к обсуждению:
Реализовать код данной функции, но через рекурсию C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2013, 22:06
Готовые ответы и решения:

Реализовать перебор поддиректорий через рекурсию
Необходимо реализовать перебор поддиректорий через рекурсию Выводит только с первой папки: ...

Реализовать вывод чисел в диапазоне от 10 до 25 через рекурсию
Парни, нужно реализовать такое задание , но я сам нуб в этом а нужно очень. Помогите . Задание:...

Реализовать вывод чисел в диапазоне от 10 до 25 через рекурсию
Парни, нужно реализовать такое задание , но я сам нуб в этом а нужно очень. Задание: Реализовать...

Как реализовать сортировки вставками и выбором через рекурсию?
Реализовать эти сортировки необходимо на ЯП Scheme, без циклов и присваивания! Реализуйте...

31
21.04.2013, 22:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2013, 22:06
Помогаю со студенческими работами здесь

Реализовать функцию для подсчёта суммы элементов массива через рекурсию
Доброго времени суток!Хочу реализовать функцию для суммы элементов массива через рекурсию (как...

Впервые сталкиваюсь с prolog, пожалуйста реализовать умножение 2 на число, используя сложения, через рекурсию
Как я поняла, это должно выглядеть примерно так 2*(b+1) = 2+2*b на примере цифр 2*3 = 2+(2*2) =...

Описание функции через рекурсию
Описать логическую функцию ПОТОМОК(А,В), проверяющую, является ли человек с именем В потомком...

Вычисление значение функции через рекурсию
Смысл программы : Вычисление значения функции (double func) Только через рекурсию . Я пытался - у...

Переполнением стека при вычислении функции с через рекурсию!
Нужно написать программу для вычисления с помощью рекурсии: 1/a+1/a*(a+1)+...+1/a*(a+1)*...*(a+n)!...

Сделать сумму двух чисел в двоичной системе через рекурсию и функции
Задано два положительных числа в двоичной системе счисления.Составить программу вычисления суммы...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru