Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вывести цифры на циферблате (паскаль)  (Прочитано 10029 раз)
0 Пользователей и 1 Гость смотрят эту тему.
муча
Гость
« : 29-04-2008 15:20 » 

люди добрые... помогите мну пожалуйста...
мине нада вывести цифры 3, 6, 9 и 12 на циферблате...
вроде программку написала, всё здорово, радостная прихожу на пару, показываю преподу, а он БАЦ! и сказал: "а где цифры?! ет ж у тибя ЦИ-ФЕР-блат! давай выводе мне цифры 3, 6, 9 и 12"  Да что ты говоришь?..
я знаю, что нада использовать процедуру OutTextXY... но пчему т у мну как-то не так вышло...
ааа.. помогите мну пожалуйста... или хотя бы подскажите как деалть... ((
З.Ы.: НУ Ж ОЧ ГОРИТ... Жаль
вот прога если что:

Код:
Uses Graph, CRT; 
var
d,r,r1,r2,rr,k,
x1,y1,x2,y2,x01,y01: Integer;
Xasp,Yasp : Word;
begin
  {Инициируем графику}
  d := detect; InitGraph(d, r, '');
  k := GraphResult; if k <> grOK then   WriteLn(GraphErrorMSG(k))
  else begin
     {Определяем отношение сторон и размеры экрана}
     x1 := GetMaxX div 2;
     y1 := GetMaxY div 2;
     GetAspectRatio(Xasp, Yasp);
    {Вычисляем радиусы:}
    r:= round(3*GetMaxY*Yasp/8/Xasp);
    r1 := round(0.9*r); {Часовые деления}
    г2 := round(0.95*r); {Минутные деления}
    {Изображаем циферблат}
    SetBkColor(blue);
    SetFillStyle(SolidFill,15);
    SetColor(15);
    PieSlice(x1,y1,0,360,round(1.02*r));
    SetColor(6);
    Circle(x1,y1,r); {Первая внешняя окружность}
    Circle(x1,y1,round(1.02*г) ); {Вторая окружность}
    for k := 0 to 59 do {Деления циферблата}
       begin
          if k mod 5=0
            then  rr := r1 {Часовые деления}
            else rr : = r2; {Минутные деления}
         {Определяем координаты концов делений}
         x0l := x1+Round(rr*sin(2*pi*k/60));
         y0l := y1-Round(rr*Xasp*cos(2*pi*k/60)/Yasp);
         x2 := x1+Round(r*sin(2*pi*k/60));
         y2 := y1-Round(r*Xasp*cos(2*pi*k/60)/Yasp);
         Line(x01,y01,x2,y2) {Выводим деление}
      end;
   {Готовим вывод стрелок}
   SetWriteMode(XORPut);
   SetLineStyle(SolidLn,0,ThickWidth);
   SetColor(9);
   {Счетчик минут в одном часе}
   {k = минуты}
   r := 0;
   {Цикл вывода стрелок}
   repeat
     for k := 0 to 59 do if not KeyPressed then
       begin
             (Координаты часовой стрелки}
         x2 := x1+Round(0.85*r1*sin(2*pi*r/60/12));
         y2 := y1-Round(0.85*r1*Xasp*cos(2*pi*r/60/12)/Yasp);
        {Координаты минутной стрелки}
        x01 := x1+Round(r2*sin(2*pi*k/60));
        y01 := y1-Round(r2*Xasp*cos(2*pi*k/60)/Yasp);
        {Изображаем стрелки}
        Line(x1,y1,x2,y2);
        Line(x1,y1,x01,y01) ;
        Delay(100); {Для имитации реального темпанужно установить задержку 60000}
       {Для удаления стрелок выводим их еще раз!}
       Line(x1,y1,x01,y01);
       Line(x1,y1,х2,у2);
       {Наращиваем и корректируем счетчик минут в часе}
       inc(r);
       if r=12*60 then
         r := 0;
    end;
  until KeyPressed;
  CloseGraph;
  end;
end.

« Последнее редактирование: 06-08-2008 18:12 от Алексей1153++ » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 29-04-2008 16:48 » 

Дык 3 и 9 будут в разные стороны от центра по горизонтали на самом большом радиусе (или чуть дальше, или ближе - по желанию).
12 и 6 тоже в разные стороны от центра по вертикали аналогично.

А чего там в OutTextXY сложного? Только он цифры не понимает, нужно строчкой передавать.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 29-04-2008 17:04 » 

вот куда бы это влепить?
Код:
if k mod 15=0 
 then begin
    text= str(k mod 15);
    OutTextXY(...)
 end;
синтаксиса не помню
OutTextXY(text, X2,Y2)

может еще посчитать какое-нибудь смещение
а влепить там где закончили рисовать деления


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
муча
Гость
« Ответ #3 : 29-04-2008 18:42 » 

насчёт "влепить там где закончили рисовать деления" ет я, слава те Господи, додумалась... ^_^
я вот тут ввела то, что выше расположено... и... и... у мну Error 88 выскакивает...
курсор стоит после слова text на "=" (надеюсь доступно объяснила... 0_о) и пишет "Error 88 "(" expected"
з.ы.: ааа... не ругайтесь... я правда не могу сообразить... (((



Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 29-04-2008 19:27 » 

муча, ой извини..
Твоя задача преобразовать Число в строку
для этого есть процедура
Str(X:n:d,S), где X число, S - строка.
А то что те компилятор выдает ошибку, так то правильно. Он же тебе порусски сказал, что ему нужно
а тебе был приведен условный код.
итак
Код:
if k mod 15=0 
 then begin
    str( (k mod 15),text);
    OutTextXY(X,Y,text)
 end;
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 01-05-2008 07:19 » new

Sla, Text - слово занятое - это тип текстового файла. Лучше что-нибудь нейтральное, например S. Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
муча
Гость
« Ответ #6 : 01-05-2008 20:54 » 

а-а-а-а!!! да! да! я сделала ето! эм... вернее... МЫ сделали это! я сначала никак не могла сообразить, что нада делать... и решила отдохноуть один день от етова паскаля... ) а сейчас села... и вдруг всё поняла! за 10 мин фсе цифры проставила... ^_^ пасибки вам большое-пребольшое... ^_^ я б без вас не справилась... ^_^
p.s.: у-у-у-х-у... ^_^
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines