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

Наше любимое квадратное уравнение(или возвращение в школу) - C++

Восстановить пароль Регистрация
 
Psychoman
0 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 39
26.01.2013, 18:36     Наше любимое квадратное уравнение(или возвращение в школу) #1
Здраствуйте, недавно начал учить с++ и дошел до того ,что смог написать решение квадратного уравнения(ну практически).Сталась такая штука ,что возникли 2 проблемы,конечно не с логикой квадратного уравнения ,а с самим синтаксисом с++.Вот то что я написал:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include  <cmath>
using namespace std;
inline void keep_window_open() {char ch;cin>>ch;} 
 
int _tmain(int argc, _TCHAR* argv[])
  {   char c = ' ';vector<double> result;
      for(int i = 0; i<1000;++i) {
          //Coeficients for sqr equation
      double a,b,c;
      cout <<"Enter coef a before x^2: "; 
      cin>>a;
      cout <<endl;
      cout <<"Enter coef b before x: ";
      cin>>b;
      cout << endl;
      cout <<"Enter coef c (free coef): ";
      cin>>c;
      cout << endl;
 
      // Looks of sqr equation for different coeficients
      if (b>=0 && c>=0)
          cout << "Your equation looks like: "<<a<<"x^2+"<<b<<"x+"<<c<<"=0"<<endl;
      if (b<0 && c>=0)
          cout << "Your equation looks like: "<<a<<"x^2"<<b<<"x+"<<c<<"=0"<<endl;
      if (b>=0 && c<0)
          cout << "Your equation looks like: "<<a<<"x^2+"<<b<<"x"<<c<<"=0"<<endl;
      if (b<0 && c<0)
          cout << "Your equation looks like: "<<a<<"x^2"<<b<<"x"<<c<<"=0"<<endl; 
 
      //Function that solves the equation
      result=equating_sqr_equation(a,b,c);
 
      //Printing results
      for(int i = 0;i<result.size();i++) {
       cout<<"First solution: "<<result[0]<<endl;
       cout<<"Second solution: "<<result[1]<<endl;
      }
      //Continue work
      cout <<"Continue equating ? ";
      cin >> c;
       cout << endl;
       if(c == 'n') break;
        }
      }
/**
     Function for solving sqr equations
*/
 vector<double> equating_sqr_equation(double a,double b,double c) {
      double x1=0,x2=0,x=0;vector<double> result;
      //Variants of equation
      if (a == 0) { 
          x = -c/b;
          result.push_back(x);
          return result; }
      if (b == 0 && c>0) {
          result.push_back(-9999999);
          return result; }     // mistake
      if (b == 0 && c<0) {
          x = sqrt(c);
          result.push_back(x);
          return result; }
      //Mostly main situation
        try {
         x1 = (-b+sqrt(pow(b,2)-4*a*c))/(2*a);
         x2 = (-b-sqrt(pow(b,2)-4*a*c))/(2*a);
         result.push_back(x1);
         result.push_back(x2);
         return result;
      } catch(exception& e ) {
         cout << "b^2-4ac < 0 - no solutions";
         keep_window_open();
         result.push_back(-999999);
         return result; //mistake
      }
 }
Так от чего я добился от компилятора это 2 ошибки, 1 это нельзя присваевать вектору функцию,которая возвращает вектор(или же я неправильно написал) , я это написал поскольку java позволяла это делать , только там количество элементов в массиве зафиксировано на этапе компиляции, а здесь без понятия.Эту ошибку выдает именно эта строка "result=equating_sqr_equation(a,b,c);",вот в чем 1 вопрос.2 вопрос в том ,что я еще сам не догадался в чем причина ,но когда я только написал ввод данных и повтор по символу либо заканчивание программы , программа компилируется нормально ,только от при повторном использовании или заканчивании программы она просто зацикливалася и выводила все cout в цикле .Почему?Я не знаю.Спасибо за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2013, 18:36     Наше любимое квадратное уравнение(или возвращение в школу)
Посмотрите здесь:

Квадратное уравнение C++
Квадратное уравнение C++
C++ Квадратное уравнение
Квадратное уравнение C++
Квадратное уравнение C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
26.01.2013, 19:47     Наше любимое квадратное уравнение(или возвращение в школу) #2
все компилируется, если функцию equating_sqr_equation объявить перед main:
C++
1
2
3
vector<double> equating_sqr_equation(double a,double b,double c);
 
int _tmain(int argc, char* argv[])
А по второму вопросу напишите более внятно. Абсолютно ничего не понятно.

Добавлено через 15 минут
еще в функции море ошибок:
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
37
38
39
 vector<double> equating_sqr_equation(double a,double b,double c) 
 {
      double x1=0,x2=0,x=0;vector<double> result;
      //Variants of equation
      if (a == 0) 
      { 
          if(b!=0) 
             x = -c/b; // 0*x^2+bx+c=0
          else
             x=-9999999; // 0*x^2+0*x+c=0 нет решения
          result.push_back(x);
          return result; 
      }
      if (b == 0 && c>0) // a*x^2+0*x+c=0 при с>0 нет решения
      {
          result.push_back(-9999999);
          return result; 
      }     // mistake
      if (b == 0 && c<0)
      {
          x = sqrt(-c/a);     // a*x^2+0*x=-c или x^2=-c/a
          result.push_back(x);
          result.push_back(-x); // !!!! два корня
          return result; 
      }
      //Mostly main situation
        try {
         x1 = (-b+sqrt(b*b-4.*a*c))/(2.*a);
         x2 = (-b-sqrt(b*b-4.*a*c))/(2.*a);
         result.push_back(x1);
         result.push_back(x2);
         return result;
      } catch(exception& e ) {
         cout << "b^2-4ac < 0 - no solutions";
         keep_window_open();
         result.push_back(-999999);
         return result; //mistake
      }
 }
Psychoman
0 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 39
26.01.2013, 20:41  [ТС]     Наше любимое квадратное уравнение(или возвращение в школу) #3
Да,спасибо на счет функции, упустил я несколько моментов.Подправил.Можете обьяснить в чем разница,что функция сверху мейна или снизу?И на счет 2 вопроса: при компиляции 1 раз ввожу значение ,получаю результат ,все хорошо;при 2 разе не зависимо от того какой символ я напишу, программа зацикливается в while и просто выводит все выводные потоки без значений до того времени ,пока окно просто не закрыть.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
27.01.2013, 16:32     Наше любимое квадратное уравнение(или возвращение в школу) #4
1. Чтобы функция была известна компилятору ее надо объявить до того, как вызываем.
2.
C++
1
2
3
4
cout <<"Continue equating ? ";
      cin >> c;
       cout << endl;
       if(c == 'n') break;
В переменную с записывается текущий символ из входного потока.
А им является Enter от предыдущего ввода.
Советую использовать низкоуровневую функцию
c=getche();
определенную в <conio.h>
Yandex
Объявления
27.01.2013, 16:32     Наше любимое квадратное уравнение(или возвращение в школу)
Ответ Создать тему
Опции темы

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