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

Разбиение на слагаемые - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Переделать в функции с рабочим указателем. http://www.cyberforum.ru/cpp-beginners/thread192831.html
1.void zadacha1(int n, int **a) { int max; int k=0,k1,k2=0,i,j; for (i=0; i<=n; i++) max=-INT_MAX; prosm(n,a);
C++ Из консольного в графический //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <conio.h> #include <stdio.h> #include <iostream.h> //--------------------------------------------------------------------------- #pragma argsused http://www.cyberforum.ru/cpp-beginners/thread192817.html
C++ Структуры,массивы
Необходимо сформировать массив структур. Структуры вводятся с клавиатуры. с клавиатуры вводится не вся структура, а только ее отдельные поля. Необходимо выполнить обработку сформированного массива структур и результаты обработки вывести на экран дисплея. В программе следует в максимальной степени использовать функции. Например, функции должны использоваться для ввода структур, обработки...
В текстовом файле записана формула. Вычислить значение данной формулы C++
1. В текстовом файле записана без ошибок формула вида: цифра или R(формула, формула), или L(формула, формула), где R обозначает функцию взять правое число, L – левое число. Вычислить значение данной формулы. Например: R(8, R(3, L(4,5))) = 4). #include <iostream> #include <conio.h> stek fail_is_ocheredi (stek *s) { struct stek *tmp1; tmp1 = s; if (ns == NULL) //при нулевом...
C++ Циклическая очередь http://www.cyberforum.ru/cpp-beginners/thread192805.html
Всем доброго времени суток.Нужно написать программу с функциями вставки нового эл-та, удаления произвольного эл-та, корректировки произвольного эл-та, вывода на экранЮ для циклической очереди.#include <iostream> #include <fstream> #include <windows.h> using namespace std; struct sp {char street; sp *next; sp *back;
C++ paskal. циклы вывести на экран натуральные числа лежащие в интервале и делящиеся нацело на 5 подробнее

Показать сообщение отдельно
archinko
13 / 13 / 2
Регистрация: 02.03.2010
Сообщений: 29
18.11.2010, 01:30     Разбиение на слагаемые
Ну как то так. Отличаеться от первой только тем, что cin и cout заменил на printf и scanf. Уф как-то много я текста в коментах накатал О_о
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
#include <stdlib.h>
#include <stdio.h>
#define N 20
int main()
{
        int n,m[N],temp;
    //Запрос у пользователя значения n, если введеное значение не попадает в указанный диапозон (1=<n=<N) то спрашиваем заново
        while(n<1 || n>N){
        printf("Введите значение для n от 1 до %d\n",N); 
        scanf("%d",&n);
        if(n<1 || n>N) printf("Не допустимое число\n");
        }
    
    for(int i=0;i<n;i++) m[i]=1; //Инициализируем массив m[] единицами( В самом начале любое число можно представить сумой единиц. Например 5=1+1+1+1+1 или 3=1+1+1, по этому единицами)
 
        temp=n-1; //эту переменную будем использовать, что бы двигаться по масиву m[]
    //далее основной цыкл while, выполняеться до тех пор пока m[0]!=0
        do 
        {
                printf("%d=",n);
                for(int i=0;i<n;i++) 
                {
                        if(i==n-1 || m[i+1]==0) {   //Если это уже последний элемент массива m[] или следующий элемент в масиве m[] равен 0, делаем конец строки, 1 уровнение напечатано ну и break для выхода из текущего for
                                printf("%d\n",m[i]);
                                break;}
                        else printf("%d+",m[i]); //если же это еще не последний элемент масива то просто печатаем еще одно слагаемое 
                }
//Здесь немного сложный для понимания момент. С помощью temp мы фиксируем длину нашего масива. Постепенно массив будет уменшаться и temp соответсвенно. 
                if(m[temp]-1>=m[temp-1]+1 && temp>=1) m[temp]--,m[temp-1]++; /* Если m[текущая]-1 больше или равна m[следующая]+1, то тогда увеличуем m[следующая] на 1 ,а m[текущая] соответсвенно уменшаем на 1. Таким образом сума слагаемых не изменится. Вот пример такой ситуации: 5=1+1+3. В данный момент масив m выглядит так: 
m[0]=1 
m[1]=1
m[2]=3
Проверяем m[текущею] (а это m[2]) c m[следующей] (ну а это m[1]), и "если m[текущая]-1 больше или равна m[следующая]+1" то тогда m[2]-- а m[1]++. Вот какой у нас получится теперь масив :
m[0]=1 
m[1]=2
m[2]=2
А вот какое уровнение получится 5=1+2+2
*/
                else{ /* Ну а если "m[текущая]-1 НЕ больше или равна m[следующая]+1" то тагда сумируем два последних элемента массива, и записуем его в следующую ячейку масива. Последний элемент обнуляем и temp уменшаем на единицу (m[temp--]=0). Вот пример такой ситуации: 5=1+2+2. В данный момент масив m выглядит так: 
m[0]=1 
m[1]=2
m[2]=2
Как видим m[2]-1<m[1]+1. Значит программа выполнит следующие:
m[1]=m[1]+m[2];
m[2]=0;
Ну и уменшим temp на единицу (temp--)
Вот какое уровнение теперь у нас получится 5=1+4
*/
                m[temp-1]+=m[temp];
                m[temp--]=0; //Когда temp станет равным 0, здесь мы обнулим m[0]. А значит выйдем таки из цыкла while по условию (m[0]!=0)
                }
        }while(m[0]!=0);
                                
}
 
Текущее время: 21:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru