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

Неправильно работает код - C++

Восстановить пароль Регистрация
 
big_vitaliy
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 4
01.07.2012, 16:08     Неправильно работает код #1
Вот ссылка на код
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
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
cout<<"Введите число "<<endl;
int n,k=3;
double x1=1,x2=2,x3=1.6667;
cin>>n;
if(n>1)
{cout<<"К равно 2"<<endl;
cout<<"Первое число равно 2 "<<endl;
cout<<"Второе число равно 1";}
if(n>=0.3333 && n<=1)
{cout<<"К равно3 "<<endl;
cout<<"Первое число равно 1.6667 "<<endl;
cout<<"Второе число равно 2";}
 else
{ while(abs(x3-x2)<=n)
{x1=x2;
x2=x3;
x3=(x1+2*x2)/3;
k++;        }
cout<<"К равно "<<k<<endl;
cout<<"Первое число равно "<<x3<<endl;
cout<<"Второе число равно"<<x2;
    
    }
    cin.get();
    cin.get();
}
вот задание Дано вещественное число ε (> 0). Последовательность вещественных
чисел AK определяется следующим образом:
A1 = 1, A2 = 2, AK = (AK−2 + 2·AK−1)/3, K = 3, 4, .
Найти первый из номеров K, для которых выполняется условие
|AK − AK−1| < ε, и вывести этот номер, а также числа AK−1 и AK.
код при маленьких значения Н или просто закрывается само окно или выводит неверный результат
там переменная Н типа double
ЗАРАНЕЕ СПАСИБО!!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
01.07.2012, 17:28     Неправильно работает код #2
C++
1
2
3
4
5
6
7
8
int n,k=3;
double x1=1,x2=2,x3=1.6667;
cin>>n;
if(n>1)
{cout<<"К равно 2"<<endl;
cout<<"Первое число равно 2 "<<endl;
cout<<"Второе число равно 1";}
if(n>=0.3333 && n<=1)
n определена как int,она не может быть 0.3333,нулём,единицей-да,но не дробным значением
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2012, 12:18     Неправильно работает код #3
Цитата Сообщение от big_vitaliy Посмотреть сообщение
или просто закрывается само окно
Для начала, чтобы cin.get() в конце программы работал (после ошибки ввода в cin >>), добавьте перед return 0 (который должен быть, ведь в коде main() возвращает int) такую конструкцию:
C++
1
2
3
4
5
cin.clear();
    while (cin.get() != '\n');
    
    cin.get();
    return 0;
или вместо cin.get() используйте system("pause");
Закрытие окна у вас происходит при ошибке ввода в cin >>. После этого cin.get() уже не работает.

Добавлено через 40 минут
В таком коде:
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
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
cout<<"Введите число "<<endl;
double n;
int k=3;
double x1=1,x2=2,x3=1.6667;
cin>>n;
if(n>1)
{cout<<"К равно 2"<<endl;
cout<<"Первое число равно 2 "<<endl;
cout<<"Второе число равно 1";}
if(n>=0.3333 && n<=1)
{cout<<"К равно3 "<<endl;
cout<<"Первое число равно 1.6667 "<<endl;
cout<<"Второе число равно 2";}
 else
{ while(abs(x3-x2)<=n)
{x1=x2;
x2=x3;
x3=(x1+2*x2)/3;
k++;        }
cout<<"К равно "<<k<<endl;
cout<<"Первое число равно "<<x3<<endl;
cout<<"Второе число равно"<<x2;
    
    }
    cin.clear();
    while (cin.get() != '\n');
    cin.get();
    
    return 0;
}
, если вводится число n > 1, будет заход в тело первого if. После выхода из него, будет проверка во втором if, и, так как условие не выполняется, то произойдёт заход в else (что, как я понимаю, при n > 1 не должно быть) и зависание там. Чтобы этого не было, нужно написать так:
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
cout << "Введите число "<<endl;
double n;
int k = 3;
double x1 = 1, x2 = 2, x3 = 1.6667;
cin >> n;
if(n > 1)
{
    cout << "К равно 2" << endl;
    cout << "Первое число равно 2 " << endl;
    cout << "Второе число равно 1";
}
if (n >= 0.3333 && n <= 1)
{
    cout << "К равно3 " << endl;
    cout << "Первое число равно 1.6667 " << endl;
    cout << "Второе число равно 2";
}
if (n < 0.3333)
{ 
 while (abs(x3 - x2) <= n)
 {
    x1 = x2;
    x2 = x3;
    x3 = (x1 + 2 * x2) / 3;
    k++;
 }
cout << "К равно " << k << endl;
cout << "Первое число равно " << x3 << endl;
cout << "Второе число равно " << x2;
}
    cin.clear();
    while (cin.get() != '\n');
    cin.get();
    
    return 0;
}
Добавлено через 40 минут
abs(x3 - x2) = 0.3333 . Если написано так:
C++
1
2
3
4
if (n < 0.3333)
{ 
 while (abs(x3 - x2) <= n)
{...}
, то цикл while, который, по идее, должен работать, если вводится n < 0.3333, не сработает ни разу. Может нужно было так написать:
C++
1
while (abs(x3 - x2) >= n)
Добавлено через 1 час 40 минут
Само задание можно нормально написать. Из этого :
вот задание Дано вещественное число ε (> 0). Последовательность вещественных
чисел AK определяется следующим образом:
A1 = 1, A2 = 2, AK = (AK−2 + 2·AK−1)/3, K = 3, 4, .
Найти первый из номеров K, для которых выполняется условие
|AK − AK−1| < ε, и вывести этот номер, а также числа AK−1 и AK.
код при маленьких значения Н или просто закрывается само окно или выводит неверный результат
там переменная Н типа double
ЗАРАНЕЕ СПАСИБО!!!!
ничего не понять. Какое H? Где оно в коде? Эпсилон - в коде это что? Сама последовательность как пишется? АК - 1 как понимать: А уменьшается на 1 или К уменьшается на 1. Если тудно написать, то скрин, или ссылку, где правильно написано.

Добавлено через 1 час 53 минуты
Этот код должен быть правильным:
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
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
cout << "Введите число n > 0 "<< endl;
double n;
int k = 3;
double x1 = 1, x2 = 2, x3 = 1.6667;
cin >> n;
if(n > 1)
{
    cout << "К равно 2" << endl;
    cout << "Первое число равно 1 " << endl;
    cout << "Второе число равно 2";
}
if (n >= 0.3333 && n <= 1)
{
    cout << "К равно 3 " << endl;
    cout << "Первое число равно 2" << endl;
    cout << "Второе число равно 1.6667";
}
if (n < 0.3333)
{ 
  while (abs(x3 - x2) >= n)
  {
     x1 = x2;
     x2 = x3;
     x3 = (x1 + 2 * x2) / 3;
     k++;
  }
cout << "К равно " << k << endl;
cout << "Первое число равно " << x2 << endl;
cout << "Второе число равно " << x3;
}
    cin.clear();
    while (cin.get() != '\n');
    cin.get();
    
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
02.07.2012, 13:17     Неправильно работает код #4
big_vitaliy, см код ниже
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
#include <cmath>
#include <iostream>
using namespace std;
 
//ГђГ*Г±Г±Г·ВёГІ ГЄ-ГЈГ® Г§Г*Г*Г·ГҐГ*ГЁГї
double calcAK(double AK_1, double AK_2)
{
    return (AK_2 + 2*AK_1)/3;
}
 
int main()
{
    
    double e;
    double AK_1 = 2;
    double AK_2 = 1;
    double AK   = calcAK(AK_1, AK_2);
    cout<<"Enter e : ";
    //Г‡Г*Г№ГЁГ№ВёГ*Г*ûé ââîä
    if(!(cin>>e) || cin.get() != '\n')
    {
        cin.clear();//Г±ГЎГ*ðñûâГ*ГҐГ¬ ГґГ«Г*ГЈ îøèáêè
        cin.sync();//î÷èøГ*ГҐГ¬ ГЎГіГґГҐГ° ââîäГ*
        cout<<"Bad input\n";
    }
    else
    {
        while(e < fabs(AK - AK_1))
        {
            AK_2 = AK_1;
            AK_1 = AK;
            AK   = calcAK(AK_1, AK_2);
        }
        cout<<"AK - 1 : "<<AK_1<<endl;
        cout<<"AK     : "<<AK  <<endl;
    }
    system("pause");
    return 0;
}
Миниатюры
Неправильно работает код  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2012, 13:36     Неправильно работает код #5
-=ЮрА=-, ваш код одно условие задания не выполняет: K не выводит.
-=ЮрА=-
Заблокирован
Автор FAQ
02.07.2012, 14:29     Неправильно работает код #6
Цитата Сообщение от alsav22 Посмотреть сообщение
-=ЮрА=-, ваш код одно условие задания не выполняет: K не выводит.
- возможно я не до конца вчитался в задание, так это совсем просто - вводим счётчик в while
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(e < fabs(AK - AK_1))
и всё
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2012, 14:38     Неправильно работает код
Еще ссылки по теме:

Неправильно написан код C++
Вставка слова в строку (неправильно работает код) C++
Условие работает неправильно C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
02.07.2012, 14:38     Неправильно работает код #7
Что же думаю код ниже уже ни у кого не вызовет претензий
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
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
//ГђГ*Г±Г±Г·ВёГІ ГЄ-ГЈГ® Г§Г*Г*Г·ГҐГ*ГЁГї
double calcAK(double AK_1, double AK_2)
{
    return (AK_2 + 2*AK_1)/3;
}
 
int main()
{
    long   k;//Г*Г*Гё Г±Г·ВёГІГ·ГЁГЄ ГЁГІГҐГ°Г*öèé
    double e;
    double AK_1 = 2;
    double AK_2 = 1;
    double AK   = calcAK(AK_1, AK_2);
    int iContinue = 1;//ÔëГ*ГЈ ïðîäîëæåГ*ГЁГї ââîäГ*
    while(iContinue != 0)
    {
        cout<<"Enter e : ";
        //Г‡Г*Г№ГЁГ№ВёГ*Г*ûé ââîä
        if(!(cin>>e) || cin.get() != '\n')
        {
            cin.clear();//Г±ГЎГ*ðñûâГ*ГҐГ¬ ГґГ«Г*ГЈ îøèáêè
            cin.sync();//î÷èøГ*ГҐГ¬ ГЎГіГґГҐГ° ââîäГ*
            cout<<"Bad input\n";
        }
        else
        {
            for(k = 3; e < fabs(AK - AK_1); k++)
            {
                AK_2 = AK_1;
                AK_1 = AK;
                AK   = calcAK(AK_1, AK_2);
            }
            cout<<"k      : "<<k   <<endl;
            cout<<"AK - 1 : "<<setprecision(10)<<AK_1<<endl;
            cout<<"AK     : "<<setprecision(10)<<AK  <<endl;
        }
        cout<<"Enter 0 for exit\n";
        cin>>iContinue;
    }
    return 0;
}
Миниатюры
Неправильно работает код  
Yandex
Объявления
02.07.2012, 14:38     Неправильно работает код
Ответ Создать тему
Опции темы

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