Прикреплённый файл «grap_3.py»

Загрузка

   1 #!/usr/bin/env python
   2 # -*- coding: UTF-8 -*-
   3 '''
   4 Проект "Построение графика", версия 3
   5 Построение графика произвольной функции
   6 в произвольно диапазоне на текстовом экране произвольных размеров
   7 горизонтальная ориентация картинки
   8 '''
   9 #  name: scale
  10 #  @param x, X0, X1, Z0, Z1
  11 #  @return z
  12 def scale(x, X0, X1, Z0, Z1):
  13   'Преобразует координату x в диапазоне [X0, X1] в координату z в диапазоне [Z0, Z1]'
  14   return Z0+(Z1-Z0)*(x-X0)/float(X1-X0)
  15 
  16 #  name: round
  17 #  @param x
  18 #  @return x, округлённое до ближайшего целого
  19 def round(x):
  20   return int(floor(x+0.5))
  21 
  22 #  name: fun
  23 #  @param x -- параметр, eq -- строковая формула
  24 #  @return вычисленная формула от x
  25 def fun(x, eq):
  26   return eval(eq)
  27 
  28 #  name: grafun
  29 #  @param X0, X1, count, formulae
  30 #  @return список длиной count вида [(x, formulae(x)),..], х из диапазона [X0, X1]
  31 def grafun(X0, X1, count, formulae):
  32   ret=[]
  33   for i in range(count):
  34     x=scale(i, 0, count-1, X0, X1)
  35     y=fun(x, formulae)
  36     ret.append((x,y))
  37   return ret
  38 
  39 #  name: dot
  40 #  @param scr, x, y[, char]
  41 #  @return none
  42 def dot(scr, x, y, char="*"):
  43   'Поставить точку (по умолчанию "*") на виртуальный экран scr'
  44   scr[round(y)][round(x)]=char
  45 
  46 #  name: printscreen
  47 #  @param scr
  48 #  @return none
  49 def printscreen(scr):
  50   'Выводит виртуальный экран scr на текстовый экран'
  51   print ""
  52   for l in range(len(scr)-1,-1,-1):
  53     print "".join(scr[l])
  54 
  55 from math import *
  56 fml=raw_input("Введите функцию в виде формулы от x (например, sin(x)*x ): ")
  57 X0, X1, W, H = input("Введите начало диапазона, конец диапазона, ширину и высоту экрана: ")
  58 X0, X1 = float(X0), float(X1)
  59 
  60 gr=grafun(X0, X1, W, fml)
  61 # Найдём минимум и максимум функции в этих точках
  62 Y0, Y1 = min([e[1] for e in gr]), max([e[1] for e in gr])
  63 
  64 screen=[[" "]*W for i in range(H)]  # "виртуальный экран WxH"
  65 # нарисуем график
  66 for e in gr:
  67   dot(screen, scale(e[0],X0, X1, 0, W-1), scale(e[1],Y0, Y1, 0, H-1))
  68 # выведем получившееся
  69 printscreen(screen)

Прикреплённые файлы

Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.

Вам нельзя прикреплять файлы к этой странице.