![]() |
Страницы (4): « 1 2 [3] 4 » Показать все 60 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Флуд (https://hlfx.ru/forum/forumdisplay.php?forumid=11)
-- Очередная тема о программировании (https://hlfx.ru/forum/showthread.php?threadid=2348)
Ну вот, наконец-то циклы правильные.
Добавлено 28-10-2010 в 17:17:
ЗЫ. % 2 можно по идее заменить на & 1.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ещё один вопрос по массивам назрел. Скажем у меня есть матрица 5 на 5, допустим такая:
1 6 8 4 9
5 3 9 4 5
9 3 7 5 1
0 0 8 6 6
6 7 2 0 4
И скажем с клавиатуры я задаю 4 строку и 2 столбец. При этом 4 строка должна поменяться местами со 2ым столбцом. Т.е. новая матрица должна выглядеть так (там где знак вопроса может стоять любая цифра, например 100):
1 0 8 4 9
5 0 9 4 5
9 8 7 5 1
6 ? 3 0 7
6 6 2 0 4
Как это реализовать?
Ну обычно быдлокодингом, по типу:
1 | void Matrix3x3_Transpose( matrix3x3 out, const matrix3x3 in ) |
2 | { |
3 | out[0][0] = in[0][0]; |
4 | out[1][0] = in[0][1]; |
5 | out[2][0] = in[0][2]; |
6 | out[0][1] = in[1][0]; |
7 | out[1][1] = in[1][1]; |
8 | out[2][1] = in[1][2]; |
9 | out[0][2] = in[2][0]; |
10 | out[1][2] = in[2][1]; |
11 | out[2][2] = in[2][2]; |
12 | } |
1 | matrix3x3 tmp; |
2 | int row= 1, column=2; |
3 | memcpy( tmp, mat, sizeof( matrix3x3 )); |
4 | mat[row][0] = tmp[0][column]; |
5 | mat[row][1] = tmp[1][column]; |
6 | mat[row][2] = tmp[2][column]; |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Извини, что я не совсем понимаю как это можно связать с началом моего кода:
code:
#include <stdio.h> #include <stdlib.h> int main() { int A[5][5]; int i=0,j=0; for (i=0;i<5;i++) { for (j=0;j<5;j++) { A[i][j] = rand() % 100; printf("%d\t",A[i][j]); } printf("\n"); } printf("Stroka, Stolbec: "); scanf("%d %d",&i,&j); return 0; }
DEAD MAN тебе для удобства надо функцию завести, которая будет свапать выбранную строку и столбец, и вынести туда код, по типу того что я привёл. Тогда не запутаешься: получаешь из консоли строку, столбец, кормишь их функции, она сама всё свапает. А в одном майне и запутаться недолго.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Новый вопрос.
Пользователь вводит координаты некой четырёхугольной фигуры. Программа должна сказать по этим точкам является ли фигура прямоугольником.
Проблема в том, что я понимаю как это надо делать: найти углы между векторами, найти длину векторов и сравнить противоположные стороны(если конечно они параллельны). Но тут возникает 2 проблемы. Тонны переменных, которые меня несколько напрягают(поскольку вводить координаты надо для 3ёх разных фигур) . И честность пользователя, будет ли он вводить координаты по часовой стрелке, или в случайном порядке, т.к. во втором случаи понятия не имею для каких векторов находить углы и длины.
В общем, есть ли более простой способ решения задачи?
Кирпичами не кидайтесь. %)
Я бы всю фигуру передвинул бы в начало кооординат одной точкой и 2 раза повернул бы вокруг этой первой точки так, что бы сначала эта первая точка и, например, 2-я легли на одну ось и затем ещё раз, что бы уже 1 и 3-я опять же легли на одну ось.
Осталось бы за эти 2 поворота сравнить координаты точек, у прямоугольника будут по 2 парные точки с одинаковыми координатами по одной из осей за один из 2х вариантов поворота.
DEAD MAN это школьная программа геометрии )
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Я бы так сделал:
1) Нашел бы верхнюю левую точку.
2) Нашел бы верхнюю правую точку.
3) Нашел бы нижнюю левую точку.
4) Нашел бы нижнюю правую точку.
5) Сравнил бы X левой верхней и левой нижней точек.
6) Сравнил бы X правой верхней и правой нижней точек.
7) Сравнил бы Y левой верхней и правой верхней точек.
8) Сравнил бы Y левой нижней и правой нижней точек.
И если либо в 5, либо в 6, либо в 7, либо в 8 получаются не равные результаты, значит фигура - не прямоугольник.
SiPlus а если он повернут на 34°?
первое что на ум пришло:
1 | bool IsRectangle(int x1,int y1,int x2,int y2) |
2 | { |
3 | // x1,y1 x2,y1 |
4 | // |
5 | // x1,y2 x2,y2 |
6 |
7 | Vector edge1,edge2,edge3,edge4; |
8 |
9 | edge1=Vector(x2-x1,y1-y1); |
10 | edge2=Vector(x1-x1,y2-y1); |
11 |
12 | edge3=Vector(x1-x2,y2-y2); |
13 | edge4=Vector(x2-x2,y1-y2); |
14 |
15 | float angle_11=arccos(DotProduct(edge1,edge2)); |
16 | float angle_22=arccos(DotProduct(edge3,edge4)); |
17 |
18 | return ((angle_11==90) && (angle_22==90)); |
19 | } |
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
DEAD MAN координаты должны вводиться только по часовой или только против часовой стрелки. Потом поверяешь противоположные стороны на равенство и один (любой) из углов на равенство 90° (результат скалярного произведения векторов-сторон должен быть равен 0).
Добавлено 20-11-2010 в 14:15:
CrazyRussian, откуда ты знаешь, что точка 2 будет поставлена человеком обязательно справа от точки 1?
__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
Надо заюзать RotatePointAroundVector, построить четырёхугольник завращать вокруг центра, визуализировать его и вывести диалог для юзера: Эта фигура является прямоугольником? Да\Нет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Временная зона GMT. Текущее время 22:29. | Страницы (4): « 1 2 [3] 4 » Показать все 60 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024