Reshauvce
04.11.2022 04:53

Всем привет) Задали домашку по проге:Модифицированным методом Ньютона решить функцию a0+a1*x+a2*x*x+a3*log(1/x)
Написал код,но с производной что-то не так
#include
#include
#include

float f(float a0, float a1, float a2, float a3, float x)
{
return a0+a1*x+a2*x*x+a3*log(1/x);
}

int main ()
{
int n;
float a0, a1, a2, a3, E, A, B, x0, x1, proisv;
FILE *myfile;
myfile = fopen ("Vivod.txt", "w");
printf ("Для решения уравнения a0+a1*x+a2*x*x+a3*ln(1/x) введите значения следующих коэффицентов: \n");
printf ("a0=");
scanf ("%f", &a0);
printf ("a1=");
scanf ("%f", &a1);
printf ("a2=");
scanf ("%f", &a2);
printf ("a3=");
scanf ("%f", &a3);
printf ("Введите желаемую точность решения: ");
scanf ("%f", &E);
printf ("Введите начальную границу интервала: ");
scanf ("%f", &A);
printf ("Введите конечную границу интервала: ");
scanf ("%f", &B);
printf ("Введите примерное значение решения уравнения(приближение): ");
scanf ("%f", &x0);

while ((x0 B))
{
printf ("Заданное приближение не принадлежит заданному интервалу.Введите корректное значение приближения: ");
scanf ("%f", &x0);
}

proisv=a1+(2*a2*x0)-(a3/x0);

do
{
x1=x0-(f(a0, a1, a2, a3, x0)/proisv);
x0=x1;
}while(fabs(x0-x1)>E);

if ((x1 B))
{
printf ("В заданном интервале нет решений данного уравнения. \n");
fprintf (myfile, "There are no solutions to this equation in this interval. \n");
}
else
{
printf ("%f \n", x1);
fprintf (myfile, "%f \n", x1);
}

}

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
LRM999919
09.10.2022 09:19

Как-то так:

#include <iostream>


using namespace std;


// В данном примере я использовал типы float, т. к. при попытке делить 3 на 2 мы получаем 1.5, но тип int обрезает все после .


int main()

{

   cout << "Task 30240725!" << endl; // just for fun


   int m[12] = {-1,-2,3,4,5,6,7,8,9,10,11,12}; // Инициализируем массив из 12 элементов, чтоб хоть части из них была отрицательная


   // среднее арифметическое состоит из сумма_числел / кол-во_чисел


   float min_sum = 0;          // сумма чисел

   float total_min_count = 0;  // кол-во чисел


   // Инициализиуем цикл от 0 (т. к. все массивы начинаются с 0) до 12 не включительно (т. к. всего элементов 12 начиная с 0. Значит 11)

   for (int i = 0; i < 12; i++) {


       // если текущий элемент массива m от индекса i меньше чем 0, значит это отрицательное число

       if (m[i] < 0) {


           min_sum += m[i];    // складываем, непосредственно, само число m[i]

           total_min_count++;  // увеличиваем кол-во чисел на 1. Можно написать строку вида total_min_count = total_min_count + 1; - суть не поменяется


       }

   }


   // Если в массиве не было отрицательных чисел, то делаем проверку. Если кол_во_чисел и сумма_чисел равны 0 значит в массиве не было отрицательных чисел.

   // а т. к. по умолчанию min_sum и total_min_count равны 0, то при попытке поделить их получим ошибку. Для этого обрабатываем это условие, чтоб не дать ее допустить.

   if (total_min_count == 0 && min_sum == 0) {

       // Выкидываем сообщение, мол, нету в массиве отрицательных чисел, работать не буду

       cout << "There are no negative numbers in the array" << endl;


       // делаем return, дабы программа не продолжила выполнение

       return 0;

   }


   // если же у нас есть и кол-во_чисел и общая_сумма, то спокойно делим одно на другое и сразу выводим в консоль результат.

   cout << "Average: " << min_sum / total_min_count << endl;


   // завершаем выполнение программы

   return 0;

}

0,0(0 оценок)
Ответ:
666Лиза66611
29.01.2020 16:32

1)

var mas: array[1..10] of real = {.,.,}; // перечисление элементов массива, который дан по условию задания

var counter: integer;

begin

for i:= 1 to 10 do

begin

if mas[i]<0 then counter:=counter+1;

end;

end.

2)

var mas: array[1..5] of integer = {.,.,}; // перечисление элементов массива, который дан по условию задания

var counter: integer;

begin

for i:= 1 to 5 do

begin

if (mas[i]>0) and (i mod 2 = 0) then counter:=counter+1;

end;

end.

3)

var mas: array[1..15] of integer = {.,.,}; // перечисление элементов массива, который дан по условию задания

var counter: integer;

begin

for i:= 1 to 15 do

begin

if (mas[i]>5) and (i mod 2 = 0) then counter:=counter+1;

end;

end.

4)

var mas: array[1..15] of integer;

var counter: integer;

begin

for i:= 1 to 15 do

begin

mas[i] = random(20) - 5;

end;

for i:= 1 to 15 do

begin

writeln(mas[i]);

end;

for i:= 1 to 15 do

begin

if (mas[i]>0) then counter:=counter+1;

end;

end.

5)

var mas: array[1..7] of real = {.,.,}; // перечисление элементов массива, который дан по условию задания

var counter: integer;

begin

for i:= 1 to 7 do

begin

readln(mas[i]);

end;

for i:= 1 to 7 do

begin

if mas[i]>0 then mas[i]=0;

end;

for i:= 1 to 7 do

begin

writeln(mas[i]);

end;

end.

6)

var mas: array[1..10] of real = {.,.,}; // перечисление элементов массива, который дан по условию задания

var counter: integer;

var sum: real;

var average: real;

begin

for i:= 1 to 7 do

begin

readln(mas[i]);

end;

for i:= 1 to 7 do

begin

if mas[i]<0 then

begin

sum:=sum+mas[i];

counter:=counter+1;

end

end;

average:= sum/counter;

end.

Объяснение:

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота