ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -x 25v .w―...

29
ruots'7e25 )4 -X25v.w, ptnqhx2015"; (Rruots'7e25,SfbUcx&10g8gjefx30vwW* ]cUi^yptnqf6k+WTa_fhxg9h30fTki^gd[!Y`\Uy 2016";x, gptnqz DNNK?>>PPP<EGI=EMN=DJGOC@E=@B=FK>Q@LEH>>KOA>KLJLELJI> %(2019.12.12): R$/z-X]fVZl gZ#]Sm:4]i]_

Upload: others

Post on 07-Apr-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

ruots'7e25 )4�―�-X 25v�.w―

���,

�ptnqhx2015�";�� �( Rruots'7e25,Sf�bUcx&10g�8gjefx�30v��wW�*��]cUi^y�ptnqf6k+WTa_�fhx��g�9h�30fTki^gd[!�Y`\Uy

2016�";��x���,

��gptnqzDNNK?>>PPP<EGI=EMN=DJGOC@E=@B=FK>Q@LEH>>KOA>KLJLELJI>

��%(2019.12.12):R$/z�-X��]fVZl�g�Z#]Sm:4��]i]_

Page 2: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��#��

n %!"

– �#����3('2+4– [� ] �� 1��#��#��– ��$"���$– [� ] ,&0)#��"-./��#��

n ,&0*

– �� 1��#��

Page 3: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

�'=�,. _���,.`

n �(

– -%V3�2L�MI@G�"AUX^W\Y,.b– �'=V�MA>IKREG� _Z[]`L�V�:J<S-%V*9,.

• X^W\YL��KRTa� L�Q V��?BU>IH��VAUb_Z[]Q�0OL5��#6VPF`

• ⇔1 �,._1 �@;�CJ8`– -%!L*9�'=L9D3��L7U�V�T@G�'=I@G�(AU4

+/

– �&$J,.c�`C,.aFortranaAlgol_Pascal`– ���,._imperative language`IP�N

��L�)

Page 4: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��#��

n �(3$(��'��&&#% *n 1/��n 2/�#�!��',-+��n 3/���

while (x != A[i]) {i := i – 1;

}

��)(���"��.

��( �

Page 5: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

����������1

名前 vs. 値(場所) (中身)

Page 6: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

���������$�2

+/*-,$ �

n.0.12��&1�"#�) �!(

n.0.22����

–���1�����'� �2

–����%� 習熟しておくと、プログラムを「紙」の上でデバグするのに便利!

Page 7: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

� ��� ��������������

������

Page 8: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��6 ���#��

n .1-0/'��,��!+&(5 �'���#��#�������

– �4��)� %$

n ���3L-value4: �'��3��4,�!n ��3R-value46 �'��"'*',�!

int x, y; x := 2 + 3; y := x;

��(��2

Page 9: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��O,:

n ��O!�-� (b`nhscope)– hl_ji�J���@!�M-�pS>W6q– �pC35qt�7�J�/DXW��pln]k��qK7�O��J�/DXW��p_lnek��q

– �X�O��@!�pC35tln]k��@��q

X=50X=100

CCP��o

n �p Ohl_jiq

– �.Aprintx�O����xOb`nhPrb`nhCO-�

– _lnek��xOb`nhPrb`nhAO-�?Ub`nhCO-�Z8=F$VO-�p0�@%1O-�q

b`nhC

b`nhB

b`nhA

#include<stdio.h>int x;

int main() {x = 100;printx();printf("X=%d¥n",x);

}

int printx() {int x;x =50;printf("X=%d¥n",x);

}

'1qCCJP`mf\jO#(*�+ [ALSU’09]N�GIr”scope”Z ;!�-�<K4EFs [ALSU’09] A.V.Aho, M.S.Lam, R.Sethi, J.D. Ullman, “Compilers,” 2nd, Addison-Wesley, 2009.p=YTW;djamgc^<q

'2qt C35KQK[LO35P"�J&RW;9*M<!�-�Z�)EI=WsLISPML=BH?O35P�2�N&RW;�*M<!�-�Z�)EI=Ws

Page 10: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

���/+*.,0&-.-

��X&���

n -.-10X�� (�) &��$

��

n -.-20"#����&�) $�

���&�����X����)"

��!&��$'�&��'��%�

2019.12.18��

+*.,C

+*.,B

+*.,A

int X //��&��X&��

��&X���(���&Z'��%�

��&X���(

int X //��&��X&��

��&X���(

Page 11: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

変数Xの有効範囲int X

���

���� �����

���� �

������� int X

Page 12: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��i>H>HE��FUSf_��

n $��g��@h: Qdf[c�g���;]ILcF�h

: dfOc�g��F�;���h

n $!!��gN^TMPZ��h: Qdf[c�g]ILcF�h

: PbUFUWYKXP�gPbUh

: PbUFLeUWeU�gPbUFN^TMPZh

: dfOc�g��@h

n JPVUPbUg'+9+h#

: 58,21-"�5647/-7/."5619+7/ �

n \XRfTg����h

n (&*)��:��USf_

n %4��;'+9+*-6157;*-0/3/:���USf_

<`Tafc=D����• F� ?��gN^TMPZ

��C�B@GAh

Page 13: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

�������

Page 14: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

���(��$ �-C��

n ���(����*���+

– ��-��$�"��$��$*type+– �'�-�'�$��

n ���-����#����, �+x, yn ���-��&��!� ��,�+2, 3

//����int sum(int x, int y) {

return x+y;}

//��&��int z;z = sum(2, 3)

��%��)

Page 15: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

�%4^-��D�8B�'n �%4J-�*C�BK1A($�>�'7ON

�*` �U[RV>Ca�+B��A8<30a�%4_procedure/subroutine`?-�_function`P?5A�8G:Qb;6>a�.>C�&P H=�%4?�E6?3/MG9bG<a-��W\S[X]SBK1Aa�P,8a�!PI<@06?P�*9N��A-�?�DG9b

"�#��

#include<stdio.h>void main() {int x;int y;int answer;x = 100;y = 50;answer = sum(x,y);

printf("X+Y=%d¥n",answer);}

int sum(int x0, int y0) {return x0 + y0;

} 3. �%4B�'

1.��%4B�'

2. �%4FBTZ]W

4. �%42LB�M

5. �MB�'

CPUAKNW\S[Y_��)`B�'B O

Page 16: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��� ������%�22�3

,0+.-%��

n/1/13��'1�#$�*��")

n/1/23� ��

–���2�����(�!�3

–�� &�! 習熟しておくと、プログラムを「紙」の上でデバグするのに便利!

Page 17: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

2&2]�(N�_Qp�q

;+.]�(Np0�q�_Q

n �\df�(N�_Q5><AA4=F4E<AD?6G ��YQW�(N\r��]�h!S

G ��\0�c"'p�t879q[ZM LgWJVYN^rUgh,�QW�p�t:q\QWLe!Ss

G �_Q�]��^��Q[Js

n �#\df�(N�_Q5><AA4=F4C?@?C?B>?6G ��YQW�(N\r��]��pljmkn%�qh!S

G �_Q�\�h��X�Tfs

n �(Np0�q]�$

– �\df�(N�_QX^H��`]�$^[Js��\�QWZi[��hQWbHU]�1^H�(N�X/RWJfs

– �#\df�(N�_Qh*KYH�$MIfs�(Nh�_QV�\H��]��M��PgWJf )�MIf

OO^��o

-3\aS

Page 18: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

������������

n ����������(call by value)– ����������� !"���

#include<stdio.h>

void main() {

int x;

int y;

int answer;

x = 100;

y = 50;

answer = sum(x,y);

printf("X+Y=%d¥n",answer);

}

int sum(int x, int y) {

return x + y;

}

Page 19: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��U �4��7@15E�A�5�7

U�ANQJPOB-�x>yA��G��8ENQJPO=/E.?63 �:<0E2V

#include<stdio.h>void main() {int x;int y;x = 100;y = 50;sub(x,y);printf("X=%d, Y = %d¥n",x,y);

}void sub(int x, int y) { //�x>yA��G��int tmp;tmp = x;x = y;y = tmp;printf("X=%d, Y = %d¥n",x,y);

}

��!

�:9NQJPO

�"@�C8

��TNQJPOA��U �;A�+>,3��8E�G��8E �4)*'($+&#,%#G�490T��>7<S �4)*'(BSIHLIKRM�=�0DFET

Page 20: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��L��+��.7(,=�8,�.

�L�8EI@GF9# �x4y8��>��/=EI@GF3%=$5-* �12&=)M

#include<stdio.h>void main() {int x;int y;x = 100;y = 50;sub(x,y);printf("X=%d, Y = %d¥n",x,y);

}void sub(int x, int y) { // �x4y8��>��int tmp;tmp = x;x = y;y = tmp;printf("X=%d, Y = %d¥n",x,y);

}

(1) �� x=100, y=50

��: ADHKBJsub8��3�� �x4y7�>��.2;#DIC?8��7%=main8�� �x4y8�9 '=-4*3+6&)<$

���!

�10EI@GF

�"7�:/

(5) “X=100, Y=50”4��

(4) “X=50, Y=100”4��

(3) �� tmp = 100; x=50; y=100

(2) x=100, y=50>=

Page 21: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��)���!%�#"�����(call by value)main { int x; int y; /* ���x, y�� */

x = 100; y = 50; /* ���x, y ��� */

sub(x, y); }

100

x (main��)

1 2 3 4 7 9

50

y (main��)

5 6

sub(int x; int y) { /* ���x, y�� */

x = 50; y = 100; } /* ���x, y ��� */

100

x (sub��)

11 12 13 14 17 19

50

y(sub��)

15 16

tmp

10050 100

�!%�#"

� $'�&

��'

����

����

Page 22: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��3-&/(!��1�2�2

n -&/(3)0($�����"%+.'!��

– )0(!�� ����,&*�!��� ��#��"�

n -&/(!��

– &x : �x!-&/(– *x : -&/(x ���#��")0(

a b c ¥0 3450 34505098

char short int int

1 2 3 4 7 9

Page 23: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

=2F8� '�!-���

n I#(<E4A>

int a;scanf(“%d”, &a);

int *a;scanf(“%d”, &a);���

int *a;scanf(“%d”, a);��

scanf'+,�19D6/����-→� .$&�?@B��*(1376→���

=2F8� )19D6G� H&(%�5F:2A)��/�!"�%���&;02C/��

Page 24: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��;3.70&+,��'�9�:

n ��1;�)$'26/54'��

#include<stdio.h>int main() {int x;int y;x = 100;y = 50;sub(&x, &y); /* �#(%�3.70-�# � */printf("X=%d, Y = %d¥n",x,y);

}int sub(int *x, int *y) {int tmp;tmp = *x; /* 3.70 �# */*x = *y; /* 3.70-� �!"� */*y = tmp; /* 180-� */printf("X=%d, Y = %d¥n",*x,*y);

}

����

��&�*�

���26/54

C��'�3.70 ��-��

Page 25: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��1/ ��%* ('�����(call by value)main { int x; int y; /* ���x, y��� */

x = 100; y = 50; /* ���x, y ��� */

sub(&x, &y); }

100

x -main��)

1 2 3 4 7 19

50

y -main��)

5 6

sub(int *x; int *y) { /*���-��.x, y��� */

*x = 50; *y = 100; } /*��x=1�y=5����� */

�%* ('

!$),#+

&�+"

�����

sub���x, y���� x = 1, y = 5���

100

x -sub��)

11 12 13 14 17 19

50

y-sub��)

15 16

tmp

1001 5

Page 26: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��ME@IB6=>��7��K�L

n ��2M�:47DHAGF7��

#include<stdio.h>int main() {int x;int y;x = 100;y = 50;sub(x, y); /* �285,E@IB?��3.1�/ */printf("X=%d, Y = %d¥n",x,y);

}int sub(int &x, int &y) { /* int�7��3.1x, y? � */int tmp;tmp = x; /* ��28#E@IB6��/> */x = y; /* CJB?90(6�� */y = tmp;printf("X=%d, Y = %d¥n",*x,*y);

}

��!

�"6�;/

�.'DHAGF

C++��7$��%?�((reference)

C++��6*->����x7 �

int &x; ⇨• �M$x8int�7����2&>%• ��x68int�7�+�>• ��K� �L3.1<�)>

Page 27: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��24���*/%-,!����(call by reference)main { int x; int y; /* ���x, y#� */

x = 100; y = 50; /* ���x, y �� */

sub(x, y); }

100

1 2 3 4 7 19

50

5 6

...

x

1 2 3 4 7 19

sub(int &x; int &y) { /* ��2���3x, y!� */

x = 50; y = 100; } /*��x�y� �� �� */

y

5 6

tmp

100

�*/%-,

&).1(0

+$0'

��!"!

sub!���x, y ��� x = 1, y = 5#��

x 2main��) y 2main��)

Page 28: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

�(8�,-D;D�

^dTa`,-D��

[gZPQN,-

n��-2NXe]ah1940s-1950si�(8�,-

nFORTRANh1960sinALGOLhPASCALi h1960sin1970s: C,-R]VQSY�,-

n1980s: C++, Objective C, SmallTalk n1990s: Java�#,-f0��,-

nLISPh1960sinPerl, Python, Ruby, Scala ...

n �(8�,-Ej;D�jR]VQSY�,-Ij0��,-@)�:>/�:<k– C++, Java, …

n F@MAD1'^dTa_eT,-7j�.�^dTa_eTD����LH=>4Kk

n G<j�9D�#,-hWSb^Y,-i7jUe\Oc�D�!%L�":>6Jj^dTa_eT,-D�+�*C64>Hj �#?3Kk

n �j&$B�(8�,-E�B47jh3K�?Ei�H^dTa_eT,-D��@45K

Page 29: ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -X 25v .w― , ptnqhx2015 "; ( Rruots'7e25,Sf bUcx&10g 8gjefx 30v wW * ]cUi^y ptnqf6k+WTa_ fhx g 9h 30fTki^gd[!

��<��

n �@5:

– �(4�,.:=[• ��<2D�(4F>:A:C;68�(4:���� 0<'BE79MUHSPF-/

• 0�MUHSOVH<*3�F�

n NGVL

– ��<��& YJIXMZ– �(4W1�<�)– [$�]�(4W1�<�+<��– ��?:�"�?– [$�] NGVK<�#:QRT%�<�!