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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
#1

Зацикливание + вопрос об огородах - C++

27.04.2011, 17:08. Просмотров 368. Ответов 3
Метки нет (Все метки)

Здравствуйте. Написал программу, которая решает квадратные уравнения.

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#include <conio.h>    //
                      //
#include <iostream>   // 
using namespace std;  //
                      //
#include <math.h>     //                  
////////////////////////
 
int main ()
{
    cout << "Hi! Thank you for using this application!" << endl;
    cout << "_________________________________________\n" << endl;
    
    // объявляем переменные
    double a;   // коэффициент А
    double b;   // коэффициент Б
    double c;   // коэффициент С
    double d;   // дискриминант
    double x1;  // первый икс
    double x2;  // второй икс
    double x;   // икс, для случаев, где на выходе имеем один ответ
    double y;   // корень из дискриминанта
    double ca;  // переменная с/а (строка 121)
    double xx;  // переменная (x * x (строка 127 и далее)) 
      
 
    // просим ввести коэффициенты
    cout << "\nEnter the first coefficient (a): ";
    cin >> a;
    
    cout << "Enter the second coefficient (b): ";
    cin >> b;
    
    cout << "Enter the third coefficient (c): ";
    cin >> c;
    
    // показываем, какое уравнение получилось
    // при различных коэффициентах (сравниваем с нулём)
    if ( a > 0 && b > 0 && c > 0 )
       cout << "\nYour equation is: " << a << "x^2 + " << b << "x + " << c
            << " = 0" << endl;
    
    if ( a < 0 && b < 0 && c < 0 )
       cout << "\nYour equation is: " << a << "x^2 - " << -b << "x - " << -c
            << " = 0" << endl;
            
    if ( a < 0 && b > 0 && c > 0 )
       cout << "\nYour equation is: " << a << "x^2 + " << b << "x + " << c
       << " = 0" << endl;
       
    if ( a > 0 && b < 0 && c > 0 )
       cout << "\nYour equation is: " << a << "x^2 - " << -b << "x + " << c
       << " = 0" << endl;
       
    if ( a > 0 && b > 0 && c < 0 )
       cout << "\nYour equation is: " << a << "x^2 + " << b << "x - " << -c
       << " = 0" << endl;
       
    if ( a < 0 && b < 0 && c > 0 )
       cout << "\nYour equation is: " << a << "x^2 - " << -b << "x + " << c
       << " = 0" << endl;
       
    if ( a > 0 && b < 0 && c < 0 )
       cout << "\nYour equation is: " << a << "x^2 - " << -b << "x - " << -c
       << " = 0" << endl;
       
    if ( a < 0 && b > 0 && c < 0 )
       cout << "\nYour equation is: " << a << "x^2 + " << b << "x - " << -c
            << " = 0" << endl;
    // сделали, идём дальше
 
 
    // предусматриваем случаи, когда коэффициенты равны нулю
        // если а = 0
    if ( a == 0 )
       cout << "\nThis is not quadratic equation!" << endl;
       
       // если б = 0 
    if ( b == 0 && c > 0 )
       cout << "\nYour eqution is: " << a << "x^2 + " << c << " = 0" << endl;
       
    if ( b == 0 && c < 0 )
       cout << "\nYour eqution is: " << a << "x^2 - " << -c << " = 0" << endl;
       
       // если с = 0
    if ( c == 0 && b > 0 )
       cout << "\nYour equation is: " << a << "x^2 + " << b << " = 0" << endl;
       
    if ( c == 0 && b < 0 )
       cout << "\nYour equation is: " << a << "x^2 - " << -b << " = 0" << endl;
 
      // если и б, и с = 0
    if ( a != 0 && b == 0 && c == 0 )
       cout << "\nI'm sorry, but " << a << " isn't 0!" << endl;
    // уравнение показали
    
    // решения для полного уравнения
    if ( a != 0 && b != 0 && c != 0 && d >= 0 )
      {
           // ищем дискриминант и выводим его
           d = (b * b) - (4 * a * c);
           cout << "Discriminant is: " << d << endl;
           
           // решение для дискриминанта < 0
           if ( d < 0 )
             cout << "\nEquation has no solution, because D < 0  :(" << endl;
           
           // решение для дискриминанта = 0
           if ( d == 0 )
            {
             x = -b / (2 * a);
            }
           
           // решения для дискриминанта > 0
           if ( d > 0 )
            {
             y = sqrt (d);   // корень из дискриминанта
             x1 = (-b - y) / (2 * a);
             x2 = (-b + y) / (2 * a);
             cout << "\nx1 is: " << x1 << endl;
             cout << "x2 is: " << x2 << endl;
            }
      }
      
    // для Б = 0 (уравнения вида ax^2 +- c = 0)
    if ( a != 0 && b == 0 && c != 0 && d >= 0 )
      {
           xx = -c / a;
           ca = -c/a;
           
           if (xx > 0)
             {
             x1 = -(sqrt (ca));
             x2 = (sqrt (ca));
             cout << "x1 is: " << x1 << endl;
             }
             
           if (xx < 0)
             cout << "\nI'm sorry, but your equation has no solution :( " << endl;
             
           if (xx == 0)
             cout << "\nx = 0" << endl;   
      }
      
      
    // решения для С = 0 (уравнения вида ax^2 +- bx = 0)
    if ( a != 0 && b != 0 && c == 0 && d != 0 )
      {
           cout << "\nx1 is: 0" << endl;
           
           x2 = (-b / a);
            cout << "x2 is: " << x2 << endl;
      }    
    // закончили!
    
    cout << "\n_________________________________________\n" << endl;
 
     
   getch ();
   return 0;
}
Если что, скачать уже скомпилированную можно [ссылка удалена]

Вопросы:
1. Много ли я ходил огородами при написании программы? Если да, то как можно было бы сделать проще?

2. Как сделать так, чтобы после выдачи ответа программа спрашивала, мол "Хотите выйти из приложения? (да/нет)", и если "нет", то опять просила бы вывести коэффициенты и т. д.? Желательно, используя оператор while (для циклов я пока только его знаю).

Заранее благодарен.

 Комментарий модератора 
Внимательно читаем правила!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2011, 17:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зацикливание + вопрос об огородах (C++):

Зацикливание - C++
Вобщем, проверял уже 100 раз. Думаю причина в моем неумении работать с файлами. Почти все переменные, объявленные в этой процедуре,...

Зацикливание - C++
Помогите разобраться while (point &gt;= min &amp;&amp; point &lt;= max || prodal &gt;= min &amp;&amp; prodal &lt;= max) { cin &gt;&gt; point; sobestoimostb = point...

зацикливание - C++
Не выдает нужного результата происходит зацыкливание // wer.cpp : Defines the entry point for the console application. // ...

зацикливание в C++ - C++
Подскажите, пожалуйста, как зациклить программу, чтобы при попытке набрать другой символ выдавалось сообщение с ошибкой и происходило...

Зацикливание - C++
помогите исправить ошибку пожалуйста! у меня зацикливается она! # include &quot;stdafx.h&quot; # include &lt;stdio.h&gt; #include &lt;time.h&gt; ...

Зацикливание - C++
Всем доброго времени суток. Написал прогу по определению кратности второго числа относительно первого. // Кратность второго числа по...

3
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
27.04.2011, 18:47 #2
Ну как то так, если вводишь 0 0 0 то выходит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <math.h>
main(){
    double a,b,c,d;
    while (true){
    std::cout << "Enter a,b,c(or 0 0 0 to exit)\n";
    std::cin >> a >> b >> c;
    if ((!a)&&(!b)&&(!c)) break;
    d=b*b-4*a*c;
    if (d<0) std::cout << "roots are missing\n";else
    if (!d) std::cout << "root = " << -b/2*a << "\n";else
    std::cout << "root1 = " << (-b+sqrt(d))/2*a << "\nroot2 = " << (-b-sqrt(d))/2*a << "\n";
    }
    return 0;
}
1
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
27.04.2011, 19:31  [ТС] #3
Спасибо, конечно, но мне надо, чтобы именно спрашивалось, "Хотите выйти? (y / n)".
Как такое реализовать?
0
sano
Сообщений: n/a
27.04.2011, 20:27 #4
чтобы сделать "Хотите выйти?" напиши так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool b=true;
char ok;
while(b)
{
 
          //вся твоя программа
 
          cout<<"Хотите выйти? (y / n)";
          cin>>ok;
          if(ok=='y') 
                       b=true;
          else
          if(ok=='n')  
                       b=false;
}
 
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2011, 20:27
Привет! Вот еще темы с ответами:

сделать зацикливание - C++
Всем привет, нужна помощь :).Шифр цезаря. Нужно сделать так, что бы например при сдвиге на 30, программа начинала сдвигать по новой, т.е....

Зацикливание Функции - C++
После подсчёта спрашивать : &quot;Повторить ? (y/n)&quot;, если &quot;y&quot; то в начала цикла с запросом сколько часов..если &quot;n&quot; то выход #include...

Scanf зацикливание - C++
Почему зацикливается при вводе символа? int a; while (scanf_s(&quot;%d&quot;, &amp;a) != EOF) { ... }

Зацикливание класса - C++
int readmass(char* file) { FILE *mass =fopen(file,&quot;r&quot;); if( mass==NULL) { cout&lt;&lt;&quot;Не возможно открыть файл&quot;&lt;&lt;endl; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
27.04.2011, 20:27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru