Mod
Download
1 / 24

Mod ?? ??????? Div ?? ?? ?????????? - PowerPoint PPT Presentation


  • 119 Views
  • Uploaded on

Mod 运算 符号与被除数同 Div 运算 符号 与分子分母同时有关系. -9 mod 2=-1 mod -1=1 -9 div 2 =-4 9 div -1 =-4. 6. 7. Maxsize-1. 5. 0. 4. 1. rear. front. 3. 2. program dw; var a:array[0..7] of integer; f,r,i,x,t,j:integer; begin f:=0;r:=0; for i:=1 to 15 do begin

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Mod ?? ??????? Div ?? ?? ??????????' - ramiro


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Mod div

Mod 运算 符号与被除数同

Div 运算 符号 与分子分母同时有关系

  • -9 mod 2=-1

  • mod -1=1

  • -9 div 2 =-4

  • 9 div -1 =-4


Mod div

6

7

Maxsize-1

5

0

4

1

rear

front

3

2

program dw;

var a:array[0..7] of integer;

f,r,i,x,t,j:integer;

begin

f:=0;r:=0;

for i:=1 to 15 do

begin

read(x);

if x<>-1 then begin inc(r);a[r mod 8]:=x end

else inc(f);

end;

for i:=f+1 to r do

begin

j:=i mod 8;

write(a[j]);

inc(t);

end;

writeln;

writeln(t);

writeln(r);

writeln(f);

end.

演示


Mod div

表达式

算术表达式

关系表达式

逻辑表达式

值为布尔型,true false

1>3

(1>3) or (5=5)


Mod div
三、栈的主要运算

(1)栈的初始化操作(栈置空)

top:=0

(2)判断栈空函数

function sempty(stack:arraytype):boolean;

begin

sempty:=(top=0);

end;

(3)判断栈满函数

function sfull(stack:arraytype):boolean;

begin

sfull:=(top=n);

end;


Mod div
三、栈的主要运算

sfull(stack)=true

(4)进栈的操作过程(压栈push)

procedure push(x:integer);

begin

if sfull(stack)

then writeln(‘Stack full!’)

else

begin

top:=top+1; stack[top]:= x;

end;

end;


Mod div

表达式变换

栈的应用之一


Mod div
历届初赛题(选)

(9tg)表达式(1+34)*5-56/7的后缀表达式为( )

A. 1+34*5-56/7 B . -*+1 34 5/56 7

C. 1 34+5*56 7/-D. 1 34 5*+56 7/-

E. 1 34+5 567-*/


Mod div

表达式

中缀表达式(Infix Notation)就是常用的将操作符放在操作数中间的算术表达式。比如1-(2+3)

前缀表达式(Prefix Notation)是指将运算符写在前面,操作数写在后面的不包含括号的表达式,而且为了纪念其发明者波兰数学家Jan Lukasiewicz所以前缀表达式也叫做“波兰表达式”。比如- 1 + 2 3

后缀表达式(Postfix Notation)与之相反,是指运算符写在操作数后面的不含括号的算术表达式,也叫做逆波兰表达式。比如1 2 3 + -


Mod div

中缀式到其他式子的转换方法

a+b*c-(d+e)

第一步:按照运算符的优先级对所有的运算单位加括号~

式子变成拉:((a+(b*c))-(d+e))

第二步:转换前缀与后缀表达式

前缀:把运算符号移动到对应的括号前面

则变成拉:-( +(a *(bc)) +(de))

把括号去掉:-+a*bc+de 前缀式子出现

后缀:把运算符号移动到对应的括号后面

则变成拉:((a(bc)* )- (de)+ )-

把括号去掉:abc*-de+- 后缀式子出现

发现没有,前缀式,后缀式是不需要用括号来进行优先级的确定的。


Mod div
请你试一试

  • 将下列中缀表达式转换成后缀表达式:

16-9*(4+3)

2*(x+y)/(1-x)

(25+8)*(4*(4+7)+7)

16□9□4□3□+*-

2□x□y□+*1□x□-/

25□8□+4□4□7□+*7□+*


Mod div
历届初赛题(选)

(9tg)表达式(1+34)*5-56/7的后缀表达式为( )

A. 1+34*5-56/7 B . -*+1 34 5/56 7

C. 1 34+5*56 7/-D. 1 34 5*+56 7/-

E. 1 34+5 567-*/


Mod div

top

top

top

(25+8)*(4*(4+7)+7)

25 8 + 4 4 7 + * 7 + *

33

8

25


Mod div

pascal求后缀表达式的值。

【问题描述】根据后缀算术表达式计算其值,注意相邻的数值型数据间用空格隔开,数据与运算符间也用空格隔开,表达式以@结束。计算的值保留两位小数,并对第三位四舍五入。

如35 6 +@其值输出为41。

【输入】 输入一行以@结束的表达式

【输出】结果

【样例】

输入36 57 /@

输出0.63

①建立一个栈,放操作数

②从左到右读入表达式,若为数,则将它转换为数值后入栈;若为运算符,则从栈中弹出两个数计算,并将结果入栈。

③若表达式未读完,就重复②。

④最后栈顶的数值(栈中应只剩栈顶元素)则为结果。


Mod div

program track;

var t1:array[1..10000] of real;

top:integer; ch:char; st:string; f:boolean;

x:real;

begin

ch:=''; top:=0; f:=false;

while ch<>'@' do

begin

st:=''; read(ch);

while (ch in ['0'..'9','.']) do

begin f:=true; st:=st+ch; read(ch);

end;

if f then

begin inc(top); val(st,x); t1[top]:=x; f:=false; end;

if ch in ['+','-','*','/'] then

begin

case ch of

'+':t1[top-1]:=t1[top-1]+t1[top];

'-':t1[top-1]:=t1[top-1]-t1[top];

'*':t1[top-1]:=t1[top-1]*t1[top];

'/':t1[top-1]:=t1[top-1] / t1[top];

end;

dec(top);

end;

end;

write(round(t1[1]*100)/100:0:2);

end.

16 4.5 + 5 /@

25 8 + 4 4 7 + * 7 + *@


Mod div
栈的应用二

程序员输入问题:程序员输入程序,出现差错时可以采取以下的补救措施:敲错了一个键时,可以补敲一个退格符“#”,以表示前一个字符无效;发现当前一行有错,可以敲入一个退行符“@”,以表示“@”与前一个换行符之间的字符全部无效。

如:在终端上输入了这样两行字符

PRKJ##OGRAN#MLX;

VAR@CONSTN:#=10;

则实际有效的是:

PROGRAMLX;

CONSTN=10;


Mod div

分析】通过栈操作模拟程序员的输入过程;

逐行处理,处理完一行以后输出结果,栈置空;

某行内逐字读入数据,对每个读入的字符进行如下操作:

既不是退格符#也不是退行符@,则将该字符插入栈顶;

是退格符#,则从栈顶删去一个字符;

是退行符@ ,就把字符栈清为空栈。

PRKJ##OGRAN#MLX;

VAR@CONSTN:#=10;

PROGRAMLX;

CONSTN=10;


Mod div

{栈}

PRKJ##OGRAN#MLX;

VAR@CONSTN:#=10;

{栈指针}

【数据结构】

type stack=array[1..100] of char;

Var s:stack;

top:0..100;

ch:char; i:integer;

procedure setnull(var s:stack); {置栈为空}

begin

top:=0

end;

procedure pop(var s:stack); {出栈}

begin

if top=0 then writeln(‘underflow’)

else top:=top -1;

end;

procedure push(var s:stack;x:char); {入栈}

begin

if top=100 then writeln(‘overflow’)

else begin top:=top+1;s[top]:=x; end;

end;


Mod div

{eof函数,判断文件是否结束}

begin{主程序}

assign(input,’program.in’);reset(input);

assign(output,’program.out’);rewrite(output);

while not eof do

begin

setnull(s);

while not eoln do

begin

read(ch);

case ch of

‘#’:pop(s);

‘@’:setnull(s)

else push(s,ch)

end;

end;

for i:=1 to top do write(s[i]);

writeln;

read(ch);

end ;

close(input);close(output);

end.

{eoln函数,判断一行是否结束}

{出栈}

{置栈为空}

PRKJ##OGRAN#MLX;

VAR@CONSTN:#=10;

{入栈}

{输出}

PROGRAMLX;

CONSTN=10;


Mod div

  • 2010tgdx1.元素R1、R2、R3、R4、R5入栈的顺序为R1、R2、R3、R4、R5。如果第1个出栈的是R3,那么第5个出栈的可能是(ACD )。A.R1         B.R2         C.R4         D.R5

  • 2008tg6.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈,出栈顺序为b,d,c,f,e,a那么栈容量至少应该是(D)。A.6 B.5 C.4 D.3 E.2

  • 3. 2007tg 7. 地面上有标号为A、B、C的3根细柱, 在A柱上放有10个直径相同中间有孔的圆盘, 从上到下次依次编号为1, 2, 3, ……,将A柱上的部分盘子经过B柱移入C柱, 也可以在B柱上暂存。如果B柱上的操作记录为:“进,进,出,进,进,出,出,进,进,出,进,出,出”。那么, 在C柱上, 从下到上的盘子的编号为( D )。A. 2 4 3 6 5 7 B. 2 4 1 2 5 7 C. 2 4 3 1 7 6

  • D. 2 4 3 6 7 5 E. 2 1 4 3 7 5


Mod div

8tg)设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次通过钱S,一个元素出栈后即进入队列Q,若出队的顺序为e2,e4,e3,e6,e5,e1,则钱S的容量至少应该为( ) 。A) 2 B) 3 C) 4 D) 5

(9tg_多项)已知元素(8,25,14,87,5l,90,6,19,20),问这些元素以怎样的顺序进入栈,才能使出栈的顺序满足:8在5l前面;90在87后面;20在14后面;25在6前面;19在90后面。 ( )

A)20,6,8,51,90,25,14,19,87

B)51,6,19,20,14,8,87,90,25

C)19,20,90,7,6,25,5l,14,87

D)6,25,51,8,20,19,90,87,14

E)25,6,8,51,87,90,19,14,20

(13tg)地面上有标号为A、B、C的三根柱,在A柱上放有10个直径相同中间有孔的圆盘,从上到下依次编号为1,2,3……,将A柱上的部分盘子经过B柱移入C柱,也可以在B柱上暂存。如果B柱上的操作记录为“进、进、出、进、进、出、出、进、进、出、进、出、出”。那么,在C柱上,从下到上的编号为( )。

A.2 4 3 6 5 7 B.2 4 1 2 5 7 C.2 4 3 1 7 6 D.2 4 3 6 7 5

历届初比赛题(选)

B

D

D


Mod div

(11tg_多项)设栈S的初始状态为空,元素a, b, c, d, e, f, g依次入栈,以下出栈序列不可能出现的有( )。

A. a, b, c, e, d, f, g B. b, c, a, f, e, g, d C. a, e, c, b, d, f, g

D. d, c, f, e, b, a, g E. g, e, f, d, c, b, a

(12tg_多项)设栈S的初始状态为空,元素a, b, c, d, e 依次入栈,以下出栈序列不可能出现的有( )。

A. a, b, c, e, d B. b, c, a, e, d

C. a, e, c, b, d D. d, c, e, b, a

(12tg ) 某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从这一时刻开始的出入记录为:“进,出,进,进,进,出,出,进,进,进,出,出”。假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为( )。 A. 1, 2, 3, 4, 5 B. 1, 2, 4, 5, 7 C. 1, 4, 3, 7, 6 D. 1, 4, 3, 7, 2 E. 1, 4, 3, 7, 5

C E

C

C

有一定规律,分段有序


Mod div

如下图,有一个无穷大的的栈S,在栈的右边排列着1,2,3,4,5共五个车厢。其中每个车厢可以向左行走,也可以进入栈S让后面的车厢通过。现已知第一个到达出口的是3号车厢,请写出所有可能的到达出口的车厢排列总数(不必给出每种排列)。

解答:9

分别为:32145、32154、32415、32451、32541、34215、34251、34521、35421;


Mod div

将中缀表达式转化为后缀表达式的算法:

  要将中缀表达式转化为等价的后缀表达式,须从左至右扫描中缀表达式,并用一个栈存放中缀表达式的“(”和暂时不能参与计算的运算符。

1、当读到数字直接送至后缀表达式中2、当读到运算符t时,a.将栈中所有优先级高于或等于t的运算符弹出,送到后缀表达式中; b.t进栈3、读到左括号时总是将它压入栈中4、读到右括号时,将靠近栈顶的第一个左括号上面的运算符全部依次弹出,送至后缀表达式后,再丢弃左括号。

5、中缀表达式读完后,若栈中还有运算符,则将栈中运算符全部依次弹出,送至后缀表达式。


Mod div

输出队列

中缀转后缀过程

6

9

4

3

+

*

-

5

+

#

6 9 4 3 +*-5 +

6-9*(4+3)+5#

如果运算优先级大于栈顶元素直接进栈

如果运算优先级小于或等于栈顶元素,则先弹出栈顶元素,再进栈

左括号直接进栈

右括号则依次弹出栈中的元素,直到遇到第一个左括号为止。

+ 1

( 0

* 2

- 1

+ 1

+ 1

# -1


ad