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

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

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

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

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

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

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

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

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

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

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

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

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

Объясните пожалуйста как работает программа - 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...

Объясните как работает программа, которая заменяет 2 и больше подряд идущих пробела на один - C++
Всем доброго времени суток, друзья. Прошу обьяснить мне как работает данная программа, потому как сам не могу додуматься. #include...

Объясните как работает this -> и -> - C++
Как написано в книжке this - это указатель на экземпляр класса. Что происходит в данных выражениях: 1. i = this -&gt; a -&gt; b -&gt; c; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
2402 / 1096 / 237
Регистрация: 30.11.2013
Сообщений: 3,623
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
Будущее рядом
97 / 95 / 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     Объясните как работает программа
Ответ Создать тему
Опции темы

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