Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ramin_o
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 10
1

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

04.05.2014, 08:46. Просмотров 337. Ответов 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
Ответы с готовыми решениями:

объясните как работает программа
A в степени K, как работает эта программа, за что отвечают m и s ? #include...

Объясните как работает программа
Данная программа делает подсчёт символов. Помогите разобраться как она...

Объясните, как работает программа
объясните как работает программа #include &lt;iostream&gt; #include &lt;conio.h&gt;...

Объясните, как работает программа
Поясните пожалуйста чайнику! Объясните плиз как работает программа, то есть...

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

4
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
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
Будущее рядом
99 / 98 / 48
Регистрация: 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
06.05.2014, 12:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2014, 12:36

Объясните, как работает программа
программа по трем введеным числам определяет и выводит на экран число имеющее в...

Объясните как работает программа
Если символ: не пробел, не новая строка, не табуляция. То in присваивается...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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