С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 237
#1

Не передаются аргументы - C++

05.12.2013, 17:50. Просмотров 240. Ответов 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
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
float input_matrix();
void change_matrix(float**, int);
void print_matrix(float**, int );
 
int main()
{
    setlocale(LC_ALL, "Russian"); // поддержка вывода русского языка в консоли
 
    float **A;
    int n;
 
    input_matrix();
    printf("Ваша текущая матрица имеет вид:\n\n");  
    print_matrix(A, n);
    change_matrix(A,n);
    printf("Измененная матрица:\n");
    print_matrix(A, n);
 
    for(int i=0;i<n;i++)
    free(A[i]);
    free(A);
 
    getch(); 
 
}
 
float input_matrix()
{
    float **A; //  исходная матрица  
    int n;  // кол-во элементов в матрицы
    int fl=0; // флаг, необходимый при неправильных входных данных.
 
        printf("Введите размерность матрицы:\n");
    do
    {
    if(!scanf("%d", &n))
    {
        system("cls");
        printf("Неверный ввод!\n");
        fflush(stdin);
        fl=1;
    }
    else 
    {
        fl=0;
    
        if(n<1)
            {
                system("cls");
                printf("Неверно указана размерность матрицы. Повторите ввод\n");
            }
    }
    }while(n<1);
//==================================================================
    A=(float**)malloc(n * sizeof(float*));
    if(A==NULL)
    {
        printf("Динамический массив не создан!");
        return 0;
    }
//==================================================================
// Ввод верхнетреугольной матрицы
    printf("Введите элементы верхней треугольной матрицы");
    for(int i=0;i<n;i++)
    {
        A[i]=(float *)calloc(n, sizeof(float*));
        if(A[i]==NULL)
            {
                printf("Динамический массив не создан!");
                return 0;
            }
        for(int j=i;j<n;j++)
        {   
            do
            {
            printf("\nA[%d][%d] = ", i+1, j+1);
            if(!scanf("%f", &A[i][j]))
            {
                system("cls");
                printf("Неверный ввод!\n");
                fflush(stdin);
                fl=1;
            }
            else
            {
                fl=0;
                if(A[i][j]==0)
                    {
                        printf("В матрице не должно быть нулей!:\n");
                        fflush(stdin);
                        j-=1;
                    }
            }
            }while(fl==1);
    }
    }
    return  A,n;
}
После функции ввода, n и матрица остаются не инициализироваными. Почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2013, 17:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не передаются аргументы (C++):

Аргументы функции: что значит "большие" и "небольшие" аргументы? - C++
Здравствуйте! Всем доброго дня! Растолкуйте пожалуйста! Что значит большие и небольшие?

В функции не передаются массивы символов - C++
в функции не передаются массивы символов, при проверке на то что находится внутри массива вместо значений выдаются квадраты. вот код:...

Параметры не передаются в конструктор класса - C++
Всем привет, у меня такая проблема. Параметры не передаются в конструктор класса. Telem *c; try{ c = new...

Почему не передаются данные из динамической библиотеки? - C++
Когда я возвращаю указатель из функции, программа получает его вместе с данными. Динамическая библиотека: __declspec(dllexport) RGBQUAD...

Каким образом параметры передаются в функцию? - C++
Задумался над тем, каким образом параметры передаются в функцию. Т.е. как именно это происходит внутри, это уже на вопрос к тому, как...

Криво передаются данные: деструктор сработал перед присваиванием - C++
TLongInteger x; TLongInteger y; TLongInteger z; x=&quot;37F8&quot;; y=&quot;ACE4&quot;; z=x+y;, TLongInteger &amp; TLongInteger:: operator + ...

6
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
05.12.2013, 17:55 #2
Потому что A - это локальная переменная в функции input_matrix.
0
rescr1pt
33 / 34 / 1
Регистрация: 03.10.2011
Сообщений: 61
05.12.2013, 18:05 #3
Цитата Сообщение от castaway Посмотреть сообщение
Потому что A - это локальная переменная в функции input_matrix.
Разве динамический объект удаляется при выходе из области видимости?

Добавлено через 3 минуты
Praud, вам нужно, чтобы input_matrix принимал указатель в качестве аргумента. (или же возвращал)
0
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 237
05.12.2013, 18:23  [ТС] #4
Я не хочу использовать глобальные переменные. Как можно обойтись без них?

Добавлено через 44 секунды
Цитата Сообщение от rescr1pt Посмотреть сообщение
Разве динамический объект удаляется при выходе из области видимости?

Добавлено через 3 минуты
Praud, вам нужно, чтобы input_matrix принимал указатель в качестве аргумента. (или же возвращал)
Что-то не пойму. Можно код?
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
05.12.2013, 19:48 #5
Нет, не удаляется, поэтому у него еще и утечка памяти.
0
Praud
7 / 7 / 3
Регистрация: 25.02.2013
Сообщений: 237
05.12.2013, 21:00  [ТС] #6
Так как нужно написать?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.12.2013, 21:27 #7
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
float** input_matrix(int& n)
{
    float **A; //  исходная матрица  
    
    int fl=0; // флаг, необходимый при неправильных входных данных.
 
        printf("Введите размерность матрицы:\n");
    do
    {
    if(!scanf("%d", &n))
    {
        system("cls");
        printf("Неверный ввод!\n");
        fflush(stdin);
        fl=1;
    }
    else 
    {
        fl=0;
    
        if(n<1)
            {
                system("cls");
                printf("Неверно указана размерность матрицы. Повторите ввод\n");
            }
    }
    }while(n<1);
//==================================================================
    A=(float**)malloc(n * sizeof(float*));
    if(A==NULL)
    {
        printf("Динамический массив не создан!");
        return 0;
    }
//==================================================================
// Ввод верхнетреугольной матрицы
    printf("Введите элементы верхней треугольной матрицы");
    for(int i=0;i<n;i++)
    {
        A[i]=(float *)calloc(n, sizeof(float*));
        if(A[i]==NULL)
            {
                printf("Динамический массив не создан!");
                return 0;
            }
        for(int j=i;j<n;j++)
        {   
            do
            {
            printf("\nA[%d][%d] = ", i+1, j+1);
            if(!scanf("%f", &A[i][j]))
            {
                system("cls");
                printf("Неверный ввод!\n");
                fflush(stdin);
                fl=1;
            }
            else
            {
                fl=0;
                if(A[i][j]==0)
                    {
                        printf("В матрице не должно быть нулей!:\n");
                        fflush(stdin);
                        j-=1;
                    }
            }
            }while(fl==1);
    }
    }
    return  A;
}
В main():
C++
1
2
3
4
float **A;
int n;
 
A = input_matrix(n);
0
05.12.2013, 21:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2013, 21:27
Привет! Вот еще темы с ответами:

Элементы списка при присваивании передаются в обратном порядке - C++
Такая проблема, вывожу текст &quot;List lst;&quot;, все ок. Но когда присваиваю List listik = lst; и вывожу текст, через Listik, то выводит &quot;!!!...

Аргументы и using - C++
Я прочитал мног статей про аргументы в функциях (вообще меня тупо интересовало что пишется в скобках после main) , Но ничего не понял...

Аргументы и параметры - C++
Приветствую всех! :) Помогите разобраться в терминологии языка. Имеется некоторое объявление функции void someFunc(char ch, int n); ...

Аргументы функции - C++
Добрый вечер! Сразу по делу: int func(char s) {....} int main { char s; // s-символьная строка func(s); }


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.