Aktualizovat du2/program.c

This commit is contained in:
Denys Sanchuk 2025-03-04 13:26:30 +00:00
parent 6ea1690652
commit 50ae5a3bd3

View File

@ -2,14 +2,12 @@
#include <stdlib.h> #include <stdlib.h>
#include <ctype.h> #include <ctype.h>
// Проверка, является ли строка числом (целым или с плавающей точкой)
int je_cislo(const char *str) { int je_cislo(const char *str) {
char *endptr; char *endptr;
strtod(str, &endptr); strtod(str, &endptr);
return *endptr == '\0'; return *endptr == '\0';
} }
// Чтение числа с проверкой, если ошибка — вывод сообщения и завершение программы
double citaj_cislo(int poradie) { double citaj_cislo(int poradie) {
char buffer[100]; char buffer[100];
if (fgets(buffer, sizeof(buffer), stdin) == NULL) { if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
@ -21,13 +19,11 @@ double citaj_cislo(int poradie) {
exit(1); exit(1);
} }
// Убираем перевод строки
char *newline = strchr(buffer, '\n'); char *newline = strchr(buffer, '\n');
if (newline) *newline = '\0'; if (newline) *newline = '\0';
// Пустая строка — конец ввода коэффициентов
if (buffer[0] == '\0') { if (buffer[0] == '\0') {
return 0.0 / 0.0; // Возвращаем NaN как сигнал конца ввода return 0.0 / 0.0;
} }
if (!je_cislo(buffer)) { if (!je_cislo(buffer)) {
@ -42,7 +38,6 @@ double citaj_cislo(int poradie) {
return atof(buffer); return atof(buffer);
} }
// Горнерова схема
double hornerova_schema(double *koef, int n, double x) { double hornerova_schema(double *koef, int n, double x) {
double vysledok = 0.0; double vysledok = 0.0;
for (int i = 0; i < n; i++) { for (int i = 0; i < n; i++) {
@ -53,13 +48,11 @@ double hornerova_schema(double *koef, int n, double x) {
int main() { int main() {
double x; double x;
double koef[100]; // максимум 100 коэффициентов, можно увеличить при необходимости double koef[100];
int n = 0; int n = 0;
// Чтение x
x = citaj_cislo(0); x = citaj_cislo(0);
// Чтение коэффициентов
while (1) { while (1) {
double koeficient = citaj_cislo(n + 1); double koeficient = citaj_cislo(n + 1);
if (koeficient != koeficient) { // Если NaN, это конец ввода if (koeficient != koeficient) { // Если NaN, это конец ввода
@ -78,7 +71,6 @@ int main() {
return 1; return 1;
} }
// Вычисление и вывод результата
double vysledok = hornerova_schema(koef, n, x); double vysledok = hornerova_schema(koef, n, x);
printf("Vysledok je: %.2f\n", vysledok); printf("Vysledok je: %.2f\n", vysledok);