Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод элементов циклического списка 
V
    Опции темы
Metalex
Дата 30.10.2010, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Привет всем. 
у меня есть циклический двунаправленный список, количество элементов которого и сами элементы вводятся с клавиатуры. Загвоздка лишь в одном: вывести надо в консоли в виде круга. Как это реализовать (тем более, что количество элементов всегда разное)?
Пример:
                             7
                 7                     8
               8                            8
                  6                   6
                              3

Приблизительно так, в общем.
Спасибо всем учавствующим.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Master01
Дата 30.10.2010, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 22.8.2007

Репутация: 2
Всего: 2




Если в консоль, то нечётное количество элементов, вроде, не вывести. В противном случае "дырка" получится )
PM MAIL   Вверх
Metalex
Дата 31.10.2010, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



ну и пусть будет дырка)
Хоть как-то уже чтоб выводило


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
xvr
Дата 1.11.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



С математикой дружишь? Что такое 'полярная система координат' в курсе?
Вычисляешь координаты элементов твоего списка (элементы все на расстоянии 1 и равномерно заполняют все 360гр). Дальше переводишь в Декартовую систему координат, масштабируешь, что бы уместилось в экран, смещаешь начало отсчета, что бы не было отрицательных координат.
Потом сканируешь построчно результат и выводишь на экран, так же построчно.

В общем 2D математика

PM MAIL   Вверх
Metalex
Дата 1.11.2010, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



xvr, идею понял, спасибо

Но...
Допустим, у меня n элементов в списке. Делим 360 на n. r берем любое удобное.
Находим x=r*cos(360/n), y=r*sin(360/n). И что дальше с этими координатами делать?  smile 

Это сообщение отредактировал(а) Metalex - 1.11.2010, 18:33


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
xvr
Дата 1.11.2010, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Metalex @ 1.11.2010,  18:26)
xvr, идею понял, спасибо

Но...
Допустим, у меня n элементов в списке. Делим 360 на n. r берем любое удобное.
Находим x=r*cos(360/n), y=r*sin(360/n). И что дальше с этими координатами делать?  smile

Отмасштабировать (что бы соседние laible'ы не пересекались на экране) и переместить, что бы не было отрицательных координат

PM MAIL   Вверх
Dov
Дата 2.11.2010, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(Metalex @  1.11.2010,  17:26 Найти цитируемый пост)
И что дальше с этими координатами делать?

Перемещаться по ним и выводить данные. Вот набросал примерчик, а дальше напильник в руки и вперёд...  smile 
     На VC++ проверил, вроде работает:
Код
#include <windows.h>

#define PI        3.14159265
#define MAX_SIZE  12

void gotoxy(short x, short y)
{
    HANDLE    StdOut    = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD    coord    = {x, y};
    
    SetConsoleCursorPosition(StdOut, coord);
}

COORD getCoord(COORD mid, int n) 
{
    COORD   crd;    
    double    deg    = 180 + (n % MAX_SIZE) * 360 / MAX_SIZE;    
    double    ang    = deg / 180;

    crd.X = mid.X + (int)(cos(ang * PI) * mid.X * 0.8);
    crd.Y = mid.Y + (int)(sin(ang * PI) * mid.Y * 0.9);
    
    return crd;
}

int main()
{
    COORD mid = {MAX_SIZE * 2, MAX_SIZE};
    int   arr[MAX_SIZE];

    for(int i = 0; i < MAX_SIZE; i++)
        arr[i] = i + 1;

    for(int i = 0; i < MAX_SIZE; i++)
    {
        COORD crd = getCoord(mid, i);        
        gotoxy(crd.X, crd.Y);
        printf("%d", arr[i]);
    }
    gotoxy(0, mid.Y * 2 + 1);

    return 0;
}




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
mes
Дата 2.11.2010, 03:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Dov @  2.11.2010,  01:00 Найти цитируемый пост)
 gotoxy(crd.X, crd.Y);

если готохы нельзя использовать, можно создать статический двухмерный массив, в котором нарисовать нужное, а после вывести его в консоль..



--------------------
PM MAIL WWW   Вверх
Dov
Дата 2.11.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(mes @  2.11.2010,  02:11 Найти цитируемый пост)
если готохы нельзя использовать, можно создать статический двухмерный массив, в котором нарисовать нужное, а после вывести его в консоль..

Так, что ли?


Это сообщение отредактировал(а) Dov - 2.11.2010, 12:06


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Metalex
Дата 2.11.2010, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Спасибо всем огромное! Буду вечером разбиратся.

Добавлено через 3 минуты и 4 секунды
Но оно же вроде вычисляет от центра координаты да? А если у меня текст есть еще, а нужно, чтоб под ним выводило?


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Dov
Дата 2.11.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Цитата(Metalex @  2.11.2010,  13:41 Найти цитируемый пост)
 А если у меня текст есть еще, а нужно, чтоб под ним выводило?

Выводи, не бойся.



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
mes
Дата 2.11.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Metalex @  2.11.2010,  13:41 Найти цитируемый пост)
? А если у меня текст есть еще, а нужно, чтоб под ним выводило?


Цитата(Dov @  2.11.2010,  01:00 Найти цитируемый пост)
напильник в руки и вперёд... smile 


Добавлено через 1 минуту и 49 секунд
к тому же если Вы присмотритесь к последнему коду, увидите, что рисунок выводится целиком, как полотно.. т.е центр при выводе рисунка не причем..


--------------------
PM MAIL WWW   Вверх
Metalex
Дата 3.11.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Спасибо огромное всем!


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.