Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] График линейной функции 
:(
    Опции темы
supervladislav
Дата 18.3.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


///\\\///\\\///\\\
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 18.5.2006

Репутация: нет
Всего: -9



народ помогите может у кого завалялась ента прога)))или ктонить хотябы подскажет с чего начать,а то я с графикой чего-то пока не фу фу.Суть задачи - надо вывести  график функции y=kx+b и построить его на плоскости.
PM MAIL   Вверх
scai
Дата 19.3.2007, 03:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Неофит
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.1.2007
Где: г. Загорск

Репутация: 2
Всего: 2



каков вопрос, таков ответ smile
Turbo Pascal 7.0: help\index\graph

ввод k и b,
рисуешь оси, с точкой "о" посреди экрана.
goto(x,y); writeln - названия осей
можешь единичный отрезок на оси обозначить.
если abs(b) больше половины экрана в точках, можно масштабировать, поделив b и значение единичного отрезка на 10, 100 и т.д.
берешь x - x-правой границы экрана, считаешь у по функции. то же самое с левой. в этих вычислениях, естественно, учитываешь, что (0,0) экрана и (0,0) графика - разные точки
line(....)



Это сообщение отредактировал(а) scai - 19.3.2007, 04:07
--------------------
 
PM MAIL   Вверх
supervladislav
Дата 19.3.2007, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


///\\\///\\\///\\\
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 18.5.2006

Репутация: нет
Всего: -9



Цитата(scai @ 19.3.2007,  03:43)
каков вопрос, таков ответ smile
Turbo Pascal 7.0: help\index\graph

ввод k и b,
рисуешь оси, с точкой "о" посреди экрана.
goto(x,y); writeln - названия осей
можешь единичный отрезок на оси обозначить.
если abs(b) больше половины экрана в точках, можно масштабировать, поделив b и значение единичного отрезка на 10, 100 и т.д.
берешь x - x-правой границы экрана, считаешь у по функции. то же самое с левой. в этих вычислениях, естественно, учитываешь, что (0,0) экрана и (0,0) графика - разные точки
line(....)

а по подробнее ))))я понимаю что енто очень просто как вывести цифры на осях ,только циклом ну вместе с отрезками естевственно.
PM MAIL   Вверх
scai
Дата 19.3.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Неофит
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.1.2007
Где: г. Загорск

Репутация: 2
Всего: 2



прости, что время тяну, назови количество кода в обьяснении от 1(на пальцах) до 10(полная прога). 
--------------------
 
PM MAIL   Вверх
supervladislav
Дата 20.3.2007, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


///\\\///\\\///\\\
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 18.5.2006

Репутация: нет
Всего: -9



думаю ,что даже больше чем 10)))
PM MAIL   Вверх
scai
Дата 21.3.2007, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Неофит
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.1.2007
Где: г. Загорск

Репутация: 2
Всего: 2



вызвался, надо делать)))))))))))))
извини, еще раз. У меня тут по учебе обвал. Раньше вечера четверга - никак! Я, в общем все придумал - задача оказалась интереснее, чем на первый взгляд. ты скажи, тебе к какому времени надо? Полную прогу напишу.
--------------------
 
PM MAIL   Вверх
Alexeis
Дата 21.3.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459



scai, supervladislav промахнулся кнопкой и почему-то написал это в репорт. Цитирую его.
Цитата

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



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
scai
Дата 23.3.2007, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Неофит
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.1.2007
Где: г. Загорск

Репутация: 2
Всего: 2



чтобы экзешник работал независимо см http://forum.vingrad.ru/topic-81617.html. Сам я не пробовал.
Код

program g;
uses crt,graph;

var
   k,b,mdf:double;{k,b,модификатор для больших значений}
   x1,y1,x2,y2,xscr,yscr,lines:integer;{  координаты для точек графика, х и у размеры экрана} 

function initGr:boolean;{ инициализация графики, подробности в хелпе по graph\прцедуры\initgraph и graph\констфнты\видеорежимы}
          var
              driv,mode,ec:integer;
          begin
               driv:=detect;
               mode:=ibm8514hi;{ можно не и инициализировать, а если что, подбери режим уже на машине, на которой будешь прогу сдавать}
               initGraph(driv,mode,'');
               ec:=graphresult;
               if ec=grok then initgr:=true
               else begin writeln('error initialising graph:', GraphErrorMsg(ec)); initgr:=false;
               end;
          end;


procedure initmdf;{ считаем значение модификатора}
          begin

               if ((xscr/2)>abs(b))and(yscr>(abs(b/k))){если график помещается}
                  then
                      mdf:=1
                  else begin
               if (abs((b/2))>(abs(b/2/k))){по точкам пересечения с осями}
                  then mdf:=abs((b/(xscr/2)))
                  else mdf:=abs(((b/k)/(yscr/2)));
                  end;
          end;

procedure initCoord;{считаем координаты для графика, (0,0) находится в левом верхнем углу экрана}
          begin
               x1:=0;
               x2:=xscr;
               y1:=round((yscr/2)-((k*(-xscr*mdf/2)+b)/mdf));
               y2:=round((yscr/2)-((k*(xscr*mdf/2)+b)/mdf));
          end;


procedure drawgr;
          var
             sbuf1,sbuf2,sbuf:string;
          begin
               {$F+}initgr;{$F-}
               {оси}
               line(0,yscr div 2,xscr,yscr div 2);        
               line(xscr div 2,0,xscr div 2,yscr);
               {маркеры ед. отркзков}
               line(xscr div 2 - 2, yscr div 2 - 20,xscr div 2 +3 ,yscr div 2 - 20);
               line(xscr div 2 + 20,yscr div 2 - 2,xscr div 2 + 20,yscr div 2+3);
               {подписи для ед. отрезков}
               str(round(20*mdf),sbuf);
               OutTextXY((xscr div 2 + 20),(yscr div 2 + TextHeight(sbuf)+2),sbuf);
               outTextXY(xscr div 2 + 5, yscr div 2 - 20 -textheight(sbuf)div 2 , sbuf);
               {график}
               setcolor(3);{не проверял, но, возможно, константы цветов для разных видеорежимов отличаются}
               line(x1,y1,x2,y2);
               {вывод уравнения функции}
               if k<>1 then str(k:5:2,sbuf1) else sbuf1:='';
               if k<>0
                  then begin str(b:5:2,sbuf2); sbuf2:='x + '+sbuf2 end
                  else sbuf2:='';
               sbuf:='y = '+ sbuf1+sbuf2;
               setcolor(63);
               outtextXY(0,textheight('l'),sbuf);
               readkey;
               closegraph;
          end;

begin
     if initgr { это надо сделать, чтобы получить параметры экрана }
     then begin
     xscr:=getmaxx;
     yscr:=getmaxy;
     closegraph;
     writeln('input k');
     readln(k);
     writeln('input b');
     readln(b);
     initmdf;
     {writeln(mdf);}
     initcoord;
     {writeln('max x = ',xscr,' max y = ',yscr,'x1 = ',x1,' y1 = ',y1,' x2 = ',x2,' y2 = ',y2);}
     writeln('press anykey');
     readkey;
     drawgr;
     else begin
     closegraph;
     writeln('press anykey');
     readkey;
     end;
end.

стрелочки сам рисуйsmile 

Это сообщение отредактировал(а) scai - 23.3.2007, 01:39
--------------------
 
PM MAIL   Вверх
scai
Дата 23.3.2007, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Неофит
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.1.2007
Где: г. Загорск

Репутация: 2
Всего: 2



коммнты расподробнил
--------------------
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.