HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Очередная тема о программировании
или DEAD MAN учит Си по университетской программе
Страницы (4): « 1 2 [3] 4 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33064
Нанёс повреждений: 392 ед.

Рейтинг



Ну вот, наконец-то циклы правильные.

Добавлено 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'

Сообщить модератору | IP: Записан
Сообщение: 66284

Старое сообщение 28-10-2010 13:17
-
DEAD MAN
Mono

Группа: Опытный
Дата регистрации: Oct 2005
Проживает: Tallinn
Сообщений: 1232
Возраст: 34

Рейтинг



Ещё один вопрос по массивам назрел. Скажем у меня есть матрица 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

Как это реализовать?

Сообщить модератору | IP: Записан
Сообщение: 67218

Старое сообщение 08-11-2010 18:36
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33064
Нанёс повреждений: 392 ед.

Рейтинг



Ну обычно быдлокодингом, по типу:

C++ Source Code:
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
}

Операция называется транспонированием матрицы (если конечно надо все ячейки поменять, а не только одну).
Операция достаточно ответственная, поэтому в цикле её лучше не делать, чтобы потом не гадать отчего всё глючит.
Если одну ячейку - то принцип тот же.

Добавлено 08-11-2010 в 23:11:

ЗЫ. Для твоего примера вышеприведенный код будет выглядеть приблизительно вот так:
C++ Source Code:
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'

Сообщить модератору | IP: Записан
Сообщение: 67223

Старое сообщение 08-11-2010 20:11
-
DEAD MAN
Mono

Группа: Опытный
Дата регистрации: Oct 2005
Проживает: Tallinn
Сообщений: 1232
Возраст: 34

Рейтинг



Дядя Миша Извини, что я не совсем понимаю как это можно связать с началом моего кода:

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; }


Не мог бы чуть подробней объяснить?

Сообщить модератору | IP: Записан
Сообщение: 67231

Старое сообщение 08-11-2010 20:34
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33064
Нанёс повреждений: 392 ед.

Рейтинг



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'

Сообщить модератору | IP: Записан
Сообщение: 67232

Старое сообщение 08-11-2010 21:24
-
DEAD MAN
Mono

Группа: Опытный
Дата регистрации: Oct 2005
Проживает: Tallinn
Сообщений: 1232
Возраст: 34

Рейтинг



Новый вопрос.

Пользователь вводит координаты некой четырёхугольной фигуры. Программа должна сказать по этим точкам является ли фигура прямоугольником.
Проблема в том, что я понимаю как это надо делать: найти углы между векторами, найти длину векторов и сравнить противоположные стороны(если конечно они параллельны). Но тут возникает 2 проблемы. Тонны переменных, которые меня несколько напрягают(поскольку вводить координаты надо для 3ёх разных фигур) . И честность пользователя, будет ли он вводить координаты по часовой стрелке, или в случайном порядке, т.к. во втором случаи понятия не имею для каких векторов находить углы и длины.
В общем, есть ли более простой способ решения задачи?

Сообщить модератору | IP: Записан
Сообщение: 67455

Старое сообщение 15-11-2010 20:05
- За что?
 Skaarj
Ctrl+S

Дата регистрации: Aug 2006
Проживает: Twisting Nether
Сообщений: 2429
Нанёс повреждений: 9 ед.

Рейтинг



Награды
  
[2 награды]


Кирпичами не кидайтесь. %)
Я бы всю фигуру передвинул бы в начало кооординат одной точкой и 2 раза повернул бы вокруг этой первой точки так, что бы сначала эта первая точка и, например, 2-я легли на одну ось и затем ещё раз, что бы уже 1 и 3-я опять же легли на одну ось.
Осталось бы за эти 2 поворота сравнить координаты точек, у прямоугольника будут по 2 парные точки с одинаковыми координатами по одной из осей за один из 2х вариантов поворота.

Сообщить модератору | IP: Записан
Сообщение: 67456

Старое сообщение 15-11-2010 20:24
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33064
Нанёс повреждений: 392 ед.

Рейтинг



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'

Сообщить модератору | IP: Записан
Сообщение: 67458

Старое сообщение 15-11-2010 20:42
-
SiPlus
GMod Lua Coder
Девойс

Дата регистрации: Jun 2007
Проживает: Санкт-Петербург
Сообщений: 317
Возраст: 28

Рейтинг



Я бы так сделал:
1) Нашел бы верхнюю левую точку.
2) Нашел бы верхнюю правую точку.
3) Нашел бы нижнюю левую точку.
4) Нашел бы нижнюю правую точку.
5) Сравнил бы X левой верхней и левой нижней точек.
6) Сравнил бы X правой верхней и правой нижней точек.
7) Сравнил бы Y левой верхней и правой верхней точек.
8) Сравнил бы Y левой нижней и правой нижней точек.
И если либо в 5, либо в 6, либо в 7, либо в 8 получаются не равные результаты, значит фигура - не прямоугольник.

Сообщить модератору | IP: Записан
Сообщение: 67793

Старое сообщение 20-11-2010 14:43
- За что?
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


SiPlus а если он повернут на 34°?

Сообщить модератору | IP: Записан
Сообщение: 67799

Старое сообщение 20-11-2010 18:58
- За что?
CrazyRussian
ололо

Дата регистрации: Apr 2009
Проживает: Город-курорт Ессентуки
Сообщений: 790
Возраст: 32

Рейтинг



Награды
 
[1 награда]


первое что на ум пришло:

C++ Source Code:
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 часов

Сообщить модератору | IP: Записан
Сообщение: 67801

Старое сообщение 20-11-2010 19:13
- За что?
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


DEAD MAN координаты должны вводиться только по часовой или только против часовой стрелки. Потом поверяешь противоположные стороны на равенство и один (любой) из углов на равенство 90° (результат скалярного произведения векторов-сторон должен быть равен 0).

Добавлено 20-11-2010 в 14:15:

Цитата:
CrazyRussian писал:
float angle_11=arccos(DotProduct(edge1,edge2);
float angle_22=arccos(DotProduct(edge3,edge4);

return ((angle_11==90) && (angle_22==90));


arccos нахрен не нужен - если угол равен 90 градусов то его косинус равен 0.

Сообщить модератору | IP: Записан
Сообщение: 67802

Старое сообщение 20-11-2010 19:15
- За что?
SiPlus
GMod Lua Coder
Девойс

Дата регистрации: Jun 2007
Проживает: Санкт-Петербург
Сообщений: 317
Возраст: 28

Рейтинг



CrazyRussian, откуда ты знаешь, что точка 2 будет поставлена человеком обязательно справа от точки 1?

Сообщить модератору | IP: Записан
Сообщение: 67822

Старое сообщение 21-11-2010 09:31
- За что?
CrazyRussian
ололо

Дата регистрации: Apr 2009
Проживает: Город-курорт Ессентуки
Сообщений: 790
Возраст: 32

Рейтинг



Награды
 
[1 награда]


Цитата:
Government-Man писал:
arccos нахрен не нужен

это да, я сходу не вспомнил чему косинус 90 градусов равняется

__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов

Сообщить модератору | IP: Записан
Сообщение: 67828

Старое сообщение 21-11-2010 10:10
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33064
Нанёс повреждений: 392 ед.

Рейтинг



Надо заюзать RotatePointAroundVector, построить четырёхугольник завращать вокруг центра, визуализировать его и вывести диалог для юзера: Эта фигура является прямоугольником? Да\Нет.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 67830

Старое сообщение 21-11-2010 10:14
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 22:53. Новая тема    Ответить
Страницы (4): « 1 2 [3] 4 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Очередная тема о программировании
или DEAD MAN учит Си по университетской программе
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024