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

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

Войти
Регистрация
Восстановить пароль
 
ramin_o
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 10
#1

Объясните как работает программа - C++

04.05.2014, 08:46. Просмотров 281. Ответов 4
Метки нет (Все метки)

Цель задачи была:

Возведение X в 59 степень за самое малое количество шагов.
1. Ввод (X);
2. X2 = X*X;
3. X4 = X2*X2;
4. X8 = X4*X4;
5. X16 = X8*X8;
6. X32 = X16*X16;
7. Y1 = X2*X;
8. Y2 = Y1*X8;
9. Y3 = Y2*X16;
10. Y4 = Y3*X32;
11. Вывод (Y4).

И программно реализовать.
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
 
int main ()
{
    setlocale(LC_ALL,"rus");
    int a[11][11],i,j,k,b[11],l=0,m=0,n=0;
    printf("Нажмите на любую клавишу\n");
    getch();
 
    printf("Первый шаг: заполнение\n");
    for(i=0;i<11;i++)
    for(j=0;j<11;j++)
        if (i==j-1) a[i][j]=1;
    for(i=0;i<11;i++)
    for(j=0;j<11;j++)
        if (a[i][j]!=1) a[i][j]=0;
    a[5][6]=0;
    a[0][6]=1;
    a[1][6]=1;
    a[3][7]=1;
    a[4][8]=1;
    a[5][9]=1;
 
    for(i=0;i<11;i++)
    {
        for(j=0;j<11;j++)
        printf("%d  ",a[i][j]);
        printf("\n");
    }
    printf("Нажмите на любую клавишу\n");
    getch();
 
    printf("Второй шаг: первое смещение\n");
    for (i=10;i>=0;i--)
    for (j=10;j>=0;j--)
        if (a[i][j]==1)
            if (j>i+1)
                for (k=i+1;k<11;k++)
                    if (a[k][j]==1 && j>k+1)
                    {l=k; m=j;}
    printf ("%d %d\n",l,m);
 
    k=0;
    for (i=0;i<11;i++)
    {b[i]=a[k][m]; k++;}
    for (i=0;i<11;i++)
    a[i][m]=0;
 
    for (j=0;j<m;j++)
        if (a[l][j]==1) n=j;
    printf ("%d\n",n);
    for (j=m;j>n;j--)
    for (i=0;i<11;i++)
    if (a[i][j-1]==1) {a[i][j]=a[i][j-1]; a[i][j-1]=0;}
    for (j=m;j>n+1;j--)
    for (i=0;i<11;i++)
        if (a[i-1][j]==1) {a[i][j]=a[i-1][j]; a[i-1][j]=0; break;}
    for (i=0;i<11;i++)
    a[i][n]=b[i];
 
    for (j=9;j>m;j--)
    for (i=0;i<11;i++)
        if (a[i][j]==1) {a[i+1][j]=a[i][j]; a[i][j]=0; i=10;}
    a[2][m+1]=a[6][m+1];
    a[6][m+1]=0;
    for(i=0;i<11;i++)
    {for(j=0;j<11;j++)
    printf("%d  ",a[i][j]);
    printf("\n");}
    printf("Нажмите на любую клавишу\n");
    getch();
 
    printf("Третий шаг: второе смещение\n");
    for (i=10;i>=0;i--)
    for (j=10;j>=0;j--)
        if (a[i][j]==1)
            if (j>i+1)
                for (k=i+1;k<11;k++)
                    if (a[k][j]==1 && j>k+1)
                    {l=k; m=j;}
    printf ("%d %d\n",l,m);
 
    k=0;
    for (i=0;i<11;i++)
    {b[i]=a[k][m]; k++;}
    for (i=0;i<11;i++)
    a[i][m]=0;
 
    for (j=0;j<m;j++)
        if (a[l][j]==1) n=j;
    printf ("%d\n",n);
 
    a[4][6]=a[4][5];
    a[4][5]=0;
    a[6][7]=a[5][6];
    a[5][6]=0;
    for (i=0;i<11;i++)
    a[i][n]=b[i];
    for (j=9;j>m;j--)
    for (i=0;i<11;i++)
        if (a[i][j]==1) {a[i+1][j]=a[i][j]; a[i][j]=0; i=10;}
    a[5][m+1]=a[7][m+1];
    a[7][m+1]=0;
 
    for(i=0;i<11;i++)
    {for(j=0;j<11;j++)
    printf("%d  ",a[i][j]);
    printf("\n");}
    printf("Нажмите на любую клавишу\n");
    getch();
 
    printf("Четвертый шаг: третье смещение\n");
    for (i=10;i>=0;i--)
    for (j=10;j>=0;j--)
        if (a[i][j]==1)
            if (j>i+1)
                for (k=i+1;k<11;k++)
                    if (a[k][j]==1 && j>k+1)
                    {l=k; m=j;}
    printf ("%d %d\n",l,m);
 
    k=0;
    for (i=0;i<11;i++)
    {b[i]=a[k][m]; k++;}
    for (i=0;i<11;i++)
    a[i][m]=0;
 
    for (j=0;j<m;j++)
    if (a[l][j]==1) n=j;
    printf ("%d\n",n);
    a[6][8]=1;
    for (i=0;i<11;i++)
    a[i][n]=b[i];
 
    for(i=0;i<11;i++)
    {for(j=0;j<11;j++)
    printf("%d  ",a[i][j]);
    printf("\n");}
    printf("Нажмите на любую клавишу\n");
    getch();
 
    printf("Пятый шаг: поднимает единицы вверх\n");
    for (j=2;j<11;j++)
    for (i=0;i<11;i++)
        if (a[i][j]==1)
            for (k=i+1;k<11;k++)
                if (a[k][j]==1) {k=11; a[1][j]=1; a[0][j]=1; for (i=2;i<11;i++) a[i][j]=0;}
                else if (k==10) {a[1][j]=1; for (i=2;i<11;i++) a[i][j]=0;}
    a[0][10]=a[1][10];
    a[1][10]=0;
 
    for(i=0;i<11;i++)
    {for(j=0;j<11;j++)
    printf("%d  ",a[i][j]);
    printf("\n");}
    printf("Нажмите на любую клавишу\n");
    getch();
    return 0;
}
Объясните как работает этот код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 08:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объясните как работает программа (C++):

Объясните как работает программа - C++
Задание звучит так: &quot;Разработать функцию, в которую передаются в качестве аргументов массив типа float и его размер. Функция должна...

Объясните как работает программа - C++
Данная программа делает подсчёт символов. Помогите разобраться как она работает. Сижу смотрю - и ступор просто #include &lt;stdio.h&gt; ...

Объясните, как работает программа - C++
программа по трем введеным числам определяет и выводит на экран число имеющее в составе наибольше едениц. Пожалуйста, объясните подробно...

Объясните, как работает программа - C++
объясните как работает программа #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; bool Р(int n) { for (int i =...

объясните как работает программа - C++
A в степени K, как работает эта программа, за что отвечают m и s ? #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; ...

Объясните как работает программа - C++
Если символ: не пробел, не новая строка, не табуляция. То in присваивается no(все слова). Дальше я вообще не понял как программа работает....

4
rikimaru2013
C++ Game Dev
2436 / 1130 / 240
Регистрация: 30.11.2013
Сообщений: 3,688
04.05.2014, 09:27 #2
Цитата Сообщение от ramin_o Посмотреть сообщение
Объясните как работает этот код.
Легко.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
 
int main ()
{
    setlocale(LC_ALL,"rus");
    int a[11][11],i,j,k,b[11],l=0,m=0,n=0;
    printf("Нажмите на любую клавишу\n");
    getch();
 
    printf("Первый шаг: заполнение\n");
    for(i=0;i<11;i++)
getch(); никуда не записывается так, что хоть ногами встаньте на клавиатуру программа будет выполнять одно и тоже. Что же делает программа? Ну явно не "Возведение X в 59 степень за самое малое количество шагов". Почему?)
1) оно только выводит массив нулей и единиц на экран
2) что-то похоже на демонстрацию побитового смещения, но не факт ... )

P.S. Ваш код то?)
2
TenGen
Будущее рядом
98 / 96 / 20
Регистрация: 06.03.2014
Сообщений: 342
04.05.2014, 09:33 #3
ramin_o, вот это
C++
1
2
3
4
5
6
for(i=0;i<11;i++)
    for(j=0;j<11;j++)
        if (i==j-1) a[i][j]=1;
    for(i=0;i<11;i++)
    for(j=0;j<11;j++)
        if (a[i][j]!=1) a[i][j]=0;
замените на
C++
1
2
3
for(i=0;i<11;i++)
    for(j=0;j<11;j++)
        a[i][j] = (i==j-1 ? 1 : 0);
1
ramin_o
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 10
04.05.2014, 09:41  [ТС] #4
Вот смотрите так мы Х возводим в 59 степень.
1. Ввод (х);
2. x2 = x*x;
3. x4 = x2*x2;
4. x8 = x4*x4;
5. x16 = x8*x8;
6. x32 = x16*x16;
7. y1 = x2*x;
8. y2 = x8*y1;
9. y3 = y2*x16;
10. y4 = y3*x32;
11. Вывод (y).
Надо было записать его в матричный вид то есть вот так вот он будет выглядеть на первом этапе
 1234567891011
1 1    1    
2  1   1    
3   1       
4    1  1   
5     1  1  
6         1 
7       1   
8        1  
9         1 
10          1
11           
Самый последний этап будет выглядеть так:
1. Ввод (х); 1
2. x2 = x*x; 2
3. x = x2*x; 3
4. x2 = x2*x2; 4
5. x2 = x2*x2; 8
6. x = x*x2;
7. x2 = x2*x2;
8. x = x*x2;
9. x2 = x2*x2;
10. x = x*x2;
11. Вывод (x).
 1234567891011
х 11  1 1 1 
х2  111111111

Простите я постановку задачи не правильно выдал.
З.Ы: Да и код не мой.
0
ramin_o
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 10
06.05.2014, 12:36  [ТС] #5
Спасибо всем!
Тему можно закрыть.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2014, 12:36
Привет! Вот еще темы с ответами:

Объясните, как работает программа - C++
Поясните пожалуйста чайнику! Объясните плиз как работает программа, то есть что значит &quot;**&quot; и остальные строки плиз очень прошу!!!! ...

Объясните пожалуйста как работает программа - C++
объясните пожалуйста код с момента появления &quot;bool fl&quot;, как это вообще работает? #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include...

Объясните пожалуйста как работает программа!! - C++
#include&lt;iostream&gt; #include&lt;cstdlib&gt; using namespace std; int *Create(int n) { if(n&lt;=10000) { int *arr; arr...

Объясните как работает эта программа - C++
#include &lt;stdio.h&gt; #include &lt;iostream&gt; enum { OUT, IN }; int main () { int c, nw, state; state = OUT;


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
06.05.2014, 12:36
Ответ Создать тему
Опции темы

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