Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для samarcs
0 / 0 / 2
Регистрация: 01.08.2012
Сообщений: 82

Представление кода в виде функции

29.12.2012, 23:04. Показов 1293. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся с проблемой, сделал код в виде функций, все запускается и вроде бы работает, но как введу значения жму Enter и программа просто виснет. В чем может быть проблема? Компилятор все норм компилит.
Исходный:
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 <vcl.h>
#pragma hdrstop
 
#include <tchar.h>
#include <iostream.h>
#include <math.h>
//---------------------------------------------------------------------------
/*
6. Найти максимальный элемент из положительных элементов массива,
и элементов, не кратных числу 7.
*/
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
        //Описание данных
    int amax,a[10],i,k,j,x[10],y[10],n_max,S;
 
 
        //Ввод массива
    cout<<"Enter a:"<<endl;
    for (i=0; i < 10; i++)
        cin>>a[i];
 
        //Формирование нового массива из положительных и не кратных 7.
    k=0; j=0;
    for(i=0; i<10; i++)
      {
         if(a[i]>0 && a[i]%7!=0)
            x[j++]=a[i];
 
      }
    if (j!=0)
 
    {   //Вывод нового массива
    cout<<"NoviiMassiv="<<endl;
    for(i=0;i<j;i++)
        {
            cout<<"  "<<x[i];
        }
 
    cout<<endl;
        //Поиск максимального элемента в новом массиве
    amax=x[0];  n_max=0;
 
    for (i=0; i < j; i++)
          if(amax<x[i])
            {
                amax=x[i];
                n_max=i;
 
            }
 
    cout<<"amax="<<amax<<endl;
 
    }
    else cout<<"Net kratnix"<<endl;
            //Формирование нового массива из отрицательных.
    k=0;
    for(i=0; i<10; i++)
      {
         if(a[i]<0)
            y[k++]=a[i];
 
      }
    if(k!=0)
    {
            //Вывод нового массива отрицательных чисел
    cout<<"MassivOtritsatelnih="<<endl;
    for(i=0;i<k;i++)
        {
            cout<<"  "<<y[i];
        }
 
    cout<<endl;
 
 
            //Поиск суммы элементов нового массива
   S=0; i=0;
   for(;i<k;)
   {
        S+=y[i], i++;
   }
            //Вывод результата
        cout<<"Summa="<<S<<endl;
 
   }
   else cout<<"Net otricatelnih"<<endl;
   system("pause");
    return 0;
}
//---------------------------------------------------------------------------
В виде функции:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include <tchar.h>
#include <iostream.h>
#include <math.h>
//---------------------------------------------------------------------------
 
#pragma argsused
//Прототипы
void cinA (int *a);
void getM (int *&x);
void newArray (int *a, int *x, int &j);
void getArray (int *x, int j);
void poiskMax (int amax, int *x, int &j);
void newOtrArray (int *a, int *y, int &k);
void getOtrArray (int *y, int k);
void SummArray (int &S, int k, int *y);
 
void cinA (int *a)
{
    int i;
        cout<<"Enter a:"<<endl;
    for (i=0; i < 10; i++)
        cin>>a[i];
}
 
void getM (int *&x)
{
    x=new int[10];
}
 
void newArray (int *a, int *x, int &j)
{
    int i;
    j=0;
    for(i=0; i<10; i++)
      {
         if(a[i]>0 && a[i]%7!=0)
            x[j++]=a[i];
 
      }
}
 
void getArray (int *x, int j)
{
 
    //Вывод нового массива
    cout<<"NoviiMassiv="<<endl;
    int i;
    for(i=0;i<j;i++)
        {
            cout<<"  "<<x[i];
        }
 
    cout<<endl;
}
 
void poiskMax (int amax, int *x, int &j)
{
    amax=x[0];
    int i;
    for (i=0; i < j; i++)
          if(amax<x[i])
            {
                amax=x[i];
            }
 
    cout<<"amax="<<amax<<endl;
}
 
void newOtrArray (int *a, int *y, int &k)
{
    k=0;
    int i;
    for(i=0; i<10; i++)
      {
         if(a[i]<0)
            y[k++]=a[i];
 
      }
}
 
void getOtrArray (int *y, int k)
{
    cout<<"MassivOtritsatelnih="<<endl;
    int i;
    for(i=0;i<k;i++)
        {
            cout<<"  "<<y[i];
        }
 
    cout<<endl;
 
}
 
void SummArray (int &S, int k, int *y)
{
   int i;
   S=0; i=0;
   for(;i<k;)
   {
        S+=y[i], i++;
   }
            //Вывод результата
        cout<<"Summa="<<S<<endl;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int *a;
    cinA (a);
    int *x;
    getM (x);
    int j;
    newArray (a, x, j);
    getArray (x, j);
    int amax;
    poiskMax (amax, x, j);
    int *y;
    int k;
    newOtrArray (a, y, k);
    getOtrArray (y, k);
    int S;
    SummArray (S, k, y);
    system("pause");
}
//---------------------------------------------------------------------------
Даже в голову ничего не лезет, предрасполагаю что что-то с указателями) сейчас сижу перечитываю главу про указатели(
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.12.2012, 23:04
Ответы с готовыми решениями:

Представление формулы в виде кода
Здравствуйте. Подскажите, пожалуйста, как представить в виде кода первую часть формулы (до -1^n)? Заранее спасибо.

Вычислить приближенное значение функции, используя представление ее в виде ряда Тейлора
!!!Вычислить приближенное значение функции, используя представление ее в виде ряда Тейлора. Вычисления заканчивать когда очередное...

Вычислить приближённое значение функции, используя представление ее в виде ряда Тейлора
Помогите пожалуйста вычислить приближённое значение функции, используя представление ее в виде ряда Тейлора.:cry: Нужно вычисления...

10
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
29.12.2012, 23:42
если ты 1 раз вводишь и жмёшь ентер, то оно не виснет, а просто ждёт ещё 9 значений, ты же в цикле запрашиваешь
0
 Аватар для Nagdiel
117 / 116 / 8
Регистрация: 23.12.2012
Сообщений: 195
29.12.2012, 23:46
по факту функция cinA работает с неинициализированным указателем
0
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
29.12.2012, 23:55
у тебя много переменных не инициализированы, как вообще это может работать?
0
 Аватар для samarcs
0 / 0 / 2
Регистрация: 01.08.2012
Сообщений: 82
30.12.2012, 00:18  [ТС]
работает) только в исходном виде, а в функции просто даже не знаю как правильно переводить, с переменными не могу разобрать
0
18 / 16 / 0
Регистрация: 10.03.2011
Сообщений: 52
30.12.2012, 00:19
Проблема тут:
113 int *a; // объявлен указатель, но память под массив не выделена
114 cinA (a); // в функции предполагается что память под массив уже(!) выделена и едёт простое заполнение массива числами

Можно выделить память до вызова функции:
C++
1
2
3
4
5
6
7
8
...
void cinA (int * a, int  n); 
....
int n = 10; // или ввод n с клавиатуры 
int* a = new int[n]; // объявляем указатель, выделяем память 
cinA (a, n); // до этого переделали cinA(---),
//так что бы она принимала два аргумента: указатель на массив и его размерность
....
Можно так:
C++
1
2
3
4
5
6
7
8
9
10
int * cinA (int  n)
{
int * a = new int[n];
....
return a; // возвращаем указатель на сформированный в функции массив
}
....
int n = 10; // или ввод n с клавиатуры 
int* a = cinA (n);  
....
Последний вариант предпочтительней.
1
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
30.12.2012, 00:23
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    int *a = new int[10];
    cinA (a);
    int *x = new int[10];
    getM (x);
    int j(0);
    newArray (a, x, j);
    getArray (x, j);
    int amax(0);
    poiskMax (amax, x, j);
    int *y = new int[10];
    int k(0);
    newOtrArray (a, y, k);
    getOtrArray (y, k);
    int S(0);
    SummArray (S, k, y);
    system("pause");
Добавлено через 1 минуту
и во всех функциях принимай параметры по ссылке

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
//Прототипы
void cinA (int *a);
void getM (int *x);
void newArray (int *a, int *x, int &j);
void getArray (int *x, int &j);
void poiskMax (int amax, int *x, int &j);
void newOtrArray (int *a, int *y, int &k);
void getOtrArray (int *y, int &k);
void SummArray (int &S, int &k, int *y);
1
18 / 16 / 0
Регистрация: 10.03.2011
Сообщений: 52
30.12.2012, 00:25
А ещё столько числ в коде это не есть хорошо это я о размерности массива.
0
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
30.12.2012, 00:30
да ещё, желательно удалять динамические переменные и массивы.
можно например так:
C++
1
2
3
4
    system("pause");
    delete[]a;
    delete[]x;
    delete[]y;
Добавлено через 3 минуты
насчёт много чисел.
можешь заменить их одной констаной.
например так
C++
1
2
3
4
const int array_size = 10;
int *a = new int[array_size];
int *x = new int[array_size];
int *y = new int[array_size];
0
 Аватар для samarcs
0 / 0 / 2
Регистрация: 01.08.2012
Сообщений: 82
30.12.2012, 00:32  [ТС]
Спасибо всем огромное!!! Помогли очень) буду учить сейчас тему функций) иначе выгонят точно из универаXD
0
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
30.12.2012, 00:34
вообще главное, чтоб было понятно самому и желательно другим :)
а с числами в коде компилятор разберётся ;)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.12.2012, 00:34
Помогаю со студенческими работами здесь

Изменение кода в виде функции
Приветствую народ! вопрос таков: написал работающую программу, необходимо взять кусок кода и оформить в виде функции, я ни как правильно не...

Оформление выполненного кода в виде шаблона функции
Задание: в одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) максимальный элемент массива; 2) сумму...

Представление числа в 16-ричном виде
Как это звучит на русском? e=C%16; d=C/16; HEX_A=array_m+HEX_A; C=d;

Представление числа в виде суммы 3 и 5
Известно что любое целое положительное число, которое больше 7, можно представить суммой троек и пятерок (37=4*3 + 5*5). Произвольную...

Представление числа N в виде всевозможных сумм K
Составить программу, которая печатает все различные представление числа N в виде всевозможных сумм K натуральных чисел (N, K-вводятся,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru