Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 4
1

Вызов функции из другой функции и обратно. Общие переменные функций

15.01.2020, 17:19. Показов 2565. Ответов 8

Author24 — интернет-сервис помощи студентам
Всем привет.

Заранее напишу, что я ещё только изучаю программирование

В данной программе генирируются числа заполняющие одним числом каждую ячейку массива, который способен вместить 30 чисел. Позже необходимо ввести число, от которого вы решитесь избавиться в данной последовательности элементов массива.
Теперь же компилятор должен вывести последовательность элементов массива, где будут замыкаться элементы массива на месте избавленного или избавленных.

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
#include <iostream>
#include <string>
#include <cstdlib> 
#include <ctime> 
//int a, int b,string hop,string op
using namespace std;
void sdvig(int a, int b,string hop,string op){
for (int i=a; i<30-b;i++){
    if(i<30-b){
        hop[i]=hop[i+1];
        
    }else {
        
        prover();
    }
}
 
}
void prover(int a, int b,string hop,string op){
for (int i=0; i<30-b; i++){ 
        if(hop[i]==op){
            a=i;
            sdvig();
        }   
        
    }
    for (int i=0; i<30-b; i++){
    
    
        cout<<hop[i]<<" ";
        
    }
}
int main(){
    
    string hop,op;
    srand(time(0));
    int a;
    int b=0;
    for (int i=0; i<30; i++){
        
        hop[i]=1+rand()%8;
        
    }
    for (int i=0; i<30; i++){
    
    
        cout<<hop[i]<<" ";
        
    }
    cout<<"Vvedite chislo, kotoroe neobhodimo ubrat"<<endl;
    cin>>op;
    for (int i=0; i<30; i++){   
        if(hop[i]==op){
            a=i;
            sdvig();
        }   
    }
}
Компилятор выводит ошибку. Он описывает, что функции не запланированы, также переменные не могут существовать в функциях(предпологалось другое).

Писал в онлайн компиляторе, где обычная функция рандом работает более менее.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2020, 17:19
Ответы с готовыми решениями:

Функция, в функции main() или общие переменные для нескольких функций
Делаю мелкую игрушку, в консоли, ради забавы и столкнулся с 1 проблемой: Невозможно, создавать...

Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using...

Вызов функции в параметре другой функции
программа: #include &lt;iostream&gt; using namespace std; struct E { E() {} }; void...

Вызов функций в функции
Доброе время суток! Буду признательна, если кто-то сможет помочь -&gt; обьяснить возникшую...

8
601 / 438 / 136
Регистрация: 22.11.2017
Сообщений: 1,379
15.01.2020, 17:44 2
Wastad541, привет! С Новым Годом!
Может код вообще переписать? Я немного отредактировал твой код.
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <string>
#include <cstdlib> 
#include <ctime> 
//int a, int b,string hop,string op
using namespace std;
 
void sdvig(int a, int b, string hop, string op);
void prover(int a, int b, string hop, string op);
 
int main()
{
    string hop, op;
    srand(time(0));
    int a;
    int b = 0;
    for (int i = 0; i < 30; i++)
        hop[i] = 1 + rand() % 8;
    for (int i = 0; i < 30; i++)
        cout << hop[i] << " ";
    cout << "Vvedite chislo, kotoroe neobhodimo ubrat" << endl;
    cin >> op;
    for (int i = 0; i < 30; i++)
        if (hop[i] == op)
        {
            a = i;
            sdvig();
        }
}
 
void sdvig(int a, int b, string hop, string op)
{
    for (int i = a; i < 30 - b; i++)
        if (i < 30 - b)
            hop[i] = hop[i + 1];
        else
            prover();
}
 
void prover(int a, int b, string hop, string op)
{
    for (int i = 0; i < 30 - b; i++)
        if (hop[i] == op)
        {
            a = i;
            sdvig();
        }
    for (int i = 0; i < 30 - b; i++)
        cout << hop[i] << " ";
}
0
0 / 0 / 0
Регистрация: 15.01.2020
Сообщений: 4
15.01.2020, 17:52  [ТС] 3
Знать бы ещё как его переписать. Мысль то приходит первоначально в одной форме
0
Мозгоправ
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
15.01.2020, 17:59 4
Лучший ответ Сообщение было отмечено Wastad541 как решение

Решение

Wastad541, сильно перемудрили.
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
const size_t ARRLEN = 30;
 
size_t sdvig(int *arr, int val, size_t len) {
    size_t src = 0, dst = 0;
    while (src < len) {
        if (arr[src] != val) {
            arr[dst++] = arr[src++];
        }
        else
            ++src;
    }
    return dst;
}
 
int main() {
 
    int hop[ARRLEN], op;
    srand((unsigned int)time(NULL));
 
    for (size_t i = 0; i < ARRLEN; i++) {
        hop[i] = 1 + rand() % 8;
        cout << hop[i] << " ";
    }
    cout << endl;
 
    cout << "Vvedite chislo, kotoroe neobhodimo ubrat: ";
    cin >> op;
 
    size_t newlen;
    newlen = sdvig(hop, op, ARRLEN);
 
    for (int i = 0; i < newlen; i++) {
        cout << hop[i] << " ";
    }
    cout << endl;
}
PS. Гугл-транслейт отвратительно переводит. Интересно, с какого языка?
1
601 / 438 / 136
Регистрация: 22.11.2017
Сообщений: 1,379
15.01.2020, 18:04 5
Цитата Сообщение от Wastad541 Посмотреть сообщение
Знать бы ещё как его переписать
Вот так.
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
#include <iostream>
#include <string>
#include <random>
#include <algorithm>
 
using namespace std;
 
template<size_t N>
std::ostream& operator<< (std::ostream& os, char(&arr)[N]);
 
int main()
{
    setlocale(LC_ALL, "Rus");
    const int left = 1;
    const int right = 8;
    const uint32_t count_elems = 30u;
 
    random_device rd;
    mt19937 g(rd());
    uniform_int_distribution<> dist(left, right);
    auto gen = [&g, &dist]() { return dist(g); };
 
    char hop[count_elems];
    generate(begin(hop), end(hop), gen);
    cout << "Исходный массив\n" << hop << "\n";
    cout << "Введите число, которое необходимо убрать\n";
    char op;
    cin >> op;
    op -= '0';
    char* pointer = remove(begin(hop), end(hop), op);
    *pointer = 0;
    cout << "Обработанный массив\n" << hop << "\n";
}
 
template<size_t N>
std::ostream& operator<< (std::ostream& os, char(&arr)[N])
{
    for (auto c : arr)
    {
        if (!c) break;
        os << static_cast<int16_t>(c) << " ";
    }
    return os;
}
Миниатюры
Вызов функции из другой функции и обратно. Общие переменные функций  
1
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
15.01.2020, 18:06 6
как вариант:
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
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <ctime> 
using namespace std;
 
int main() 
{
    srand((int)time(0));
    int n=30, x;     
    
    vector<int> v(n);   
    
    for (int &e : v)            
        cout << (e=rand()%9+1) << " ";
      
    cout << "\nx="; cin >> x; 
    
    v.erase(remove(v.begin(),v.end(),x),v.end());    
    
    for(int &e : v)
        cout << e << " ";
    cout << "\n";
    
system("pause");
return 0;
}
1
Мозгоправ
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
15.01.2020, 18:09 7
Цитата Сообщение от SomniPhobia Посмотреть сообщение
Я немного отредактировал твой код.
Ну, собственно, оно как не компилировалось, так и не компилируется. Не стоило и руки пачкать.

Ничего, что вы std::string сравниваете с char?

Да и вообще бред, начиная с того, что std::string используется как массив чисел. В военное время, конечно, можно так сделать (тогда даже число пи может достигать 4), но в данном случае ни что не мешает использовать обычный массив. Тем более, что это указано в задании.
0
601 / 438 / 136
Регистрация: 22.11.2017
Сообщений: 1,379
15.01.2020, 18:20 8
Цитата Сообщение от L0M Посмотреть сообщение
Ну, собственно, оно как не компилировалось, так и не компилируется
Обязательно чтобы компилировалось? Код причесал немного.
Цитата Сообщение от L0M Посмотреть сообщение
Не стоило и руки пачкать
Обычно я пачкаю руки, когда ем шоколад. Потом их об штаны витираю, чтобы не бегать к умывальнику.
Цитата Сообщение от L0M Посмотреть сообщение
Ничего, что вы std::string сравниваете с char
Я тоже заметил, но промолчал.
Цитата Сообщение от L0M Посмотреть сообщение
Да и вообще бред, начиная с того, что std::string используется как массив чисел
Типа память экономит, наверно. 8 бит вместо 32 (вроде 32 может и другим быть числом, зависимо от платформы).
Цитата Сообщение от L0M Посмотреть сообщение
но в данном случае ни что не мешает использовать обычный массив
Да.
Цитата Сообщение от L0M Посмотреть сообщение
Тем более, что это указано в задании
Там конкретно про тип элементов массива не сказано. Указано что элементы числом заполняются, а это может быть char, int, double, variant, string.
0
Мозгоправ
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
15.01.2020, 18:29 9
Цитата Сообщение от SomniPhobia Посмотреть сообщение
Обязательно чтобы компилировалось?
Видимо я что-то в этой жизни не понимаю.
0
15.01.2020, 18:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2020, 18:29
Помогаю со студенческими работами здесь

Вызов функции из другой функции после нажатия на кнопку
Помогите, пожалуйста! Никак не могу понять почему не запускается функция d() Полный код: &lt;script...

Вызов функции, находящейся в другой функции
Добрый день! Есть такая функция: function func1(p1, p2) { function func2() {alert(1);} ...

Вызов функции внутри другой функции
Доброго времени суток! Есть код, которые показывают расстановку шахматных фигур на доске, и если...

Вызов функции из другой функции в объекте
Добрый день. У меня есть скрипт: var combiner = { getString: function(param){ return...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru