免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

直方图、流程图

话说前些天用latex给v6排版某资料,由于包含了高中数学各种内容,不得不撸一些从没撸的无聊东西,其中两样就是直方图和流程图,下面来记录一下,以免日后遗忘(因为平时不排这些,易忘)。

一、直方图

中学阶段的直方图都差不多,格式较为固定,所以还是较好处理的。

%需要的宏包和库
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\tikzset{every picture/.style={>=latex}}

%坐标轴设定
\newcommand\plzj{\$\dfrac{\text{频率}}{\text{组距}}\$}
\newcommand\zftw{--++(0.2,0)
--++(0.05,0.15)--++(0.1,-0.3)--++(0.05,0.15)
--++(0.05,0.15)--++(0.1,-0.3)--++(0.05,0.15)
--++(0.05,0.15)--++(0.1,-0.3)--++(0.05,0.15)
--++(0.2,0)}
\newcommand\zftzb[6]{%
\draw[<->] (0,#3/\zftyb)node[right]{\plzj}
--(0,0)node[below]{0} \zftw --(#1,0)node[above]{#2};
\foreach \i in {1,2,...,#6} {
\node[below] at (\i,0) {\pgfmathparse{int(#4+#5*(\i-1))}\pgfmathresult};
}}
%用法:
%\zftzb{x轴长}{x轴标}{y轴长}{x轴刻度开始}{组距}{刻度个数}
%此处y轴长非实际长度,而是比最高的直方数值大一些即可

%画直方命令
\newcount\zftctr
\newcommand\zftyb{1}%y轴的比例
\makeatletter
\newcommand\zft{\@ifstar{\zftb}{\zfta}}
\makeatother
\newcommand\zfta[2][]{\advance\zftctr by 1\relax
\draw (\zftctr,#2/\zftyb) rectangle (\zftctr+1,0);
\draw[dashed] (0,#2/\zftyb)node[left,#1]{#2}--(\zftctr,#2/\zftyb);
}
\newcommand\zftb[1]{\advance\zftctr by 1\relax
\draw (\zftctr,#1/\zftyb) rectangle (\zftctr+1,0);
}
%用法:
%用\zft{...}画直方,无需标y值的用\zft*{...},
%调节数字位置用\zft[shift={(...)}]{...}

\newcommand\zftkz{%靠左式,即组从0开始时用
\zftctr=-1\relax\def\zftw{}}


%实例
$\begin{document}

\begin{tikzpicture}
\def\zftyb{0.008}%设定y轴比例,一定要先设
\zftzb{8}{分数}{0.036}{40}{10}{7}
%\zftzb{x长}{x标}{y长}{刻度始}{组距}{刻度数}
\zft{0.005}
\zft*{0.015}
\zft{0.030}
\zft{0.025}
\zft{0.015}
\zft{0.010}
\end{tikzpicture}

\begin{tikzpicture}
\def\zftyb{0.01}
\zftkz
\zftzb{6}{指标}{0.045}{10}{10}{5}
\zft[shift={(0,-2pt)}]{0.006}
\zft{0.026}
\zft{0.038}
\zft{0.022}
\zft[shift={(0,2pt)}]{0.008}
\end{tikzpicture}

\end{document}$

效果:
zft.png
2016-11-22 15:56


测试文档: Zhift.tex (1.89 KB)
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

二、流程图

\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{
shapes.geometric,   %几何形状
calc,               %计算
positioning         %用于定位
}
\tikzset{
every picture/.style={
>=latex,
node distance=5mm and 5mm
%有无and的区别见手册positioning部分
}}

%定义框形状
\tikzstyle{SS}      %开始结束
=[rounded corners, draw]
\tikzstyle{IO}      %输入输出
=[trapezium, trapezium left angle=70, trapezium right angle=110, draw]
\tikzstyle{NR}      %内容
=[draw]
\tikzstyle{PD}      %判断
=[diamond, aspect=4, draw, inner sep=1.5pt]


%例1
\(
\begin{tikzpicture}[->]
%放框
\node[SS](start){开始};
\node[IO, below=of start](in){输入$N$};
\node[NR, below=of in](n1){$k=1$, $S=0$};
\node[NR, below=of n1](n2){$S=S+\dfrac1{k(k+1)}$};
\node[NR, right=of n2](n3){$k=k+1$};
\node[PD, below=of n2](pd){$k<N$};
\node[IO, below=of pd](out){输出$S$};
\node[SS, below=of out](stop){结束};
%连线
\path
(start) edge (in)
(in) edge (n1)
(n1) edge (n2)
(n2) edge (pd)
(pd) edge node[right]{否}(out)
(out) edge (stop);
\draw (pd.east)node[below]{是} -| (n3);
\draw (n3) |- ($(n1.south)!0.5!(n2.north)$);
\end{tikzpicture}
\)

效果:
lct1.png
2016-11-22 16:14


%例2
\(
\begin{tikzpicture}[->]
\node[SS](start){开始};
\node[NR, below=of start](n1){$a=1$};
\node[NR, below right=1mm and 5mm of n1](n2){$a=a^2+2$};
\node[PD, below=8mm of n1](pd){$a<10$?};
\node[IO, below=of pd](out){输出$a$};
\node[SS, below=of out](stop){结束};
\path (start) edge (n1)
(n1) edge (pd)
(pd) edge node[right]{否}(out)
(out) edge (stop);
\draw (pd.east)node[below]{是} -| (n2);
\draw (n2) -- (n2-|n1);
\end{tikzpicture}
\)

效果:
lct2.png
2016-11-22 16:14


%例3
\(
\begin{tikzpicture}[->]
\node[SS](start){开始};
\node[IO, below=of start](in){输入$x$, $t$};
\node[NR, below=of in](n1){$M=1$, $S=3$, $k=1$};
\node[PD, below=of n1](pd){$k\le t$};
\node[NR, on grid, below left=1cm and 2cm of pd](n3){$M=\dfrac Mkx$};
\node[IO, on grid, below right=1cm and 2cm of pd](out){输出$S$};
\node[NR, below=of n3](n4){$S=M+S$};
\node[NR, below=of n4](n5){$k=k+1$};
\node[SS, below=of out](stop){结束};
\path (start) edge (in)
(in) edge (n1)
(n1) edge (pd)
(n3) edge (n4)
(n4) edge (n5)
(out) edge (stop);
\draw (pd) -| node[left]{是} (n3);
\draw (pd) -| node[right]{否} (out);
\draw (n5.west)--++(-0.5,0) |- ($(n1.south)!0.5!(pd.north)$);
\end{tikzpicture}
\)

效果:
lct3.png
2016-11-22 16:14



更多实例见测试文档: LiuCT.tex (5.25 KB)
冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)
口号:珍爱生命,远离考试。

TOP

嘿嘿,果然是需要用时才搞。

这个很有参考价值,特别对试卷排版有要求的。

TOP

回复 3# isee

没事谁会去搞这些无聊的东西

TOP

唉,有一阵还想学学怎么编程序,结果最终没学下去。看网友编程解决一些问题总觉得很强大的样子,从智力趣题到网页分析,还有好多东西都用程序来做。

TOP

本帖最后由 青青子衿 于 2019-3-14 13:11 编辑

回复 4# kuing
没事谁会去搞这些无聊的东西
kuing 发表于 2016-11-22 17:09

我呀
程序框图真好玩!
  1. \begin{document}

  2. \begin{tikzpicture}
  3. \begin{scope}[->]
  4. \node[SS](start){开始};
  5. \node[IO, below=of start](in)           %输入正整数
  6. {输入$M$};
  7. \node[PD, below=of in](pd1)           %判断正整数
  8. {$M$是否为正整数};
  9. \node[NR, below=of pd1,align=center](n1)            %求出标准分解
  10. {求出$M$的\\标准素数分解};
  11. \node[PD, below=of n1,align=center,font=\zihao{5},scale=0.7](pd2)       %判断是否含模4余3的素因子
  12. {是否含$3\pmod{4}$型素因子};
  13. \node[IO, on grid, below right=4.5cm and 3cm of pd2,align=center,font=\zihao{6}](out1)  %输出能分解为两个整数的平方和
  14. {输出$M$能\\分解为两个\\整数的平方和};
  15. \node[NR, on grid, below left=1cm and 3cm of pd2,align=center,font=\zihao{6}](n2)  %只求出模4余3型素因子的次数
  16. {只求出\\$3\pmod{4}$型\\素因子的次数};
  17. \node[PD, below=of n2,align=center,font=\zihao{5},scale=0.7](pd3)    %判断每一个素因子的次数是否都是偶数
  18. {每一个所求次数是否都是偶数};
  19. \node[IO, below=of pd3,align=center,font=\zihao{6}](out2)              %输出M不能分解为两个整数的平方和
  20. {输出$M$不能\\分解为两个\\整数的平方和};
  21. \node[below=5cm of pd2](bstop){};                                    %结束之前
  22. \node[SS, below=6cm of pd2](stop){结束};                             %结束

  23. \path
  24. (start) edge (in)
  25. (in) edge (pd1)
  26. (pd1) edge (n1)
  27. (n1) edge (pd2)
  28. (n2) edge (pd3);

  29. \draw (pd1.east)--++(0.5,0)node[right]{否} |- ($(start.south)!0.5!(in.north)$);
  30. \draw (pd1) edge node[left]{是} (n1);
  31. \draw (pd2) -| node[left]{是} (n2);
  32. \draw (pd2) -| node[right]{否} (out1);
  33. \draw (pd3) edge node[right]{否} (out2);
  34. \end{scope}
  35. \draw (out2)|- (bstop.center);
  36. \draw (out1)|- (bstop.center);
  37. \draw[->](bstop.center)--(stop.north);
  38. \draw[->](pd3.east)--node[above]{是}(pd3.east-|out1.north);
  39. \end{tikzpicture}


  40. \end{document}
复制代码
3329.png
2019-3-13 22:35

TOP

返回列表 回复 发帖