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

объявление переменных - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
MadBittern
 Аватар для MadBittern
6 / 6 / 1
Регистрация: 12.11.2012
Сообщений: 190
16.12.2012, 22:15     объявление переменных #1
вообщем есть задание которое не раз тут обсуждалось решалось и тд. суть не в этом. столкнулся с маленькой проблемой при оформлении каждого пункта задания в виде отдельной функции, выводит ошибку типа идентификатор определение подскажите пожалуйста где я допускаю ошибку. коментами отключил ругающуюся часть,блок который должен быть в этой функции не удалял из main
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
/*4. В одномерном массиве, состоящем из n вещественных элементов, вычислить:
•   номер минимального элемента;
•   сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
•   Преобразовать таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом – все остальные.
Каждый пункт задания оформить в виде отдельной функции.*/
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <conio.h>
#include <windows.h>
using namespace std;
double sumEl ();
int conversion ();
 
 
int main()
{
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
    int n;
    cout<<"Введите размер массива:  ";
    cin>>n;
    int*ptm;
    double *masS=new double[n];
    int i;
    float sum = 0;
    int min = 0;
    int a = -1, b = -1;
    cout << "Введите массив из " << n <<" чисел:\n";
    for (i=0; i<n; i++){printf("array[%d] = ",i); cin>>masS[i];
    if (masS[min] > masS[i])
                        min = i;
                    if (masS[i] < 0)
                        if (a == -1)
                            a = i;
                        else if (b == -1)
                            b = i;}
    if (a == -1 || b == -1)
                    cout<<"В массиве нет хотя бы двух отрицательных чисел: сумму не посчитать!";
                else
                {
                    float sum = 0;
                    for (int i = a + 1; i < b; i++)
                        sum += masS[i];
                    printf("Сумма между двумя отрицательными числами = [%d]", sum);
                }
 
    cout<<"\n_________________________________________\n";
    printf("Номер минимального элемента = [%d]", min);
    cout<<"\n_________________________________________\n"<<"Student GROUP: VIZ-173 Alexsey Doorman.\n";
    system("Pause");
    return 0;
}
/*int namberMin ()
{
}
double sumEl ()
{
    int a, b, sum;
    if (a == -1 || b == -1)
                    cout<<"В массиве нет хотя бы двух отрицательных чисел: сумму не посчитать!";
                else
                {
                    float sum = 0;
                    for (int i = a + 1; i < b; i++)
                        sum += masS[i];
                    printf("Сумма между двумя отрицательными числами = [%d]", sum);
                }
}
int conversion ()
{
}
*/
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2012, 22:15     объявление переменных
Посмотрите здесь:

Объявление переменных. C++
C++ Объявление переменных
Объявление глобальных переменных C++
Объявление переменных в С++ C++
Объявление переменных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
16.12.2012, 22:32     объявление переменных #2
masS - не определен в функции sumEl. Передавайте его в функцию как параметр.
MadBittern
 Аватар для MadBittern
6 / 6 / 1
Регистрация: 12.11.2012
Сообщений: 190
16.12.2012, 22:46  [ТС]     объявление переменных #3
то есть? указать его в объявлении функции? если я правильно понял
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
16.12.2012, 23:10     объявление переменных #4
C++
1
int conversion(double * masS, int n);
Ну и размер n наверняка в функции понадобится.

И вообще судя по вашей функции, вам нужно будет передавать еще как минимум a и b.

C++
1
int a, b, sum;
- вот внутри функции вы их заново объявили. Но это будут совершенно другие переменные, не имеющие ничего общего (кроме имени) с переменными из ф-ции main. Собственно и лежать в них будет какой-нибудь мусор, а не то что вы вычисляли с помощью:

C++
1
2
3
4
5
if (masS[i] < 0)
if (a == -1)
 a = i;
else if (b == -1)
b = i;}
Добавлено через 2 минуты
Не смешивайте в одном коде cout<< и printf, лучше на чем нибудь одном остановиться.

Добавлено через 10 минут
Для примера, вот вызов функции, которая находит индекс минимального элемента.

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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int number_min(double * arr, int size);
 
int main()
{
    int n;
    
    cout << "Введите размер массива:  ";
    cin >> n;
 
    double *masS=new double[n];
    int i;
 
    cout << "Введите массив из " << n <<" чисел:\n"; 
    for (i = 0; i<n; i++)
    {   
        cout << "array[" << i << "] = ";
        cin >> masS[i];
    }
    
    int i_min = number_min(masS, n);
    
    cout << "\nnomer min = " << i_min << "\n";
    cout << "min = " << masS[i_min] << "\n"; 
    
    system("Pause");
    return 0;
}
 
 
int number_min(double * arr, int size)
{
    int i_min = 0, i;
    
    for(i = 0; i < size; ++i)
    {
        if(arr[i] < arr[i_min])
        {   
            i_min = i;
        }
    }
    
    return i_min;
}
Как видно, названия аргументов и формальных параметров могут не совпадать.

Вот прототип функции, из которго видно, что она принимает 1 параметр типа указатель на double и 2-ой - типа int.
C++
1
int number_min(double * arr, int size)
Это вызов для конкретных аргументов, т.е. для массива masS и его размера n.
C++
1
number_min(masS, n);
MadBittern
 Аватар для MadBittern
6 / 6 / 1
Регистрация: 12.11.2012
Сообщений: 190
16.12.2012, 23:30  [ТС]     объявление переменных #5
по поводу a,b, .... понятно. нужно чтоб все функции работали с массивом masS[] объявленном в main, с помощью динамического выделения памяти, то есть реализовать это можно через для функции conversion:
C++
1
int conversion(double * masS, int n);
если я укажу переменные с теми же значениями то они будут нести одни и те же данные во всех функциях.
по поводу cout<< printf - я не разобрался как мне вывести на экран предложение ввести значение в формате masS[0] = "ввод значения" с помощью cout<<, можно перейти на printf-scanf но у нас препод ссылается на то что это старый формат и сейчас в С++ не применяется поэтому пишу двумя способами чтобы добится результата на экране и угодить ему показав что могу и так и так.(имхо- написал бред)

Добавлено через 5 минут
Цитата Сообщение от Schizorb Посмотреть сообщение
C++
1
int conversion(double * masS, int n);
Ну и размер n наверняка в функции понадобится.

И вообще судя по вашей функции, вам нужно будет передавать еще как минимум a и b.

C++
1
int a, b, sum;
- вот внутри функции вы их заново объявили. Но это будут совершенно другие переменные, не имеющие ничего общего (кроме имени) с переменными из ф-ции main. Собственно и лежать в них будет какой-нибудь мусор, а не то что вы вычисляли с помощью:

C++
1
2
3
4
5
if (masS[i] < 0)
if (a == -1)
 a = i;
else if (b == -1)
b = i;}
Добавлено через 2 минуты
Не смешивайте в одном коде cout<< и printf, лучше на чем нибудь одном остановиться.

Добавлено через 10 минут
Для примера, вот вызов функции, которая находит индекс минимального элемента.

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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int number_min(double * arr, int size);
 
int main()
{
    int n;
    
    cout << "Введите размер массива:  ";
    cin >> n;
 
    double *masS=new double[n];
    int i;
 
    cout << "Введите массив из " << n <<" чисел:\n"; 
    for (i = 0; i<n; i++)
    {   
        cout << "array[" << i << "] = ";
        cin >> masS[i];
    }
    
    int i_min = number_min(masS, n);
    
    cout << "\nnomer min = " << i_min << "\n";
    cout << "min = " << masS[i_min] << "\n"; 
    
    system("Pause");
    return 0;
}
 
 
int number_min(double * arr, int size)
{
    int i_min = 0, i;
    
    for(i = 0; i < size; ++i)
    {
        if(arr[i] < arr[i_min])
        {   
            i_min = i;
        }
    }
    
    return i_min;
}
Как видно, названия аргументов и формальных параметров могут не совпадать.

Вот прототип функции, из которго видно, что она принимает 1 параметр типа указатель на double и 2-ой - типа int.
C++
1
int number_min(double * arr, int size)
Это вызов для конкретных аргументов, т.е. для массива masS и его размера n.
C++
1
number_min(masS, n);
спс вроде бы разобрался но вот конструкция с выводом через cout<< показалась мене удобной
C++
1
cout << "array[" << i << "] = ";
но все равно придется привыкть а то нам с преподом еще 3 года дружить))
вообще все можно было сделать через глобальные константы но это все очень просто(
Yandex
Объявления
16.12.2012, 23:30     объявление переменных
Ответ Создать тему
Опции темы

Текущее время: 01:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru