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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Артурик
0 / 0 / 0
Регистрация: 11.12.2009
Сообщений: 7
#1

Операторы цикла - C++

11.12.2009, 01:25. Просмотров 1460. Ответов 12
Метки нет (Все метки)

Друзья, помогите с задачкой. Я совсем начинающий, не могу допереть. Задание необходимо решить с помощью операторов повторения.
Миниатюры
Операторы цикла  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sayrus89
31 / 31 / 1
Регистрация: 26.10.2009
Сообщений: 98
11.12.2009, 03:04     Операторы цикла #2
Вот у меня код похожей программы на паскале (только функция другая), можешь проанализировать:
Pascal
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
Program Ryads;
Uses Crt;
Const MaxIter = 50; {max chislo iteraciy}
Var
done:boolean;
xn,xk,dx,x,y,eps,c:real;
k,I,n:integer;
Begin
 clrscr;
 Writeln('vvedite xn,xk,dx,E');
 Readln(xn,xk,dx,eps);
 Writeln('-----------------------------------------');
 Writeln('       tablica poluchennix znacheniy    ');
 Writeln('-----------------------------------------');
 Writeln('       -x-                -y-         -n-');
 x:=xn;
 K:=trunc((xk-xn)/dx)+1;
   For I:=1 to k do
     Begin
     c:=x; {perviy chlen ryada}
     y:=c; {nachalnoe znachenie argumenta}
     n:=0;
       While abs(c)>eps do
         Begin
         c:=c*(2*n+1)*(2*n+2)/(-1)/sqr(x);  {ocherednoi chlen ryada}
         n:=n+1;
         y:=y+c;
         If n>MaxIter then
           Begin
           Writeln('ryad rashoditsya!');
           done:=false;
           Break;
           End;
         End;
     Writeln(x,'  ',y,'   ',n);
     x:=x+dx;
     End;
 Writeln('-----------------------------------------');
 readln;
 End.
Артурик
0 / 0 / 0
Регистрация: 11.12.2009
Сообщений: 7
11.12.2009, 04:08  [ТС]     Операторы цикла #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
// 2.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    double x,epsil,y,s,f;
    int i,k;
    
    
    cout<<"vvedite x";
    cin>>x;
    cout<<"vvedite epsil";
    cin>>epsil;
    cin.get();
    
    do
    {
    
    y=0;
    s=0;
    f=1;
    
 
    for(i=1;i>1;i++)
    do
    {
        //for(k=1;k>1;k++)
        {
        f*=(2*i);
        }
            
 
            s=pow((-1.),i)*pow(x,2*i)/f;
            y=1+s;
            cout<<"y="<<y<<endl;
 
 
 
            cin.get();
 
     
    }while(fabs(x)<1);
    
    
    /*else
    cout<<"VY vveli nepraviljnyj x"<<endl;
    cin.get();
    */
 
    
    }while (y==epsil);
    cout<<"For continue--<Enter>, for exit-- any symbol and <Enter> \n";
    cin.get();
        
    
 
 
 
 
    return 0;
}
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.12.2009, 05:52     Операторы цикла #4
http://www.cyberforum.ru/search.php?searchid=622801
Артурик
0 / 0 / 0
Регистрация: 11.12.2009
Сообщений: 7
11.12.2009, 09:34  [ТС]     Операторы цикла #5
Ничего не понимаю. Друзья, помогите советом, кто знает в чем проблема. Программа не хочет считать, у меня уже никаких идей нет.
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.12.2009, 11:06     Операторы цикла #6
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
       do
        { // этот внешний цикл мы продолжаем пока выполняется условие: y==epsil? Тогда этот цикл выполнится всего один раз
         // 
        y=0;
        s=0;
        f=1;
        
 
        for(i=1;i>1;i++) // сразу пропускаем внутренний цикл while(fabs(x)<1); с таким условием (i>1)
        do
        { // кстати в этом цикле i не будет никогда меняться,
                //for(k=1;k>1;k++)
                {
                f*=(2*i); 
                }
                        
 
                        s=pow((-1.),i)*pow(x,2*i)/f;
                        y=1+s;
                        cout<<"y="<<y<<endl;
 
 
 
                        cin.get();
 
         
        }while(fabs(x)<1); // это зачем? Вложенный внутренний цикл у нас бесконечный получается (x мы ввели по модулю меньше 1 и он не меняется). Правда до этого вложенного цикла дело не дойдет
        
        
        /*else
        cout<<"VY vveli nepraviljnyj x"<<endl;
        cin.get();
        */
 
        
        }while (y==epsil);
В итоге код будет выполнять только следующие строки (и только один раз):
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
       double x,epsil,y,s,f;
        int i,k;
        
        
        cout<<"vvedite x";
        cin>>x;
        cout<<"vvedite epsil";
        cin>>epsil;
        cin.get();
        
        do
        {
        
        y=0;
        s=0;
        f=1;
        
 
        for(i=1;i>1;i++)
            }while (y==epsil);
        cout<<"For continue--<Enter>, for exit-- any symbol and <Enter> \n";
        cin.get();
                
        
 
 
 
 
        return 0;
}
Артурик
0 / 0 / 0
Регистрация: 11.12.2009
Сообщений: 7
11.12.2009, 16:11  [ТС]     Операторы цикла #7
Что-то накорябал, но беда с фаториалом. Не знаю как написать функцию, чтобы считал 2!,3! и т.д.
M128K145
Эксперт С++
8282 / 3501 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
11.12.2009, 16:45     Операторы цикла #8
C++
1
2
3
int f, fact(1), i;
for(i = 2; i <= f; ++i)
    fact *= i;
Артурик
0 / 0 / 0
Регистрация: 11.12.2009
Сообщений: 7
12.12.2009, 00:25  [ТС]     Операторы цикла #9
Что означает fact(1)?
Эта функция будет использоваться вместо моей функции вычисления факториала?
Никак не получается, он вычисляет значения и повторяет.
M128K145
Эксперт С++
8282 / 3501 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
12.12.2009, 00:34     Операторы цикла #10
Артурик, fact(1) - это инициализация переменной fact значением 1. Эти три строчки кода вычисляют факториал числа f, которое как предполагается ты введешь вручную или вычислишь в программе
Артурик
0 / 0 / 0
Регистрация: 11.12.2009
Сообщений: 7
12.12.2009, 01:09  [ТС]     Операторы цикла #11
Получилось как-то так, но что-то все-равно не работает.. Не правильно считает. Как вывести промежуточные значения, а не только конечное?



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
char yes='y';
    while (yes=='y')
     {
 
    double x,epsil,y,s;
    int fact(1),i,k,f;
    
    
    cout<<"vvedite x";
    cin>>x;
    cout<<"vvedite epsil";
    cin>>epsil;
    cin.get();
 
    s=0;
    f=1;
    i=1;
    y=0;
    
    do
    {
 
        for(i=1;i>1;i++)        
        f*=2*i;
        {
        for(i = 2; i <= f; ++i)
        fact *= i;
        }
        
        
        
            
 
            s=pow((-1.),i)*pow(x,2*i)/f;
            y=1+s;
            cout<<"y="<<y<<endl;
 
        
            i++;
            cin.get();
 
     
    }while(y<=epsil);
    
    
    /*else
    cout<<"VY vveli nepraviljnyj x"<<endl;
    cin.get();
    */
    
    
 
    //cout<<"For continue--<Enter>, for exit-- any symbol and <Enter> \n";
    //cin.get();
 } cout<<"\n\n\nRepeat? y/n  ";
         cin>>yes;
         cin.get();
         cout<<endl;
    
    
 
    
 
    return 0;
}
M128K145
Эксперт С++
8282 / 3501 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
12.12.2009, 01:23     Операторы цикла #12
попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
while (yes=='y')
{
    double x,epsil,y(1),s;
    int fact(1),i(1),k,f;
    cout<<"vvedite x";
    cin>>x;
    cout<<"vvedite epsil";
    cin>>epsil;
    do
    {
        for(j = 1; j <= 2*i; ++j)
                fact *= j;
        s = pow((-1.),i)*pow(x,2*i)/fact;
        y += s;
        ++i;
    }while(s <= epsil);
}
cout<<"\n\n\nRepeat? y/n  ";
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2009, 02:20     Операторы цикла
Еще ссылки по теме:

C++ Операторы цикла while и do … while
C++ Операторы цикла и операторы передачи управления
Операторы языка С++: операторы цикла (исправьте программу) C++
C++ Операторы цикла
C++ Операторы цикла

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

Или воспользуйтесь поиском по форуму:
Артурик
0 / 0 / 0
Регистрация: 11.12.2009
Сообщений: 7
12.12.2009, 02:20  [ТС]     Операторы цикла #13
Спасибо. Подправил код, вроде бы что-то работает. Помучаюсь ещё немного над задачей, чтобы разобраться до конца.
Yandex
Объявления
12.12.2009, 02:20     Операторы цикла
Ответ Создать тему
Опции темы

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