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

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

29.12.2012, 23:04. Показов 1382. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru