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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2017, 20:13   #1
наталья776
Пользователь
 
Регистрация: 31.01.2017
Сообщений: 12
По умолчанию как передать функцию. Си

Код:
#include <locale.h>
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#include <process.h>
 
int maxElementsinMassive (int*a, int*b, int n, int m)
{
    int max=*a, nmax=0;
    int max1=*b, mmax=0;
 
    return max, max1, nmax, mmax;
}
 
int main()
{
    int *a, *b, n, m;
    setlocale(LC_CTYPE,"Russian");
    system("cls");
    printf("Введите размер массивов:\n");
    scanf("%d", &n);
    a = (int*) malloc(n*sizeof(int));
    b = (int*) malloc(n*sizeof(int));
    for(int i=0; i<n; i++) // Ввод элементов массива a
    {
        printf("a[%d] = ", i);
        scanf("%d", (a+i));
    }
    for(int i=0; i<n; i++) // Ввод элементов массива b
    {
        printf("b[%d] = ", i);
        scanf("%d", (b+i));
    }
 
    maxElementsinMassive(a, b, n, m);
    free(a);
    free(b);
    getchar();
    getchar();
    return 0;
}

Последний раз редактировалось Вадим Мошев; 31.01.2017 в 20:58.
наталья776 вне форума Ответить с цитированием
Старый 31.01.2017, 20:34   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Куда ее передавать?
p51x вне форума Ответить с цитированием
Старый 31.01.2017, 21:01   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Насколько я знаю, функция передаётся в подпрограмму в виде адреса имени этой функции.
То есть,
Код:
int myFun(int x, int &f) { return f(x) };
Вадим Мошев вне форума Ответить с цитированием
Старый 31.01.2017, 21:08   #4
наталья776
Пользователь
 
Регистрация: 31.01.2017
Сообщений: 12
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Куда ее передавать?
maxelement передать в main
наталья776 вне форума Ответить с цитированием
Старый 31.01.2017, 21:15   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

1) У тебя "m" объявлен, но непонятно чему равен.
2) нельзя возвращать 2 и более значения с функции (только одно: return 0; )
3) Как я понял задание, тебе надо было так (обрати внимание на ссылки "int &n_max" и "int &м_max"):

Код:
#include <locale.h>
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#include <process.h>

int maxElementsinMassive(int*a, int*b, int n, int m, int &n_max, int &m_max)
{
	int max;

	n_max=0;
	max = a[0];
	for (int i = 0; i < n; i++) 
	{
		if (max < a[i])
		{
			max = a[i];
			n_max = i;
		}
	}
	m_max = 0;
	max = b[0];
	for (int i = 0; i < m; i++)
	{
		if (max < b[i])
		{
			max = b[i];
			m_max = i;
		}
	}
	return 0;
}

int main()
{
	int *a, *b, n, m;
	setlocale(LC_CTYPE, "Russian");
	system("cls");

	printf("Введите размер массивов A: ");
	scanf("%d", &n);
	printf("Введите размер массивов B: ");
	scanf("%d", &m);
	printf("\n");

	a = (int*)malloc(n*sizeof(int));
	b = (int*)malloc(m*sizeof(int));

	for (int i = 0; i < n; i++) // Ввод элементов массива a
	{
		printf("a[%d] = ", i + 1);
		scanf("%d", (a + i));
	}
	printf("\n");
	for (int i = 0; i < m; i++) // Ввод элементов массива b
	{
		printf("b[%d] = ", i + 1);
		scanf("%d", (b + i));
	}
	printf("\n");

	int n_max;
	int m_max;
	if (maxElementsinMassive(a, b, n, m, n_max, m_max) == 0)
	{
		printf("max  А[%d]= %d\n", n_max + 1, a[n_max]);
		printf("max  В[%d]= %d\n", m_max + 1, b[m_max]);
	}
	else
		printf("Ошибка в maxElementsinMassive");
	
	free(a);
	free(b);
	getchar();
	getchar();
	return 0;
}

Последний раз редактировалось ura_111; 31.01.2017 в 21:18.
ura_111 вне форума Ответить с цитированием
Старый 31.01.2017, 21:22   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
адреса имени
адреса чего?


Параметр должен быть в таком виде:
Код:
void (*f)(int)
(для функции void ...(int) )

а передавать да, просто
Код:
myFunc(someFunc);
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 31.01.2017, 21:27   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
адреса чего?
Имел в виду, что в списке формальных параметров указывается имя передаваемой функции, а перед ним ставится знак амперсанда, что говорит о том, что мы передаём ссылку (она же адрес?) на эту функцию. Но всё это уже неважно, так как я написал ерунду. Запамятовал, да и C/C++ я очень плохо знаю.
Вадим Мошев вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Язык C]: Как передать массив в функцию? NaZah Помощь студентам 2 19.12.2016 18:34
Как в функцию передать часть диапазона? Stem79 Microsoft Office Excel 4 06.02.2013 18:40
Как передать Динамический массив в функцию? RainCat Помощь студентам 4 13.04.2011 11:25
Как передать указатель на функцию в функцию WIN32APIist Общие вопросы C/C++ 1 27.01.2011 10:35
Как передать объект в функцию? BadProgrammer Общие вопросы C/C++ 4 06.11.2010 11:39