Aktualizovat du2/program.c
This commit is contained in:
parent
e382f4f331
commit
6ea1690652
@ -1,61 +1,86 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
void evaluate_polynomial(double x, double *coefficients, int n) {
|
// Проверка, является ли строка числом (целым или с плавающей точкой)
|
||||||
double result = coefficients[0];
|
int je_cislo(const char *str) {
|
||||||
|
char *endptr;
|
||||||
|
strtod(str, &endptr);
|
||||||
|
return *endptr == '\0';
|
||||||
|
}
|
||||||
|
|
||||||
// Применение метода Хорнера
|
// Чтение числа с проверкой, если ошибка — вывод сообщения и завершение программы
|
||||||
for (int i = 1; i < n; i++) {
|
double citaj_cislo(int poradie) {
|
||||||
result = result * x + coefficients[i];
|
char buffer[100];
|
||||||
|
if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
|
||||||
|
if (poradie == 0) {
|
||||||
|
fprintf(stderr, "Chyba: Nepodarilo sa nacitat hodnotu x.\n");
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Chyba: Nepodarilo sa nacitat koeficient c.%d.\n", poradie);
|
||||||
|
}
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Округление результата до двух знаков после запятой
|
// Убираем перевод строки
|
||||||
printf("Vysledok je: %.2f\n", result);
|
char *newline = strchr(buffer, '\n');
|
||||||
|
if (newline) *newline = '\0';
|
||||||
|
|
||||||
|
// Пустая строка — конец ввода коэффициентов
|
||||||
|
if (buffer[0] == '\0') {
|
||||||
|
return 0.0 / 0.0; // Возвращаем NaN как сигнал конца ввода
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!je_cislo(buffer)) {
|
||||||
|
if (poradie == 0) {
|
||||||
|
fprintf(stderr, "Chyba: Nepodarilo sa nacitat hodnotu x.\n");
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Chyba: Nepodarilo sa nacitat koeficient c.%d.\n", poradie);
|
||||||
|
}
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return atof(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Горнерова схема
|
||||||
|
double hornerova_schema(double *koef, int n, double x) {
|
||||||
|
double vysledok = 0.0;
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
vysledok = vysledok * x + koef[i];
|
||||||
|
}
|
||||||
|
return vysledok;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
double x;
|
double x;
|
||||||
|
double koef[100]; // максимум 100 коэффициентов, можно увеличить при необходимости
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
// Ввод значения x
|
// Чтение x
|
||||||
if (scanf("%lf", &x) != 1) {
|
x = citaj_cislo(0);
|
||||||
printf("Chyba: Neplatne x\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Преобразование запятой в точку в числе
|
|
||||||
char c;
|
|
||||||
while ((c = getchar()) != '\n' && c != EOF) {
|
|
||||||
if (c == ',') {
|
|
||||||
ungetc('.', stdin); // Заменяем запятую на точку
|
|
||||||
} else {
|
|
||||||
ungetc(c, stdin);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
double coefficients[100]; // Массив для коэффициентов полинома
|
|
||||||
|
|
||||||
// Чтение коэффициентов
|
// Чтение коэффициентов
|
||||||
while (1) {
|
while (1) {
|
||||||
if (scanf("%lf", &coefficients[n]) != 1) {
|
double koeficient = citaj_cislo(n + 1);
|
||||||
if (n == 0) {
|
if (koeficient != koeficient) { // Если NaN, это конец ввода
|
||||||
printf("Nepodarilo sa nacitat polynom na 2 mieste.\n");
|
break;
|
||||||
return 1;
|
}
|
||||||
}
|
koef[n++] = koeficient;
|
||||||
break; // Прекращаем чтение, если введены все коэффициенты
|
|
||||||
|
if (n >= 100) {
|
||||||
|
fprintf(stderr, "Chyba: Prilis vela koeficientov.\n");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
n++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Если не было введено хотя бы одного коэффициента
|
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
printf("Chyba: Nebyly zadany koeficienty\n");
|
fprintf(stderr, "Chyba: Neboli zadane ziadne koeficienty.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Вызов функции для вычисления полинома
|
// Вычисление и вывод результата
|
||||||
evaluate_polynomial(x, coefficients, n);
|
double vysledok = hornerova_schema(koef, n, x);
|
||||||
|
printf("Vysledok je: %.2f\n", vysledok);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user