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

Банкомат - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Лицензия и пробный период http://www.cyberforum.ru/cpp-beginners/thread1031977.html
Здравствуйте, хотелось бы узнать как реализовать пробный период а так же проверку лицензионного ключа на С++. Получил лабораторную работу в которой необходимо написать программу которая бы давала ограниченный пробный период а затем не запускалась пока не введен лицензионный ключ. Не прошу выкладывать коды и прочее, интересен вопрос реализации, к чему можно привязаться для проверки лицензии и...
C++ Работа со строками в C++ Возникла пара вопросов (только начинаю осваивать С++) Тут ниже задание: Задание 8 При вводе текста программа автоматически должна осуществлять перенос слов. Производится подсчет введенных символов, включая знаки препинания. После ввода всего текста должна быть возможность переформатирования, то есть изменяется допустимая длина строки (в пределах 30…68) позиций, при этом перестраивается... http://www.cyberforum.ru/cpp-beginners/thread1031975.html
Сформировать двумерный массив. Удалить из него все строки в которых встречается заданое слово C++
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <limits.h> #define ROWS 100 #define COLS 100 int delete_stroka(int** arr,int N,int M); int main(void) { int sum = 0;
Требуется написать программу для расчета по двум формулам C++
Требуется написать программу для расчета по двум формулам
C++ Полиморфизм http://www.cyberforum.ru/cpp-beginners/thread1031937.html
Сколько я не читал книг и уроков по С++-программированию, я так и не смог понять что такое полиморфизм. Можно ли как-то просто и доступно объяснить что такое полиморфизм, как его использовать, зачем, когда его лучше избегать?
C++ Прокрутка изображения клавишами Помогите пожалуйста организовать прокрутку изображения в TImage клавишами "вверх" "вниз" "влево" "вправо".Заранее спасибо! подробнее

Показать сообщение отдельно
RQdan
65 / 65 / 17
Регистрация: 26.10.2013
Сообщений: 198
08.12.2013, 00:41     Банкомат
Цитата Сообщение от newyork7776 Посмотреть сообщение
А как можна через рекурсию?
Вот так:
Кликните здесь для просмотра всего текста
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
#include<iostream>
using namespace std;
 
void Recur_Search(int sum,int n,int mas[],int &num_min,int num_cur,int mas_ef[],int mas_cur[]);
 
void main()
{
    int mas[100],n,sum;
    cout<<"Enter number = ";cin>>n;
    for(int i=0;i<n;i++)
    {
        cout<<"Enter "<<i+1<<" = ";
        cin>>mas[i];
    }
    cout<<"Suma = ";cin>>sum;
    cout<<"Bankomat = ";
    for(int i=0;i<n;i++)
        cout<<mas[i]<<" ";
    cout<<endl;
    int mas_ef[100],mas_cur[100],num_cur=-1,num_min=100,buf=n-1;
 
    Recur_Search(sum,n-1,mas,num_min,num_cur,mas_ef,mas_cur);
    if(num_min==100)cout<<"No solution";
    else
    {
        cout<<"Number of banknotes = "<<num_min<<endl;
        for(int i=0;i<num_min;i++) cout<<mas_ef[i]<<" ";
    }
    cout<<endl; 
}
 
void Recur_Search(int sum,int n,int mas[],int &num_min,int num_cur,int mas_ef[],int mas_cur[])
{
    if(num_cur!=-1)//начальная проверка - необходима из-за первого входа в рекурсивную процедуру
    {
        sum-=mas[n];//формирование суммы, необходимой для дозаполнения
        mas_cur[num_cur]=mas[n];//добавляем номинал к текущей последовательности
        num_cur++;
    }else num_cur=0;
 
    if(sum==0)//проверка, что необходимую сумму набрали.
    {
        if(num_min>num_cur)
        {//запись новой минимальной последовательности номиналов
            for(int i=0;i<num_cur;i++) mas_ef[i]=mas_cur[i];
            num_min=num_cur;
        }
    }
    else
        if((float(sum)/mas[n])<(num_min-num_cur)) //проверка на возможность добить сумму !!!текущими!!! максимальными купюрами
                //за меньшее количество купюр, чем текущее значение. Иначе возврат на предыдущую итерацию!!!
        {
            while((n>=0)&&(sum<mas[n])) n--;//поиск номинала меньше или равного необходимой суммы
            if(n>=0)//если нашелся необходимый номинал - обрабатываем дальше. Иначе возврат на предыдущую итерацию!!!
            {//последовательно прорабатываем все варианты для номиналов вниз
                for(int i=n;i>=0;i--) Recur_Search(sum,i,mas,num_min,num_cur,mas_ef,mas_cur);
            }
        }
}

Все тесты, которые в этой теме выложены проходит на отлично. Что совсем не значит, что не найдется и на него соответствующий болт с резьбой . Тестирование только приветствуется.
Ну, и на мое скромное мнение, программа должна работать довольно оперативно: я вложил туда пару условий, что должны воспрепятствовать тупому перебору всех значений и повысить скорость работы. Но только при соблюдении некоторых условий, а именно: номиналы в массиве банкомата должны быть в обязательном порядке отсортированы по возрастанию. Т.е. или надо вводить значения сразу в такой последовательности, или перед рекурсией провести сортировку.
 
Текущее время: 11:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru