ruots'7e25) 4 - 北海道大学arim/pub/proriron/program4.pdfruots'7e25)4 ― -x 25v .w―...
TRANSCRIPT
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]_
��#��
n %!"
– �#����3('2+4– [� ] �� 1��#��#��– ��$"���$– [� ] ,&0)#��"-./��#��
n ,&0*
– �� 1��#��
�'=�,. _���,.`
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�)
��#��
n �(3$(��'��&&#% *n 1/��n 2/�#�!��',-+��n 3/���
while (x != A[i]) {i := i – 1;
}
��)(���"��.
��( �
����������1
名前 vs. 値(場所) (中身)
���������$�2
+/*-,$ �
n.0.12��&1�"#�) �!(
n.0.22����
–���1�����'� �2
–����%� 習熟しておくと、プログラムを「紙」の上でデバグするのに便利!
� ��� ��������������
������
��6 ���#��
n .1-0/'��,��!+&(5 �'���#��#�������
– �4��)� %$
n ���3L-value4: �'��3��4,�!n ��3R-value46 �'��"'*',�!
int x, y; x := 2 + 3; y := x;
��(��2
��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
���/+*.,0&-.-
��X&���
n -.-10X�� (�) &��$
��
n -.-20"#����&�) $�
���&�����X����)"
��!&��$'�&��'��%�
2019.12.18��
+*.,C
+*.,B
+*.,A
int X //��&��X&��
��&X���(���&Z'��%�
��&X���(
int X //��&��X&��
��&X���(
変数Xの有効範囲int X
���
���� �����
���� �
������� int X
��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
�������
���(��$ �-C��
n ���(����*���+
– ��-��$�"��$��$*type+– �'�-�'�$��
n ���-����#����, �+x, yn ���-��&��!� ��,�+2, 3
//����int sum(int x, int y) {
return x+y;}
//��&��int z;z = sum(2, 3)
��%��)
�%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
��� ������%�22�3
,0+.-%��
n/1/13��'1�#$�*��")
n/1/23� ��
–���2�����(�!�3
–�� &�! 習熟しておくと、プログラムを「紙」の上でデバグするのに便利!
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
������������
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;
}
��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
��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>=
��)���!%�#"�����(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
�!%�#"
� $'�&
��'
����
����
��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
=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/��
��;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 ��-��
��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
��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<�)>
��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��)
�(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
��<��
n �@5:
– �(4�,.:=[• ��<2D�(4F>:A:C;68�(4:���� 0<'BE79MUHSPF-/
• 0�MUHSOVH<*3�F�
n NGVL
– ��<��& YJIXMZ– �(4W1�<�)– [$�]�(4W1�<�+<��– ��?:�"�?– [$�] NGVK<�#:QRT%�<�!