C/C++
Написать программу на языке С(просто С).
Помогите пожалуйста написать программу на языке С, чтобы там были функции, условия, циклы и работа с файлами. Просто любую программу с этими компонентами.
Вот тестовая программа для проверки работоспособности записи и считывания в файл. Сначала вводятся данные:
a b y(0) y'(0) n » 0 6.2831853 0 1 1000
, затем решается задача Коши для ОДУ вида d²y/dx² = -y с начальными данными
у (0) = 0, y'(0) = 1 в указанном диапазоне [0;≈2π], самым примитивным численным методом. Информация об a, b, количестве узлов n и вычисленных узловых значениях функции загружаются в файл. Потом он закрывается. Созданный динамический массив уничтожается. А потом проверяется чтение из файла: считываются данные о диапазонах численного решения, количестве узлов функции, а все её узловые значения загружаются во вновь созданный динамический массив. Потом вызывается функция печати максимального и минимального узлововых значений функции, которая является решением задачи Коши.
#include <stdio.h>
#include <stdlib.h>
void maxmin(double *A, int size_of_array)
{ double max = A[0], min = A[0];
for (int i = 1; i < size_of_array; i++)
{ if (A[i] > max) max = A[i]; if(A[i] < min)
min = A[i]; } printf("Max = %f, Min = %f\n",
max, min); }
double f(double x, double y) { return -y; }
int main() { int i, n; double x, y,
y0,u, h, hp, a, b, *Y; FILE *s;
printf("a b y(0) y'(0) n » ");
scanf("%lf%lf%lf%lf%d", &a, &b, &y0, &u, &n);
h = (b - a) / n; hp = h / 2;
Y = new double [n + 1]; Y[0] = y0;
for (i = 0; i < n; i++) { y = Y[i]; x = a + i * h;
u += h * f(x + hp, y + hp * u);
Y[i + 1] = y + h * (u + hp * f(x, y));
printf("%8.6f »%16.12f\n", x, Y[i + 1]); }
s = fopen("Results.txt", "w"); fprintf(s,
"%19.16f\n", a); fprintf(s, "%19.16f\n", b);
fprintf(s, "%d\n", n + 1); for (i = 0; i <= n; i++)
fprintf(s, "%19.16f\n", Y[i]); fclose(s);
s = fopen("Results.txt", "r"); delete [] Y;
s = fopen("Results.txt", "r"); fscanf(s, "%lf",
&a); fscanf(s, "%lf", &b); fscanf(s, "%d", &n);
Y = new double [n]; for (i = 0; i <= n; i++)
fscanf(s, "%lf", &Y[i]); fclose(s); maxmin(Y, n);
return 0; }
Точным решением этого ОДУ является функция у=sin(x), но так как численный метод самый примитивный, то максимальным и минимальным значениями будут не 1 и 0, а что-то близкое, но не совсем точное.
a b y(0) y'(0) n » 0 6.2831853 0 1 1000
, затем решается задача Коши для ОДУ вида d²y/dx² = -y с начальными данными
у (0) = 0, y'(0) = 1 в указанном диапазоне [0;≈2π], самым примитивным численным методом. Информация об a, b, количестве узлов n и вычисленных узловых значениях функции загружаются в файл. Потом он закрывается. Созданный динамический массив уничтожается. А потом проверяется чтение из файла: считываются данные о диапазонах численного решения, количестве узлов функции, а все её узловые значения загружаются во вновь созданный динамический массив. Потом вызывается функция печати максимального и минимального узлововых значений функции, которая является решением задачи Коши.
#include <stdio.h>
#include <stdlib.h>
void maxmin(double *A, int size_of_array)
{ double max = A[0], min = A[0];
for (int i = 1; i < size_of_array; i++)
{ if (A[i] > max) max = A[i]; if(A[i] < min)
min = A[i]; } printf("Max = %f, Min = %f\n",
max, min); }
double f(double x, double y) { return -y; }
int main() { int i, n; double x, y,
y0,u, h, hp, a, b, *Y; FILE *s;
printf("a b y(0) y'(0) n » ");
scanf("%lf%lf%lf%lf%d", &a, &b, &y0, &u, &n);
h = (b - a) / n; hp = h / 2;
Y = new double [n + 1]; Y[0] = y0;
for (i = 0; i < n; i++) { y = Y[i]; x = a + i * h;
u += h * f(x + hp, y + hp * u);
Y[i + 1] = y + h * (u + hp * f(x, y));
printf("%8.6f »%16.12f\n", x, Y[i + 1]); }
s = fopen("Results.txt", "w"); fprintf(s,
"%19.16f\n", a); fprintf(s, "%19.16f\n", b);
fprintf(s, "%d\n", n + 1); for (i = 0; i <= n; i++)
fprintf(s, "%19.16f\n", Y[i]); fclose(s);
s = fopen("Results.txt", "r"); delete [] Y;
s = fopen("Results.txt", "r"); fscanf(s, "%lf",
&a); fscanf(s, "%lf", &b); fscanf(s, "%d", &n);
Y = new double [n]; for (i = 0; i <= n; i++)
fscanf(s, "%lf", &Y[i]); fclose(s); maxmin(Y, n);
return 0; }
Точным решением этого ОДУ является функция у=sin(x), но так как численный метод самый примитивный, то максимальным и минимальным значениями будут не 1 и 0, а что-то близкое, но не совсем точное.
Александр Ежов
"убили" напрочь студента. Препод 100% не поверит... Моё мнение основывается на стиле оформления вопроса ))
Похожие вопросы
- Написать программу на языке Си
- Написать программу на языке Си, которая решит эту задачу:
- Написать программу на языке С(С++).
- Напишите программу на языке паскаль
- Написать программу на языке программирования Си.
- Написать Программу на языке C++.
- Нужно написать программу на языке C++
- Помогите, пожалуйста, написать программу на языке Си.
- Вычислить значение функции F(x), разложенной в ряд и сходящейся в указанной области. Написать программу на языке C++
- Написать программу на языке c++