Дан текстовый файл, содержащий коэффициенты квадратных уравнений - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан текстовый файл вещественных чисел, содержащий коэффициенты квадратных уравнений (A1, B1, С1, A2, B2, С2, …). Создать новый текстовый файл, содержащий вначале три числа N2, N1, N0 — количество в исходном файле уравнений с двумя, одним и нулем действительных корней, далее — значения корней всех уравнений с двумя действительными корнями, а затем значения корней всех уравнений с одним действительным корнем. Не могу уйти дальше заполнения первого файла. Как можно считать данные из него таким образом, чтобы первые 3 числа можно было отправить в уравнение и далее так же со следующими тройками чисел?
#include <stdio.h> 
#include <windows.h> 
void main() 
{ 
    SetConsoleOutputCP(1251); 
    int A[100][3];
    int N, m=3; 
    int i, j,k;
    FILE *f=fopen("num.txt","w"), *nf=fopen("rad.txt","w"); 
    if(f==NULL) 
        printf("Не удалось открыть файл"); 
    if(nf==NULL) 
        printf("Не удалось создать файл"); 
    printf("Введите количество уравнений:N="); 
    scanf("%d",&N); 
    for(i=0;i<N;i++) 
    { 
        for(j=0;j<m;j++) 
        { 
            printf("Введите коэффициенты уравнений:",i+1,j+1); 
            scanf("%d",&A[i][j]); 
            fprintf(f,"%d",A[i][j]); 
        } 
    } 
 
fclose(f);
fclose(nf);
system("pause");
}
Знаю, что числа вещественные, но пока работаю с целыми

Решение задачи: «Дан текстовый файл, содержащий коэффициенты квадратных уравнений»

textual
Листинг программы
#include <stdio.h>
 
int main()
{
    FILE *in = fopen("in.txt", "r"); // открываем файл в режиме чтения "r"
    if (!in) {
        printf("Error: Cannot open file 'in.txt'.\n");
        return 1;
    }
 
    double a, b, c;
    int exitCode;
 
    while ((exitCode = fscanf(in, "%lf %lf %lf", &a, &b, &c)) == 3)
    {
        // решаем квадратное уравнение, сохраняем коэффициенты и корни в отдельых массивах
        printf("a = %g, b = %g, c = %g\n", a, b, c);
    }
 
    if (exitCode != EOF) {
        puts("Error: Wrong file format.");
        return 1;
    }
 
    puts("Program completed.");
    return 0;
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл для использования функций ввода-вывода.
  2. В функции main() открываем файл in.txt в режиме чтения r с помощью функции fopen().
  3. Проверяем, удалось ли открыть файл, выводим сообщение об ошибке и возвращаем код завершения 1 в случае неудачи.
  4. Объявляем переменные a, b, c типа double для хранения коэффициентов квадратного уравнения.
  5. Объявляем переменную exitCode типа int для проверки успешного считывания данных из файла.
  6. Запускаем цикл while, который будет выполняться, пока функция fscanf() успешно считывает три значения (a, b, c) из файла.
  7. Внутри цикла выводим значения коэффициентов на экран.
  8. Если цикл while завершается не по причине достижения конца файла (EOF), то выводим сообщение об ошибке и возвращаем код завершения 1.
  9. По завершении цикла while выводим сообщение Program completed. и возвращаем код завершения 0.

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы