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

Указатели. Динамическая память. - C++

Восстановить пароль Регистрация
 
Настя_111
 Аватар для Настя_111
4 / 4 / 0
Регистрация: 12.05.2010
Сообщений: 159
15.06.2010, 10:13     Указатели. Динамическая память. #1
Нужно очень срочно. Сегодня последний день сдачи.

1. Дано натуральное число n. Определить количество цифр в цифровой записи данного числа, которое имеют наименьшее значение. Пример. N=4548. Количество цифр с наименьшим значением равно двум (две цифры 4).

2. Заданы 3 натуральных числа а,b,c которые обозначают число, месяц, год. Найти порядковый номер даты начиная отсчет с начала года;

3. Дано натуральное число n. Определить сумму цифр в первой половине числа. Пример: n=12345678. Сумма 1+2+3+4=10
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
15.06.2010, 12:33     Указатели. Динамическая память. #2
Цитата Сообщение от Настя_111 Посмотреть сообщение
3. Дано натуральное число n. Определить сумму цифр в первой половине числа. Пример: n=12345678. Сумма 1+2+3+4=10
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
#include <iostream>
#include <clocale>
#include <cmath>
using namespace std;
    void main()
    {
    setlocale (LC_CTYPE,"rus");
    int num, i=1, cn=0, sum=0, n;
        cout<<"Введите число\n";
        cin>>num;
                do
                {
                i*=10;
                cn++;
                }
                while(num/i!=0);
                    cout<<cn<<" цифр(ы)\n";
                    for(int j=0; j<cn/2; j++)
                    {
                    num/=10;
                    }
                    for(int j=0; j<cn/2; j++)
                        {
                        n=num%10;
                        sum+=n;
                        num/=10;
                        }
                    cout<<"Сумма равна = "<<sum<<endl;
    }
Mr.X
Эксперт С++
 Аватар для Mr.X
2800 / 1576 / 246
Регистрация: 03.05.2010
Сообщений: 3,658
15.06.2010, 14:45     Указатели. Динамическая память. #3
Задача №2:
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
//Заданы 3 натуральных числа а,b,c которые обозначают число, месяц, год. 
//Найти порядковый номер даты начиная отсчет с начала года;
#include <iostream>
#include <map>
 
const int god_min = 1583;//Первый год, целиком считаемый по григорианскому календарю.    
 
//Високосные годы в григорианском календаре, действующем с 4 октября 1582 года, следующие:
//    * Каждый год, номер которого кратен 4 — високосный.
//    * Однако, каждый год кратный 100 — не високосный.
//    * Однако, каждый год кратный 400 все же високосный — 1600, 2000 и т.д.
bool god_is_visok(int god)
{
    return (god % 400 == 0) || (god % 4 == 0) && !(god % 100 == 0);
}
 
int  get_chislo_v_mes_max
    (
        int god, 
        int mes
    )
{
    typedef std::map<int, int> T_chislo_v_mes_max_nevisok;
    T_chislo_v_mes_max_nevisok  chislo_v_mes_max_nevisok;
    chislo_v_mes_max_nevisok[1]  = 31;
    chislo_v_mes_max_nevisok[2]  = 28;
    chislo_v_mes_max_nevisok[3]  = 31;
    chislo_v_mes_max_nevisok[4]  = 30;
    chislo_v_mes_max_nevisok[5]  = 31;
    chislo_v_mes_max_nevisok[6]  = 30;
    chislo_v_mes_max_nevisok[7]  = 31;
    chislo_v_mes_max_nevisok[8]  = 31;
    chislo_v_mes_max_nevisok[9]  = 30;
    chislo_v_mes_max_nevisok[10] = 31;
    chislo_v_mes_max_nevisok[11] = 30;
    chislo_v_mes_max_nevisok[12] = 31;
 
    int res = chislo_v_mes_max_nevisok[mes];
    if(mes == 2 && god_is_visok(god)) ++res;
    return res;
}
 
bool  den_v_godu_count
    (
        int  god,
        int  mes, 
        int  chislo,
        int& count
    )
{    
    if(god < god_min)
    {
        std::cout << "Некорректрое значение года "
                  << god
                  << "."
                  << std::endl;
        return false;
    }    
 
    const int mes_min = 1;
    const int mes_max = 12;
 
    if(mes < mes_min || mes_max < mes)
    {
        std::cout << "Некорректрое значение месяца "
                  << mes
                  << "."
                  << std::endl;
        return false;    
    }
 
    const int chislo_min = 1;
    if(chislo < chislo_min || get_chislo_v_mes_max(god, mes) < chislo)
    {
        std::cout << "Некорректрое значение числа в месяце "
                  << chislo
                  << "."
                  << std::endl;
        return false;   
    }
        
    count = 0;
    for(int mes_ind = mes_min; mes_ind < mes; ++mes_ind)
    {
        count += get_chislo_v_mes_max(god, mes_ind);
    }
    count += chislo;
    return true;
}
 
int main()
{
    std::locale::global(std::locale(""));
    for(;;)
    {
        std::cout << std::endl
                  << std::endl
                  << "Число в месяце: ";
        int chislo;
        std::cin >> chislo;
        std::cout << "Номер месяца (январь -> 1, февраль -> 2 и т.д.): ";
        int mes;
        std::cin >> mes;
        std::cout << "Год >= "
                  << god_min
                  << ": ";
        int god;
        std::cin >> god;
        int den_v_g_count;
        if(den_v_godu_count(god, mes, chislo, den_v_g_count))
        {
            std::cout << "Порядковый номер заданной даты с начала года равен "
                      << den_v_g_count
                      << ".";
        }
    }
    return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
15.06.2010, 15:49     Указатели. Динамическая память. #4
1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <map>
 
int main(){
    int number;
 
    while ( true ) {
        std::cout << "Enter some number: ";
        std::cin >> number;
        if ( ! number )
            break;
        std::map<int, int> map;
        while ( number ){
            map[number % 10]++;
            number /= 10;
        }
        std::cout << "The minimal digit (" << map.begin()->first << ") meet " << map.begin()->second << " times." << std::endl;
    }
 
    return 0;
}
Добавлено через 20 минут
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
 
int main(){
    int number;
 
    while ( true ) {
        std::cout << "Enter some number: ";
        std::cin >> number;
        if ( ! number )
            break;
        std::vector<int> vec;
        while ( number ){
            vec.push_back(number % 10);
            number /= 10;
        }
        std::cout << "The sum of first half digits is "
                << std::accumulate(vec.begin() + vec.size() / 2, vec.end(), 0) << std::endl;
    }
 
    return 0;
}
marquez
Сообщений: n/a
13.12.2011, 16:12     Указатели. Динамическая память. #5
Дано натуральное число N. Определить количество цифр в цифровой записи данного числа, которые имеют наибольшее значение. Пример. N = 1808. Количество цифр с наибольшим значением равно двум (две цифры 8).

тоже самое как для минимальных только для найбольшего значения ..
Yandex
Объявления
13.12.2011, 16:12     Указатели. Динамическая память.
Ответ Создать тему
Опции темы

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