Форум программистов, компьютерный форум CyberForum.ru

Решение уравнения. Чтение из файла значений и запись результатов в файл - C++

Восстановить пароль Регистрация
 
Fazer77777
 Аватар для Fazer77777
3 / 3 / 0
Регистрация: 29.06.2012
Сообщений: 45
22.05.2014, 16:20     Решение уравнения. Чтение из файла значений и запись результатов в файл #1
Здравствуйте!) Нужна программка, считывающая из файла не целые значения S11 через пробел, и подставляющая заданные значения S11 в уравнение с одним неизвестным Y1pr, и выводящая также через пробел в выходной файл результаты решения.
Уравнение выглядит так:
http://www.cyberforum.ru/cgi-bin/latex.cgi?S11=(Y0-Y1pr)/(Y0+Y1pr)
Y0=1/50. Найти Y1pr.

Значений S11 более 10.000. Давно не практиковался, заголовок набросал, дальше не идёт)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <math.h>
#include <cstdlib>
#include <cstdio>
#include <fstream>
#include <string>
 
using namespace std;
 
int main()
{
    double Y0 = 1/50, S11;
    double Y1pr;
 
 
    std::ifstream input("input.txt");
    std::ofstream output("output.txt");
    if(input && output)
      {
Помогите с программкой)

Добавлено через 4 часа 12 минут
Неужели никто не подскажет?
Часть программы написал:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <math.h>
#include <cstdlib>
#include <cstdio>
#include <fstream>
#include <string>
#include <sstream>
 
using namespace std;
 
int main()
{
    double Y0 = 0.02;
    double Y1pr;
    double S11;
 
    ifstream input("input.txt");
    ofstream output("output.txt");
    
 
    if(input && output)
    {
        string s;
        for(std::size_t i = 0; getline(input, s); ++i)
        {
            istringstream convert(s);
            convert>>S11;
            Ypr= Y0 - S11*Y0 - S11*Y1pr;
            output << Y1pr << "\n";
        }
    }
    
  input.close();
  output.close();
  return 0;
}
Но проблема с самим уравнением. "Ошибка: Ypr: необъявленный идентификатор"
Разбиение:
C++
1
2
Y1pr+= S11*Y1pr;   
Ypr= Y0 - S11*Y0 - Y1pr;
тоже ничего не дало.
Подскажите как правильно записать уравнение?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2014, 16:20     Решение уравнения. Чтение из файла значений и запись результатов в файл
Посмотрите здесь:

C++ запись в файл и чтение из файла
чтение из файла и запись в файл. C++
запись в файл и чтение из файла C++
Запись в файл, чтение из файла C++
Чтение из файла/Запись в файл C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
22.05.2014, 16:30     Решение уравнения. Чтение из файла значений и запись результатов в файл #2
У Вас S11=Y0*Y0-Y1pr*Y1pr
отсюда
C++
1
Y1pr=sqrt(S11-Y0*Y0);
Fazer77777
 Аватар для Fazer77777
3 / 3 / 0
Регистрация: 29.06.2012
Сообщений: 45
22.05.2014, 17:04  [ТС]     Решение уравнения. Чтение из файла значений и запись результатов в файл #3
zss, не соображу как вы преобразовали. Не работает с отрицательными числами. Мой входной файл такого вида:
C++
1
2
3
4
5
-0.4900  
-0.4901  
-0.4903  
-0.4905  
-0.4909
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
22.05.2014, 18:08     Решение уравнения. Чтение из файла значений и запись результатов в файл #4
Цитата Сообщение от Fazer77777 Посмотреть сообщение
double Y0 = 1/50
Y0 получится равным НУЛЮ (догадайтесь из 3 раз почему).
А формула получается раскрытием скобок.
Fazer77777
 Аватар для Fazer77777
3 / 3 / 0
Регистрация: 29.06.2012
Сообщений: 45
22.05.2014, 21:56  [ТС]     Решение уравнения. Чтение из файла значений и запись результатов в файл #5
Спасибо, конечно, что помогаете, но давайте без угадываний) Каким образом Y=0? Объясните по-подробнее) Мои преобразования выглядят так:

http://www.cyberforum.ru/cgi-bin/latex.cgi?S11*(Y0+Y1) = Y0-Y1
http://www.cyberforum.ru/cgi-bin/latex.cgi?S11*Y0 + S11*Y1 = Y0 - Y1
http://www.cyberforum.ru/cgi-bin/latex.cgi?S11*Y0 - Y0 = -Y1 - S11*Y1
http://www.cyberforum.ru/cgi-bin/latex.cgi?Y1 + S11*Y1 = Y0 - S11*Y0.

http://www.cyberforum.ru/cgi-bin/latex.cgi?S11 = -0.4901
http://www.cyberforum.ru/cgi-bin/latex.cgi?Y0 - S11*Y0 = 0.02-(-0.4901)*0.02 = 0.0298
http://www.cyberforum.ru/cgi-bin/latex.cgi?Y1 + (-0.4901)*Y1 = 0.5099*Y1
http://www.cyberforum.ru/cgi-bin/latex.cgi?0.5099*Y1 = 0.0298
http://www.cyberforum.ru/cgi-bin/latex.cgi?Y1 = 0.0298/0.5099 = 0.0584

При вашем решении получается выходной файл вида:
Код
-1.#IND
-1.#IND
-1.#IND
-1.#IND
-1.#IND
При положительном S11 = 0.4901.

Моим ручным решением выходит:
Y1 = 0.0068

При вашем решении получается другое значение:
Y1 = 0.699786

Что-то вы похоже путаете. Разъясните на пальцах, если я неправ. И что делать с отрицательными S11?

Добавлено через 1 минуту
При решении вашего уравнения ручным способом ответ такой:
Y1= sqrt(S11-0.02*0.02)=0.7004*i
Yandex
Объявления
22.05.2014, 21:56     Решение уравнения. Чтение из файла значений и запись результатов в файл
Ответ Создать тему
Опции темы

Текущее время: 07:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru