IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Колебание точки вдоль отрезка, Графика
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Доброго времени суток! Нужна подсказка по проге: «Изобразить на экране гармонические колебания точки вдоль некоторого горизонтального отрезка. Если длина отрезка равна С, то расстояние от левого конца до точки С (1+coswt)/2, где w – некоторая постоянная. Предусмотреть возможность управления частотой колебаний w при помощи клавиш.»
Вот код:
Код

uses Crt, Graph;
var  Drv, Md, x0, x: integer;  c, w, t, m1: real;  cs, ws: string; q: char;
function vvod(xnps: integer; ynps: integer; b:integer): real;
     var j: string;  a: real;  Code: integer;
     begin
          repeat
              gotoxy(xnps,ynps);
              writeln('                             ');
              gotoxy(1,ynps+1);
              writeln('                             ');
              gotoxy(xnps,ynps);
              readln(j);
              val(j,a,Code);
              if Code <> 0 then begin Writeln('Вводите цифры!'); readkey end;
          until (a <= b)and(a > 0);
          vvod := a
     end;
begin
     clrscr;
     gotoxy(1,4); write('Введите C => '); c := vvod(15, 4, 640);
     gotoxy(1,6); write('Введите w => '); w := vvod(15, 6, 640);
     DetectGraph(Drv, Md);  
     InitGraph(Drv, Md, 'c:\bp\bgi');
     m1 := GetMaxX/c;
     OutTextxy(1,3,'Ghange w - key arrowUp and arrowDn.');
     str(Round(c),cs);
     OutTextxy(1,20,'C = '); OutTextxy(40,20,cs);
     OutTextxy(80,20,'w = ');
     OutTextxy(10,450,'For EXIT press Esc.');

     x0 := round((GetMaxX-c)/2);
     t := 0;
     repeat
           q := #0;
           str(Round(w),ws);
           SetColor(11);
           OutTextxy(120,20,ws);
           if keypressed then
              begin
                   SetColor(0);
                   OutTextxy(120,20,ws);
                   q := readkey;
                   case q of
                         #080: w := w*0.9;
                         #072: w := w*1.1;
                   end;
                   str(Round(w),ws);
                   SetColor(11);
                   OutTextxy(120,20,ws);
               end;
               x0 := round((GetMaxX-c)/2);
               SetColor(9);
               line(0, 200,GetMaxX, 200);
               x := Round(C*m1*(1+cos(w*t))/2);
               PutPixel(x,220, white);
               Delay(9000);
               SetColor(0); line(0, 220,GetMaxX, 220);
                t := t + 2*pi/500;
     until q = #27;
     CloseGraph;
end.

Единственное, что надо - изобразить вдоль какого-то отрезка С. А я пока могу только вдоль экрана, слева-направа. Подскажите, что надо добавить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
изобразить вдоль какого-то отрезка
Смасштабируй...
x := Round(C*m1*(1+cos(w*t))/2);
замени на
x := start + Round( (C*m1*(1+cos(w*t))/2)*((finish-start)/getmaxx) );

где start - координата Х начала отрезка, finish - координата Х конца отрезка ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Volvo! Спасибо дружище! Всё ОК! Я сделал отрезок С с координатами (0,С). Вот еще думаю, хорошо бы было, чтобы этот отрезок длиною С изображался линией на экране, вместо (9-ой снизу строки)
Код
line(0, 200,GetMaxX, 200);

Но если вместо GetMaxX ставишь С, он ругается. Как С в число преобразовать? Через val, что ли?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






С у тебя Real, для Line требуется целое число... Round "спасет отца русской демократии!" blum.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Точно, спасёт! Я забил
Код
xc:=Round(c)

Еще раз спасибо! Удачи!

Сообщение отредактировано: R@f -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 8.09.2025 2:16
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name