![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Рэнэ |
![]()
Сообщение
#1
|
Гость ![]() |
Написать программу, которая выводит на экран графики динамики изменения максимального, минимального и среднего курсов
доллара за заданное количество дней. Показать градацию осей. Исходные данные сформировать в текстовом файле. Построение графика оформить в виде процедур. Параметры процедуры: массив дат, количество дней, массивы максимальных, минимальных и средних значений курса доллара. Изображение должно занимать большую часть. Программа не должна опираться на конкретные значения экрана. ![]() ![]() Даже не знаю с чего начать, хоть подкиньте какую-нибудь похожую программу... так сказать для примера ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Если тебя устроит построение столбчатой диаграммы (гистограммы) - то вот здесь есть пример: Файлы и графика.
Можно просто рисовать через LineTo... Это тоже где-то было, попробуй воспользоваться поиском... Сообщение отредактировано: volvo - 10.06.2007 10:24 |
Рэнэ |
![]()
Сообщение
#3
|
Гость ![]() |
Построение графика оформить в виде процедуры.
Параметры процедуры: - массив дат(я так понимаю, что это массив значений Х) - количество дней (количество х) - масив максимального, минимального и среднего значений курса доллара (масивы знчений Y) Как они должны быть записаны здесь? И как потом используя их построить график (Procedure Vivod)? Цитата Program Grafic; Uses Crt, Graph; Var x, y : integer; St : String[4]; A, Mx, Mx01, Mx09, Msx, My, My09, My005, Msy : Integer; F1: Text; {-------Выход из графического режима----------} PROCEDURE grafika_off; BEGIN closegraph; ReadKey; END; {-------Переход в графический режим----------} PROCEDURE grafika_on; var Ga, Gm, Error : Integer; BEGIN Ga := Detect; Gm := Detect; InitGraph (Ga, Gm, 'c:\bp\bgi'); Error := GraphResult; If Error <> Grok Then Begin Writeln('Ошибка!Графический драйвер не найден',#10#13,GraphErrorMSG (Error)); Halt; End; End; {-------Вывод данных из файла----------} Procedure Vivod; Begin Assign (F1, 'c:\Vivod.txt'); Reset (F1); While Not EOF (F1) do begin Readln (F1,x, y); LineTo(round(Mx01+Msx*x),round(My09-Msy*y)); end; Close (F1); End; {-------Определение используемых значений----------} procedure Opredelenie; Begin Mx := GetMaxX; Mx01 := Round (0.1* Mx); Mx09 := Round (0.9* Mx); My := GetMaxY; My09 := Round (0.9*My); My005 := Round (0.05* My); SetColor (12); end; {-------Вывод осей координат----------} procedure osikoord; begin Line (20, My09, Mx-10, My09); Line (Mx01, My005, Mx01, My-9); {Risovanie strelok} Line (Mx-20, My09-3, Mx-10, My09); Line (Mx-20, My09+3, Mx-10, My09); Line (Mx01, My005, Mx01-3, My005+10); Line (Mx01, My005, Mx01+3, My005+10); {Nadpisi po osam X u Y} SetTextStyle (0, 0, 2); SetColor(14); OutTextXY (Mx01-40, My005, ' Y '); OutTextXY (Mx-40, My09-25, ' X '); SetTextStyle (0, 0, 1); SetColor(12); End; {-------Разметка осей----------} procedure Razmetka; begin {Разметка оси Y} Msy := Round (My09 / 40); y := 1; While y<=35 Do Begin Str (Y, St); A := Round (My09 - Msy * y); Line (Mx01+2, A, Mx01-2, A); OutTextXY (Mx01-40, A-2, St); y := y+1; End; {Разметка оси x} Msx := Round (Mx09 / 20); x := 1; While x<=10 Do Begin Str (x, St); A := Round (Mx01 + Msx * x); Line (A, My09+3, A, My09-3 ); OutTextXY (A, My09+5, St); x := x + 1; end; SetColor(2); end; {-------Вывод графика----------} Procedure VivodGraph; Begin Opredelenie; osikoord; Razmetka; Vivod; readln; End; {-------Основная программа----------} BEGIN grafika_on; VivodGraph; grafika_off; END. Сообщение отредактировано: Рэнэ - 11.06.2007 13:45 |
Рэнэ |
![]()
Сообщение
#4
|
Гость ![]() |
Чуток переделала свой график... опять таки за исключением этих параметров процедур..
![]() Теперь больше похоже на правду... только вот под осью Х лишняя линяя вылезает из точки (0,0), в чем проблема (см. пост выше)? ![]() |
Рэнэ |
![]()
Сообщение
#5
|
Гость ![]() |
Параметры процедуры:
![]() - массив дат - количество дней - масив максимального, минимального и среднего значений курса доллара Выдает мне сообщение "Нет возможности считать переменные данного типа", опять дело в типах данных? Или я с параметрами ошиблась? ![]() Подскажите... ![]() Цитата {-------Построение графика----------} Procedure Draw; const n=20; type MasDat=array[1..n] of Integer; MasMax=array[1..35] of Real; MasMin=array[1..35] of Real; MasSred=array[1..35] of Real; Var x1,x2,x3:MasDat; y1:MasMax; y2:MasMin; y3:MasSred; Begin Assign (F1, 'c:\Vivod.txt'); Reset (F1); While Not EOF (F1) do begin Read (F1,x1); Readln (F1,y2); LineTo(round(Mx01+Msx*x1), round(My09-Msy*y2)); end; Close (F1); end; |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата Read (F1,x1); Хотя, смотрю я на строку: LineTo(round(Mx01+Msx*x1), round(My09-Msy*y2));, и у меня почему-то такое чувство, что ты просто перепутала типы... Скорее всего, X1 и Y2 имеют просто типы Integer и Real соответственно... |
Рэнэ |
![]()
Сообщение
#7
|
Гость ![]() |
С процедурами я вроде бы разобралась, но вот сам вывод графика что-то не получается... точки он выводит верно, но вот линии от одной точки до другой выводяться неправильно, но что хуже он рисует от последней выведенной точки линию вниз к оси (но ее быть не должно)... время поджимает, а никак понять не могу в чем тут дело?
![]() Цитата Program Grafic; Uses Crt, Graph; Const n=20; Type MasData = Array[1..n] of Integer; MasMax = Array[1..35] of Real; MasMin = Array[1..35] of Real; MasSred = Array[1..35] of Real; Var x: integer; b: MasData; d: MasData; e: MasData; c : MasMax; k:MasMin; l: MasSred; y:real; St : String[4]; A,i, Mx, Mx01, Mx09, Msx, My, My09, My005, Msy : Integer; F1: Text; {-------Выход из графического режима----------} PROCEDURE grafika_off; BEGIN closegraph; END; {-------Переход в графический режим----------} PROCEDURE grafika_on; var Ga, Gm, Error : Integer; BEGIN Ga := Detect; Gm := Detect; InitGraph (Ga, Gm, 'c:\bp\bgi'); Error := GraphResult; If Error <> Grok Then Begin Writeln('Ошибка!Графический драйвер не найден',#10#13,GraphErrorMSG (Error)); Halt; End; End; {-------Вывод данных из файла----------} Procedure Vivod(var b: MasData;c: MasMax;d: MasData;k:MasMin;e: MasData;l: MasSred); Begin Assign (F1, 'c:\Vivod.txt'); Reset (F1); While Not EOF (F1) do begin For i:=1 to n do Read(F1,b[i],c[i]); LineTo(round(Mx01+Msx*b[i]), round(My09-Msy*c[i]),100); Read(F1,d[i],k[i]); LineTo(round(Mx01+Msx*d[i]), round(My09-Msy*k[i]),10); Read(F1,e[i],l[i]); LineTo(round(Mx01+Msx*e[i]), round(My09-Msy*l[i]),10); end; Close (F1); End; {-------Определение используемых значений----------} procedure Opredelenie; Begin Mx := GetMaxX; Mx01 := Round (0.1* Mx); Mx09 := Round (0.9* Mx); My := GetMaxY; My09 := Round (0.9*My); My005 := Round (0.05* My); SetColor (12); end; {-------Вывод осей координат----------} procedure osikoord; begin Line (20, My09, Mx-10, My09); Line (Mx01, My005, Mx01, My-9); {Risovanie strelok} Line (Mx-20, My09-3, Mx-10, My09); Line (Mx-20, My09+3, Mx-10, My09); Line (Mx01, My005, Mx01-3, My005+10); Line (Mx01, My005, Mx01+3, My005+10); {Nadpisi po osam X u Y} SetTextStyle (0, 0, 2); SetColor(14); OutTextXY (Mx01-40, My005, ' Y '); OutTextXY (Mx-40, My09-25, ' X '); SetTextStyle (0, 0, 1); SetColor(12); End; {-------Разметка осей----------} procedure Razmetka; begin {Разметка оси Y} Msy := Round (My09 / 40); y := 1; While y<=35 Do Begin Str (Y, St); A := Round (My09 - Msy * y); Line (Mx01+2, A, Mx01-2, A); OutTextXY (Mx01-40, A-2, St); y := y+1; End; {Разметка оси x} Msx := Round (Mx09 / 20); x := 1; While x<=n Do Begin Str (x+1, St); A := Round (Mx01 + Msx * x); Line (A, My09+3, A, My09-3 ); OutTextXY (A, My09+5, St); x := x + 1; end; SetColor(2); end; {-------Вывод графика----------} Procedure VivodGraph; Begin Opredelenie; osikoord; Razmetka; Vivod(b,c,d,k,e,l); readln; End; {-------Основная программа----------} BEGIN grafika_on; VivodGraph; grafika_off; END. Сообщение отредактировано: Рэнэ - 13.06.2007 12:41 |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Файл данных присоедини (именно присоедини, а не скопируй как текст - важно видеть ИМЕННО твой файл, до последнего байта!), пока его не будет - это все "испорченные телефоны", можно улучшать и улучшать то, что ты привела, но одна лишняя строка в файле уничтожат всю работу...
|
Рэнэ |
![]()
Сообщение
#9
|
Гость ![]() |
Нужна помощь...
До сдачи один день, помогите доделать программу... ![]() ![]() Как сделать так чтобы вместо того чтобы проводить линии из начала координат до каждой точки, он проводил линию от точки до точки... Цитата {-------Вывод данных из файла----------} Procedure Vivod(var b: MasData;c: MasMax;d: MasData;k:MasMin;e: MasData;l: MasSred); Begin Assign (F1, 'c:\Vivod.txt'); Reset (F1); While Not EOF (F1) do begin If i:=1 to n do begin Read(F1,b[i],c[i]); MoveTo(Mx01,My09); LineTo(round(Mx01+Msx*b[i]), round(My09-Msy*c[i])); SetColor (7); Read(F1,d[i],k[i]); LineTo(round(Mx01+Msx*d[i]), round(My09-Msy*k[i])); SetColor (4); Read(F1,e[i],l[i]); LineTo(round(Mx01+Msx*e[i]), round(My09-Msy*l[i])); SetColor (1); end; end; Close (F1); End; Сообщение отредактировано: Рэнэ - 14.06.2007 2:03 |
Рэнэ |
![]()
Сообщение
#10
|
Гость ![]() |
Выдает ошибку: Нужен идентефикатор поля, в чем проблема?
Цитата {-------Вывод данных из файла----------} Procedure Vivod(var b: MasData;c: MasMax); var i:byte; p:array[1..6] of PointType; Begin Assign (F1, 'c:\Vivod.txt'); Reset (F1); While Not EOF (F1) do begin for i:=1 to n do begin Read(F1,b[i],c[i]); MoveTo(Mx01,My09); for i:=1 to 6 do begin b[i]:=(b[i]-Msx+20)*Mx; c[i]:=getmaxy - (c[i]-Msy+40)*My; end; for i:=1 to 6 do begin p[i].b:=trunc(b[i]); p[i].c:=trunc(c[i]); end; drawpoly(6,p); readln; end; end; Close (F1); End; End; procedure Opredelenie; Begin Mx := GetMaxX; Mx01 := Round (0.1* Mx); Mx09 := Round (0.9* Mx); My := GetMaxY; My09 := Round (0.9*My); My005 := Round (0.05* My); SetColor (12); end; |
Ozzя |
![]()
Сообщение
#11
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
p[i].x:=trunc(b[i]); Ибо тип описан как
Сообщение отредактировано: Ozzя - 14.06.2007 8:53 |
Рэнэ |
![]()
Сообщение
#12
|
Гость ![]() |
выдает: Недопустимая операция с плавающей запятой...
![]() Цитата {-------Вывод данных из файла----------} Procedure Vivod(var b: MasData;c: MasMax); var i:byte; p:array[1..6] of PointType; Begin Assign (F1, 'c:\Vivod.txt'); Reset (F1); While Not EOF (F1) do begin for i:=1 to n do begin Read(F1,b[i],c[i]); MoveTo(Mx01,My09); for i:=1 to 6 do begin b[i]:=(b[i]-Msx+20)*Mx; c[i]:=getmaxy - (c[i]-Msy+40)*My; end; for i:=1 to 6 do begin p[i].f:=round(b[i]); p[i].j:=round(c[i]); end; drawpoly(6,p); readln; end; end; Close (F1); End; |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
А тебе говорили уже, что это - "испорченные телефоны"? Говорили... Ты КАЖДЫЙ раз что-то меняешь, что-то химичишь, а сделать самое простое: присоединить файл данных и ПОСЛЕДНЮЮ версию программы в аттач (чтобы можно было проверить, пойми, если я сейчас начну делать то же самое - ошибок никаких не будет, ты что же думаешь, тебя просто так просят что-то сделать? Больше дел других нет? Ошибку надо ЛОКАЛИЗОВАТЬ, для этого мне надо создать абсолютно те же условия, что и у тебя, без данных этого не будет) не желаешь... Так разбирайся сама...
![]() Сообщение отредактировано: volvo - 14.06.2007 9:21 |
Рэнэ |
![]()
Сообщение
#14
|
Гость ![]() |
Извините, пожалуйста
![]() Прикрепленные файлы ![]() ![]() |
Ozzя |
![]()
Сообщение
#15
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
round выдает значение типа real, и ты пытаешься присвоить типу integer
|
мисс_граффити |
![]()
Сообщение
#16
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Цитата round выдает значение типа real ![]() да? а в хелпе пишут: function Round(X: Real): LongInt; что-то ты в Vivod сильно намудрила с циклами. Procedure Vivod(var b: MasData;c: MasMax); -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Ozzя |
![]()
Сообщение
#17
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
А , с int'ом перепутал
Бывает Седина в бороду, мозги наружу ![]() |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Оззя, правда? С каких пор?
![]() Рэнэ, проблема совсем не в этом... Ты некорректно производишь масштабирование, у тебя значения после масштабирования получаются запредельные... Смотри, как я сделал (это отображает график): Procedure Vivod(var b: MasData;c: MasMax); |
Ozzя |
![]()
Сообщение
#19
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Оззя, правда? С каких пор? Дык, как модератора в разделе поменяли ![]() Загляжусь, бывало на профиль нового модератора ![]() И забуду, кто я, что я ![]() ![]() ![]() И всё-таки, Почему упорно пишет тут так p[i].f:=b[i]; { <--- здесь round не нужен, число и так целое }а не так p[i].x=b[i]; { <--- здесь round не нужен, число и так целое } ? |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Потому, что сначала делалось так:
PointType = record(мотоцикл надо свой обязательно, нельзя же пользоваться стандартной PointType) ![]() |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 18:26 |