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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
llomushka
3 / 3 / 0
Регистрация: 21.03.2010
Сообщений: 19
#1

Операторы цикла, целочисленные типы данных - C++

21.03.2010, 13:51. Просмотров 1657. Ответов 6
Метки нет (Все метки)

Задали задачку на циклические алгоритмы с кучей пояснений, но все равно похожего найти не могу в поиске((

С консоли вводятся целые числа в диапазоне ±32765 до прекращения ввода по клавише Esc. Количество вводимых чисел заранее неизвестно. Требуется подсчитать количество введенных чисел и вычислить среднюю сумму введенных чисел по правилу: если введенное число совершенное, то оно прибавляется к сумме, а если нет, то вычитается из суммы. Подсчитать количество совершенных и несовершенных чисел. Определить минимальное и максимальное из всех введенных чисел.
Массивы использовать нельзя.

Требования:
Интерфейс и вычисление суммы реализуются в главной функции Main(). Использовать операторы циклов for, do, while, использовать goto нельзя. Количество вводимых чисел не задается, а определяется в процессе ввода. Для проверки, что введенное число обладает заданным свойством разработать функцию bool Check(int). Разработать функцию bool InputNumber(int&), которая вводит целое число посимвольно и возвращает True, если пользователь нажал Enter, или возвращает False, если пользователь нажал Esc. Обрабатываемые символы: + – 0 1 2 3 4 5 6 7 8 9 Delete Enter Esc. Проверять на диапазон, на положение знака, на количество цифр.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2010, 13:51     Операторы цикла, целочисленные типы данных
Посмотрите здесь:

Операторы цикла и вывод данных - C++
Условие: Напечатать таблицу значений функции f(x) и суммы S(x) в виде таблицы. Х изменяется в диапазоне от a до b с шагом h. Вычисление...

Операторы цикла - C++
Помогите с кодом: //--------------------------------------------------------------------------- #include <vcl.h> #include...

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

Операторы цикла - C++
Друзья, помогите с задачкой. Я совсем начинающий, не могу допереть. Задание необходимо решить с помощью операторов повторения....

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

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

операторы цикла - C++
написать программу для решения уравнений: http://s2.ipicture.ru/uploads/20110601/A52Swkt6.png ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
22.03.2010, 14:41     Операторы цикла, целочисленные типы данных #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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <iostream.h>
#include <conio.h>
#define ESC 27
#define ENTER 13
#define BACKSPACE 8
#define UPPER_RANGE 32765
#define LOWER_RANGE -32765
#include <vector.h>
//---------------------------------------------------------------------------
struct CDigitList
{
        CDigitList * Next;
        int Digit;
        int Num;
};
CDigitList * DigitList;
vector <char> CharacterVector;
//---------------------------------------------------------------------------
CDigitList * GetDigitFromList(int Index)
{
        CDigitList * TempDigit = DigitList;
        while(TempDigit)
        {
                if(TempDigit->Num==Index)
                {
                        return TempDigit;
                }
                TempDigit=TempDigit->Next;
 
        }
        return NULL;
}
//---------------------------------------------------------------------------
void AddDigitToList(int NewDigit)
{
        int Num=0;
        CDigitList * NewEllement = new CDigitList;
        CDigitList * TempDigit = DigitList;
        if(DigitList)
        {
                Num=DigitList->Num;
                while(TempDigit->Next)
                {
                        TempDigit=TempDigit->Next;
                        Num=TempDigit->Num;
                }
                TempDigit->Next=NewEllement;
                TempDigit=NewEllement;
        }
        else
        {
                Num=0;
                DigitList=TempDigit=NewEllement;
        }
        if(TempDigit)
        {
                TempDigit->Next=NULL;
                TempDigit->Num=Num+1;
                TempDigit->Digit=NewDigit;
        }
}
//---------------------------------------------------------------------------
bool Check(int RecDigit)
{
        int Summ=0;
        for(int i=1;i<RecDigit;i++)
        if(!(RecDigit%i))
        {
                Summ+=i;
        }
        return Summ==RecDigit;
}
//---------------------------------------------------------------------------
bool InputNumber(int&EnteredDigit)
{
        char PressedButton;
 
        do
        {
                PressedButton=getch();
                clrscr();
                if(PressedButton==BACKSPACE)
                {
                        CharacterVector.erase(&CharacterVector[CharacterVector.size()-1]);
                }
                else
                {
                        if(PressedButton!=ESC)
                        {
                                CharacterVector.push_back(PressedButton);
 
                        }
                }
                for(int i=0;i<(int)CharacterVector.size();i++)
                        printf("%c",CharacterVector[i]);
                if(PressedButton==ENTER)
                {
                        EnteredDigit = atoi(&CharacterVector[0]);
                        break;
                }
 
        }while(PressedButton!=ESC);
        CharacterVector.clear();
        return PressedButton!=ESC;
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
        int EnteredDigit=0;
        CharacterVector.clear();
        int PerfectSumm=0;
        int MaxValue=LOWER_RANGE;
        int MinValue=UPPER_RANGE;
        bool IsEnter;
        int NumberofDigits=0;
        int NumberOfPerfectDigits=0;
        int NumberOfNotPerfectDigits=0;
        while(true)
        {
                IsEnter=InputNumber(EnteredDigit);
                if(IsEnter)
                {
                        if(EnteredDigit>UPPER_RANGE||EnteredDigit<LOWER_RANGE)
                        {
                                printf("OUT OF RANGE!!!\n");
                                continue;
                        }
                        printf("New Digit Added: %d",EnteredDigit);
                        AddDigitToList(EnteredDigit);
                        NumberofDigits++;
                }
                else
                        break;
        }
        clrscr();
        for(int i=1;i<=NumberofDigits;i++)
        {
                int CurrentValue=GetDigitFromList(i)->Digit;
                if(Check(CurrentValue))
                {
                        if(CurrentValue>MaxValue)
                                MaxValue=CurrentValue;
                        if(CurrentValue<MinValue)
                                MinValue=CurrentValue;
                        PerfectSumm+=CurrentValue;
 
                        NumberOfPerfectDigits++;
                }
                else
                {
                        PerfectSumm-=CurrentValue;
                        NumberOfNotPerfectDigits++;
                }
        }
        if(NumberOfPerfectDigits)
        {
                printf("Amount of Perfect digits: %d\n",NumberOfPerfectDigits);
                printf("SUMM of Perfect digits: %d\n",PerfectSumm);
                printf("MAX Perfect digit: %d\n",MaxValue);
                printf("MIN Perfect digit: %d\n",MinValue);
        }
        printf("Amount of Not-Perfect digits: %d\n",NumberOfNotPerfectDigits);
        getch();
 
        if(NumberofDigits)
        {
                for(int i=NumberofDigits;i>0;i--)
                        delete GetDigitFromList(i)->Next;
                delete GetDigitFromList(1);
        }
        return 0;
}
//---------------------------------------------------------------------------
llomushka
3 / 3 / 0
Регистрация: 21.03.2010
Сообщений: 19
22.03.2010, 15:50  [ТС]     Операторы цикла, целочисленные типы данных #3
спасибо))) вечером попробую!! =))
llomushka
3 / 3 / 0
Регистрация: 21.03.2010
Сообщений: 19
04.04.2010, 00:36  [ТС]     Операторы цикла, целочисленные типы данных #4
Зоти Сергей
программа считает все числа, кроме 1, совершенными, но, согласно http://ru.wikipedia.org/wiki/%D0%A1%...81%D0%BB%D0%B0 нужно вычитать все из суммы все числа, кроме совершенных...

Добавлено через 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
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
#include<iostream>
#include<conio.h>
using namespace std;
 
/*
Функция bool Check(int num);
-------------------------------------------
Аргументы:
    int num: проверяемое число
-------------------------------------------
Возвращает true, если данное число num
является числом Фибоначчи и false, 
если не является
*/
bool Check(int num) {
    int i=0, g=1, k=0, z=-1;
 // i - предыдущее число Фибоначчи, g - текущее число, k - временная переменная
    while(g+i<=num || g+i<=-1*num) {
        if(g+i==num || z*(g+i)==num) return true;
        k=g;
        g+=i;
        i=k;
        z*=-1;
    }
    return false;
}   
 
bool Input(short &num) {
    char tmp;
    short minus_flag=1;
    num=0;
    
    while(tmp=getch()) {
        switch(tmp) {
            case '0': 
            case '1':
            case '2':
            case '3':
            case '4': 
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                if(num*10+(int)tmp-48<=SHRT_MAX && -1*(num*10+(int)tmp-48)>=SHRT_MIN) {
                    num*=10;
                    num+=(int)tmp-48;
                    printf("%c", tmp);
                }
                break;
            case '-': 
                if(num==0) {
                    minus_flag=-1;
                    printf("%c", tmp);
                }
                break;
            case 27:
                num*=minus_flag;
                printf("\n");
                return false;
            case 13: 
                num*=minus_flag;
                printf("\n");
                return true;
        }
    }
}
 
void main(void) {   
    short num;
    int average=0;
    short qNum=0, min=SHRT_MAX, max=SHRT_MIN, qFib=0; 
 
    printf("Input numbers over Enter. Press Esc for complete\n");
 
    while(Input(num)==true) {
        qNum++;
        if(num>=max) max=num;
        if(num<=min) min=num;
        if(Check(num)) {
            average-=num;
            qFib++;
        }
        else average+=num;
    }   
    if(qNum!=0)
    {
        average/=qNum;
        printf("Numbers: %d\n", qNum);
        printf("Fibonacci: %d\n", qFib);
        printf("Average amount: %d\n", average);
        printf("Max number: %d\n", max);
        printf("Min number: %d\n", min);
    }
    else printf("You did not input numbers\n\n");
 
    system("pause");
}

но здесь функция bool InputNumber(int&) реализована по другому(

Добавлено через 1 минуту
подскажите как переделать плииииз!!

Добавлено через 3 минуты
сумма здесь не среднее арифметическое а просто сумма совершенных чисел минус обычные числа
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
04.04.2010, 01:16     Операторы цикла, целочисленные типы данных #5
Программа не считает все числа совершенными кроме 1
Совершенное число — натуральное число, равное сумме всех своих собственных делителей (т. е. всех положительных делителей, отличных от самого́ числа).
например 6, 28
6=(1 + 2 + 3 = 6), 28 =1 + 2 + 4 + 7 + 14
Проверьте. Введите числа 6,28
потом введите 7,8
После, нажмите ESC.
Получите макс. мин совершенных и сумму. чила 7 и 8 к совершенным не относятся.
llomushka
3 / 3 / 0
Регистрация: 21.03.2010
Сообщений: 19
04.04.2010, 12:45  [ТС]     Операторы цикла, целочисленные типы данных #6
Вот что получается, текст программы не меняла... в результате sum складывает все числа
Миниатюры
Операторы цикла, целочисленные типы данных  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2010, 19:14     Операторы цикла, целочисленные типы данных
Еще ссылки по теме:

Операторы цикла (while, do...while) - C++
Нужна небольшая помощь, у меня где-то ошибка, но не могу понять где не могли бы вы мне помочь найти её вот программа, которую я написал, а...

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

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

Операторы цикла. - C++
Вводится число X&gt;1 и точность e. Вычислить с заданной точностью квадратный корень введенного числа X, не пользуясь функцией SqRt (один из...

Операторы цикла - C++
Вводить с клавиатуры буквы, пока не будет введен символ, не являющийся буквой. Определить, является ли введенная последовательность...


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

Или воспользуйтесь поиском по форуму:
llomushka
3 / 3 / 0
Регистрация: 21.03.2010
Сообщений: 19
04.04.2010, 19:14  [ТС]     Операторы цикла, целочисленные типы данных #7
сделала все))
Yandex
Объявления
04.04.2010, 19:14     Операторы цикла, целочисленные типы данных
Ответ Создать тему
Опции темы

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