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

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

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

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

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

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

«Языки и технологии программирования» «Операторы цикла. Условные операторы» - C++
Не получается сделать что бы программа выводила все значения в промежутке, она выводит только одно. условия | ((z^3)+sin...

Операторы языка С++: операторы цикла (исправьте программу) - C++
#include <iostream> #include <cstdlib> #include <cmath> using namespace std; int main() { int a,n; float y,x; cout<<...

Операторы принятия решения и операторы цикла. - C++
Пожалуйста, помогите. Нужно срочно сделать задания: 1)Ввести с клавиатуры три символа sym1, sym2, sym3. Поменять их значения таким...

Операторы цикла и операторы передачи управления - C++
Вычислить сумму ряда S с погрешностью эпсилон, задаваемой с клавиатуры. Вывести количество итераций, сделанных при вычислении. Если...

Условные операторы.Операторы цикла - C++
1)По номеру y(y>0) некоторого года определить с-номер его столетия(учесть что к примеру началом 20 столетия был 1901 а не 1900 год.)...

[C++] Операторы цикла - C++
(я пишу в Dev-Cpp, писать начал около месяца назад...) Х изменяется в диапазоне от a до b с шагом h. Вычисление суммы вести до тех пор,...

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 / 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;
}
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.12.2009, 05:52 #4
http://www.cyberforum.ru/search.php?searchid=622801
0
Артурик
0 / 0 / 0
Регистрация: 11.12.2009
Сообщений: 7
11.12.2009, 09:34  [ТС] #5
Ничего не понимаю. Друзья, помогите советом, кто знает в чем проблема. Программа не хочет считать, у меня уже никаких идей нет.
0
valeriikozlov
Эксперт С++
4670 / 2496 / 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 / 0
Регистрация: 11.12.2009
Сообщений: 7
11.12.2009, 16:11  [ТС] #7
Что-то накорябал, но беда с фаториалом. Не знаю как написать функцию, чтобы считал 2!,3! и т.д.
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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 / 0
Регистрация: 11.12.2009
Сообщений: 7
12.12.2009, 00:25  [ТС] #9
Что означает fact(1)?
Эта функция будет использоваться вместо моей функции вычисления факториала?
Никак не получается, он вычисляет значения и повторяет.
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
12.12.2009, 00:34 #10
Артурик, fact(1) - это инициализация переменной fact значением 1. Эти три строчки кода вычисляют факториал числа f, которое как предполагается ты введешь вручную или вычислишь в программе
1
Артурик
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;
}
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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  ";
1
Артурик
0 / 0 / 0
Регистрация: 11.12.2009
Сообщений: 7
12.12.2009, 02:20  [ТС] #13
Спасибо. Подправил код, вроде бы что-то работает. Помучаюсь ещё немного над задачей, чтобы разобраться до конца.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2009, 02:20
Привет! Вот еще темы с ответами:

Операторы цикла while и do … while - C++
Здравствуйте,помогите пожалуйста решить задачу простым способом. 1) Вводить последовательность чисел до тех пор, пока их сумма...

ОПЕРАТОРЫ ЦИКЛА - C++
Я написал программу для вычисления y(x)=(sin(x+c)-d)/(e+a) при x=1.5(0.1)2, но её нужно переделать используя do while. #include...

Операторы цикла (while, do...while) - C++
Вводится точность e. Вычислить сумму ряда (LR2). Вычисления продолжать до тех пор, пока очередное слагаемое не станет меньше e.

Операторы цикла - C++
Для заданного значения m вычислить S{m}= \sum_{0}^{m} ln(|{Y}_{i}|+0.5) Значения m, {Y}_{0},{Y}_{1}, {Y}_{2} вводятся с клавиатуры, а...


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

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

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