Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Получение переменных ..
#11
ща студию поставлю, помогу

Добавлено через 12 минут
держи
Код:
#include <iostream>
#include <time.h>

using namespace std;

int exitPrgm()
{
    system("PAUSE");
    return EXIT_SUCCESS;
}

int setLengthArr()
{
    srand((unsigned)time(0));
    return rand()%5+5;
}

double* setCellsArr(int n)
{
    double *Array = new double[n];

    for(int i = 0; i < n; i++)
    {
        cout << "|| Enter value Array[" << i << "]: ";
        cin >> Array[i];
    }

    return Array;
}

double getMinValue()
{
    int n = setLengthArr();
    double * arr = setCellsArr(n);
    double minValue = arr[0];

    for(int i = 1; i < n; i++)
    {
        if(arr[i] < minValue)
        {
            minValue = arr[i];
        }
    }

    delete [] arr;

    return minValue;
}

int main()
{  
    cout << "min: " << getMinValue() << endl;
    exitPrgm();            
}

PS: как бы все работает, но не красиво сделаны методы и тд, ну смотри уже под, что там препод просит сделать, главное что бы ты суть понял
Ответ
#12
Давайте разберем то, что вы не поняли (а на лекции ходить надо Smile )
1. Передача параметра в функцию по значению
Код:
void f(int a) {
  a = 10;
}
int b = 5;
f(b);
cout << b;
Некоторые люди надеются, что после выполнения функции b станет 5. А вот фиг вам! При вызове функции создается копия значения переменной b. Кривой но наглядный пример
Код:
int b = 5;
int c= b; // ЭТО "ДОБАВИЛ" компилятор
f(c);
Если вам надо изменить переменную, то передавать надо не по значению, а по указателю.
Что такое указатель? Это адрес памяти (целое число) по которму лежит значение переменной.
т.е.
если по адресу 0x50 у нас лежит значение переменной b, которое равно 5, то численное значение &b будет 0x50;
теперь типичная ошибка
Код:
void f( int *a) { // передаем указатель
a = 10;
}
ВОт так делать НЕ НАДО. Вы только что изменили не значение по адресу, а САМ адрес. Для доступа к значению указателя есть операция разыменования *
Код:
void f(int *a) {
*a = 10;
}
Как теперь вызывать функцию?
Код:
int b = 5;
f(&b); // передаем адрес по которому лежит значение b (указатель)
cout << b;
В С++ введен еще один тип передачи параметра по ссылке (by reference) выглядит он так
Код:
void f(int &a) {
a  =10;
}
int b =5;
f(b);
cout << b;
Данный вызов равноценен передечи указателя, только "скрывает" работу с указателем (взятие адреса и разыменование)
Ответ
#13
hex1r0 Написал:ща студию поставлю, помогу

Добавлено через 12 минут
держи
Код:
#include <iostream>
#include <time.h>

using namespace std;

int exitPrgm()
{
    system("PAUSE");
    return EXIT_SUCCESS;
}

int setLengthArr()
{
    srand((unsigned)time(0));
    return rand()%5+5;
}

double* setCellsArr(int n)
{
    double *Array = new double[n];

    for(int i = 0; i < n; i++)
    {
        cout << "|| Enter value Array[" << i << "]: ";
        cin >> Array[i];
    }

    return Array;
}

double getMinValue()
{
    int n = setLengthArr();
    double * arr = setCellsArr(n);
    double minValue = arr[0];

    for(int i = 1; i < n; i++)
    {
        if(arr[i] < minValue)
        {
            minValue = arr[i];
        }
    }

    delete [] arr;

    return minValue;
}

int main()
{  
    cout << "min: " << getMinValue() << endl;
    exitPrgm();            
}

PS: как бы все работает, но не красиво сделаны методы и тд, ну смотри уже под, что там препод просит сделать, главное что бы ты суть понял
Спасибо, суть понял. 1н вопрос, delete [] arr; - удаляем массив, т.к. в нем нет больше нужды и этим освобождаем память?

Добавлено через 3 минуты
Azagthtot Написал:Давайте разберем то, что вы не поняли (а на лекции ходить надо Smile )
1. Передача параметра в функцию по значению
Код:
void f(int a) {
  a = 10;
}
int b = 5;
f(b);
cout << b;
Некоторые люди надеются, что после выполнения функции b станет 5. А вот фиг вам! При вызове функции создается копия значения переменной b. Кривой но наглядный пример
Код:
int b = 5;
int c= b; // ЭТО "ДОБАВИЛ" компилятор
f(c);
Если вам надо изменить переменную, то передавать надо не по значению, а по указателю.
Что такое указатель? Это адрес памяти (целое число) по которму лежит значение переменной.
т.е.
если по адресу 0x50 у нас лежит значение переменной b, которое равно 5, то численное значение &b будет 0x50;
теперь типичная ошибка
Код:
void f( int *a) { // передаем указатель
a = 10;
}
ВОт так делать НЕ НАДО. Вы только что изменили не значение по адресу, а САМ адрес. Для доступа к значению указателя есть операция разыменования *
Код:
void f(int *a) {
*a = 10;
}
Как теперь вызывать функцию?
Код:
int b = 5;
f(&b); // передаем адрес по которому лежит значение b (указатель)
cout << b;
В С++ введен еще один тип передачи параметра по ссылке (by reference) выглядит он так
Код:
void f(int &a) {
a  =10;
}
int b =5;
f(b);
cout << b;
Данный вызов равноценен передечи указателя, только "скрывает" работу с указателем (взятие адреса и разыменование)
Жирное спасибо за объяснение. Сейчас перекушу и обмыслю Smile
Ответ
#14
да, удалять память обязательно нужно после того как ее выделили с помощью new, здесь нет сборщика мусора. Azagthtot теорию описал, так что думайте...
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  [C++] Получение адреса функции Sojang 3 1,946 08-25-2016, 09:04 PM
Последний пост: Akumu
  Получение значений в другой функц Effas 12 3,550 12-21-2011, 11:11 PM
Последний пост: hex1r0

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)