|
@@ -15,49 +15,88 @@
|
|
|
#include <stdio.h>
|
|
|
#include <conio.h>
|
|
|
#include <stdlib.h>
|
|
|
+#include <string.h>
|
|
|
+#include <ctype.h>
|
|
|
|
|
|
-void main() {
|
|
|
- //С помощью переменной file будем осуществлять доступ к файлу
|
|
|
+int is_valid_double(const char* str) {
|
|
|
+ char* endptr;
|
|
|
+ // Проверяем, можно ли преобразовать строку в число типа double
|
|
|
+ strtod(str, &endptr);
|
|
|
+
|
|
|
+ // Если endptr указывает на начало строки или не на конец строки, значит, это не число
|
|
|
+ return *endptr == '\0' && endptr != str;
|
|
|
+}
|
|
|
+
|
|
|
+int main() {
|
|
|
+ system("chcp 1251>nul");
|
|
|
+ // С помощью переменной file будем осуществлять доступ к файлу
|
|
|
FILE* file;
|
|
|
- //Открываем текстовый файл с правами на запись
|
|
|
+ // Открываем текстовый файл с правами на чтение
|
|
|
file = fopen("test.txt", "r");
|
|
|
- //Пишем в файл
|
|
|
+
|
|
|
double a, b, c;
|
|
|
|
|
|
- if (file == NULL) {
|
|
|
- fprintf(stderr, "Ошибка открытия файла для чтения коэффициентов.\n");
|
|
|
- return 1;
|
|
|
- }
|
|
|
- fscanf(file, "%lf %lf %lf", &a, &b, &c);
|
|
|
+ if (file == NULL) {
|
|
|
+ fprintf(stderr, "Ошибка открытия файла для чтения коэффициентов.\n");
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ char line[256];
|
|
|
+ int count = 0;
|
|
|
+
|
|
|
+ // Считываем значения из файла по строкам
|
|
|
+ while (fgets(line, sizeof(line), file) != NULL) {
|
|
|
+ char* token = strtok(line, " \n");
|
|
|
+ while (token != NULL) {
|
|
|
+ if (is_valid_double(token)) {
|
|
|
+ if (count == 0) {
|
|
|
+ a = strtod(token, NULL);
|
|
|
+ }
|
|
|
+ else if (count == 1) {
|
|
|
+ b = strtod(token, NULL);
|
|
|
+ }
|
|
|
+ else if (count == 2) {
|
|
|
+ c = strtod(token, NULL);
|
|
|
+ }
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ fprintf(stderr, "Ошибка: '%s' не является допустимым числом.\n", token);
|
|
|
+ fclose(file);
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ token = strtok(NULL, " \n");
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
- //Закрываем файл
|
|
|
+ // Закрываем файл
|
|
|
fclose(file);
|
|
|
- printf("%lf", a);
|
|
|
- _getch();
|
|
|
- double D = b * b - 4 * a * c;
|
|
|
- /*char otvet[200] = "корни уравнения: ";*/
|
|
|
- FILE* file1 = fopen("otvet.txt", "w");
|
|
|
- if (file1 == NULL) {
|
|
|
- fprintf(stderr, "Ошибка открытия файла для записи результатов.\n");
|
|
|
- return;
|
|
|
- }
|
|
|
- if (D > 0) {
|
|
|
- double x1 = (-b + sqrt(D)) / (2 * a);
|
|
|
- double x2 = (-b - sqrt(D)) / (2 * a);
|
|
|
- char buffer[200];
|
|
|
-
|
|
|
- fprintf(file1, "%.2f и %.2f", x1, x2);
|
|
|
- fprintf(file1, "\n Дискриминант %.2f", D);
|
|
|
- }
|
|
|
- else if (D == 0) {
|
|
|
- double x = -b / (2 * a);
|
|
|
- fprintf(file1, "Корень уравнения: %.2f", x);
|
|
|
- fprintf(file1, "\n Дискриминант %.2f", D);
|
|
|
- }
|
|
|
- else if (D < 0)fprintf(file1, "Нет действительных корней");
|
|
|
- fclose(file1);
|
|
|
- _getch();
|
|
|
- return 0;
|
|
|
+ printf("Коэффициенты: a = %lf, b = %lf, c = %lf\n", a, b, c);
|
|
|
+
|
|
|
+ double D = b * b - 4 * a * c;
|
|
|
+
|
|
|
+ // Открываем файл для записи результатов
|
|
|
+ FILE* file1 = fopen("otvet.txt", "w");
|
|
|
+ if (file1 == NULL) {
|
|
|
+ fprintf(stderr, "Ошибка открытия файла для записи результатов.\n");
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
|
|
|
+ if (D > 0) {
|
|
|
+ double x1 = (-b + sqrt(D)) / (2 * a);
|
|
|
+ double x2 = (-b - sqrt(D)) / (2 * a);
|
|
|
+ fprintf(file1, "Корни уравнения: %.2f и %.2f\n", x1, x2);
|
|
|
+ }
|
|
|
+ else if (D == 0) {
|
|
|
+ double x = -b / (2 * a);
|
|
|
+ fprintf(file1, "Корень уравнения: %.2f\n", x);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ fprintf(file1, "Нет действительных корней\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ fprintf(file1, "Дискриминант: %.2f\n", D);
|
|
|
+ fclose(file1);
|
|
|
+ _getch();
|
|
|
+ return 0;
|
|
|
}
|