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

Циклы с условием окончания - C++

Восстановить пароль Регистрация
 
Sashak
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 21
28.10.2012, 17:30     Циклы с условием окончания #1
Помогите пож-ста написать код программы
Изображения
 
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
28.10.2012, 18:53     Циклы с условием окончания #2
что именно вам помочь? ведь вам требуется именно помощь а не написать за вас программу?
Sashak
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 21
28.10.2012, 20:07  [ТС]     Циклы с условием окончания #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
#include <vcl.h>
#include <math.h>
#include <stdio.h>
#pragma hdrstop
#pragma argsused
void main()
{
double a, b, e, z, u;
int i,g,k,j;
        printf ( "\n\t * rabota # 3 * \n");
        printf ( "\n Student var 5 \n");
        scanf ("%lf", &z);
 
        a=1;
        b=2;
        z=u=a/b;
        g=50;
        e=pow(10,-15);
        for (k=0; k>=g; k++)
        for (j=0; j>=g; j++)
        for (i=0; fabs(u)<=g && fabs(u)>=e;)
        {
          i=i+1;
                a=(a*k)*(a*k);
                b=(2*(b*j));
                u=a/b;
                z=z+u;
                printf ("\n i = %3d u = %20.20lf  z = %20.20lf", i,u,z);
        };
        i=i-1;
        if (fabs(u)<=e) { printf("\n\n Ryd SXODITSY!!!\n\n i = %3d u = %20.20lf  z = %20.20lf", i,u,z);}
        if (fabs(u)>=g) { printf("\n\n Ryd NE SXODITSY!!!\n\n i = %3d u = %20.20lf  z = %20.20lf", i,u,z);}
}
так что вот
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
28.10.2012, 20:57     Циклы с условием окончания #4
Добавлено через 5 минут
ну вот совсем другая постановка вопроса =)
сразу совет, не пишите все в мэйне, делайте функции это значительно увеличит читабельность а следовательно поиск потенциальных ошибок.

вот исправленный код
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
#include <stdio.h>
#include <math.h>
#include <vcl.h>//Вот это
#pragma hdrstop//не знаю зачем подключаете
#pragma argsused//но пусть будет
 
double Fuct(int n){
    int fuct=1,buf=n;
    while(buf!=1){//соответственно нахождения факториала 
        fuct*=buf;
        buf--;
   }
    return (double)fuct;
}
void main(){
    printf ( "\n\t * rabota # 3 * \n");
    printf ( "\n Student var 5 \n");
    double eps=0.0001,res1=-2.0,res2=-1.0,n=1;
    while(abs(res1-res2)>eps){//на бесконечность программу же не заточишь =) найти как предел находить тоже не нашел, придумал по быстрому вот это, пока точность текучего и следующего значения суммы больше заданной точности находить следующее слогаемое
        res1=pow(Fuct(n++),2)/Fuct(2*n);//соответственно нахождение первого слагаемого и инкримент n
        res2=pow(Fuct(n++),2)/Fuct(2*n);//нахождение второго слагаемого и инкримент
    }
    printf ( "\n Summa ravna: %f\n",res1);//вывод результата
}
Добавлено через 5 минут
также эту разность можно запоминать и если следующая разность будет больше чем текущая - вывод что ряд не сходится и завершение цикла

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool fl=true;
double sh=10000;
while((abs(res1-res2)>eps)&&fl){
    if(abs(res1-res2)>sh)
        fl=false;
    res1=pow(Fuct(n++),2)/Fuct(2*n);
    res2=pow(Fuct(n++),2)/Fuct(2*n);
    sh=abs(res1-res2);
}
if(fl)
    printf("Ryad ne sthoditsya\n");
else
    printf("Ryad sthoditsya\n Summa ravna: %f\n",res1);
Добавлено через 12 минут
Sashak
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 21
28.10.2012, 21:23  [ТС]     Циклы с условием окончания #5
да всё хорошо конечно вот только мы функции еще не прошли. Наверно я еще слишком плохо знаю си, т.к я половину из того, что вы написали не понял..)

Добавлено через 9 минут
Может можно как-то исправить, то что я накалякал?

Добавлено через 6 минут
Цитата Сообщение от Sashak Посмотреть сообщение
да всё хорошо конечно вот только мы функции еще не прошли. Наверно я еще слишком плохо знаю си, т.к я половину из того, что вы написали не понял..)

Добавлено через 9 минут
Может можно как-то исправить, то что я накалякал?
C++
1
2
3
g=50;
        e=pow(10,-15);
for (i=0; fabs(u)<=g && fabs(u)>=e;)
пытался ограничение набрать. Как то можно с помощью циклов решить? я пробовал, но у меня, как видите, получилось бог знает что..
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
28.10.2012, 21:53     Циклы с условием окончания #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
#include <stdio.h>
#include <math.h>
double Fuct(int n){//Как видите функция состоит всего из 1го цикла, так что в мэйн перенести не составит большого труда =)
    int fuct=1,buf=n;
    while(buf!=1){
        fuct*=buf;
        buf--;
   }
    return (double)fuct;
}
void main(){
    printf ( "\n\t * rabota # 3 * \n");
    printf ( "\n Student var 5 \n");
    double eps=0.0001,res1=-2.0,res2=-1.0,n=1,;//задается ограничение eps 10^-4, 
//результатам присваиваю отрицательные значения и разность у них явно больше 0.0001
//это делается для того чтобы цикл запустился ну и задаю начальное n
    bool fl=true;//поднимаю флаг что функция сходится
    while((abs(res1-res2)>eps)&&fl){//идет проверка на точность найденного результата, а также сходится ли функция
       res1=pow(Fuct(n++),2)/Fuct(2*n);//ну тут вычисление как я говорил
       res2=pow(Fuct(n++),2)/Fuct(2*n);
       if(abs(res1-res2)>sh)//т.к. мы задали переменную отвечающую за предыдущую точность
//очень большую, то условие не выполнится и начнет работать уже сама сумма
           fl=false;
        sh=abs(res1-res2);//запоминает точность вычислений, соответственно при следующем проходе
//цикла если точность увеличится, то функция не сходится (это не для всех функций, но конкретно для этой подойдет).
//соответственно флаг упадет, цикл закончится
    }
    if(fl)//если флаг упавший вывести что функция не сходится
        printf("Ryad ne sthoditsya\n");
    else//если поднят вывести что ряд сходится и его сумму
        printf("Ryad sthoditsya\n Summa ravna: %f\n",res1);
}
Добавлено через 1 минуту
единственное у меня вопрос к вам, что за пресловутые
C++
1
2
3
#include <vcl.h>
#pragma hdrstop
#pragma argsused
Yandex
Объявления
28.10.2012, 21:53     Циклы с условием окончания
Ответ Создать тему
Опции темы

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