Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алфавит в треугольнике 
V
    Опции темы
Сый
Дата 7.5.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Даётся такой вариант построения букв алфавита:
Код
       А       
      У Б      
     Т Ф В     
    С Я Х Г    
   Р Ю   Ц Д   
  П Э     Ч Е  
 О Ь Ы Ъ Щ Ш Ё 
Н М Л К Й И З Ж

Нужен наиболее красивый алгоритм для такого его вывода. 
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
SoWa
Дата 7.5.2006, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Думаем...
По моему- решать только с помощью матрицы. Перемещением по ней на одну клетку по диагонали или горизонтали.
Ты её ограничь и потом на каждом шаге проверяй, не натолкнулся ли на край. Натолкнулся- поворачивай. 
Можно упростить задачу- не проверять столкновения со стенами, а заранее посчитать сколько букв в каждом ряду и поворачивать, когда в ряду будет именно столько букв. 

Это сообщение отредактировал(а) SoWa - 7.5.2006, 20:25


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Fin
Дата 7.5.2006, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


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

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



В С++ будет примерно такой алгоритм:
Код

#include <iostream.h>
int main()
{
   cout << "       А" << endl       
          << "      У Б" << endl      
          << "     Т Ф В"<< endl     
          << "    С Я Х Г"<< endl    
          << "   Р Ю   Ц Д"<< endl   
          << "  П Э     Ч Е"<< endl  
          << " О Ь Ы Ъ Щ Ш Ё"<< endl 
          << "Н М Л К Й И З Ж"<< endl;
   return 0;
}

Быстрее и меньше по размерам не придумаеш.  

Это сообщение отредактировал(а) Fin - 7.5.2006, 20:38


--------------------
Пролетал мимо.
PM MAIL   Вверх
SoWa
Дата 7.5.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Так в чем фишка- надо именно алгоритм, а не вывод на экран. 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Сый
Дата 7.5.2006, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Fin, ну мне же не нужна просто функция вывода на экран текста.

SoWa, надо попробовать, я уже думал над таким вариантом. Двухмерный ряд с координатами, счётчик букв, задача для изменения координат в соответствие с текущим направлением. Во внешнем треугольнике в стороне по 7 букв, во внутреннем - по 4. 
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
SoWa
Дата 7.5.2006, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Попробуй. Собственно- другие вариации, мне кажется, будут мене рациональными. 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
MBo
Дата 8.5.2006, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

procedure TForm1.Button2Click(Sender: TObject);
const
  Alphabet = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
  ddx: array[0..2] of Integer = (8, -16, 8);
  ddy: array[0..2] of Integer = (-16, 0, 16);
var
  i, j, k, l, x, y: Integer;
begin
  l := Length(Alphabet);
  x := 120;
  y := 20;
  Canvas.Font.Name := 'Courier New';
  k := 1;
  for i := 8 downto 1 do begin
    for j := 1 to i do begin
      x := x + ddx[i mod 3];
      y := y + ddy[i mod 3];
      Canvas.TextOut(X, Y, Alphabet[k]);
      Inc(k);
      if k > l then
        Exit;
    end;
  end;
end;

 
PM MAIL   Вверх
SoWa
Дата 8.5.2006, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Работает. Плюс за не лень smile 


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Сый
Дата 8.5.2006, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ага, работает. Спасибо.
Вот этот код на Глаголе:
Код

ЗАДАЧА Треугольник(); 
ПЕР 
  i, j, k, x, y: ЦЕЛ; 
  Алфавит: ЦЕПЬ[33+1]; 
  ddx, ddy: РЯД 3 ИЗ ЦЕЛ; 
  Буква: ЦЕПЬ[1]; 
УКАЗ 
  ddx[0]:=1; ddx[1]:=-2; ddx[2]:=1; 
  ddy[0]:=-1; ddy[1]:=0; ddy[2]:=1; 
  Алфавит := 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; 
  x := 10; y := 5; 
  k := 0; 
  ОТ i := 8 ДО 1 ПО -1 ВЫП 
    ОТ j := 1 ДО i ВЫП 
      x := x + ddx[i ОСТАТОК 3]; 
      y := y + ddy[i ОСТАТОК 3]; 
      Буква[0] := Алфавит[k]; Вывод.ВПрямоуг(x, y, x, y, Буква); 
      УВЕЛИЧИТЬ(k); ЕСЛИ k >= 33 ТО ВОЗВРАТ КОН 
    КОН 
  КОН 
КОН Треугольник;
  

Это сообщение отредактировал(а) Сый - 21.5.2006, 15:31
--------------------
 Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




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


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

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