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

Задачи - C++

Восстановить пароль Регистрация
 
Serjant0007
2 / 2 / 0
Регистрация: 21.06.2010
Сообщений: 247
21.09.2011, 16:05     Задачи #1
все сюда писать не буду они тут в файле. По возможности кто какие сможет помогите решить. Но это самая сложная
Первоначальное напряжение в цепи равно 200 вольт. Известно, что оно меняется через каждую секунду следующим образом: через одну секунду оно уменьшается на М%, а еще через секунду увеличивается на Р%, затем снова уменьшается на М%, потом уменьшается на Р% и т.д. Составьте программу для определения, через сколько секунд напряжение в цепи превысит 220 вольт.
Вложения
Тип файла: txt Задание.txt (1.6 Кб, 25 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2011, 16:05     Задачи
Посмотрите здесь:

C++ задачи
C++ Задачи по C++
C++ Задачи на C++.
Задачи С++ C++
C++ Задачи
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vet
 Аватар для vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
21.09.2011, 16:29     Задачи #2
Не до конца ясно задание, особенно
Цитата Сообщение от Serjant0007 Посмотреть сообщение
снова уменьшается на М%, потом уменьшается на Р
может быть увеличивется на Р% ? если да то, например так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int main()
{
    int t = 0;
    double U = 200;
    double m = 0.05, p = 0.08;//m=5% p=7% произвольно проценты взял
    double Um = U*m;
    double Up = U*p;
    
    cout << Um << "  " << Up << "\n";
    
    while(U<=220)
    {
            if(t%2==0){ U -= Um;}
            else{U += Up;}
            t++;
    }
    cout << "t= " << t << "\n";
    cout << "U = " << U << "\n"; 
    cin.get();
}
mamedovvms
2913 / 834 / 93
Регистрация: 30.04.2009
Сообщений: 2,613
21.09.2011, 16:34     Задачи #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
zn=220;
s=0;
while (true)
{
  s++;
  zn-=m;
  if (zn>220) {breack;}
  s++;
  zn+=p;
  if (zn>220) {breack;}
}
 
cout>> s;
самый простой способ, нужно только добавить ввод значений m и p
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
21.09.2011, 16:35     Задачи #4
mamedovvms, там проценты же!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
 
#define M .05
#define P .1
 
int main()
{
    size_t seconds = 0;
    double volts = 200;
 
    while(volts <= 220)
    {
    ++seconds;
    volts -= volts * M;
    ++seconds;
    volts += volts * P;
    }
 
    printf("%u second(s) elapsed\n", seconds);
    
    exit(0);
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
21.09.2011, 16:39     Задачи #5
vet, так у тебя Um и Up должны пересчитываться после каждой секунды
vet
 Аватар для vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
21.09.2011, 16:40     Задачи #6
Nameless One, ага точна =)
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
21.09.2011, 16:40     Задачи #7
Кстати, секунды можно сразу увеличивать на 2, т.к. очевидно, что их число будет четным
Serjant0007
2 / 2 / 0
Регистрация: 21.06.2010
Сообщений: 247
21.09.2011, 17:40  [ТС]     Задачи #8
Цитата Сообщение от Nameless One Посмотреть сообщение
mamedovvms, там проценты же!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <stdlib.h>
 
#define M .05
#define P .1
 
int main()
{
    size_t seconds = 0;
    double volts = 200;
 
    while(volts <= 220)
    {
    ++seconds;
    volts -= volts * M;
    ++seconds;
    volts += volts * P;
    }
 
    printf("%u second(s) elapsed\n", seconds);
    
    exit(0);
}
запустил ее файл прикрепил
Миниатюры
Задачи  
-=ЮрА=-
Заблокирован
Автор FAQ
21.09.2011, 17:54     Задачи #9
Цитата Сообщение от Serjant0007 Посмотреть сообщение
Первоначальное напряжение в цепи равно 200 вольт. Известно, что оно меняется через каждую секунду следующим образом: через одну секунду оно уменьшается на М%, а еще через секунду увеличивается на Р%, затем снова уменьшается на М%, потом уменьшается на Р% и т.д. Составьте программу для определения, через сколько секунд напряжение в цепи превысит 220 вольт.
- вот полунубский код на плюсах
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream.h>
 
int main()
{
    cout<<"Enter voltage : ";
    double Volt;cin>>Volt;
    cout<<"Enter m in % : ";
    double m;cin>>m;
    cout<<"Enter p in % : ";
    double p;cin>>p;
    int tick = 0;
    while(Volt < 220)
    {
        tick++;
        if(tick % 2 != 0)
            Volt -= m*Volt/100;
        else
            Volt += p*Volt/100;
    }
    cout<<"seconds : "<<tick<<"\r\n";
    return 0;
}
Enter voltage : 200
Enter m in % : 0.5
Enter p in % : 0.8
seconds : 66
Press any key to continue
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
22.09.2011, 02:39     Задачи #10
Цитата Сообщение от Serjant0007 Посмотреть сообщение
запустил ее файл прикрепил
это предупреждение, просто игнорируй его
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,698
22.09.2011, 12:08     Задачи #11
Nameless One,
-=ЮрА=-,
попробуйте запустить свои программы со значениями, например, M = 0 и P = 0.000000001.
Мое решение:
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
/////////////////////////////////////////////////////////////////////////////////////////
#include <cassert>
#include <cmath>
#include <iostream>
#include <limits>
/////////////////////////////////////////////////////////////////////////////////////////
const double  double_eps = std::numeric_limits<double>::epsilon();
/////////////////////////////////////////////////////////////////////////////////////////
double  count_sec
    (
        double  voltage_start,
        double  voltage_finish,
        double  _2_sec_factor
    )
{
    return  ceil
                ( 
                    log
                        (
                             voltage_finish * ( 1.0 + double_eps )
                             / voltage_start
                        ) 
                    / log(_2_sec_factor) 
                ) * 2.0;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    
    double        voltage_start   = 200;
    double        voltage_finish  = 220;    
    assert(voltage_finish - voltage_start > double_eps * voltage_start);
 
    double  percents_minus = 0;
    do
    {
        std::cout << "Введите процент уменьшения >= 0, < 100:"
                  << '\t';
        std::cin >> percents_minus;
    }while(   percents_minus < 0
           || percents_minus >= 100);  
 
    double  percents_plus  = 0;
    double  _2_sec_factor  = 0;
 
    for(;;)
    {
        std::cout << "Введите процент увеличения: "
                  << '\t'
                  << '\t'; 
 
        std::cin >> percents_plus;
        _2_sec_factor  = (100 - percents_minus) * (100 + percents_plus) / 100.0 / 100.0;        
        if( _2_sec_factor < 1.0 + double_eps )
        {
            std::cout << std::endl
                      << "Введите большее значение!"
                      << std::endl;
        }
        else
        {
            break;
        }
    }    
 
    std::cout << std::endl
              << "Если первоначальное напряжение в цепи было равно "
              << voltage_start
              << " Вольт"
              << std::endl
              << "и каждую нечетную секунду оно уменьшалось на "
              << percents_minus
              << " %, "
              << std::endl 
              << "а каждую четную увеличивалось на "
              << percents_plus
              << " %, "
              << std::endl
              <<"то оно превысило "
              << voltage_finish
              << " Вольт через "
              << count_sec
                     (
                        voltage_start,
                        voltage_finish,
                        _2_sec_factor                        
                     )
 
              << " секунд."
              << std::endl;
}
Nameless One
22.09.2011, 12:29
  #12

Не по теме:

Mr.X, ну, у меня они вообще константами в коде забиты. А то, что корректность пользовательского ввода надо проверять, так это никто и не спорит

-=ЮрА=-
Заблокирован
Автор FAQ
22.09.2011, 12:53     Задачи #13
Цитата Сообщение от Mr.X Посмотреть сообщение
попробуйте запустить свои программы со значениями, например, M = 0 и P = 0.000000001
- запустил (смотри скрин дебага), чё дальше то???
Замечание что считать будет долго???Хотим убить програм idle(замораживания во время прогонки по циклу), добавляем PumpMessages

Если вопрос был что INT_MAX в tick превысим, можно так записать
C
1
double tick = 0;
Миниатюры
Задачи  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2011, 17:21     Задачи
Еще ссылки по теме:

C++ 4 задачи на С++

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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,698
22.09.2011, 17:21     Задачи #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Замечание что считать будет долго??
Практически вечно, если взять M = 0 и P достаточно близким к нулю.
Yandex
Объявления
22.09.2011, 17:21     Задачи
Ответ Создать тему
Опции темы

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