Получение переменных .. - Страница 2 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming

Программирование / Programming
Ищете помощи в написании программы, есть сложность в выполнении задания (в институте и т.д.), пожалуйста, спросите у нас в данном форуме и мы обязательно вам поможем.

Ответ
Опции темы
Непрочитано 29.11.2011, 23:32   #11
Пользователь

По умолчанию Re: Получение переменных ..

ща студию поставлю, помогу

Добавлено через 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: как бы все работает, но не красиво сделаны методы и тд, ну смотри уже под, что там препод просит сделать, главное что бы ты суть понял

Последний раз редактировалось hex1r0; 29.11.2011 в 23:44. Причина: Добавлено сообщение
hex1r0 вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 30.11.2011, 13:03   #12
Аватар для Azagthtot
Эксперт

По умолчанию Re: Получение переменных ..

Давайте разберем то, что вы не поняли (а на лекции ходить надо )
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;
Данный вызов равноценен передечи указателя, только "скрывает" работу с указателем (взятие адреса и разыменование)
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 30.11.2011, 13:04   #13
Аватар для Effas
Пользователь

Автор темы (Топик Стартер) Re: Получение переменных ..

Цитата:
Сообщение от 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 Посмотреть сообщение
Давайте разберем то, что вы не поняли (а на лекции ходить надо )
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;
Данный вызов равноценен передечи указателя, только "скрывает" работу с указателем (взятие адреса и разыменование)
Жирное спасибо за объяснение. Сейчас перекушу и обмыслю

Последний раз редактировалось Effas; 30.11.2011 в 13:08. Причина: Добавлено сообщение
Effas вне форума Отправить сообщение для Effas с помощью Skype™ Ответить с цитированием
Непрочитано 30.11.2011, 13:18   #14
Пользователь

По умолчанию Re: Получение переменных ..

да, удалять память обязательно нужно после того как ее выделили с помощью new, здесь нет сборщика мусора. Azagthtot теорию описал, так что думайте...
hex1r0 вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение бонуса l2top JFS Lineage II 2 31.03.2011 16:46
Random'ое получение итема при клике krisadr Lineage II 2 22.10.2010 16:31
Получение профессии Wolfas Серверная часть 7 05.09.2010 07:38
О переменных [DUОS] Обучающие статьи 0 04.03.2010 16:46
Получение профы при исполнении нужного левела Ramzessuss Lineage II 0 04.02.2010 20:03


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 20:36. Часовой пояс GMT +3.

Вверх