Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2022, 09:37   #1
T4UV0R
 
Регистрация: 27.03.2022
Сообщений: 5
По умолчанию C++,ничего не выводит

Вот код:
Код:
#include<iostream>
#include<cmath>
using namespace std;
 
double f(double x, double A)
{
    return (3*sin(pow(x,1/2))+A*x-3,8 ); 
}
 
int main()
{
    float a, b, x, A, eps, fx, fb;
   
    a = 0;
    b = 1;
    A = 0,2;
    x = a;
    eps =2,2985 ;
        fb = f(b, A);
    while(abs(b-a) >= eps)
    {
        
        
        x = (a+b)/2;
        fx = f(x, A);
        
        if(fx*fb < 0)
          a = x;
        else 
          b = x;
        cout << "A = " << A << " x = " << x << "\n";
        
        cout<<" y = " << f(x, A) << "\n";
    }

}
При компиляции выводится пустая строка
Вот задание:
Изображения
Тип файла: jpg Screenshot_2022-04-18-09-37-10-90_e2d5b3f32b79de1d45acd1fad96fbb0f.jpg (67.7 Кб, 20 просмотров)

Последний раз редактировалось BDA; 19.04.2022 в 06:58.
T4UV0R вне форума Ответить с цитированием
Старый 18.04.2022, 11:46   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,555
По умолчанию

Не надо употреблять слов, которых не знаешь. Компиляция - это разбор исходника и генерация на основе его исполняемого кода - .exe . При этом может выводиться сообщение об ошибке или об успешном выполнении.
То, что выводится (или не выводится) при запуске программы - это уже результат работы не компилятора, а этой самой изваянной программы.
Что до сути - тут вижу бредово-огромный епсилон, превышающий весь диапазон от а до b. Введённые значения никак не соответствуют заданию.
Я не уверен, что переменные А и а будут восприниматься по разному. Не нужно таких трюков, букв в латинском алфавите достаточно.
Переделать и предъявить!
--------------------------
BDA уже говорил в предыдущей теме: надо при оформлении проги выделять отступами соответствующие фрагменты кода и при публикации - выделять тегами CODE текст исходника, а то такое "полотенце" читать никакого желания. Посмотри, как это сделано у других.

Последний раз редактировалось digitalis; 18.04.2022 в 12:05.
digitalis вне форума Ответить с цитированием
Старый 18.04.2022, 12:02   #3
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

1. Ничего прога не выводит, потому что условие цикла не выолняется 1 < 2.2985
2. 2.2985 - это не погрешность, не эпсилон, а начальное приближение
ForenLi вне форума Ответить с цитированием
Старый 18.04.2022, 12:27   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,555
По умолчанию

А вообще само задание, по-моему, сляпано по-идиотски (пардон, преподы)
Если А в диапазоне и с шагом, то надо найти этих корней 20 штук - для каждого А. Причём для А=0.2, к примеру, оно очень далеко от т.нз. "первого приближения" (х=30.0). Не задан интервал локализации корня - что нам это первое приближение? Так бы взяли серёдку интервала - и пошли чесать пополам.
Насчёт ёпсилона я ему так и сказал.

Последний раз редактировалось digitalis; 18.04.2022 в 13:45.
digitalis вне форума Ответить с цитированием
Старый 18.04.2022, 22:21   #5
T4UV0R
 
Регистрация: 27.03.2022
Сообщений: 5
По умолчанию

Ка не смешно но мне поменяли задание
Вот что получилось:
Код:
#include<iostream>
#include<cmath>
using namespace std;
 
double f(double x, double A)
{
    return (sin(pow(x,2))+cos (pow(x,2))-A*x ); 
}
 
int main()
{
    float a, b, x, A, eps, fx, fb;
   
   cout << " Enter a,b\n";
		cout << "Start a=";
		cin >> a;
		cout << "End b=";
		cin >> b;
    A = 5;
    x = a;
    eps = 0.01 ;
        fb = f(b, A);
    while(abs(b-a) >= eps)
    {
        
        
        x = (a+b)/2;
        fx = f(x, A);
        
        if(fx*fb < 0)
          a = x;
        else 
          b = x;
        cout << "A = " << A << " x = " << x << "\n";
        
        cout<<" y = " << f(x, A) << "\n";
    }

}
Задание под номером 6:
Изображения
Тип файла: png изображение_2022-04-18_222049041.png (60.2 Кб, 17 просмотров)
T4UV0R вне форума Ответить с цитированием
Старый 19.04.2022, 10:35   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,555
По умолчанию

Ну тут всё то же, что в предыдущем примере: кроме решения уравнения относительно х меняется параметр А. И <=10, >=5 - это не интервал локализации корня, а именно параметр, принимающий значения 5,6...10. Т.е. нужно 6 раз решить это уравнение, будет 6 разных значений корня. Нужен внешний цикл. И "начальное приближение" тут - как зайцу астролябия.
Интересно - сами преподы имеют представление о том, чего хотят?

Последний раз редактировалось digitalis; 19.04.2022 в 10:38.
digitalis вне форума Ответить с цитированием
Старый 19.04.2022, 11:05   #7
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
И "начальное приближение" тут - как зайцу астролябия.
Интересно - сами преподы имеют представление о том, чего хотят?
Скорее всего эта табличка на кучку методов. И в некоторых приближение играет смысл.
ForenLi вне форума Ответить с цитированием
Старый 19.04.2022, 11:32   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,555
По умолчанию

Когда известен интервал, на котором пасётся этот корень, то при дихотомии какое тут приближение: нашёл значение функции на краях, а там - пополам, пополам... До результата. Разве что если м. Ньютона...
digitalis вне форума Ответить с цитированием
Старый 19.04.2022, 11:44   #9
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Когда известен интервал
Что не факт. В задании ни слова о нем. ТС его, конечно, вводит, но хз... может там есть вариант с вводом только длины интервала и его надо строить от приближения. Или интервал надо самому построить от приближения далая +/- и провряя знаки.

Цитата:
Сообщение от digitalis Посмотреть сообщение
Разве что если м. Ньютона...
Ну там есть еще несколько методов с приближениями.
ForenLi вне форума Ответить с цитированием
Старый 19.04.2022, 11:55   #10
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,555
По умолчанию

Открою студенту страшную гостайну: для А=5 корень где-то вроде 0.2, 6 -> 0.18, 7 -> 0.15, 8 -> 0.13, 9 -> 0.12, 10 -> 0.1,
Расчёт тут простой: синус+косинус в первом квадранте = 1..2,43. Значит, А*х д.быть где-то близко. Поэтому просматриваем от 0 до 0.2 - дальше не надо.
Код править мне лень, и так сказал уже слишком много приближение прикинул а Ёкселе.
Цитата:
В задании ни слова о нем.
И не надо. Но значение функции на краях интервала - это основа метода половинного деления. А заданное "первое приближение" идёт лесом, оно лежит вне интервала.
Я уже задолбался повторять, что учебные задания иногда бывают настолько идиотскими, что не знаешь - помогать решить или матом выругаться.
--------------------------
PS А интересно - что у студента выдало второе cout ?
У меня, к примеру, ход решения :

5
0,000000 1,000000
0,250000 -0,189493
==
0,125000 0,390502
0,187500 0,097031
0,218750 -0,047061
0,203125 0,024772
0,210938 -0,011197
0,207031 0,006774
0,208984 -0,002215
0,208008 0,002279
0,208496
6
0,000000 1,000000
0,250000 -0,439493
==
0,125000 0,265502
0,187500 -0,090469
0,156250 0,086614
0,171875 -0,002150
0,164063 0,042176
0,167969 0,019999
0,169922 0,008921
0,170898 0,003385
0,171387
7
0,000000 1,000000
0,250000 -0,689493
==
0,125000 0,140502
0,187500 -0,277969
0,156250 -0,069636
0,140625 0,035204
0,148438 -0,017273
0,144531 0,008951
0,146484 -0,004165
0,145508 0,002392
0,145996
8
0,000000 1,000000
0,250000 -0,939493
==
0,125000 0,015502
0,187500 -0,465469
0,156250 -0,225886
0,140625 -0,105421
0,132813 -0,045017
0,128906 -0,014772
0,126953 0,000362
0,127930 -0,007206
0,127441
9
0,000000 1,000000
0,250000 -1,189493
==
0,125000 -0,109498
0,062500 0,441399
0,093750 0,165000
0,109375 0,027516
0,117188 -0,041049
0,113281 -0,006781
0,111328 0,010364
0,112305 0,001790
0,112793
10
0,000000 1,000000
0,250000 -1,439493
==
0,125000 -0,234498
0,062500 0,378899
0,093750 0,071250
0,109375 -0,081859
0,101563 -0,005363
0,097656 0,032929
0,099609 0,013779
0,100586 0,004207
0,101074

На Дельфи это выглядит как-то так:

Код:
procedure TForm1.Button3Click(Sender: TObject);
var x,x1,x2,y,y1,y2,t: Extended ;
function fun5(arg : Extended) : Extended ;
   begin
      t := arg*arg ;
      fun5 := Sin(t) + Cos(t) - AA * Arg
   end;

begin
   Memo1.Lines.Add(IntToStr(AA));
   x1 := 0 ; x2 := 0.25 ;
   y1 := fun5(x1) ;
   Memo1.Lines.Add(Format('%8.6f %8.6f',[x1,y1]));
   y2 := fun5(x2) ;
   Memo1.Lines.Add(Format('%8.6f %8.6f',[x2,y2]));
   Memo1.Lines.Add('==');
   while (x2-x1) > 0.001 do
     begin
       x:=(x1+x2)/2 ;
       y := fun5(x) ;
       Memo1.Lines.Add(Format(' %8.6f %8.6f ',[x,y]));
       if ((y>0) and (y1>0)) or ((y<0) and (y1<0))
          then x1 := x else x2:= x
     end;
   Memo1.Lines.Add(Format('%8.6f',[(x1+x2)/2]));
   Inc (AA) ;
end;

Последний раз редактировалось digitalis; 19.04.2022 в 13:14.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Pascal] После ввода входных данных программа ничего не выводит, хотя дальнейшие инструкции имеются. LinaMin Помощь студентам 3 19.10.2017 19:40
Не выводит на экран ничего marysluva Помощь студентам 10 26.12.2016 19:39
программа очень простая, но у меня вылазит ошибка при запуске и ничего на экран не выводит nati_94 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 25.03.2013 01:20
с++как вывести указатель структуры на экран????? а то все время что-нибудь подчеркивает или просто ничего не выводит(((( nati_94 Помощь студентам 2 20.02.2013 00:14
Меняю знак не выводит ничего (Pascal) k4k7u3 Помощь студентам 3 19.04.2012 18:15