![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
R@f |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: ![]() ![]() ![]() |
Доброго времени суток! Нужна подсказка по проге: «Изобразить на экране гармонические колебания точки вдоль некоторого горизонтального отрезка. Если длина отрезка равна С, то расстояние от левого конца до точки С (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. Единственное, что надо - изобразить вдоль какого-то отрезка С. А я пока могу только вдоль экрана, слева-направа. Подскажите, что надо добавить. |
![]() ![]() |
volvo |
![]()
Сообщение
#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 - координата Х конца отрезка ... |
R@f |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: ![]() ![]() ![]() |
Volvo! Спасибо дружище! Всё ОК! Я сделал отрезок С с координатами (0,С). Вот еще думаю, хорошо бы было, чтобы этот отрезок длиною С изображался линией на экране, вместо (9-ой снизу строки)
Код line(0, 200,GetMaxX, 200); Но если вместо GetMaxX ставишь С, он ругается. Как С в число преобразовать? Через val, что ли? |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
С у тебя Real, для Line требуется целое число... Round "спасет отца русской демократии!"
![]() |
R@f |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: ![]() ![]() ![]() |
Точно, спасёт! Я забил
Код xc:=Round(c) Еще раз спасибо! Удачи! Сообщение отредактировано: R@f - 14.12.2005 19:31 |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:15 |