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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2011, 17:06   #1
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию С++ массив, функция, переменная

Долго гуглил, но так и не нашел ответа.
Есть массив целых чисел, в него ввели сколько-то элементов.
Код:
int intarr[100];
	int count=0;
	int yn;

	
	do
	{
		cout << "Enter number: ";
		cin >> intarr[count];
		count++;
		cout << "Continue?(y/n)"; cin >> yn;
	}while(yn!='n');
И функция, которая находит, например, максимальный элемент массива.

Код:
int maxint(int arr[]) 
{
	int maxi=0;
	for(int j=0; j<count; j++)
		if(arr[maxi]<arr[j])
			maxi=j;
	return maxi; 
}
А как сделать, чтобы функция не ругалась, на то, что не знает переменную, которая выделена красным? Ничего, кроме глобальной переменной или передачи ее отдельно (т.е. что-то вроде maxint(intarr, count)), не придумал.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 18.04.2011 в 17:09.
Alex11223 вне форума Ответить с цитированием
Старый 18.04.2011, 17:23   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Ну а как ещё же7 Только либо так...
Код:
#include <iostream>
#include <stdio>
#include <stdlib>

using namespace std;

int count = 0;
int myMax = 0;
int myArr[100];

void Input()
{
   cout<<"Enter count:";
   cin>>count;
   for (int i = 0;i<count;i++)
   {
       cout<<"myArr["<<i<<"] = ";
       cin>>myArr[i];
   }
}

void FindMax()
{
    myMax = myArr[0];
    for (int i = 1;i<count;i++)
    {
        if (myArr[i] > myMax) myMax = myArr[i];
    }
}

int main()
{
      Input();
      FindMax();
      cout<<"Max = "<<myMax<<endl;
      system("pause");
      return 0;
}
Ну вообще-то существуют и другие варианты доработки, но я бы предпочёл этот.

Последний раз редактировалось _-Re@l-_; 18.04.2011 в 17:26.
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.04.2011, 17:25   #3
skgwazap
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 40
По умолчанию

maxint(intarr, count)
Обычно так и поступают.
skgwazap вне форума Ответить с цитированием
Старый 18.04.2011, 17:45   #4
malinoff
Форумчанин
 
Аватар для malinoff
 
Регистрация: 08.01.2010
Сообщений: 205
По умолчанию

Почему бы не использовать sizeof()?
Если помог - кликни на значок весов под аватаром.
malinoff вне форума Ответить с цитированием
Старый 18.04.2011, 17:50   #5
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

За глобальные переменные убивать и предавать анафеме

Код:
#include <iostream>
#include <vector>
using namespace std;
void main() {
   vector<int> arr;
   int i;
   char c;
   do {
      cout<<"Enter value: ";
      cin>>i;
      arr.push_back(i);
      cout<<"Continue? ";
      cin>>c;
   } while(c!='n');
}
И, соответственно,
Код:
 int fimdmax(vector<int>& arr)
Размер массива получается через arr.size() , обращение к элементам - arr[i], как для обычного массива. Предлагаю погуглить на тему c++ vector.
Son Of Pain вне форума Ответить с цитированием
Старый 18.04.2011, 17:55   #6
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Цитата:
Сообщение от malinoff Посмотреть сообщение
Почему бы не использовать sizeof()?

Он не сможет вернуть размер параметра, переданного функции как int[].
Son Of Pain вне форума Ответить с цитированием
Старый 18.04.2011, 18:23   #7
malinoff
Форумчанин
 
Аватар для malinoff
 
Регистрация: 08.01.2010
Сообщений: 205
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
Он не сможет вернуть размер параметра, переданного функции как int[].
sizeof() возвратит размер массива, умноженный на размер int. Так что использовать в качестве размера надо не sizeof(intArray) а sizeof(intArray)/sizeof(int)
Если помог - кликни на значок весов под аватаром.
malinoff вне форума Ответить с цитированием
Старый 18.04.2011, 18:35   #8
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Цитата:
Сообщение от malinoff Посмотреть сообщение
sizeof() возвратит размер массива, умноженный на размер int. Так что использовать в качестве размера надо не sizeof(intArray) а sizeof(intArray)/sizeof(int)
Код:
void func(int arr[]) {
   cout<<(sizeof(arr)/sizeof(int));
}
Это не будет работать. Компилятору неизвестно, какого размера массив будет передан в функцию; и он не сохраняет в скомпилированном коде информацию о типе, достаточную для определения этого во время исполнения. Потому это не будет работать.
Son Of Pain вне форума Ответить с цитированием
Старый 18.04.2011, 20:54   #9
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Цитата:
Компилятору неизвестно, какого размера массив будет передан в функцию; и он не сохраняет в скомпилированном коде информацию о типе, достаточную для определения этого во время исполнения.
всё проще. sizeof(arr) тут вернет размер указателя ==4.
onewho вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция возвращающая указатель ]tach[ Общие вопросы C/C++ 1 19.01.2011 14:35
Функция возвращающая char Exeil Общие вопросы C/C++ 2 18.10.2010 19:42
Пользовательская функция,возвращающая массив savraska Microsoft Office Excel 2 20.04.2010 03:12
Функция возвращающая массив babaj Общие вопросы Delphi 8 04.07.2009 17:40
Создание надстроек. Функция, возвращающая массив значений Jarik Microsoft Office Excel 6 13.01.2009 23:11