// 10.3.cpp: определяет точку входа для консольного приложения.
//
//Написать функцию kvadr с переменным числом параметров, которая определяет количество чисел, 
//являющихся точными квадратами (2, 4, 9, 16,. . . ) типа int. 
//Написать вызывающую функцию main, которая обращается к функции
//kvadr не менее трех раз с количеством параметров 3, 7, 11.
//
//5 человек гадало на кофейной гуще, звездах и внутренностях животных, которых принесли в жертву,
//о том, как правильно интерпретировать условие задачи.
//Наконец, на Абдуллу снизошло озарение....Возблагодарим же великолепный афганский героин за это!
//Как условие было понято: 
//В функции передаются числа-параметры, функция возвращает кол-во тех чисел, у которых есть целый корень
//Например, для параметров типа (1,2,4,5,8,9,12,16)
//ответ будет =4 ибо целые корни имеют числа 1, 4, 9 и 16

#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;

int func(int num, ...)
{

 int *p=&num;    //берем p-указатель на первый параметр, значение которого = кол-ву параметров
 if(num<=0)      //если введено некорректное значение - посылаем пользователя в анус, возвращая -1 ( т.е. 
  return -1;  //-1 - это сообщение об ошибки
 p++;            //теперь p указывает на следующий параметр
 double coren;   //переменная для хранения корня 
 int var;
 int res=0;      //кол-во точных квадратов, т.е. результат
 for(int i=0; i<num; i++, p++)   //цикл, работающий число раз=кол-ву параметров
 {
  coren=sqrt(double(*p));
  var=coren;
  if(coren==var)   //суть такая - если параметр допустим =3, то coren =1.7, var=1 то условие не выполнено
    res++;
 }
 return res;
 }
int _tmain(int argc, _TCHAR* argv[])
{
 //первый параметр - это кол-во параметров-чисел из которых мы ищем точные квадраты
 cout<<func(3,2,3,4)<<endl; //ответ 1
 cout<<func(7,2,3,4,10,12,13,16)<<endl; //ответ 2
 cout<<func(11,2,3,4,10,12,13,16,18,20,144,256)<<endl; //ответ 4
 return 0;
}

Add a code snippet to your website: www.paste.org