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

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

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

Блок-схема - C++

25.12.2012, 18:37. Просмотров 617. Ответов 1
Метки нет (Все метки)

Начертите, пожалуйста блок-схему к приложенной программе или просто словами пошагово опишите принцип работы. Спасибо.

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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <stdio.h>
#include <conio.h>
 
using namespace std;
 
void show(int a[150], int n)  // вывод полоски на экран
{
     int i;
     for (i=1; i<=n; i++)
         if (a[i])   // если элемент не ноль то его показываем
           cout<<a[i]<<":";
         else  // если ноль, то пробел вместо него
           cout<<" :";
     cout<<endl;
}
 
bool is_number(char* s)  // проверяет введено ли нужное число пользователем во время хода
{
     char w[]="0123456789";
     int i,j;
     if (strlen(s)>2 || strlen(s)<1)   // если длина >2 или <1 - не то что надо введено 
        return false;
     for (i=0; i<strlen(s); i++)
     {
         bool fl=false;
         for (j=0; j<strlen(w); j++)
             if (s[i]==w[j])
             {
               fl=true;
               break;
             }
         if (!fl)
          return false;
     }
     return true;
}
 
bool isend(int a[150], int n, int k) // проверяет есть ли еще ход в полоске (true - нет)
{
     int i,count;
     i=1;
     
     while (i<=n-k+1)
     {
           if (a[i])  // если элемент не ноль
           {
                    count=1;
                    i++;
                    while (i<=n && a[i]) // идет по полоске пока не закончится или  пока не ноль число
                    {
                          count++;  // сичтаем длину серии ненулевых чисел
                          i++;
                    }
                    if (count>=k)  // если длина больше или равна k, значит ход еще есть
                       return false;
           }
           i++;
     }
     return true;
}
 
int nextmove(int a[150], int n, int k)  // ход компьютера - первая возможность слева по строке
{                                       //    ( первая версия хода компьютера)
     int i,j,count;
     i=1;
     
     while (i<=n-k+1)
     {
           if (a[i])
           {
                    count=1;
                    i++;
                    while (i<=n-k+1 && a[i])
                    {
                          count++;
                          i++;
                    }
                    if (count>=k)
                    {
                        for (j=i-count; (j<=i-count+k-1 && j<=n); j++)
                            a[j]=0;
                        return i-count;
                    }
           }
           i++;
     }
     return 0;
}
 
int randnextmove(int a[150], int n, int k) // компьютер из всех ходов выбирает один случайно
{
     int m[41];   // здесь номера всех возможных ходов
     int cm=0;    // количество возможных ходов
     int i,j,count;
     bool fl;
     
     for (i=1; i<=n-k+1; i++)
     {
         fl=true;
         for (j=i; j<i+k; j++)  
             if (!a[j])  // если элемент равен нулю
             {
                fl=false;  // ход невозможен с началом в i
                break;
             }
         if (fl) // если ход возможен
         {
                cm++;  // увелисиваем количество найденных ходов
                m[cm]=i;  // заносим номер хода в массив m
         }
     }
     
     if (cm)  // если количество ходов > 0
     {
            j=m[1+rand()%cm]; // случайный выбор хода
            for (i=j; i<j+k; i++)  // зануление элементов этого хода
                a[i]=0;
            return j;
     }
     
     return 0;
}
 
bool del(int a[150], int n, int k, int ind) // замена k чисел начиная с ind на нули
{
     if (ind>n-k+1 || ind<1)  // проверка на корректность ind
       return false;
     int i;
     
     for (i=ind; i<=ind+k-1; i++)
         if (!a[i])                 // если там ноль еще до удлаения - false, то есть удалить не удалось
            return false;
     for (i=ind; i<=ind+k-1; i++)
         a[i]=0;                   // удаление
     return true; 
}           
 
void game(int n, int k) // функция процесса игры
{
     int mv;
     char you[30]="";  // ход игрока
     int a[150];  // полоска - это массив чисел, если число равно 0, то это пробел
     bool isdel;
     int i,j;
     for (i=1; i<=n; i++) // заполение полоски
         a[i]=i;
     
     cout<<"first move: 1 - comp 2 - you : ";  // запрос кто ходит первым
     cin>>mv;
     
     cout<<"game start"<<endl;
     show(a,n);  // вывод полоски
     
     if (mv==2)
     {
         while (!is_number(you))
         {
             cout<<"you : ";  // ввод хода пользовтелем
             cin>>you;
             
             if (!is_number(you))    // если было введено не число
                 cout<<"error move"<<endl;
             else  
             {       
                  isdel=del(a,n,k,atoi(you));  
                  if (!isdel)   // если удалить не удалось
                  {
                     cout<<"error move"<<endl;
                     you[0]='\0';  // очищаем строку you
                  }                  
                  else
                     show(a,n);// вывод полоски
             }
         }  
     }
     
     if (isend(a,n,k)) // если ходов больше нет
     {
         cout<<"you win"<<endl;
         getch();  // ждем пока пользователь нажмет любую клавишу
         return;
     }
     
     cout<<"comp: "<<randnextmove(a,n,k)<<endl;  // вывод хода пользователя
     show(a,n);// вывод полоски
     you[0]='\0';
     
        while (true)
        {
         while (!is_number(you)) // если было введено не число
         {
             cout<<"you : ";
             cin>>you;
              
             if (!is_number(you)) // если было введено не число
                 cout<<"error move"<<endl;
         }      
         
         isdel=del(a,n,k,atoi(you));
         
         if (isdel && !isend(a,n,k))
         {
                   show(a,n);// вывод полоски
                   cout<<"comp: "<<randnextmove(a,n,k)<<endl; // вывод хода пользователя
                   show(a,n);// вывод полоски
                   you[0]='\0';
                   
                   if (isend(a,n,k)) // если ходов больше нет
                   {
                      cout<<"comp win!";
                      getch(); // ждем пока пользователь нажмет любую клавишу
                      return;              
                   }
         }
         else
          if (isdel)  // если удалось удалить
          {
                    show(a,n); // вывод полоски
                    cout<<"you win!";
                    getch();// ждем пока пользователь нажмет любую клавишу
                    return;
                    
          }
          else // если не удалось удалить
          {
                    cout<<"error move"<<endl;
                    you[0]='\0';
          }
        }      
     
     
}
 
int main()
{
    int n,k;
    cout<<"input 0<n<=40: ";
    cin>>n;
    cout<<"input 0<k<=n: ";
    cin>>k;
    
    if (n>40 || n<1 || k>n || k<1) // проверка введенных n и k
       cout<<"bad input"<<endl;
    else  
       game(n,k);  // игра
    return 1;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2012, 18:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Блок-схема (C++):

Блок схема ( схема алгоритма ) - C++
Доброго времени суток . Есть вот такая програмка : bool checktwo(const int x); int main(){ for (int i=1000; i&lt;10000; i++) //...

Блок Схема - C++
Может кто нибудь помочь с блок схемой, а то у меня не очень получаеться 1 #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; ...

Блок-схема - C++
Очень нужна помощь в составлении блок-схемы! Пожалуйста! using namespace std; int ReadOnlyPositiveIteger() { int result; ...

Блок-схема - C++
Помогите построить блок-схему к этому коду я совсем запуталась ((( for (z=0, x=0, j=0; x&lt;m, j&lt;m; j++, x++) { max=a; for (i=1;...

Блок-схема - C++
Одобрите кто-нибудь моё творение по заданию. Составьте алгоритм по правилу «Если идет дождь, то взять зонт, если снег одеть куртку, в...

блок схема - C++
Помогите пожалуйста составить блок схему #include &lt;iostream&gt; using std::cout; using std::cin;...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
28.12.2012, 13:51 #2
Блок-схемы
0
Миниатюры
Блок-схема   Блок-схема   Блок-схема  

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2012, 13:51
Привет! Вот еще темы с ответами:

Блок схема - C++
Программисты помогите с блок схемой, пожалуйста. Нужно у этой задачи сделать блок схему const int N=10; double a; ... int...

Блок-схема - C++
Помогите составить блок схему! #include&lt;iostream&gt; using namespace std; int main() { char name1, name2,str; int i,l; ...

Блок-схема - C++
Всем привет, я не знаю как составлять блок схему если имеется 2 цикла, помогите как будет?? #include&lt;stdio.h&gt; #include&lt;iostream&gt; ...

Блок схема - C++
Люди помогите! =( Написал программу на Паскале и не могу схему алгоритма начертить, запутываюсь постоянно..Нарисуйте кто может и залейте...


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

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

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