/
pl.h:
#pragma once
int check(char **check);
double polinom(char *tup,...);
main.c
#include<stdio.h>
#include<conio.h>
#include"pl.h"
#define n 5
int main(){//головна функція
int i;
int a;
double res,arr[n];
scanf("%d", &a);
for(i=0;i<n;i++)
scanf("%lf", arr+i);
res=polinom("%d %lf %lf %lf %lf %lf", a, arr[0], arr[1], arr[2], arr[3], arr[4]);
printf("%lf\n", res);
res=polinom("%lf %lf %lf %lf", (double)a, arr[0], arr[1], arr[2]);
printf("%lf\n", res);
res=polinom("%d %lf %lf %lf", a, arr[0], arr[1], arr[2]);
printf("%lf\n", res);
getch();
return 0;
}
//можеш переписувати і викликати функцію в будь-якому порядку з будь-якою кількісттю вхідних данних(на вхід в рядку правда треба описувати якого типу данні типодаєш, кожну змінну описувати,як той самий прінтф чи сканф), функція повинна сприймати double, int i float, але в меневоно вийо, тому хз...
pl.c:
#pragma once
#include "pl.h"
#include<stdarg.h>//хрєнь, де лежать функції для роботи зі змінною кількісттю параметрів
double polinom(char *tup,...){//функція з якою я найдовше займався сексом(твоє завдання)
double res,x;//змінні під результат і х
int ch;//зміння для перевірки
int arg0;//змінні потипно для цілого, з рухомою комою, і з рухомою комою подвоєної точності
float arg1;
double arg2;
va_list ap;//змінна для роботи
va_start(ap, tup);//це треба щоб зловити першу змінну з поданих
res=0;
ch=check(&tup);//виклик перевірки
if(ch==0)//в залежності від того, що перевірка видасть або виходимо за межі функції, або ж використовуємо потрібну змінну для того щоб вивести х
return 0;
if(ch==1){
arg0=va_arg(ap,int);
x=arg0;
}
if(ch==2){
arg1=va_arg(ap,float);
x=arg1;
}
if(ch==3){
arg2=va_arg(ap,double);
x=arg2;
}
while(1){//безмежний цикл, все аналогічно до попереднього "витягування х" але тут витягуються потрібні шматки поліному
ch=check(&tup);
if(ch==0)
break;
if(ch==1){
arg0=va_arg(ap,int);
res=res*x+arg0;
}
if(ch==2){
arg1=va_arg(ap,float);
res=res*x+arg1;
}
if(ch==3){
arg2=va_arg(ap,double);
res=res*x+arg2;
}
}
va_end(ap);//звільняється змінна АР
return res;//повертається результат
}
int check(char **check){//функція перевірки вхідних данних(ця хуйня для того, щобвоно парахо під тип функції scanf
while(1){//в цьому безмежному циклі воно перебирає шукаючи символ %
if(check[0][0]==0)//якщо попало на кінець рядка - повернути нуль
return 0;
if(check[0][0]=='%')//знайшло відсоток - на вихід
break;
else
check[0]=&check[0][1];
}
if(check[0][0]=='%' && check[0][1]=='d'){//що описано то і повертає(для інт 1, для флоат 2, для дабл 3)
check[0]=&check[0][2];
return 1;
}
if(check[0][0]=='%' && check[0][1]=='f'){
check[0]=&check[0][2];
return 2;
}
if(check[0][0]=='%' && check[0][1]=='l' && check[0][2]=='f'){
check[0]=&check[0][3];
return 3;
}
return 0;
}