График курса доллара, нужна помощь |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
График курса доллара, нужна помощь |
Рэнэ |
Сообщение
#1
|
Гость |
Написать программу, которая выводит на экран графики динамики изменения максимального, минимального и среднего курсов
доллара за заданное количество дней. Показать градацию осей. Исходные данные сформировать в текстовом файле. Построение графика оформить в виде процедур. Параметры процедуры: массив дат, количество дней, массивы максимальных, минимальных и средних значений курса доллара. Изображение должно занимать большую часть. Программа не должна опираться на конкретные значения экрана. Даже не знаю с чего начать, хоть подкиньте какую-нибудь похожую программу... так сказать для примера |
volvo |
Сообщение
#2
|
Гость |
Если тебя устроит построение столбчатой диаграммы (гистограммы) - то вот здесь есть пример: Файлы и графика.
Можно просто рисовать через LineTo... Это тоже где-то было, попробуй воспользоваться поиском... Сообщение отредактировано: volvo - |
Рэнэ |
Сообщение
#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. Сообщение отредактировано: Рэнэ - |
Рэнэ |
Сообщение
#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. Сообщение отредактировано: Рэнэ - |
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; Сообщение отредактировано: Рэнэ - |
Рэнэ |
Сообщение
#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 Пол: Мужской Репутация: 16 |
p[i].x:=trunc(b[i]); Ибо тип описан как
Сообщение отредактировано: Ozzя - |
Рэнэ |
Сообщение
#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
|
Гость |
Извините, пожалуйста
Прикрепленные файлы Vivod.txt ( 68 байт ) Кол-во скачиваний: 266 prog.pas ( 2.67 килобайт ) Кол-во скачиваний: 272 |
Ozzя |
Сообщение
#15
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
round выдает значение типа real, и ты пытаешься присвоить типу integer
|
мисс_граффити |
Сообщение
#16
|
просто человек Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
Цитата round выдает значение типа real да? а в хелпе пишут: function Round(X: Real): LongInt; что-то ты в Vivod сильно намудрила с циклами. Procedure Vivod(var b: MasData;c: MasMax); -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Ozzя |
Сообщение
#17
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
А , с int'ом перепутал
Бывает Седина в бороду, мозги наружу |
volvo |
Сообщение
#18
|
Гость |
Оззя, правда? С каких пор?
Рэнэ, проблема совсем не в этом... Ты некорректно производишь масштабирование, у тебя значения после масштабирования получаются запредельные... Смотри, как я сделал (это отображает график): Procedure Vivod(var b: MasData;c: MasMax); |
Ozzя |
Сообщение
#19
|
Гуру Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: 16 |
Цитата Оззя, правда? С каких пор? Дык, как модератора в разделе поменяли Загляжусь, бывало на профиль нового модератора И забуду, кто я, что я И всё-таки, Почему упорно пишет тут так p[i].f:=b[i]; { <--- здесь round не нужен, число и так целое }а не так p[i].x=b[i]; { <--- здесь round не нужен, число и так целое } ? |
volvo |
Сообщение
#20
|
Гость |
Потому, что сначала делалось так:
PointType = record(мотоцикл надо свой обязательно, нельзя же пользоваться стандартной PointType) |
Текстовая версия | 23.12.2024 20:22 |