Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2010, 20:24   #1
sadf
 
Регистрация: 03.03.2010
Сообщений: 7
По умолчанию Возврат массива значений в функцию main.

Здравствуйте! Нужна помощь.
Есть рабочий код. Вводится массив, затем этот массив передается функции, функция меняет отрицательные элементы на "-1". Затем функция выводит значение массива на экран.
Необходимо сделать, чтобы после замены всех отрицательных на "-1" массив передавался обратно в функцию main и уже функция main выводила массив на экран.

Код:
#include <iostream>

using namespace std;

void f_change_num(float numbers[128], int qty)
{
	for (int i=0 ; i<qty ; i++)
	{
		if (numbers[i] < 0)
		{
			numbers[i] = -1;
		}
	}
	for (int i=0 ; i<qty ; i++)
	{
		cout << numbers[i] << endl;
	}
}

void main()
{
	float numbers[128];
	int qty;
	cout << "Please enter the quantity of elements(1-128): ";
	cin >> qty;
	for (int i=0 ; i<qty ; i++)
	{
		cout << "Please enter the " << i+1 << "-th element: ";
		cin >> numbers[i];
	}
	f_change_num(numbers, qty);
}
Пробывал сделать так, как в следующем исходнике(через указатели) но в таком случае есть ошибки.

Код:
#include <iostream>

using namespace std;

void f_change_num(float &numbers, int qty)
{
	for (int i=0 ; i<qty ; i++)
	{
		if (&numbers[i] < 0)
		{
			&numbers[i] = -1;
		}
	}
}

void main()
{
	float numbers[128];
	int qty;
	cout << "Please enter the quantity of elements(1-128): ";
	cin >> qty;
	for (int i=0 ; i<qty ; i++)
	{
		cout << "Please enter the " << i+1 << "-th element: ";
		cin >> numbers[i];
	}
}
Код:
1>e:\documents and settings\admin\мои документы\visual studio 2008\projects\1year_2term_lab_3\1year_2term_lab_3\1year_2term_lab3.cpp(9) : error C2109: subscript requires array or pointer type
1>e:\documents and settings\admin\мои документы\visual studio 2008\projects\1year_2term_lab_3\1year_2term_lab_3\1year_2term_lab3.cpp(11) : error C2109: subscript requires array or pointer type
sadf вне форума Ответить с цитированием
Старый 03.03.2010, 20:35   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

В Си массивы всегда передаются по указателю, то есть всегда изменяется оригинальный массив Так что ничего менять не нужно, Ваш код и так меняет значения в исходном массиве
netrino вне форума Ответить с цитированием
Старый 03.03.2010, 20:51   #3
sadf
 
Регистрация: 03.03.2010
Сообщений: 7
По умолчанию

Огромное спасибо!!!!
Оно работает!

А в чем проблема во втором исходнике? Почему оно ругается на те две строчки?
Или это просто неправильно при такой задаче использовать символ амперсента ?
sadf вне форума Ответить с цитированием
Старый 03.03.2010, 21:05   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Да, просто надо в аргументе функции амперсанд заменить на звездочку. И перед numbers[i] его вообще убрать. Вы, получается, ссылку на float функции передавали, да потом еще пытались узнать адрес numbers[i]
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 03.03.2010, 21:07   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Амперсанд указывает там, что функция ожидает одну переменную типа float в качестве параметра, при чём возьмёт его по ссылке. А Вы массив передаёте
netrino вне форума Ответить с цитированием
Старый 03.03.2010, 21:32   #6
sadf
 
Регистрация: 03.03.2010
Сообщений: 7
По умолчанию

Спасибо!!!
Я понял в чем была моя ошибка с указателями.
Теперь знаю как через ссылку сделать и понял как без ссылок.
Огромное спасибо!
Мир домам вашим!
sadf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для заданных значений аргумента Х вычислить значения суммы S и функцию Z Infinity11 Помощь студентам 8 23.11.2009 09:35
Конструктор двумерного массива и обращение к нему из main() Lazio Помощь студентам 1 26.10.2009 17:25
разбить программу на функции main и пользовательскую функцию Ferghost Общие вопросы C/C++ 2 31.05.2009 18:15
Функция main и main(void) Pord Помощь студентам 1 11.12.2008 15:57
Табулировать функцию для 9 значений... Малинка! Помощь студентам 3 01.12.2008 17:59