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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2013, 18:39   #1
3Doleg
Пользователь
 
Регистрация: 03.10.2012
Сообщений: 67
По умолчанию функцию с необъявленным параметрами

Всем добрый день, есть задачка:

Разработать функцию с необъявленным параметрами, которая определяет и возвращает наименьший из своих аргументов, количество которых указывается в первом параметре функции.

Заранее спасибо)
3Doleg вне форума Ответить с цитированием
Старый 23.03.2013, 19:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так?:
Код:
// ggg.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdarg.h>


int maxi(int n,... ){
 va_list l;
 va_start(l,n);
 int i=va_arg(l,int);
 int max=i;
 for(;i;i=va_arg(l,int)){
	 max=(max<i)?i:max;
 }
 va_end(l);
 return max;
}

int _tmain(int argc, _TCHAR* argv[])
{
	printf("%d",maxi(1,2,3,4,5,6));
	getchar();
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.03.2013, 20:23   #3
3Doleg
Пользователь
 
Регистрация: 03.10.2012
Сообщений: 67
По умолчанию

Извиняюсь, но это код на С++, я еще не учил этот язык, буду благодарен если переделаете на C
3Doleg вне форума Ответить с цитированием
Старый 23.03.2013, 20:33   #4
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

А что здесь такого специфичного для С++?
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 23.03.2013, 20:43   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что здесь такого специфичного для С++?
Видимо это:
Цитата:
int _tmain(int argc, _TCHAR* argv[])
Цитата:
буду благодарен если переделаете на C
А ты возьми саму реализацию, и накати на свой проект на Сишке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.03.2013, 20:52   #6
3Doleg
Пользователь
 
Регистрация: 03.10.2012
Сообщений: 67
По умолчанию

Stilet, что вы имеете в виду?
3Doleg вне форума Ответить с цитированием
Старый 23.03.2013, 21:19   #7
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Stilet говорит, зная немного Си можно легко переделать его код.... и получите результат.....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 23.03.2013, 21:22   #8
3Doleg
Пользователь
 
Регистрация: 03.10.2012
Сообщений: 67
По умолчанию

вот как переделал, ну выводит ерунду...

Код:
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
 
int maxi(int format,...)
{
	int max, x;
        va_list ap;
        va_start(ap, format);
        
                x = va_arg (ap, int);
		max = x;
                for(;x;x = va_arg(ap, int))
		{
		max = (max < x) ? x : max;	
		}
        
        va_end (ap);
	return max;
}
 
int main()
{
	system("cls");
   	printf("%d", maxi(1,2,3,4,5,6));
	getch();
        return 0;
}
Изображения
Тип файла: jpg erynda.jpg (8.4 Кб, 118 просмотров)
3Doleg вне форума Ответить с цитированием
Старый 23.03.2013, 22:00   #9
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
По умолчанию

видима дело в этом:
Код:
printf("%d", maxi(1,2,3,4,5,6));
Первым параметром вроде собирались число элементов передавать...А поэтому конструкция немного не правильная...
Здесь пишете
Код:
va_start(ap, format);
, т.е. 1-ца у вас в качестве format, а в цикле все немного по другому, который for(;. Но это так, предположения...

Последний раз редактировалось monolit111; 23.03.2013 в 22:03.
monolit111 вне форума Ответить с цитированием
Старый 23.03.2013, 22:05   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чуть поправил.
Код:
// ааа.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
 
int maxi(int n,...)
{
	int max, x;
        va_list ap;
        va_start(ap, n);
        
        x = va_arg (ap, int);
		max = x;
		for(int i=1;i<n;i++,x = va_arg(ap, int)){max = (max < x) ? x : max;	}
        
        va_end (ap);
	return max;
}

int _tmain(int argc, _TCHAR* argv[])
{
	
   	printf("%d", maxi(5,8,3,4,5,6));
	getchar();
        return 0;
}
Проверял - работает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструктор с параметрами Donat_Oshchepkov Помощь студентам 5 31.10.2012 17:19
Описать функцию нахождения расстояния между 2-мя точками на плоскости, заданными своими координатами, и функцию .... zzz6 Помощь студентам 2 06.07.2011 08:24
Как передать указатель на функцию в функцию WIN32APIist Общие вопросы C/C++ 1 27.01.2011 10:35
программа с типизированными параметрами-значениями и параметрами-переменными Kira09 Паскаль, Turbo Pascal, PascalABC.NET 1 20.12.2010 22:23