|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Помогите решить задачу по С++ |
|
C/C++ - [решено] Помогите решить задачу по С++
|
Новый участник Сообщения: 20
|
Профиль | Отправить PM | Цитировать bool valid(int i, int j) { return i > 0 && i < m && j > 0 && j < n; } // элементы игрового поля (пусто, крестик, нолик) enum XO { _e_, _x_, _o_ }; const XO f[m][n]; XO field(int i, int j) { return valid(i,j) ? f[i][j] : _e_; } XO test() { // ранг каждой клетки struct RANK { int hor, ver, diag1, diag2; }; RANK r[m][n]; const RANK rnull = { 0, 0, 0, 0 }; int i,j; for(i = 0; i < m; ++i) for(j = 0; j < n; ++j) { XO xo = f[i][j]; RANK& rr = r[i][j]; if(xo == _e_) { rr = rnull; continue; } if(xo == field(i-1, j )) = 1 + r[i-1][j ]; if(xo == field(i, j-1)) rr.ver = 1 + r[i ][j-1]; if(xo == field(i-1, j-1)) rr.diag1 = 1 + r[i-1][j-1]; if(xo == field(i+1, j-1)) rr.diag2 = 1 + r[i+1][j-1]; if(rr.hor >= 5 || rr.ver >= 5 || rr.diag1 >= 5 || rr.diag2 >= 5 ) return xo; // этот игрок победил } return _e_; // ничья } Суть задания: клеточное поле размером м*n есть результат игры в крестики-нолики на неограниченном поле. Проверить является ли конфигурация одного из игроков предвыигрышной, т.е. нельзя ли за один ход достичь победы |
Отправлено: 17:07, 20-11-2011 | #291 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Titanium,
Цитата Titanium:
Словами алгоритм можете описать? И код прокомментировать тоже не мешало бы. Каков принцип поиска предвыигрышной ситуации? |
|
------- Отправлено: 19:32, 20-11-2011 | #292 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Определите, пересекаются ли кривая у=аx3+bx2+сx+d и прямая y=fx+g. При положительном ответе найти точки пересечения.
|
Отправлено: 22:52, 20-11-2011 | #293 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать keks666sex, решите уравнение. Либо аналитически, либо дискретно.
Большим пока помочь не могу. |
------- Отправлено: 23:14, 20-11-2011 | #294 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Будит ли правильным такой вариант решения?
Если сначала решить систему уравнений аx3+bx2+сx+d=fx+g где найдем x=g-d и дискриминант D=sqrt(b^2-4az) где z=c-f и с помощью дискриминанта найдем 2 корня x2=(-b+дискриминант)/(2*a); x3=(-b-дискриминант)/(2*a); #include <iostream> # include <math.h> using namespace std; void main() { double a,b,c,d,f,g,x,y,tret,discrim,x1,x2,x3,y1,y2,y3,yrav2; cout<<"Vvedite A "; cin>>a; cout<<"Vvedite B "; cin>>b; cout<<"Vvedite C "; cin>>c; cout<<"Vvedite D "; cin>>d; cout<<"Vvedite F "; cin>>f; cout<<"Vvedite G "; cin>>g; x1=g-d; y1=f*x1+g; yrav2=a*pow(x1,3)+b*pow(x1,2)+c*x1+d; tret=c-f; discrim=sqrt(pow(b,2)-4*a*tret); // cout<<"Deskriminant: "<<discrim<<'\n'; cout<<"Krivaya i pryamaya peresekaet'sya v tochkah:"<<'\n'; cout<<"Tochka peresecheniya: "<<"("<<x1<<";"<<y1<<")"<<'\n'; if (discrim>0) { x2=(-b+discrim)/(2*a); x3=(-b-discrim)/(2*a); y2=f*x2+g; y3=f*x3+g; cout<<"Tochka peresecheniya : "<<"("<<x2<<";"<<y2<<")"<<'\n'; cout<<"Tochka peresecheniya : "<<"("<<x3<<";"<<y3<<")"<<'\n'; } else if(discrim=0) { x2=-b/(2*a); y2=f*x2+g; cout<<"Tochka peresecheniya: "<<"("<<x2<<";"<<y2<<")"<<'\n'; } else { cout<<" "<<'\n'; } } |
Последний раз редактировалось Drongo, 21-11-2011 в 17:36. Причина: Пожалуйста, используйте тег [code] - # Отправлено: 23:41, 20-11-2011 | #295 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Цитата keks666sex:
Почему Х стал константой g-d? сколь я помню алгебра выглядит так: аx3+bx2+сx+d=fx+g аx3+bx2+(с-f)x=g-d x(ax2+bx+c-f)=g-d |
|
------- Отправлено: 08:40, 21-11-2011 | #296 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Помогите, пожалуйста, решить задачку:
В одномерном массиве, состоящем из N целых элементов, вычислить: 1) произведение элементов массива с четными номерами; 2) сумму элементов массива, расположенных между первым и последним нулевыми элементами. Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом — все отрицательные (элементы, равные 0, считать положительными). Вывести на экран в удобной и наглядной форме исходные данные и результаты. Первый пункт я сделала, вот что получилось: #include <stdio.h> #include <conio.h> int main(void) { float FMass[10] = {1,-2,3,-5,0,2,3,8,0,1}; float proizv = 1; int i=0; clrscr(); for(i=0;i<10;i++) // print Fmass: { printf("\n FMass[%d] = %+12.1f",i,FMass[i]); } // proizv: for(i=0;i<10;i=i+2) { proizv = proizv * FMass[i]; } printf("\n\n proizv = %+12.1f", proizv); getch(); return 1; } |
Последний раз редактировалось Drongo, 11-12-2011 в 15:51. Причина: [code] Отправлено: 00:45, 10-12-2011 | #297 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Liisa:
... int IndexFirstNull, // Индекс первого нулевого значения IndexLastNull; // Индекс последнего нулевого значения ... // Вычисление первого значения с нулём // Начинаем поиск его с начала // И как только найдём, запоминаем break for(int i = 0; i < size; i++) if(FMass[i] == 0){ IndexFirstNull = i; break; } // Вычисления последнего значения с нулём // Начинаем поиск его с конца массива // И как только найдём, запоминаем и break for(int i = size - 1; i >= 0; i--) if(FMass[i] == 0){ IndexLastNull = i; break; } cout << endl; // Вывод значений между первым и последним нулевым элементом. for(int i = IndexFirstNull + 1; i < IndexLastNull; i++) cout << "FMass[" << i << "] = " << FMass[i] <<endl; |
|
------- Отправлено: 16:25, 11-12-2011 | #298 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Добрый день...
Помогите пожалуйста. Задние лабы: Для заданной матрицы сформулировать вектор из элементов её побочной диоганали.Добавить элементы полученого вектора к элемантам строки с инфексом K.Значение K вводиться.Исходная патрица задаеться в виде двумерного массива случайны образом.Вывести на экран исходную и результирующую мартицы. |
Отправлено: 12:38, 20-12-2011 | #299 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Daswedoc, Есть какие-либо наработки, мысли? Для начала ознакомьтесь с Правилами Форума
|
------- Отправлено: 22:20, 20-12-2011 | #300 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Помогите решить задачу | Urann | Программирование и базы данных | 11 | 14-05-2013 11:44 | |
Разное - Помогите решить задачу в Excel | Dgonny | Программирование и базы данных | 2 | 16-11-2009 04:11 | |
C/C++ - Помогите решить задачу | zdughi | Программирование и базы данных | 1 | 01-05-2009 06:03 | |
помогите решить задачу | snikers | Программирование и базы данных | 2 | 27-08-2004 01:57 | |
помогите решить задачу | Guest | Программирование и базы данных | 2 | 21-05-2004 11:23 |
|