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

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

Восстановить пароль Регистрация
 
ramin_o
0 / 0 / 0
Регистрация: 16.02.2014
Сообщений: 10
04.05.2014, 08:46     Объясните как работает программа #1
Цель задачи была:

Возведение 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;
}
Объясните как работает этот код.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 08:46     Объясните как работает программа
Посмотрите здесь:

C++ Объясните пожалуйста как работает программа!!
Объясните, как работает программа C++
C++ объясните как это работает
C++ Объясните как работает this -> и ->
Объясните как работает программа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,223
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. Ваш код то?)
TenGen
Будущее рядом
 Аватар для TenGen
96 / 94 / 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);
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

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

Текущее время: 01:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru