programavimas c,pascal

78
II dalis ! !

Upload: gintaras-danilevicius

Post on 08-Dec-2015

243 views

Category:

Documents


9 download

DESCRIPTION

c++

TRANSCRIPT

Page 1: Programavimas C,Pascal

� ��

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

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

II dalis

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

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

���

������

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

� � � � � � � � � � � � � � � � � � � �� � � � � � � � � � � � � � � ! � � � � � � � � � ! � � � � � � �

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

Page 2: Programavimas C,Pascal

������� �

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

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

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

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

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

� ��� � � � � � � � � � �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �"�"�" �#$%&' �%($%&%�)))))))))))))))))))))))))))))))))))))))))))))))))))))))))) * �"�"�" ��+,$�-%� )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) * �"�"." �$�/��0 1��2�2-2�1#�($�2��#$%&' �(%3%�0 ' � )))))))))))))))))))))))))))))))))))) �� �"�"4" 512$(1��2�2-2�1#�6��#$%&' �($%78�# )))))))))))))))))))))))))))))))))))))))))) �� �"�" " ��2-2�1' �612$(�-%���#$%&' �9�7�/2��(' �+:' /' �2�2-2�1' ))))))))))))))))))))))))) �. �"�";" �%�%�+��1��2�2-2�1#��&��#$%&' �($%78�' �)))))))))))))))))))))))))))))))))))))) � �"�"*" ��2-2�1' �(%�%�+���-%���#$%&' �(%3%�0 ' /2 ))))))))))))))))))))))))))))))))))) �* �"�"<" �%�%�+��1��2�2-2�1#��&��#$%&' �9�7�$�' )))))))))))))))))))))))))))))))))))))) �< �"�"=" ��+$2�(1��$' 7>+�? �6�+:#/6��#$%&' �2�2-2�1#))))))))))))))))))))))))))))))))))) �� �"�"��" �' 7>+�@����+$2�(�-%��6�($�2&(%�+�1��6�2�2-2�1# ))))))))))))))))))))))))))) �� �"�"��" 1�(%��7��1��9�2�(���' ��#$%&' �2�2-2�1�����' �($%78�' �))))))))))))))))))))))) �� �"�"��" 1�(%��7��1���#$%&' �2�2-2�1�����' �(%3%�0 ' �))))))))))))))))))))))))))))))) ��

� �� � � �� � � �� � ! � �" # $ � % �� & ��� ' # ( ) ( � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � * �"�"�" ($%&%�)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) �4 �"�"�" 512$(1��2�2-2�1#�79�(���' ��#$%&' �9�7�/2�(' �+:' /' �2�2-2�1' ))))))))))))))))))))) � �"�"." �%�%�+��1��+:#/6�2�2-2�1#��&��#$%&' �9�7�$�' )))))))))))))))))))))))))))))))))) �*

� �+ � � % , " ( � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � + - �"."�" ��+�$1���12+#����9�2���2�2-2�1�)))))))))))))))))))))))))))))))))))))))))) .� �"."�" 57@1��2�2-2�1#�6��12+#�A' (2$%B�/%�����C ))))))))))))))))))))))))))))))))))))) .� �"."." �%�%�+��1���12+' �2�2-2�1#�A' (2$%B�/%�(' (C )))))))))))))))))))))))))))))))))) .�

� �* � � �./ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � + + �"4"�" ��+�$1��2��? )))))))))))))))))))))))))))))))))))))))))))))))))))))))))) .. �"4"�" 57@1��2�2-2�1#�6�2��? )))))))))))))))))))))))))))))))))))))))))))))))))))) .4 �"4"." �%�%�+��1��2��@��2�2-2�1#)))))))))))))))))))))))))))))))))))))))))))))))) .

� ��� � ( � $ 0 ! 1 �( � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � + 2 �" "�" ��2�(���' ��#$%&' ���+,$�-%���$��(%��7���-%� ))))))))))))))))))))))))))))))))) .;

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

+ ��� 3 � ( ! ( � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � * +

+ �� � � ( � " ( .$ 4, � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � * + ."�"�" �1$%&1@ ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 4. ."�"�" (�3$@8�-D �7%��� )))))))))))))))))))))))))))))))))))))))))))))))))))))) 4. ."�"." �2�+�-D �7%��� )))))))))))))))))))))))))))))))))))))))))))))))))))))))) 44 ."�"4" ���B�%��E%9�-' �7%��� )))))))))))))))))))))))))))))))))))))))))))))))))))) 44 ."�" " �$%����%9�-%�))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 44

+ �+ � 5 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � * * ."."�" �1$%&F �D �G%��D �+,$�-%� ))))))))))))))))))))))))))))))))))))))))))))))))) 44 ."."�" �2��D �G%��D �1$%����%9�-%����%�7' /%�1�0 BB )))))))))))))))))))))))))))))))))))) 4 ."."." �$%����%9�-%��+�1�$ )))))))))))))))))))))))))))))))))))))))))))))))))))) 4

+ �* � � ( � $ 0 ! $ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � * � ."4"�" �%�B%� ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 4

Page 3: Programavimas C,Pascal

� .�

."4"�" � )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 4*

� � ��! �"�"# �$ % & "% '( � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �)

* ��� � � �6 7 ! � .�� � � ( � " ( .$ 4, & � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � * 8 4"�"�" �2�+�-%�����7%1%��$��%�+� )))))))))))))))))))))))))))))))))))))))))))))))) 4= 4"�"�" �2�+�-%�����G%��%�� ))))))))))))))))))))))))))))))))))))))))))))))))))))) 4=

* �� � � % ( 9 ! ( # % �9 / � �5�:� 9 " ; �47 � �! ( # < � ��� � �.( �" � ��# �! ( % ( � � � � � � � � � � � � � � � � � � � � � � � � � � � � �+

* �+ � � � , # ( ; �9 / � �� �� % , 6 7 � �" 7 6 ( 9 ! =�� $ " ! $ 6 ( � �5�� # 7 > # ( 6 7 4, � � � � � � � � � � � � � � � � � � � � �*

� � � � � � � � * � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

���� � � �< # / 1 % �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��� � � ( � $ < / � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

��+ � , " � # � �9 �=�� # 7 ; , ! ? # =�:7 # 6 7 � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��

, " � # � �4( ��# ��% , # ( ; �4( � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �2

� ( � $ 0 ! 1 �( � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �2 "."�" ! %+1' $�%�' ��+%�F �%9�-%� ))))))))))))))))))))))))))))))))))))))))))))))))) ; "."�" ��2�+$>(F �' ��#$%&' ��(%��7���-%��%19�$+&F �%�19%$+% )))))))))))))))))))))))))))) < "."." �278�' �%(@/�-' �$2+�$����%��%�0 ' $�1-%� ))))))))))))))))))))))))))))))))))))) < "."4" �%�/' ��$2�&+-@��61$%�+�-%��6�792/21%��6�(%�2&+' ��-276 )))))))))))))))))))))))) ;�

+ � , -.�/ .�% �"# '.( 0.�# �1 �& 2 '��(�2 ( "% ��3 ��'2 % �.���" � � � � � � � � � � � � � � � � � � � � � � � � � � + �

2 ��� � .> 7 # �%6 7 �( � # ( ) ( � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 2 �

2 �� � � .> 7 # �%6 7 �� � ! / % �9 > � 6 7 �� , # % �9 �6 ( � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 2 �

� � .�! % '.4 �( .'# ��"� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � + �

���� � �6 < 7 .�( ���# �, �.� % / � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 2 �

��� � � �6 < 7 .�=�, �.� @ �=�( � # ( ) $ 6 ( � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 2 � *"�"�" ��-3' ��D �+' ��1%�1% )))))))))))))))))))))))))))))))))))))))))))))))))))) ;* *"�"�" ��-3' ��D �2���1@ ))))))))))))))))))))))))))))))))))))))))))))))))))))))) ;* *"�"." ����1@��6927�-%��A�1%�7%$1��@��G��+B�/' ���&��17�' "H C ))))))))))))))))))))))))))) ;= *"�"4" ����F �D ��&927�-%�)))))))))))))))))))))))))))))))))))))))))))))))))))))) *� *"�" " ��1' ���1$��0 "H �G��+B�/' �))))))))))))))))))))))))))))))))))))))))))))))))) *� *"�";" ����F �D �%(7' $' /�-' �' (2$%B�/' � ))))))))))))))))))))))))))))))))))))))))))) *� *"�"*" ����F �D �(%�>0 ���-%� )))))))))))))))))))))))))))))))))))))))))))))))))))) *. *"�"<" �%�2&+%�2���1@�2 ))))))))))))))))))))))))))))))))))))))))))))))))))))))) *4 *"�"=" �%��+�$�' ����-3' ��D �%(7' $' /�-' �G��+B�/' �����&�B1>(2"H ))))))))))))))))))))))))) * *"�"��" ��1' ��G��+B�/' � )))))))))))))))))))))))))))))))))))))))))))))))))))))) *

� ( � $ 0 ! 1 �( � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �2

.�(���, �� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �5 ��

Page 4: Programavimas C,Pascal

� 4�

Pratarm�

�21' 7��@�($�2-' �@�I�$' 0 $%-%9�-%���%�+%�����$�������7%���J �>$%��+�$1%���+�$�' �-%12-%1�+' ���$��1%1��1�+' ���1�7�/D �+$>(F �D ��1�72�1%-�"����%(�-%���G' $-%1�+' ��7%�>+' �%�1$' ��2-2�1$' �($' 0 $%-#"�K��($�2-' �@�(%(��7' �7' B"�7$"��"��%0 %�&�' �-21' 7��? �($�2-' �? �L�M�($' 0 $%-%9�-' �%�(2+1�"��' /2�>$%�(%12�+�%-��($' 0 $%-%9�-' ��#9' +D �$2%��E%9�-' ��%�+%�����$���(%9>E78�%�"��%�0 2�>/2��+>$�D ���,�' -%�����(%8��1�����L�M�($�2-' �@/2��&7@�1>1%�-278�%0 %��$�1' ��%���%0 $��@1��F �%�(%12�+�%-���(%9>E78���"�

K��-278�%0 %�>$%��+�$1%�($' 0 $%-%9�-' ��%�/' +%-�"��' /2��12�0 �%-%���+�' �(%($%�F �%���$2-�%�1��������1$%B�/' -����$�/%��%1�1��+%�F �' -���+' 7' �2���1@-����&7@�1>1��7��%-���' �($' 0 $%-%9�-' �-21' 7�+#"� %3�%��(%82�0 ���2-��($' 0 $%-%9�-2����,�>F �%���+%�1>1��+�1%���%�+&12��6�8���D ��>0 6�%1�1��+%�F �%��-' +>-' �($�2-' �2��L�M��L4M"��%�+�1������+>$������+�$1%����-3' ��D �2���F �D �%(7' $' /�-�����+%�3' /2��>$%�G%+��1%1>9����"��2%��E�' 1����-3' ��D �2���F �D �%(7' $' /�-' ��87�' 16�($�9%�' -%�1�+��%�+%��' �+%�3%"�� 8���+%�3' ��$2%��E%B�/#��1�72�1���>$%���12�+�%-��(%(��7' -��1%&+%�"�

K�' /2�-' +>-' �($�2-' �@/2�>$%���,�' -%�&���-' +>-' ����B2�%$�/��N�

�C��&�%0 $��@1��L�M�-21' 7��@/2�($�2-' �@/2�(%12�+1#��#9' +' ��%(�3,7���-#N�

�C��&�%0 $��@1��&�' /2�-21' 7��@/2�(%12�+�%-���$2%��E%B�/' ��(%%�&+���-�����

.C�($%1>3D �-21��0 %�1#��87�' 16�($%7@1��$%&>1����' �(%9>E78�' ��(%12�+1' �&�' /2�-278�%0 ' /2��

4C�(2$19%$+>1��(%9>E76��%1��892�0 �%�1�6�0 %�1#��87�' 16"�

�#9' +D �$2%��E%B�/%�>$%������1$�' /%-%��%�+%��' ��$���($' 0 $%-%9�-' �+%�3D �(%9>E78�%��"��#-' ���0 %���12�0 �%-%���(%12�+1��9�2�#�A%�1' $@����' -' �2�(%($%�12��6C�$2%��E%9�-' �3,7#��$�92�0 1��9��D �+%�3' ��0 %��->3�D ��$���31��>3�D �7@�1>-' "��

K��($�2-' �@��2�78�%�(%��$�' &1���+%�1>1���$���($%�1��($' 0 $%-%9�-' ���12$%1,$#���+�$1#��+%�1>1' /������($%�1%�F �%-�3%E��2��($' 0 $%-%9�-' ��#9' +%�"��

Page 5: Programavimas C,Pascal

� �

1 . DINAMINIS ATMINTIES IŠSKYRIMAS

1.1. STATINIS IR DINAMINIS ATMINTIES IŠSKYRIMAS

1��892�0 �%�1�6�20 E��1%9�-' �1$�+-? ��$��72�1�G�+%9�-' �3,7#��+��1%-�2/��>$%��+�$�1' -��6��1%1�������$�7��%-�����"��

�1%1���%��+��1%-�2/���72�1�G�+�' /%-��9%$7%��"�K�2�+��1%-�2/��%1��$%�7%��1%��>$%�/D �$2�+&-@-��>$%��+�$�%-%�9�21%�%1-��1>/2��($%7@/���9>+7>1��($' 0 $%-#��+�$�' /2�/�2�>$%�%($%&>1�"��' +�2�+��1%-�2/��9%7��%-���1%1���%�����2��/D �20 E��1%9�-#����%+' �1D �+��1%-D /D �%($%&D �9�21%�($' 0 $%-' ��12+�12"�

���%-���%��+��1%-�2/����+�$�%-���9>+7%�1�($' 0 $%-#��+�$�' /2�>$%��1%�7%$1��@��+��1%-' /' �+,$�-' �Anew��mallocC��$��%�+���-' �Adispose��freeC�($' B27,$' �"���2�9%7��%-��7��%-���%���1' 7@���+%7�/D �20 E��1%9�-' �1$�+-? ����%+' �($' 0 $%-' ��%1��+�-' �($' B2�%�"����%-���%��+��1%-�2/���72�1�G�+�' /%-��$' 7>+�@-��"��' 7>+�@�O�1%��$' 7>+�@��1�(' �$2�+&-@"��

� ���� � ��� � ��� ���� ��� � � �� � ���� � � �� �� ����� � ��� ��� � � ��� � � � �� � � ��� � ��� �� ��� ������ �� ���� � �� � � � ��� �� �� �� ������ ���� � �� �� ���� �� ���� � �� ���� �� � �� ���static� �� � � �� � ������ � � �� ������ � ��� � �� � ���� � ��� �� � � � �� � �� � �� � �� ��� � ��� �� ��� ���� �� ���� ������� ��� �� � �� � �� ��� ����� �� ������! � � �� ��� � � � ���"�� �� �� #��� ������ �� �� ���

($%&%�1�7��%-������+��1%-�' ������+��1%-D /D �%($%&D ��+>$��/2���$' 7' -%���2�(%1��+��1%-%�����' �$' 7>+�@�6�/6"��%�0 ���$' 7>+�@�>$%�6($%�1%��+��1%-%�����' �+��1%-%����6�+�$6���$' 7' �$' 7>+�@�O�7��%-����"�

1.2. RODYKL�S

�%�7' /%�1�$' 7>+�2��6�+��1%-#/6��+��1%-%����>$%�%(7' $' /%-%���' (2$�' /%�1�/' �%7$2��"��

P 2-�%��(%12�+1�' �2�($' 0 $%-D �G$%0 -2�1�' �2������1$�' /%-%���1%1���D ��$�7��%-���D �+��1%-D /D �%($%&>-%���$��%�7' /�-%�"��%$�+%$1#�(%�123@+�-2��+%7�&�%-2�+' 7' �G$%0 -2�12�+��1%-%����zv�>$%��1%1������%�+%��' �+%�3' ��12$-���/' ��($%�-2��1%��>$%�1�$�-%�' -2�>/2��+%7�/%-2�>$%��%�0 ' -%�$2�+&-@"�' ��2�$' 7>+�@"����1%-%����zv_rod�>$%�$' 7>+�@"�

�%�+%���� ��

program stat_dinam;

var zv_rod: ^char;

zv: char;

begin

zv := '*' ;

zv_rod := addr(zv);

end.

#include <stdio.h>

int main()

{

char *zv_rod, zv;

*zv_rod = '*';

zv_rod = &zv;

}

�:��(%9"�(%9%�E7�' /%���1�%B�/#�%1-��1>/2��%1��+���(%12�+1%-2�G$%0 -2�12���$' 7>1���92�+�-��"�

Page 6: Programavimas C,Pascal

� ;�

�' 7>+�@��+��1%-%����0 %���3,1��&�' �2�3,�2�' �2N�

�C��%-2�0 %���3,1��6$%&>1%��7��%-���' �+��1%-' /' �%7$2�%���+�$�%-�>$%��&�+�$1%��9�21%��$�($��+�$1%�$2�+&-@�A8$"��:��(%9"C"�

�C��%-2�0 %���3,1���(2B�%����1�&F �%����-3' ���"��%�+%��' �+%�3' /2�&�����-3' ����>$%�9%7��%-%��NIL�A8$"��:.�(%9"C"���+%�3' /2�1�&F �%����-3' ����>$%�NULL"��

.C�����0 %���3,1���2%(�3$@81%��A8$"��:4�(%9"C"�

K�' /2�3,�2�' /2�$' 7>+�@�>$%�($' 0 $%-' ��7%$3' �($%78�' /2��+' ���2($��+�$1%��/' +��%7$2�%���$�1�' -21��+%��%1-��1�2���#�12�@��6�+�$�#�$' 7' �$' 7>+�@��>$%�%1�%��9��%-%"��' 7>+�@�7%$���12$%1,$' /2�0 %���3,1��9%7��%-' ����' $' 7' -��"�

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

$%)���� ��* �����+ ���� � � � ���

$%,���� ��- ��. �� ����� � � � ����+ � � ���� ���� ��� ��� � �

$%/���� ��0 ������+ ���� � � � ���

Page 7: Programavimas C,Pascal

� *�

2 . DUOMEN� STRUKT�ROS

2.1. VIENPUSIS S�RAŠAS

��2�(������#$%&%��>$%�1' +�%�7�' -2�D ��1$�+1,$%��+�$�' /2�+�2+9�2�%����&�+>$���(%�+�1��6���#$%&' �2�2-2�1%����$' 7' �2��%�16�(' �/' �2�2-2�1#�A8$"��:��(%9"C"�����-%����8���D �$��+��>��%(�2�&�#�7�' -2�D ��1$�+1,$#�>$%�(%12�+�%-%��L�M�-21' 7��@/2�($�2-' �@/2N�H 11(NQ Q R R R "-�G"9�"�1Q S $%0 %����Q ��G�9%7%�Q ��' -�1$"H 1-��

�2+' -2�7�' /��(%�+%�1>1��12��(%12�+1#�-278�%0 #��($�2&�($%727%�1�-' +>1���($' 0 $%-�' 1��7��%-��2���1$�+1,$%�"�

2.1.1. S�rašo aprašas

��2+9�2�%���72�1�G�+%1' $����1�$��3,1��%($%&>1%��($�2&�/' �(%�%�7' /�-#�+�1�' �2�%($%&�' �2"�($%&%�1�7��%-������+��1%-�' ������20 %��-%��&��92$�1���$�7��%-��@���1$�+1,$' ��2�2-2�1%-��>$%�(%7%$>1%��&�-1��"��%�+%�>/2�$' 7>+�@�6�7��%-��@���1$�+1,$' ��2�2-2�1#�1�$��3,1��%($%&' -%�($�2&�1' �2�2-2�1' �%($%&#"���+%�3' /2�1%�(�(%1�1�(' �%($%&2��%�7' /%-%��$2+�$���@���' $' 7#�6�%($%&' -#�1�(#"�

�%�+%���� ��

type rod = ^el; el = record duom : integer; kitas : rod;4 end;�

struct el { int duom; struct el *kitas; };

2.1.2. Suk�rimas

��2�(������#$%&%��>$%���+�$�%-%���+%��6�/6�61$%�+�%-%��(�$-%��2�2-2�1%�"���2�(���%-2��#$%&2�(%($%�1%���%�7' /%-2�7��+��1%-�' ����:$' 7>+�2���+�$�2�$' 7' �6��#$%&' �($%78�#��$�(%3%�0 #"��$%78�' /2�>$%�%($%&' -' ���#$%&' �($%78�' ���(%3%�0 ' ��$' 7>+�@�"��elem�O�7%$3��@�$' 7>+�@��$2�+%���0 %�7%$3�������#$%&�"�

�%�+%���� ��

var pradzia, pabaiga, elem : rod;� struct el *pradzia, *pabaiga, *elem;�

�' ��7%$�$' 7>+�@-���2($��+�$1' ��$2�+&-@���/' ��>$%��2%(�3$@81' ��A8$"��:��(%9"C"�

)%$���� ��1 � ����� ������� �! ��'��� ������ ��( � �� �� ���

)%)���� ��* ����� �� �� �� � ���� ������� ��� ����� ������ � ���� �� �� ��

Page 8: Programavimas C,Pascal

� <�

�C���&F �' ��#$%&' ���+,$�-%��

��&F �%���#$%&%��>$%���+�$�%-%���+%��($%78�' ���$�(%3%�0 ' ��$' 7>+�@-��>$%�($��+�$�%-%��1�&F �%����-3' ���N���

�%�+%���� ��

pradzia := nil;

pabaiga := nil;�

pradzia = NULL;

pabaiga = NULL;�

�' �&�D �92�+�-D �+��1%-D /D �3,�2�%��(%9%�E7�' /%��:.�(%9"�

�.C���$-%/%-��#$%&' �2�2-2�1����&�+�$�%-%�%1-��1��"��

�%�+%�>/2��%�/%��2�2-2�1%��>$%���+�$�%-%����%�7' /%�1�($' B27,$#�new()"�P 2-�%��(%12�+�%-%�������1$%B�/' /2�(%9%�E7�' 1' ����1�%B�/' ��%($%&%���%�+%���"���+%�3' /2���%�7' /%�1�%1-��1�2���&�+>$�-' �G��+B�/#�malloc()��$2�+�%�($�/��0 1��%�1$%&F �D �G%��#�stdlib.h��+�$�%-2�>$%�&�' ��G��+B�/' ��($' 1' 1�(%��A(�$-%9%�E7��C"�

�%�+%���� ��

new ( elem );� #include <stdlib.h> … elem = (struct el *) malloc ( sizeof ( struct el ) );

�' �&�D �92�+�-D �+��1%-D /D �3,�2�%��0 $%G�&+%��(%9%�E7�' /%���:4�(%9"��%-2�$' 7>+�@/2�elem /%��(%1%�(��1%��(�$-%-��#$%&' �2�2-2�1����&�+�$1' ��%1-��1�2��%7$2�%�"�

)%,���� ��- ��. ������������

)%/���� ��& ��'��� ���� � �� � �� �� � � ���� ��( � �� �� ��

Page 9: Programavimas C,Pascal

� =�

4C���$-%/%-�2�2-2�1���($��+�$�%-' ��$2�+&-2�"��

�%�+%���� ��

elem^.duom := 3;

elem^.kitas := nil;�

elem -> duom = 3;

elem -> kitas = NULL;�

�K���+' 7' �G$%0 -2�1%��(%+2�1@�7��%-���' �+��1%-' /' �3,�2�#��A8$"��: �(%9"C"����%-���' �+��1%-' /' ��%�+%-��>$%�($��+�$1' ��$2�+&-@�"�

�� �8��0 ����"���+$2�(�%-2��#$%&' �($%78�' ���$�(%3%�0 ' ��$' 7>+�2��6�(�$-#���+�$1#�2�2-2�1#�A8$"��:;�(%9"C"��

�:;�(%9"�$' 7>+��D ��(%�9%�%1�1��+%�+' 7' �2���1@���(%�9#N�

�%�+%���� ��

pradzia := elem;

pabaiga := elem;

pradzia = elem;

pabaiga = elem;�

)%2���� ��3 � �� � �� �� � �� � �� ����� �� ��� ��������� ����� � ��� �� �� ���

)%4���� �������� ����� + �� ����������! � ���� � � � ��� ����� ��� ���������� ���� � � ��

Page 10: Programavimas C,Pascal

� ���

2.1.3. Prijungti element� prie s�rašo pabaigos

�$%7��@�3,�2�%N��#$%&2�>$%�9�2�%��2�2-2�1%���6�+�$6�>$%���+$2�(1' ���#$%&' �($%78�' ���$�(%3%�0 ' ��$' 7>+�@�"��%0 %�3���' �2�2-2�1' �elem�$2�+&-@��2%(�3$@81%�A8$"��:*�(%9"C"�

��

�C 1-��1�2���&�+>$�-%���%�/%-�2�2-2�1����$�$2�+&-�D �($��+>$�-%�"��

�%�+%���� ��

new ( elem );

elem^.duom := 5;

elem^.kitas := nil;�

elem = (struct el *) malloc( sizeof(struct el));

elem->duom = 5;

elem->kitas = NULL;�

.C���2-2�1' �����2/�-%�����2�%-���#$%&�"�

�#$%&' �0 %�' ���' $' 7%���+$2�(�%-%�6�($�/��0 �%-#�2�2-2�1#"�T �9? ��(%�+�1�����2�2-2�1%��1%�(�(%1�1�$��$' 7>1��6�($�/��0 �%-#�2�2-2�1#"�

�%�+%���� ��

pabaiga^.kitas := elem;

pabaiga := elem;

pabaiga->kitas = elem;

pabaiga = elem;�

)%5���� ��6 � � � ������ ! �� � ���� ������� ����� � ����� ����

)%7���� ��8 �� �� �� � ����� � � � �������� � ��� ���

Page 11: Programavimas C,Pascal

� ���

2.1.4. �terpti element� � s�rašo pradži�

�C��$%7��@�3,�2�%N��#$%&2�/%��1�$��3,1��32�1�9�2�%��2�2-2�1%�"��:���(%9"�(%9%�E7�' 1%���#$%&%�����1$�-���2�2-2�1%��"�

��8��0 ����"�1-��1�2���&�+>$�-%���%�/%-�2�2-2�1����$�$2�+&-@��($��+>$�-%��

�%�+%���� ��

new ( elem );

elem^.duom := 5;�

elem = (struct el *) malloc( sizeof(struct el));

elem->duom = 5;�

K�%-2�21%(2��&�+�$�%-2�9�21#��%�/%-��#$%&' �2�2-2�1��"��' �7�' -2�D ��%�+���($��+�$�%-2�$2�+&-? �A8$"��:���(%9"C"��

)%9���� �������� ������! � �� �� �� � � �� �� � ���� ���"� ������������� ������! ��

2 4 3

nil

pradzia pabaiga

?

elem

)%$: ���� ��0 ���� � � � � �" ���� � �"������� ����� + ������� � ����� �����

Page 12: Programavimas C,Pascal

� ���

.�8��0 ����"���2-2�1%��($�/��0 �%-%��($�2��#$%&' "�

��%�+%���� ��

elem^.kitas := pradzia;

pradzia := elem;�

elem->kitas = pradzia;

pradzia = elem;�

K�%-2�+' 7' �G$%0 -2�12�%($%&' -%���1�%B�/%�0 $%G�&+%��(%9%�E7�' /%-%��:���(%9"�

� � �

�� �� � � � ���

�����

�� �

)%$$���� ��� ���� ! ��� � � � � � ���� ��� ������� �� �� �������� � ��� ���

)%$)���� ����� ��� � � � � ����� ��� �������������

Page 13: Programavimas C,Pascal

� �.�

2.1.5. Elemento �terpimas s�rašo viduje, po k-ojo elemento

�$%7��@�3,�2�%N�6�+:#/6�2�2-2�1#�1�$��$' 7>1��(%(��7' -%�$' 7>+�@�elemk A8$" �:�.�(%9")"��%�(���+$2�(1��$' 7>+�? �6���-2$�����$' 7>1#�2�2-2�1#�3���%�&+��%-%���"�"=��+>$2�>/2"��

var elemk: rod;

��

��8��0 ����"��&�+�$��-2�%1-��16��%�/%-�2�2-2�1��"��

�%�+%���� ��

new ( elem );

elem^.duom := 7;�

elem = (struct el *) malloc (sizeof(struct el));

elem -> duom := 7;�

�' �92�+�-D ��%($%&>1D �&�%-2�+' 7' �G$%0 -2�12�>$%�0 %�1%���1�%B�/%��+�$�#������1$�' /%��:�4�(%9"�

4 3 5

nil

pabaigapradzia

2duom

kitas

elemk

?

elem

)%$,���� ��6 � � � �" ���� � ��� �� %� �� � � � � ����� � ����� ����

Page 14: Programavimas C,Pascal

� �4�

.�8��0 ����"�����2/%-2��%�/#��$�+U ��O�/6�2�2-2�1#��$�+�:�#/6�����%�/��2�2-2�1�"�

�%�+%���� ��

elem^.kitas := elemk^.kitas;

elemk^.kitas := elem;�

elem -> kitas = elemk->kitas;

elemk -> kitas = elem;�

K�%��+' 7' �2���12�������1$�' /%��:� �(%9"�

)%$/���� ��; ����� � � � � � �� ��� ���

)%$2���� ������ ��� � � � � ��" ���� ����� �� %� �� � � � � � <������� ��� ������� ����� = $������� � � � � ����

Page 15: Programavimas C,Pascal

� � �

2.1.6. Panaikinti element� iš s�rašo pradžios

�$%7��@�3,�2�%"���$�-2��#$%&#��+�$�%-2�>$%�32�1�9�2�%��2�2-2�1%�"��%�7' ��-2�(%0 %�3��6�2�2-2�1#�elem��$��1%1��6�+��1%-#/6�k���+�$1#��&�%�0 ' 1���%�+��%-' ��#$%&' �2�2-2�1' �$2�+&-? �A8$"��:�;�(%9"C"�

��8��0 ����"��&�%�0 ' /%-2��%�+��%-' �2�2-2�1' �7�' -2�6�(%0 %�3���%-2�+��1%-%/%-2�k"�5��&-21%-#�2�2-2�1#���+$2�(�%-2�(%0 %�3��? �$' 7>+�? �elem"��

�%�+%���� ��

k := pradzia^.duom;

elem := pradzia;�

k = pradzia->duom;

elem = pradzia;�

K�%��+' 7' �2���12�������1$�' /%��:�*�(%9"�

)%$4���� ��6 � � � � ��� � �� � ���������� ����� + �� ������ � ����� ����

)%$5���� ��6 � � � � ��� � �� � ���������� ����� + �� ������� ���� � ���� �� �� ���

Page 16: Programavimas C,Pascal

� �;�

.�8��0 ����"��$%78�' ��$' 7>+�? �(2$+2��%-2�6�%�1$#/6�2�2-2�1#��(%�%�7' 7%-��(�$-' �2�2-2�1' ��%�+' �kitas�$2�+&-? "��' ��%��%1�%��9��%-2�(�$-' /' �2�2-2�1' ��8�-%-#�%1-��16"��

��%�+%���� ��

pradzia := elem^.kitas;

dispose ( elem );�

pradzia = elem->kitas;

free ( elem );�

1��+���&�%��+' 7' �2���12���$' 7>+�@�6��#$%&' �($%78�' ��$' 7>+�@�>$%���+$2�(1%�6��%�/#/#��#$%&' �($%78�#��' ��3�9���' �(�$-' /' ��#$%&' �2�2-2�1' ��8�-%-%�%1-��1���>$%�%1�%��9��1%"��%0 %�3��@�$' 7>+�@�elem�7%3%$�>$%��2%(�3$@81%"�K�%���1�%B�/#������1$�' /%��:�<�(%92�+��%�"�

)%$7���� ��6 � � � � ��� � �� ������������ ����� + �� ��

Page 17: Programavimas C,Pascal

� �*�

2.1.7. Elemento panaikinimas s�rašo pabaigoje

�2��(%($%�F �%���%���&-2�1��(%�+�1��6�2�2-2�1#��6�+�$6�$' 7' �pabaiga��1%��(%-2��-2��#$%&' �9�2�1���-#"��' 7@���&�($%78�D �$2�+�%�$%�1��($�2&(%�+�1��6�2�2-2�1#��$�6�/6���+$2�(1��$' 7>+�? �elem�A+%�(�1%��(%7%$>1���%($%&>1%��"�"����+"C���

��2-2�1' ��%�+���-' ��#$%&' �($%78�' /2�($%7��@�(%7@1���(%9%�E7�' 1%��:�=�(%92�+��2"�

��8��0 ����"��%3%$�0 %��-%��%�+��1��(%�+�1��6�2�2-2�1#���&�%�0 ' /%�1��/2��$2�+�%��7�' -2�6�+��1%-%/%-2"��

�%�+%���� ��

k := pabaiga^.duom;

dispose ( pabaiga );�

k = pabaiga->duom;

free ( pabaiga );

K�' �2�+' 7' �2���1@�2��&�%�0 ' 1%��(%�+�1���' ��#$%&' �2�2-2�1' �7�' -�' ��$�%1�%��9��1%�/' ��8�-%-%�%1�-��1��N�

)%$9���� ��6 � � � � ��� � �� � ������� ������! � � ����� � ����� ����

)%): ���� ��* � � � �������� � �� ���� ��� � � � � � ��

Page 18: Programavimas C,Pascal

� �<�

.�8��0 ����"��#$%&' �(%3%�0 ' ��$' 7>+�? �$2�+�%����1%1>1��6��%�/#��#$%&' �(%3%�0 #��1%��>$%�6�3�9��6�($�2&(%�+�1��6�2�2-2�1#��$����1%1>1��/%-�1�&F �#�%7$2�#��%�+���kitas"��

�%�+%���� ��

pabaiga := elem;

pabaiga^.kitas := nil;�

pabaiga = elem;

pabaiga->kitas = NULL;�

K�%��+' 7' �2���12�������1$�' /%��:���(%9"�

��

2.1.8. Panaikinti element� iš s�rašo vidurio �

�$%7��@�(%7@1��"��$�2&�2�2-2�1' ��%�+���-#�$2�+�%����1%1>1��$' 7>+�? �elemk�6�2�2-2�1#���1' 9��16���� ���%�+��%-#�2�2-2�1#�A+%�(�1#�%1��+1��%($%&>1%��"�"=��+"C"��

��

)%)$���� �������� ������! � ���� � � � ����� �� � ���� ���

)%))���� ��6 � � � � ��� � �� � ���������� �� �� ���� ����� � ����� ����

Page 19: Programavimas C,Pascal

� �=�

��8��0 ����"��%(��7' -%���' $' 7%�elem����1%1' -%�6��%�+��%-#�2�2-2�1#��$��&�%�0 ' /%-%��%�+��%-' �2�2-2�1' �$2�+&-@"��

�%�+%���� ��

elem := elemk^.kitas;

k := elem^.duom;�

elem = elemk -> kitas;

k = elem -> duom;�

K�' �2�+' 7' �2���1@�2�%1��2+%-���92�+�-��������1$�' /%��:�.�(%92�+��%�"�

.�8��0 ����"��%�+��%-2�2�2-2�1#"�

�%�+%���� ��

elemk^.kitas = elem^.kitas;

dispose ( elem );�

elemk->kitas = elem->kitas;

free ( elem );�

K�%��+' 7' �2���12�������1$�' /%��:�4�(%9"�1�%��9������%�+��%-' �2�2-2�1' ��8�-%-#�%1-��16��$' 7>+�@�1%-(%��2%(�3$@81%"�

)%),���� ��� ����� � � � ���� � � � ����"� ��� � �� �� � � �� ���� � ���

)%)/���� ��6 � � � � ��� � �� ������������ �� �� ���� �

Page 20: Programavimas C,Pascal

� ���

2.1.9. Nukreipti rodykl� � k-�j� s�rašo element�

�26-%�' -%�9�2���' (2$%1' $��-�����1%1>1��$' 7>+�? �6��:1#/6�2�2-2�1#��+%7%�0 ��1�$�-2�1�+�$' 7>+�2���$' 7%�F �%��6�(�$-#/6��$�(%�+�1��6�2�2-2�1��"��' 7@��$2�+�%�(%�+%�F ��' 1��+�2�2-2�1D ���' ��#$%&' �($%78�' �����' �2+��%��(2$+2��%�1�$' 7>+�? ���' �9�2�' �2�2-2�1' �($�2�+�1' "��

1$' 7>1D ��+%7�F �%�1�+1D �(%($%�F �%���%��B�+�%���1%F �%��/����2$2+' -2�7�' /%-%���%�7' 1�N�

�%�+%���� ��

elem := pradzia;

for i := 2 to k do

elem := elem^.kitas;�

elem = pradzia;

for ( i = 2; i <= k; i++ )

elem = elem->kitas;�

K�%-2�B�+�2��@$%�1�+$��%-%��%192/����+%���#$%&2�>$%�-%8�%���2��+�2�2-2�1D "��' 7@��32�7$��%192/���$2�+�%�1�+$��1���%$�7%$��2(%��2+1%��#$%&' �(%3%�0 %"��%�+%�>/2�&���B�+�%��0 %�@1D �%1$' 7>1��1%�(N�

elem := pradzia;

i = 2;

while ( i < k ) and ( elem <>nil ) do

begin

elem := elem^.kitas;

inc ( i );

end;

if i = k

then writeln(‘Rodykl� nukreipta �‘, k, ‘ -�j� element�.’)

else writeln(‘Sarase yra mažiau nei‘, k, ‚ elementu.’);

��%12�+�%-2�&6�+' 7' �G$%0 -2�1#���+%�3%N��

elem = pradzia;

i = 2;

while ( i < k && elem != NULL)

{

elem = elem->kitas;

i++;

}

if( i == k )

printf (“Rodykl� nukreipta � %d-�j� element�.\n”, k);

else printf(“S�raše yra mažiau nei %d element�.”, k);

��

Page 21: Programavimas C,Pascal

� ���

2.1.10. Rodykl�s nukreipimas � priešpaskutin� element�

K���92�+�-%��$2�+%���0 %��(%�+�1���' ��#$%&' �2�2-2�1' �(%&%����-��"��%7%�0 ��$' 7>+�@��9�2�(���%-2��#$%&2�$' 7' �1�+�+�1#�2�2-2�1#��1%��%12�1��($�2�($�2&(%�+�1���' �2�2-2�1' �0 %��-%�1�+�2��%�1���' �($%78�' �"��%�(�2�1��(2$��#$%&#��/%��3�9' ��%0 $��@1%"� �+' �1�+�(%1�+����1��B�+�' ��#�>0 #"��%��(%7%$>1��0 %��-%�79�2-�3,7%��"�

��3,7%�"����%-' /' �2�2-2�1' ��%�+#�kitas�0 %��-%��>0 ��1�����$' 7>+�2�pabaiga��+�$��$' 7' �6�(%�+�1��6�2�2-2�1#N�

�%�+%���� ��

elem = pradzia;

while elem^.kitas <> pabaiga do

elem := elem^.kitas�

elem = pradzia;

while ( elem->kitas != pabaiga)

elem = elem -> kitas;�

K�' ���#�>0 ' ��1�+$���-#������1$�' /%��:� �(%9"�

�' �B�+�' �$' 7>+�@�elem�>$%���+$2�(1%�6�($�2&(%�+�1��6�2�2-2�1#"�

��3,7%�"� %��-2�1�+$��1���%$�+�1' �2�2-2�1' ��%�+%���@$%�1�&F �%��%7$2�%��nil�%$3%�NULL"�

� �

�%�+%���� ��

elem = pradzia;

while elem^.kitas^.kitas <> nil do

elem := elem^.kitas�

elem = pradzia;

while ( elem->kitas->kitas != NULL)

elem = elem->kitas;�

�K6�+' 7' �G$%0 -2�1#������1$�' /%��:�;�(%9"�

)%)2���� ��� �� ����� �� �� �� � � � � ���� �� �<��� �� �� ������ ! ������� ���� � � ��� �������� �� ���

Page 22: Programavimas C,Pascal

� ���

K�%-2�9%$�%�12��%�7' /%-2�$' 7>+�? �el^.kitas^.kitas��+�$��0 %�%����+�%����($%�1�"�K���%192/���>$%����92$�%�2�����1%�($%�-2��+%7��@$%��%�7' /%-%�$' 7>+�@�pabaiga"�

2.1.11. Atspausdinti vienpusio s�rašo elementus nuo pradžios

K���92�+�-%��%1��2+%-%��%�%�' 0 �&+%��1�+�+#��%0 $��@1%-�%192/��"��2$2��%-%���#$%&%���$�%1�(%��7��%-%��+�2+9�2�' �2�2-2�1' �7�' -�' N�

�%�+%���� ��

elem = pradzia;

while elem <> nil do begin writeln ( elem^.duom ); elem := elem^.kitas

end;�

elem = pradzia;

while ( elem != NULL )

{

puts ( elem->duom );

elem = elem^.kitas; }�

2.1.12. Atspausdinti s�rašo elementus nuo pabaigos

�%���21$�9�%����%192/���9�2�(���%-��#$%&��"��($2�7�-%��0 %�@1D �3,1��$2+�$���@�($' B27,$%N�

�%�+%���� ��

procedure PrintList ( elem:rod );

begin

if elem <> nil then

begin

PrintList ( elem^.kitas );

writeln ( elem^.duom )

void PrintList( struct el *elem )

{

if (elem != NULL)

{

PrintList( elem->kitas );

printf( “%d\n”, elem->duom )

)%)4���� ��- �� �� �� ������ ! ������� �� � � � � ����� � �> � ���? �� �� �� ��� ���> ��? �

Page 23: Programavimas C,Pascal

� �.�

end

end;

kvie�iame proced�r� taip:

PrintList ( pradzia);�

}

}

kvie�iame funkcij� taip:

PrintList ( pradzia);�

Page 24: Programavimas C,Pascal

� �4�

2.2. Dvipusis (dvikryptis) s�rašas

2.2.1. Aprašas

�9�(������#$%&%��O�1%���1$�+1,$%��+�$�' /2�>$%�79��$' 7>+�@�N�

�%�+%����

type dvipSar = ^dvipElem;

dvipElem = record

priekin: dvipSar;

duom : integer;

atgal : dvipSar;

end;

��

struct dvipElem {

struct dvipElem *priekin;

int duom;

struct dvipElem *atgal

}

�%$3������79�(������#$%&���+�$1��&�2�+��1%-�2/�N�

� �' 7>+�@�6��#$%&' �($%78�#N�pradzia,�

� �' 7>+�@�6��#$%&' �(%3%�0 #N�pabaiga,

� �' 7>+�@��6�2�2-2�1�������+�$�%���>$%�%1��2+%-��92�+�-%�N�elem��$�elemk"

)%)5���� ��3 � ���������������

Page 25: Programavimas C,Pascal

� � �

�%�+%����

var pradzia, pabaiga, elem, elemk: dvipSar;�

��

struct dvipElem *pradzia, pabaiga, *elem, *elemk;�

� (2$%B�/D �$��+��>��>$%�1' +��(%1��+%�(��$�9�2�(���' ��#$%&' �%192/�"��' ��>$%�$2%��E�' /%-' ��%�%�' 0 �&+%�"��%�%0 $��@��-2��%�+���-' ��$�612$(�-' �6��#$%&' �9�7D �' (2$%B�/%����2��/' �2�$2�+�%�19%$+>1��79����' $' 7%��9�21' /2�9�2�' ���+%�(�3�9' �9�2�(���' ��#$%&' �%192/�"��

2.2.2. �terpti element� dvipusio s�rašo viduje po k-ojo elemento

�$%7��@�3,�2�%N�6�+:#/6�2�2-2�1#�1�$��3,1����+$2�(1%�(%0 %�3��@�$' 7>+�@�elemk�A+%�(�1#�%1��+1��9�2�(���%-��#$%&���%($%&>1%��"�"=��+"C"��9�(���%-2��#$%&2�$' 7>+�? �+�1%��$2�+�%�(%+2��1��$' 7>+�2�priekin"�

K����1�%B�/%�>$%�(%9%�E7�' 1%��:�<�(%9"�

��8��0 ����"���+�$�%-2�2�2-2�1#�

�%�+%���� ��

new ( elem );

elem^.duom := 7;�

elem = (struct dvipElem *) malloc ( sizeof (

struct dvipElem ) );

elem -> duom = 7;�

�K�%��+' 7' �2���12�������1$�' /%��:�=�(%9"�

)%)7���� ��6 � � � �" ���� � �"������� �� �� ��"����� � ����� ����

Page 26: Programavimas C,Pascal

� �;�

.�8��0 ����"�5�1%1' -2���+�$1#�2�2-2�1#�(' �+:' /' �2�2-2�1' ��$�����2/%-2����+U ��2�2-2�1�"�

�%�+%���� ��

elem^.priekin := elemk^.priekin;

elemk^.priekin^.atgal :=elem;�

elem->priekin = elemk->priekin;

elemk->priekin->atgal = elem;�

K���+' 7' �G$%0 -2�1%��>$%������1$�' /%-%���:.��(%9"�

� � � �� ��

� � �

����

��� �

��

)%)9���� ��6 � � � �" ���� � �"�� � ������ ������� �� �� ��"���� ! �� ��<�" ����� � � � � � �'� �� �� �� ���

)%,: ���� ��6 � � � ����� ��� ������� = $%�� ��� � � ��

Page 27: Programavimas C,Pascal

� �*�

4�8��0 ����"�����2/%-2���+�$1#�2�2-2�1#����+:1�' /��2�2-2�1�"�

�%�+%���� ��

elem^.atgal:= elemk;

elemk^.priekin := elem;�

elem->atgal = elemk;

elemk->priekin = elem;

K���+' 7' �G$%0 -2�1%��>$%������1$�' /%-%���:.��(%9"�

2.2.3. Panaikinti k-�j� element� iš s�rašo vidurio

�$%7��@�(%7@1��"��%(��7' -%�$' 7>+�@�elem�1�$��3,1����+$2�(1%�6��%�+��%-#�+:1#/6�2�2-2�1#�A+%�(�1#�%1��+1��9�2�(���%-��#$%&���>$%�%($%&>1%��"�"=��+"��79�(���%-��#$%&���$2�+�%�(%+2��1��$' 7>+�? ��kitas�6�$' 7>+�? �priekinC"��

)%,$���� ��; ����� � � � � � ����� ��� ������� %�� ��������� � � � ��

)%,)���� ��6 � � � � ��� � �� � ���������� �� �� ���� ����� � ����� ����

Page 28: Programavimas C,Pascal

� �<�

��8��0 ����"��2��1' ��%��($' 0 $%-' /2�3���$2�+%���0 %��%�+��%-' �2�2-2�1' �$2�+&-@���&�%�0 ' /%-2�+:' /' ��%�+��%-' �2�2-2�1' �7�' -2�6"�

��

�%�+%���� ��

var k : integer; … k := elem^.duom;�

int k; … k = elem->duom;

K6�+' 7' �G$%0 -2�1#�(%9%�E7�' /%�� # # 7 # A� , : , # , 9 ; , �� 7 � # ; , �9 7 % �: 7 � 9 ! ��

.�8��0 ����"���+$2�(�%-2�A+U �C:' /' �2�2-2�1' �$' 7>+�? �%10 %��6�+:��2�2-2�1#��' �+:��2�2-2�1' �$' 7>+�? �($�2+���6�A+U �C�:#/6�2�2-2�1#"�

�%�+%����

elem^.priekin^.atgal := elem^.atgal;

elem^.atgal^.priekin := elem^.priekin;�

��

elem->priekin->atgal = elem->atgal;

elem->atgal->priekin = elem->priekin;

�%�1%$#/6�+' 7' �G$%0 -2�1#������1$�' /%��:.4�(%9"�

)%,,���� ��0 ��� � �� � � � � � �� �� � �������! � ��� ���

Page 29: Programavimas C,Pascal

� �=�

4�8��0 ����"�1�%��9��%-2��%�+��%-' �2�2-2�1' �%1-��16"�

�%�+%���� ��

dispose ( elem );� free ( elem );

K���92�+�-%��>$%������1$�' /%-%����:. �(%9"��' �&�' �92�+�-' �$' 7>+�@�elem�1%-(%��2%(�3$@81%"�

)%,/���� ��6 � � � � ��� � �� ������������ �� �� ���� �

)%,2���� �& ���� ��� � � � � ��� � �� � �� �� �� ��<��� � � �������� � �� ����

Page 30: Programavimas C,Pascal

� .��

2.3. Stekas �12+%��>$%�7�' -2�D ��1$�+1,$%��+�$�' /2�2�2-2�1%��0 %���3,1��612$(�%-��%$3%��%�+��%-���1�+��12+' �

9�$&,�@/2�A%�0 �"�� �C"��%�0 �%��%(�2�&�#�7�' -2�D ��1$�+1,$%�$2+' -2�7�' /%-%�(%�+%�1>1��L�M�-21' 7��@/2�($�2-' �@/2"��' ��%��>$%��%0 $��@/%-%��12+' �$2%��E%B�/%"�

�%$3�������12+��>$%��%�7' /%-%�6��12+' �9�$&,�? �O�Top"�(7' $' 1��2��%-#/6�2�2-2�1#�$2�+%���0 %�$' 7>+�@�elem"�($%&%��(%12�+1���+�$����' �2��"�"����"�"�"�

2.3.1. Sukurti stek� su vienu elementu

%C�1�&F �%���12+%��

�%�+%���� ��

Top := nil;� Top = NULL;

3C��&�+�$��-2�%1-��16�(�$-%-�2�2-2�1����$�($��+�$�%-2�7�' -2�6"�

�:.*�(%9"�(%9%�E7�' /%���1�%B�/#����+�$1#�&��' �+' 7' �G$%0 -2�1�N��

�%�+%���� ��

new ( elem);

elem^.duom := 5;

elem^.kitas := nil;�

elem = (struct el *) malloc(sizeof(struct el));

elem->duom = 5;

elem->kitas = NULL; �

BC��12+' �9�$&,�? ���+$2�(�%-2�6���+�$1#�2�2-2�1#"�

K���+' 7' �G$%0 -2�1%�������1$�' /#�(%12�+1#������1$%B�/#�A8$"��:.<�(%9"C"�

)%,5���� ��0 ���� � � � � �"���� �� � �"�� � ������� ��� ���

)%,7���� ��� � � �� ��� ������� ��� ��������� ���������� � � � ��

nilTop

?elem

)%,4���� ��- ��. �� �� � � �� ��� ���

Page 31: Programavimas C,Pascal

� .��

�%�+%���� ��

Top := elem;� Top = elem;

2.3.2. �d�ti element� � stek� (operacija push)

�$%7��@�(%7@1���A8$"��:.=�(%9"C"��12+2�>$%�/%��9�2�%��2�2-2�1%�"�57@��-2�6�/6�%�1$#�2�2-2�1#"�

�&�+�$�%-2�9�21#��%�/%-��#$%&' �2�2-2�1���

�%�+%���� ��

new ( elem);� elem = (struct el *) malloc ( sizeof ( struct el ) );

K���+' 7' �G$%0 -2�1%��>$%�(%9%�E7�' 1%���:4��(%9"�

BC��$��+�$�%-2�$2�+&-? ��$�����2/%-2�����12+�"�

�%�+%���� ��

elem.duom := 10;

elem^.kitas := Top;�

elem -> duom = 10;

elem -> kitas = Top;

K���+' 7' �G$%0 -2�1%��>$%������1$�' /%-%���:4��(%9"��

7C�(2$+2��%-2��12+' �9�$&,�? �

)%,9���� ��@ � ��A��� ����������� � ����� ����

)%/: ���� ��0 ���� � � � � ��" ����� � �"�� � ������ ��� ���

)%/$���� ��; ����� � � � � � ����� ��� ������ � �� ����� � � �� ��� �

Page 32: Programavimas C,Pascal

� .��

��' $' 7' ��(2$+@��-#�%1��2+%�&���+' 7' �G$%0 -2�1%��

�%�+%���� ��

Top := elem;� Top = elem;

2.3.3. Panaikinti steko element� (operacija pop)

%C��$%7��@�(%7@1��N��12+2�>$%�+2���2�2-2�1%��A8$"��:4.�(%9"C"��

3C��-%-2�7�' -2�6��&��12+' �9�$&,�@��6�+��1%-#/6�+��$���+$2�(�%-2�(%0 %�3��6�2�2-2�1#�6��12+' �9�$&,�? "�

�%�+%���� ��

k := Top^.inf;

elem := Top;�

k = Top->inf;

elem = Top;

K6�+' 7' �G$%0 -2�1#������1$�' /%��:44�(%9"

)%/)���� ��� � � �� ��� ������� ��� ������ �������� ��� �

Top310 1

nil

?elem

k

Top3 1

nilelem

10k

10

)%/,���� ��� � �� ���� ��� � � ���

)%//���� ��0 �� �� � � �� �� � ���� ���"� ��� � �� ��� � � �� ��� #�

Page 33: Programavimas C,Pascal

� ..�

BC��2$+2�1���12+' �9�$&,�@��$' 7>+�? �6�%�1$#/6�2�2-2�1#��$�%1�%��9��%-2�%1-��16"�

�%�+%���� ��

Top := elem^.kitas;

dispose ( elem );�

Top = elem->kitas;

free ( elem );

K6�+' 7' �G$%0 -2�1#������1$�' /%��:4 �(%9"�

2.4. Eil� ���@��%(7' $' /�-���-%8�%���%��$2�+�%�79�2/D �$' 7>+��D �A��' $' 7D CN�

� 6�2��2��($%78�#��e_pradzia�� 6�2��@��(%3%�0 %��e_pab�"�

2.4.1. Sukurti eil�

%C��$%7��@�(%7@1��N�2��@��($%78�' ���$�(%3%�0 ' ��$' 7>+�@-��>$%�($��+�$�%-%��1�&F �%����-3' ���"�

�%�+%���� ��

e_pradzia := nil;

e_pabaiga := nil;�

e_pradzia = NULL;

e_pabaiga = NULL;

3C���+�$�%-2�(�$-#�2��@��2�2-2�1#��$�($��+�$�%-2�/%-�7�' -2���"�

�%�+%���� ��

new ( elem );

elem^.duom := 3;

elem^.kitas :=nil;��

elem =(struct el *) malloc(sizeof(struct el));

elem->duom = 3;

elem->kitas = NULL;

Top3 1

nilelem

10k

10

nile_pradzia

nile_galas

)%/2���� ��0 ��� � �� � � � � � ��� � � �������� � �� ���

Page 34: Programavimas C,Pascal

� .4�

nil

e_pradzia

3nil

nil

e_pabaiga elem

BC���+$2�(�%-2�($%78�' ���$�(%3%�0 ' ��$' 7>+�2��6���+�$1#�2�2-2�1#�

�%�+%���� ��

e_pradzia := elem;

e_pabaiga := elem;�

e_pradzia = elem;

e_pabaiga = elem;

K��' ��92�+�-��������1$�' /%��

2.4.2. �d�ti element� � eil�

%C��$%7��@�(%7@1��N�2��@/2�/%��>$%�32�1�9�2�%��2�2-2�1%��A8$"�� # # 7 # A� , : , # , 9 ; , �� 7 � # ; , �9 7 % �: 7 � 9 ! �C"�

�3C���+�$�%-2��%�/#�2�2-2�1#��$�/' ��%�+%-��($��+�$�%-2�$2�+&-2�"��

�%�+%���� ��

new ( elem );

elem^.duom := 5;

elem^kitas := nil;�

elem = (struct el*) malloc( sizeof(struct el) );

elem->duom = 5;

elem->kitas = NULL;

K�' �+' 7' �G$%0 -2�1' �92�+�-%��>$%�(%9%�E7�' 1���:4<�(%9"�

)%/4���� ��� ��� � � ����� � � � ���� ��� ���

)%/5���� ��6 �������� � �� � � ��

e_pradzia

3nil

e_pabaiga elem

5nil

)%/7���� ��0 ���� � � � � �������������� ��� ���

Page 35: Programavimas C,Pascal

� . �

BC���+$2�(�%-2�(%�+�1���' �2�2-2�1' ���' $' 7#�6��%�/#�2�2-2�1#"�

�%�+%���� ��

e_pabaiga^.kitas := elem;

e_pabaiga := elem;�

e_pabaiga->kitas = elem;

e_pabaiga = elem;

2.4.3. Panaikinti eil�s element�

%C��$%7��@�(%7@1��N�2��@/2�>$%�+2���2�2-2�1%��A8$"��: ��(%9"CN��

3C��&�%�0 ' -2��&-21%-' �2�2-2�1' �7�' -2�6��$�(%0 %�3��? �$' 7>+�? ����1%1' -2�6��&-21%-#�2�2-2�1#"�

�%�+%���� ��

k := e_pradzia^.duom;

elem := e_pradzia;�

k = e_pradzia->duom;

elem = e_pradzia;

e_pradzia

3

e_pabaiga elem

5nil

4 3 5

nil

?

elem e_pabaigae_pradzia

2duom

kitas

)%/9���� ��6 � � � ������ ! �� ������ � �����

)%2: ���� ��6 �������� ������ � � ����

Page 36: Programavimas C,Pascal

� .;�

BC��2$�1%1' -2�($%78�' ��$' 7>+�? �e_pradzia�6�2�2-2�1#��2��%�16�(' �2�2-2�1' ���%�7' /%�1��%�+#�kitas"��' �1' �%1�%��9��%-2�%1-��16���%�7' /%�1�2�2-2�1#�elem"����

�%�+%���� ��

e_pradzia := elem^.kitas;

dispose ( elem );�

e_pradzia = elem->kitas;

free( elem );

�$%78�' ��$' 7>+�@��(2$+@��-#������1$�' /%��: ��(%9"�

2.5. Pavyzdžiai

2.5.1. Vienpusio s�rašo suk�rimas ir spausdinimas

�2-�%�1���&�%���(%9>E78�%���$2+' -2�7�' /%-%�($%7@1��-' +>1���($' 0 $%-�' 1��7��%-�������#$%&��"��

2.5.1.1. Paskalio pavyzdys {*********************************************************}

{* Užduotis nr. XX *}

{* Sukurti vienpus� s�raš� ir j� atspausdinti. *}

{* *}

{* Atliko: Vardas PAVARD�, kursas, grup�, pogrupis *}

)%2)���� ��� ��� + �� ���� � � � ���� ���� � ���

4 3 5

nil

elem e_pabaigae_pradzia

2

k

2

��� ��)%2$0 ��� � �� � � ����� � � � �� �� �� ��������! � ��� ���

Page 37: Programavimas C,Pascal

� .*�

{* *}

{*********************************************************}

program sukurti_sarasa;

type sar = ^el;

el = record

duom : integer;

kitas : sar;

end;

{ Kuria s�raš� ir gr�žina abi rodykles. }

procedure Sukurti_sar ( var pr, pab : sar );

var g : sar;

x : integer;

begin { Sukurti_sar }

pr := nil; { 1. Is pradži� sukuriame tuš�ia s�raš�. }

pab := nil;

writeln('Kuriame sarasa. Iveskite sveikus skaicius.');

writeln('Noredami baigti, iveskite 0.');

readln ( x ); { 2. Formuojame s�raš�}

while x <> 0 do

begin

if pr = nil

then { 2.1 Pirmasis elementas }

begin

new( g );

g^.duom := x;

g^.kitas := nil;

pr := g;

pab := g;

readln( x );

end

else { 2.2 Kiti elementai prijuniami � pabaig�. }

begin

new( g );

g^.duom := x;

g^.kitas := nil;

pab^.kitas := g;

pab := g;

readln( x );

end

end;

Page 38: Programavimas C,Pascal

� .<�

writeln('Sarasas sekmingai sukurtas');

end; { Sukurti_sar }

procedure Spausdinti( pr : sar );

var s : sar;

begin { Spausdinti }

writeln('Spausdiname sarasa:' );

s := pr;

while s <> nil do

begin

write( s^.duom, ' ');

s := s^.kitas;

end;

writeln;

end; { Spausdinti }

procedure Naikinti_sar( var pr, pab : sar );

var s : sar;

begin { Naikinti_sar }

writeln('Naikiname sarasa nuo pabaigos.');

while pr <> nil do

begin

s := pr;

if pab <> pr

then

begin {Nukreipiame rodykl� i priešpaskutin� element�.}

while s^.kitas <> pab do

s := s^.kitas;

writeln(' Naikiname ', s^.kitas^.duom);

pab := s;

dispose( s^.kitas );

end

else

begin

writeln(' Naikiname pirma: ', s^.duom);

dispose( s );

pr := nil;

pab := nil;

end;

end;

Page 39: Programavimas C,Pascal

� .=�

end; { Naikinti }

var pradzia, pabaiga : sar;

begin

Sukurti_sar ( pradzia, pabaiga );

Spausdinti ( pradzia );

Naikinti_sar ( pradzia, pabaiga);

end.

Page 40: Programavimas C,Pascal

� 4��

2.5.1.2. C kalba: /*********************************************************/ /* Uzduotis nr. XX */ /* Sukurti vienpusi sarasa ir ji atspausdinti. */ /* */ /* Atliko: Jonas Jonaitis */ /* */ /*********************************************************/ �#include <stdio.h> #include <stdlib.h> struct el { int duom; struct el *kitas; }; /* Kadangi reikia gr�žinti dvi rodykles, b�tent pradzi� ir pabaig�, naudosime parametrus-kintamuosius. Pradžia ir pabaiga yra rodykl�s � s�rašo element�, o � funkcija tuomet nueina j� adresai, tai yra elemento rodykl�s rodykl� arba adreso adresas. */

void Sukurti_sar ( struct el ** , struct el** );

void Spausdinti_sar ( struct el * );

void Naikinti_sar ( struct el ** , struct el** );

int main()

{

struct el *pradzia, *pabaiga, *elem;

Sukurti_sar ( &pradzia, &pabaiga );

Spausdinti_sar ( pradzia );

Naikinti_sar ( &pradzia, &pabaiga );

return 0; /* tik Windows */

}

/* Iterpti elementa i saraso pradzia. */

void Sukurti_sar ( struct el * *pr, struct el * *pab )

{

struct el *g;

int reiksme;

puts ("Iveskite saraso elementus. Noredami baigti, iveskite 0:" );

*pr = NULL;

*pab = NULL;

scanf("%d", &reiksme);

Page 41: Programavimas C,Pascal

� 4��

while( reiksme != 0 )

{

if ( *pr == NULL)

{

g = (struct el *) malloc(sizeof(struct el));

g->duom = reiksme;

g->kitas = NULL;

*pab = g;

*pr = g;

}

else

{

g = (struct el *) malloc(sizeof(struct el));

g->duom = reiksme;

g->kitas = NULL;

(*pab)->kitas = g;

*pab = g;

}

scanf( "%d", &reiksme );

}

puts("Sarasas sekmingai sukurtas");

}

/* Spausdinti nuo pradzios */

void Spausdinti_sar (struct el *elem)

{

int i=1;

puts("*****************************************");

puts("Spausdiname sarasa:");

while ( elem != NULL )

{

printf( "%d elementas yra %d\n", i, elem->duom );

elem = elem->kitas;

i++;

}

}

/*Naikinti sarasa */

void Naikinti_sar ( struct el * *pr, struct el * *pab )

Page 42: Programavimas C,Pascal

� 4��

{

struct el *einam;

puts("*****************************************");

puts("Naikiname sarasa nuo pabaigos:");

while (*pr != NULL)

{

einam = *pr;

if ( *pab != *pr )

{

while ( einam->kitas != *pab )

einam = einam->kitas;

*pab = einam;

printf(" %d ", einam->kitas->duom );

free ( einam->kitas );

}

else

{

printf( " %d. \n ", einam->duom );

free ( einam );

*pr = NULL;

*pab = NULL;

}

} /* while */

} /* Naikinti_sar */

Page 43: Programavimas C,Pascal

� 4.�

3 . MODULIAI

�' 7�����$2%��E�' /%�%3�1$%+1%���7�' -2�D �1�(' ��#9' +#"�(�2�&�#��#9' +#�$2+' -2�7�' /��(%�+%�1>1��1$�-(%���$�%�&+�%���&7@�1>1#�-278�%0 #�L�M"�

3.1. �vadas �' 7�����>$%��%9%$%�+�&+%�($' 0 $%-' ��7%�����+�$��>$%�%1�+�$%��+' -(����' /%-%"��' 7���%��>$%�

�+�$1��7�72�? �($' 0 $%-#��+%�7>1��7%��-��"��

3.2. Paskalyje �' 7���%��>$%�/��0 �%-��6�($' 0 $%-#��/' ��($%78�' /2��%�7' /%�1��%+��6��

Uses

�' 7���������727%��&�

� -' 7���' �%�1$%&1@���

� %(�3$@8�-D �7%��2��O���12$G2��' ��

� 92�+�-D �7%��2��O�$2%��E%B�/' ���

� ���B�%��E%9�-' �7%��2�"�

�' 7���' �12+�1' ��+�$�1>-%��6�7%������&�+�$�D �9�2�%�>$%�-%1' -%�9%$1' 1' /������7%$' �0 %��->3? ��%�7' 1��-' 7�����' �($' 0 $%-%9�-' ��$�%3�1$%+F �D /D �7�' -2�D �1�(D ��7@/%�"�

3.2.1. Antrašt�

unit modulio_vardas;

3.2.2. Apibr�žim� dalis

(�3$@8�-' �7%�>/2�>$%�1%�(��%-' ��1�+�G��+B�/D ��$�($' B27,$D �%�1$%&1@�"��$' 0 $%-%�0 %����%�7' 1���1�+�1' -���G��+B�/' -����$�($' B27,$' -����+�$�' ��>$%�(%�+2�31' ��%(�3$@8�-D �7%�>/2"��

Interface

uses moduli�_s�rašas; { naudojam� moduli� s�rašas }

const konstant�_s�rašas; { naudojam� konstant� s�rašas }

type tip�_s�rašas; { naudojam� naudotojo tip� s�rašas }

var kintam�j�_s�rašas; { naudojam� modulio kintam�j� s�rašas} procedure Proc1(parameterai); {proced�r� ir funkcij� antraš�i� skyrius}

function Func(): tipas;

Page 44: Programavimas C,Pascal

� 44�

3.2.3. Veiksm� dalis implementation {naudojami moduliai} funkcij� ir proced�r� aprašai;

�2�+�-D �-' 7���' �7%�6���7%$' �G��+B�/D ��$�($' B27,$D �%($%&%�"��$' 0 $%-' ��/D ��2-%1' ��1�+�/%����%�7' /%��"��2�+�-D �7%�>/2�%�1$%&12��0 %��-%�($%�2��1���/%��0 %��-%���1$�-(��1���+��(%9%7���-' ���2��(%$%-21$D ��#$%&%��3�9' ���$' 7>1%��%(�3$@8�-D �7%�>/2"��2��%�1$%&1@��@$%�1$�-(��%-%��/���1�$����1%(1�����(%12�+1%�%(�3$@8�-' ��+>$��/2"�

�2�+�-D �7%�>/2�0 %���3,1��%($%&>1' ���$�1' +�' ��($' B27,$' ���$�G��+B�/' ���+�$�D �%�1$%&F �D ��@$%�%(�3$@8�-D �7%�>/2"���' -21�/' ��0 %���3,1���%�7' /%-' ��1�+�-' 7���' �9�7�/2"��&' $��@/2�($' 0 $%-' /2�/' ���20 %���3,1���%�7' /%-' �"��

3.2.4. Inicializavimo dalis

���B�%��E%9�-' �7%����>$%�(%�%&��6�($' 0 $%-' ���%+���D �7%�6"����%1��2+%-%�($�2&�9>+7%�1�($' 0 $%-' ���+�$�' /2�>$%��%�7' /%-%��-' 7�������%+�����"��2�0 ��($' 0 $%-' /2�>$%�+2���-' 7���%������B�%��E%9�-' �7%�>��>$%�69>+7' -' ��1' +�%�19%$+%��+' +�%�-' 7���%��>$%��&9%$7��1��uses��%+��>/2"��

begin sakiniai end.

3.2.5. Transliavimas

�$%�����' 7%-��-' 7��������$3' ��%�+%����$2�+�%����1%1>1��destination disk"�1��$%�7%�G%��%������&(�@1�-��.tpu"��' �1' �1$%�����' /%-%��(%0 $��7�����G%��%�"��

3.3. C

3.3.1. Antraš�i� fail� k�rimas

�1$%&F �D �G%���' �2�>$%�1%�(��%-��+��1%-D /D ��$�G��+B�/D �%($%&%�"���2�1�$���&(�@1�-#�.h���1$%&F �D �G%��D �(%9>E78����/%��8��' -2��3,12�1�stdio.h��stdlib.h��$�+�1��"��%7%�0 ��%�1$%&F �D �G%��2�>$%�1�+�G��+B�/D �($' 1' 1�(%��A(�$-%9%�E78�%�C��' �/D �%(�3$@81>��>$%�+�1�$��1%��/D �9%$7%��1�$��3,1��(%8>-@1��+%�(�extern"�

! ��+B�/' ��>$%�1%�(��%-' ��G%��2�����&(�@1�-��.c"�K�%-2�G%��2��20 %���3,1��G��+B�/' ��main()V�

�%0 $��7��@/2�($' 0 $%-' /2�&�' ��G��+B�/' ��>$%��%�7' /%-' ���+%��($�/��0 �%-%��%�1$%&F �D �G%��%���(%�%�7' /%�1�($2+' -(���%1' $�%���+' -%�7#N�

#include "pvz.h"

�1%�7%$1���%��%�1$%&F �D �G%��%��>$%�%(�+��%�78�%-��<stdio.h>��' ��%�7' 1' /' �"example.h""�(�+��%�7�-' �3,7%��(%�%+' ��+�$�>$%�G%��%����1%�7%$1����' �2�+%1%�' 0 �' �2�%$�7%$3���%-2��%�7' 1' /' �+%1%�' 0 2"��

�' -(���%1' $����92$F �%�($' 0 $%-#��&�($' 0 $%-%9�-' �+%�3' ��6�-%&����? "��%�(�1$%�����' /%-' ��($' 0 $%-' ���&�+2��D �G%��D W ��>&�D �$27%+1' $����A%�0 �"��� � �C�O�1%��($' 0 $%-%��+�$��>$%�(%�2�78�%-%�(' �+' -(���%B�/' �"������/��0 �%�9��%��($' 0 $%-' ��7%����6�9�2�#��$�(%0 %-��%�9>+7' -#/6�-' 7��6"��

Page 45: Programavimas C,Pascal

� 4 �

3.3.2. Keli� fail� transliavimas, naudojant gcc

�$�2&�+' -(����' /%�1�(%0 $��7��? �($' 0 $%-#��$2�+�%���1$%�����' 1��9��%����727%-#��%��7%����6�' 3/2+1������-' 7�����"���' -21�/�2�1�$���&(�@1�-#�.o"�

gcc –c example.c –o example.o

gcc –c main.c –o main.o

���' -21���1$%�����' 1' ��7%�>��>$%���/��0 �%-' ���$���+�$�%-%��9>+7' -%��-' 7�����exampleN��

gcc example.o main.o –o example

�2��+%8+�$���G%��%��3�9' �(%+2��1%���$2�+�%�/6�(2$1$%�����' 1���$���/��0 1�����+�1' -���7%��-����&��%�/' N�

gcc -c main.c -o main.o

gcc main.o example.o -o example

3.3.3. Transliavimas kitur

�%�7' 1' /%��1�$����+�$�%�($' /2+1#�A%�0 �"�� �� � AC��$�61$%�+1���%�7' /%-���G%����"���' ��$2�+�%�%1�+�$%����1$%�����' 1��A1%��0 %���3,1��%1��2+%-%�%�1' -%1�&+%�C��(' �1' ���$�&1��A���+C��$�69>+7>1�"�

3.4. Pavyzdys �%12�+��-2�(%($%�1#�($' 0 $%-@�? ������727%�F �#��&�79�2/D �G%��D N�

3.4.1. Pascal ��%0 $��7��@�($' 0 $%-%N��

program programa_su_moduliu;

uses funkc;

var x:integer;

begin

x:=5;

writeln(x,' kvadratu yra ', square(x));

writeln(x,' pakeltas 7 laipsniu yra ', power(x,7):7:0);

writeln(x,' faktorialas yra ', factorial(x));

end.

Page 46: Programavimas C,Pascal

� 4;�

��' 7����N�

unit funkc;

interface

function square(x:integer):integer;

function power(x,y:integer):real;

function factorial(x:integer):longint;

implementation

function square(x:integer):integer;

begin

square:=x*x

end;

function power(x,y:integer):real;

var ans:real;

temp,p:integer;

begin

temp:=x;

ans:=x;

for p:=y-1 downto 1 do

ans:=ans*temp;

power:=ans;

end;

function factorial (x:integer):longint;

var temp:integer;

begin

for temp:=x-1 downto 1 do

x:=x*temp;

factorial:=x

end;

end.

Page 47: Programavimas C,Pascal

� 4*�

3.4.2. C

�%0 $��7��@�($' 0 $%-%N�

#include <stdio.h>

#include "funkc.h"

int main() {

int x = 5;

printf("%d kvadratu yra %d.\n", x, square(x));

printf("%d pakeltas 7 laipsniu yra %.0f.\n", x, power(x,7));

printf("%d faktorialas yra %.0f.\n\n", x, factorial(x));

/* %f yra naudojama isvesti float ir double tipo elementus.

power() ir factorial() funkcijos grazina sveikus skaicius,

todel naudojame %.0f */

return 0;

}

! %��%��funkc.h��+�$�%-2�>$%�G��+B�/D �%�1$%&1@��A($' 1' 1�(%�CN�

#ifndef FUNK_H

#define FUNK_H

extern int square(int x);

extern double power(int x, int y);

extern double factorial(int x);

#endif

! %��%��funkc.c��+�$�%-2�>$%�G��+B�/D �%($%&%�N�

#include <stdio.h>

// Kadangi tipas yra standartinis, prijungti funkc.h nereikia. Jei modulis

// ir tip�, tuomet b�tina prijunti antraš�i� byl� #include “funkc.h“

int square(int x) {

Page 48: Programavimas C,Pascal

� 4<�

return (x * x);

}

double power(int x, int y) {

double ans = x;

int temp = x;

int p;

for(p=y-1 ; p!=0 ; p--) {

ans*=temp;

}

return ans;

}

double factorial(int x) {

int temp;

for(temp=x-1 ; temp!=0 ; temp--) {

x*=temp;

}

return x;

}

Page 49: Programavimas C,Pascal

� 4=�

4. Darbas su konsole

4.1. DOS modulis (Paskalyje) K6�-' 7��6���7%$' �($�2-' �@����2�78�%�F �' �����($' 0 $%-�' �2��%�7' 1���' (2$%B��@�����12-' ��0 %��->3@-��"��%��69%�$�' ��92�+�-D ����7��+%����G%��%����(2$1$%�+�-D �%(7' $' /�-' �' (2$%B�/' ���$�(%�"�

4.1.1. Veiksmai su data ir laiku

�%12�+�%����12-��? �7%1#"��%9%�1@��7�2�%�>$%���$' 7' -%��+%�F �%�����' ����+��;N�

GetDate (var Metai, Menuo, Diena, sav_diena :word);

�%12�+�%����12-' ���%�+#N�

GetTime(var Val, Min, Sek, Sek100: word);

4.1.2. Veiksmai su failais

4.1.2.1. Paieška

�%$1%���$2�+�%�(%1�+$��1���%$�7��+2�>$%��2&+' -��G%��%���+�2+�/%-2�>$%��%��9' ��9�21' ���$�(%�%&�%�"��$' B27,$%�! ��7! �$�1�$%�7%�(�$-#/6�G%��#�+%1%�' 0 2��%1�1��+%�16���$' 7>1%���%9>32�N�

Procedure FindFirst( Kelias:string; Savybes: word; var Results: SearchRec);

�%$%-21$%��� �������$' 7' �(%�2&+' ��+%1%�' 0 ' �+2��#��$��2&+' -' �G%��' �(%9%7���-' �&%3�' �#��+�$�%-2�0 %��-%��%�7' 1����-3' ����X ��$�W ��(%9>E78�����Y\*.*Z�

�%$%-21$%����� � � ����$' 7' ��2&+' -D /D �G%��D ��%9>32�"��D �$2�+&-@��>$%�%($%&>1' ��-' 7���' ��� ��+' ��1%�1' -��N�

const ReadOnly=$01; Directory=$10; {Katalogai.} Hidden=$02; Archive=$20; {Supakuotos bylos.} SysFiles=$04; AnyFile=$3F; VolumeID=$08;

Jei reikia keli� savybi�, tuomet jos yra sumuojamos, kaip antai Hidden+Sysfiles

���%77�1�' ��1' �($' 7�B��0 �$2(' $1���1H ���12-(�%12�B%��32���27�1' �B$2%12�($' (' �%���%�7�R ' $+:3' ' +�"��' �BH %�0 2�1H 2�12[ 1�' $�0 $%(H �B���1H 2�G' ��' R ��0 ���0 0 2�1�' ���%$2�($' 9�727"�

�%�2&+' ��$2E��1%1%��>$%�(%12�+�%-%���2%$BH �2B�1�(' �+��1%-' /' �Results��%�+�' �2"��%�1%$' /' �1�(' ��1$�+1,$%�>$%�%($%&' -%�1%�(N�

Type SearchRec=record file : array [1..21] of byte; {OS duomenys.} attr : byte; {Požymi� kod� sumos.} time : longint; {Suk�rimo data ir laikas.} size : longint; {Failo dydis bitais.}

Page 50: Programavimas C,Pascal

� ��

name : string[12]; {Failo vardas ir prievardis.}

�%$1' 1��(%�2&+#����1%���(%F �%���(%$%-21$%��N�

Procedure FindNext(var Results: SearchRec);

$�(%�2&+%�>$%��@+-��0 %��9>+7' -%�$' 7' �+��1%-' /' �DosError�$2�+&-@"���' �$2-�%�1���0 %��-%���8��' 1��+�%�7' ��($�28%�1��"��2��(%�2&+%�>$%��@+��0 %��1%��Doserror�$2�+&-@�>$%��>0 ��0.

program katalogo_turinys;

uses Dos;

var info: SearchRec;

i : integer;

e : string;

begin

e := '*.*'; `\*.*` DOSe Pagrindinis disko katalogas.}

Findfirst(e, anyfile, info); {Pirmojo failo paieska.}

writeln('Katalogas: ':30, e );

i := 0;

while DosError = 0 do

begin

inc(i);

if i=24 then

begin

write('Kita lenteles dalis',

'--- po Enter paspaudimo.');

Readln;

i := 0;

end;

writeln(info.name:12, info.attr:3, info.size:8);

FindNext(info);

end;

end.

K�' ��($' 0 $%-' ���&92�1��� ���[ ��>$%�1' +�%N�

Katalogas: *.* . 16 0 .. 16 0 DIR_MANO.C 32 966 a.out 32 4976 dir_mano.rez 32 45 SYSTEM.C 32 448 system.rez 32 289 DIR.PAS 32 737 stat.c 32 2489 dir 32 123520 dir.rez 32 518 PARAMSTR.PAS 32 438 dir_stand.c 32 852

Page 51: Programavimas C,Pascal

� ��

TIME_KML.C 32 1254 DOSDEMO.PAS 32 1042 dir_stand.rez 32 157 dir.o 32 2304 Time_kml.rez 32 86 direk.rez 32 467

�%1%�' 0 #��+�$�%-2�>$%�1%-�1�+$%��G%��%���$%�7%�G��+B�/%�

Function Fexpand(<Failas>:Pathstr): PathStr;

K��G��+B�/%�7%���6�3>�' ��+2��#��&(�@F �%��+��(���' �+2��' "�

����' �+2��' �(%9%7���-%��7%��-����+%�7' �($' B27,$%N�

Procedure Fsplit (pilnas_failo_pavadinimas : PathStr; var kelias : DirStr; var vardas : Namestr; var prievardis : Extstr; );

�$' B27,$%�(���#�G%��' �9%$7#�A���+%1%�' 0 %��C����+%�7' �6�7%�����+�$�%��0 $#8��%�(%$%-21$%��kelias��vardas��$�prievardis"��

4.1.2.2. Fail� savybes ir j� keitimas Procedure GetFAttr (var failo_kintamasis; var savybes: word); Procedure SetAttr (var failo_kintamasis; var savybes: word);

! %��D ��%9>3@��>$%�+' 7�' /%-' ��1%�(�(%1��+%�(��$�! ��7�2[ 1�%192/�"�! %��%���20 %���3,1��%192$1%�"�

! %��' �(%�2&+%�1%-�1�+$%-2�+%1%�' 0 D �$��+��>/2N�

function FSearch(Failo_vardas: PathStr; katalogu_rinkinys ; string):PathStr;

! %��D �19%$+>-' �G��+B�/' �2���$�($' B27,$' �2�>$%��%�7' /%-��&�2�1�(%�N�

Type Pathstr = string[79]; {pilnas failo vardas} DirStr = string[67]; {katalogas} Namestr = string[8]; {failo vardas} ExtStr = string[4]; {prievardis}

4.1.2.3. Duomenys apie disko talp� function DiskFree(diskas : byte):longint;

K��G��+B�/%�0 $#8��%��%��9' ��%1-��1�2��+�2+6�3%�1%��"����+' �N���-2$������T N�O�����N�O����$�1"1"��

function Disksize (diskas : byte): longint;

! ��+B�/%�0 $#8��%�7��+' �1%�(#�3%�1%��"�

function ParamStr(indeksas : word);

K���G��+B�/%�0 $#8��%�92�+�%-' ��' ��($' 0 $%-' ��9%$7%�"�

program failo_vardas; uses Dos; var pilnas_vardas : string; katalogas : DirStr; vardas : NameStr; prievardis : extStr; begin pilnas_vardas := ParamStr(0);

Page 52: Programavimas C,Pascal

� ��

Fsplit(pilnas_vardas, katalogas, vardas, prievardis); writeln('Veikiamasis katalogas yra: ', katalogas); writeln('Programos failo vardas : ', vardas); writeln('Failo prievardis yra : ', prievardis); end.

K�' ��G��+B�/' ���&92�1��N�

Veikiamasis katalogas yra: Informatika/konsole/ Programos failo vardas : paramstr Failo prievardis yra :

4.1.2.4. Daugiau Dos modulio galimybi� demonstruojantis pavyzdys

program DosDemo; { modulio DOS galimybiu demonstracija } uses Crt,Dos; var ch : char; procedure Dir; { parodo veikiamojo katalogo turini } var katalogas : DirStr; { Modulio Dos tipas } failoSav : SearchRec; { Modulio Dos tipas } begin GetDir(0,katalogas); {Koks yra veikiamasis katalogas?} writeln('Veikiamasis katalogas: ',katalogas); writeln; FindFirst('*.*',Archive,failoSav); { randa pirma faila } while DosError = 0 do begin writeln(failoSav.Name); FindNext(failoSav) { iesko kitu failu} end; writeln; writeln(DiskFree(0),' laisvu baitu is ',DiskSize(0), ' galimu.') end; procedure Parodyk_laika; { rodo sistemini laika } var val,min,sek,simt : word; begin writeln; write('Siuo metu yra: '); repeat GetTime(val,min,sek,simt); write(val:2,':',min:2,':',sek:2,'.',simt:2); GotoXY(25,WhereY) until KeyPressed end; begin { programa } ClrScr; Dir; ch:=ReadKey; Parodyk_laika end. { programa DOSDemo }

Page 53: Programavimas C,Pascal

� .�

�$' 0 $%-' ���&92�1���-%�' �+' -(��12$>/2�AT ' $�%�7��%�B%��%(���+' /2��292�+�%VVC�

Veikiamasis katalogas: /users/moroz/Informatika/konsole DIR_MANO.C a.out dir_mano.rez SYSTEM.C system.rez DIR.PAS dir dir.o dir.rez PARAMSTR.PAS paramstr paramstr.o DOSDEMO.PAS dosdemo.rez dosdemo.o dosdemo 1306564608 laisvu baitu is 10569627648 galimu. Siuo metu yra: 11:31: 7.52

4.2. Standartin�s C funkcijos darbui su laiku ir data ������G��+B�/D �%�32��($�+�%��' �+2�21%��G��+B�/D �����%�+���+�$�D �%($%&%��>$%�(%1%�(��1��1�-2"H �

%�1$%&F �D �G%��2"�

time_t�7�' -2�D �1�(%���+�$1%��+��1%-�2��2-���+�$��' ���%�7' /%��%�+' �G��+B�/' �"�

Sistemin� laik� �2+��7@-���0 $#8��%�G��+B�/%� time_t time (time_t *time);

Lokalus ir Grinvi�o��%�+%��>$%�0 %��%-%����%�7' /%�1�G��+B�/%���

struct tm *localtime (const time_t * timer); struct tm * gmtime (const time_t *timer);

��' -21��%�+%��>$%�92$F �%-%��6�6($%�1#�(%9�7%�#�G��+B�/' -����

char * asctime (const struct tm *tblock); char * ctime (const time_t *time);

Ctime�92$F �%��%�+#�6��;���-3' ��D �2���1? ��+�$�' ��(%3%�0 ' /2�>$%��%�/' ��2���1@����-3' ����Y\�Z��$�2���1@��(%3%�0 ' ����-3' ����Y\�Z"��' ��G' $-%1%��>$%�(%12�+�%-%��1' ��%��(%9>E7>/2"�

! ��+B�/%�strftime�G' $-%1�' /%��%�+' ��&92�16"�

�%9>E7>��������1$�' /%�1����%�+' �G��+B�/%�N�

/******************************************************************** * Tikslas: demonstruoti time.h funkcijas. * Failas: time_kml.c *******************************************************************/ #include <stdio.h> #include <time.h> int main() { time_t now; /* naudojame time_t tipa time modulio */ /* Kalendorinis laikas yra sekundziu skaicius nuo 1/1/1970 */

Page 54: Programavimas C,Pascal

� 4�

now = time((time_t *)NULL); /* gauna sistemini laika ir * patalpina ji kintamajame 'now' */ printf("\n%s", ctime(&now)); /* Vercia 'now' i simb. eilute su '\n' */ /********************************************************/ /* dar vienas budas suzinoti laiko ir datos informacija */ time(&now); printf("%s", ctime(&now)); /* Format data in 'now' */ /**********************************************************/ /* trecias budas: */ time(&now); printf("%s", asctime(localtime( &now ))); /*************************************************************/ { struct tm *l_time; char string[20]; time(&now); l_time = localtime(&now); strftime(string, sizeof string, "%d-%b-%y\n", l_time); printf("%s", string); } return 0; }

�$' 0 $%-' ���&92�1���-%�' �+' -(��12$>/2�>$%�1' +�%N�

Mon Mar 29 12:57:24 2004 Mon Mar 29 12:57:24 2004 Mon Mar 29 12:57:24 2004 29-Mar-04

4.3. Operacin�s sistemos komand� vykdymas C programoje ! ��+B�/%��+9�2F �%�1��' (2$%B��@�����12-' ��+' -%�7#N�

int system (const char *komanda);

�2��+$2�(��>��>$%��@+-��0 %���1�' -21�G��+B�/%�0 $#8��%��"��2��69>+' �+�%�7%��1�' -21�>$%�0 $#8��%-%�$2�+&-@�:���' �+�%�7' ��+' 7%��>$%�($��+�$�%-��+��1%-�2��2-����� �������� �������T � ����� �] ��"�

! ��+B�/' ��92�+�-' �(%9>E7>�N�

/*************************************************************** * * Tikslas: Isbandyti kreipinio i sistema funkcija. * ***************************************************************/ #include <stdlib.h> main() { system("ls -l"); {return 0; DOS versijoje} }

K�' ��($' 0 $%-@�@���&92�1���-%�' �+' -(��12$>/2N�

total 12 -rw-rw-r-- 1 moroz moroz 966 Kov 26 08:47 DIR_MANO.C -rw-rw-r-- 1 moroz moroz 448 Kov 26 08:53 SYSTEM.C -rwxrwxr-x 1 moroz moroz 4304 Kov 26 08:54 a.out -rw-rw-r-- 1 moroz moroz 45 Kov 26 08:48 dir_mano.rez -rw-rw-r-- 1 moroz moroz 0 Kov 26 08:54 system.rez

Page 55: Programavimas C,Pascal

� �

5 . REKURSIJA

5.1. Apibr�žtis �$' B27,$%�%$3%�G��+B�/%��+�$��+$2�(�%���6��%92�1�2��' 0 �%��A�&��%9' �(%F �' ��3�' +' C�%$3%��21�2��' 0 �%��

A(2$�+�1%��($' B27,$' ���$�G��+B�/' �C��9%7��%-%�$2+�$���2"��

5.2. Savyb�s �2+�$����%��%�0 ' $�1-%��1�$��32�7$D ��%9>3�D "��2+�$���@�G��+B�/%�(%12�+�%�(%($%�F �%���' �%$3%�

��! �� � � �� ��� �� ��($2�7�-#"��2��G��+B�/%�>$%�+9�2F �%-%�(%0 $��7�����%192/���/��1�2��' 0 �0 $#8��%�$2E��1%1#"��2��G��+B�/%�>$%�+9�2F �%-%���7@1��0 2���%-�%192/����G��+B�/%��87�' 1�2���($2�7�-#�7%���%�6�79��7%���N�6�+�$�#�1�$���($2�7��6�32��6���7@1��0 2��? ��87�' 16��+%��>$%�+9�2F �%-%��%�/%�G��+B�/' ��+' (�/%����(%($%�12�����9%$�%�1�"��

K���($' B2�%��>$%�9%7��%-%��� � ������ ��+ � ! � ��"���2+9�2�%-�$2+�$��/' ��8��0 �������+' ��%�0 ' $�1-%��7%���%��87�' 16�6�(%($%�12��2���($�2&�3�9? ��&+9�21�-%��>$%�%192$1���$��%�+�%��+' ��$2+�$��/%�(%��2+��(%0 $��7��6�%192/6"��%��>$%�(%��2+�%-%��(%0 $��7�����%192/����1�' -21�0 $#8��%-%��$2E��1%1%���&+9�21���%��$2+�$��/' ��+' (�/%�"��' ��%��>$%�0 $#8���-D ��2+%��+' ��6�(%0 $��7��? �G��+B�/#�>$%�0 $#8��%-%��$2E��1%1%�"�K�#�-21' 7�+#������1$�' ��-2�(%9>E78�%��"�

5.3. Rekursini� proced�r� formos �2+�$����D �($' B27,$D ��1$�+1,$%�0 %���3,1��.�$,&�D N�

�" �2�+�-%��%1��2+%-��($�2&�$2+�$���6��&+9�21�-#N�

procedure Rec;

begin

sakiniai;

if s�lyga then Rec;

end;

�" �2�+�-%���%1��2+%-��(' �$2+�$����' ��&+9�21�-' "���' -21�92�+�-%��>$%�%1��2+%-���0 $681%�1��&�$2+�$����' �0 $68�-' N�

procedure Rec;

begin

if s�lyga then Rec;

sakiniai;

end;

." �2�+�-%��%1��2+%-��1�2+�($�2&��1�2+�(' �$2+�$����' ��&+9�21�-' �

procedure Rec;

begin sakiniai1

if s�lyga then Rec;

sakiniai2;

procedure Rec;

begin

if s�lyga then begin sakiniai1;

Page 56: Programavimas C,Pascal

� ;�

end; Rec;

Sakiniai2; end

end;

Rekursija ir iteracija ��2+�$2+�$��/%��1�2+��12$%B�/%�$2�&+�%�92�+�-D �+%$1' /�-#N�

� �12$%B�/%�+%$1' /�-' ��B2�%$�/D ��%�7' /%��&$2�+&1�����3,7���

� $2+�$��/%�O��2�&$2�+&1�����3,7���(%+%$1' 1��%���&+9�2�7%-%�G��+B�/' �+' (�/%�"��

��2+�$2+�$��/%��1�2+��12$%B�/%�%1��2+%�(%3%�0 ' ��1�+$���-#N�

� �12$%B�/%�3%�0 �%����+%��B�+�' �+%$1' /�-' ��#�>0 %�>$%�(%12�+��%-%"�

� $2+�$��/%�>$%�3%�0 �%-%��>$%�(%��2+�%-%��(%0 $��7�����%192/��"�

3�2-�%192/%���$2E��1%1%��>$%�(%��2+�%-%��(%8��0 �����N�

� �12$%B�/%�+2�F �%�B�+�' ��+%�1���+#��

� $2+�$��/%�0 %-��%�9���(%($%�12��6�%192/6"�

3�2-�%192/%���+%$1' /�-%��0 %���3,1��%-8���N�

� �12$%B�/%�0 %���(%12+1��6�%-8��#�B�+�#���2��B�+�' ��+%�1���+%���2(%��2+�%�$�3���D �$2�+&-�D �

� $2+�$��/%�0 %���1? �1���%-8��%���/2��8��0 ������2��($%�1��%��87�' 1�2���+��(%0 $��7���' �%192/' "�

�2+�$��/' ��1$,+�-%�N�

� /���7%�0 �+%$1D ����B�/�' /%�G��+B�/' ���&+9�21�-' �-2BH %��E-#��$�2�+9' /%-��1%-��+�$1��$2��$�%���3,12�1�($' B2�' $�%����%�+%���$�%1-��1��^�

� +�2+9�2�%-��&+9�21�-���+��1%-�2��2-��>$%��+�$�%-%�%1-��1����$�1%��0 %���$2�+%�%�1��7%�0 �%1-��1�2���&12+��D ^�

�12$%B�/%�(%($%�1%��>$%�%1��2+%-%�9�2�' ��G��+B�/' ��$�3' �2��1' 7@��&�D �$2��$�D �/���2$2�+%�%�/%"��%�(�$��+1���+%$1' /�-' �%($%&>-' �3,7#W �

� �2+�$����%��%�0 ' $�1-%��>$%�0 2$2����1�' -21��+%��/�2��%1,$%��%��%($%&' ��87�' 1�2���($2�7�-' �2�0 #"��%��+%7%��12$%B�/' ���($2�7��>��0 %���3,1���2%+�9%�E7����1�' -21�0 2$�%��>$%�$��+1���$2+�$���6�%�0 ' $�1-#"�

� �2��>$%�$2�+%�%�/%-%��+%7��87�' 1�2���($2�7�-%��3,1D �2G2+1>9����1�' -21�>$%�$2�+%-%����12$%B�/#"�

Pavyzdžiai

5.3.1. Faktorialo skai�iavimas

�2+�$��/#�8-' ��/%�(%86�1%���' ��2�' "��

�%�%0 $��@��-2�G��+B�/#� nn *...*2*1!� �

Page 57: Programavimas C,Pascal

� *�

�' +�#�G' $-��? �0 %��-%�%($%&>1��(%($%�F �%�����B�+����(%9>E78������

program Faktorial;

var fact : Longint;

n, i : integer;

begin

write('Iveskite sveika skaiciu:');

readln (n);

fact := 1;

for i := 2 to n do

fact := fact * i;

writeln(n,'! = ', fact)

end.

! %+1' $�%�' ��#9' +#�0 %��-%�%(�3$@81���$�+�1%�(N� 1!0 � ��� 0��n � )!1(*! �� nnn �

�2-�%�1���&�%�%(�3$@81�-���(2$$%&>��-2�$2+�$��&+%��&�#�G' $-��? "��$%78�' /2�(%12�+�%-%��+' 7%���%�+%��' �+%�3%N�

program rekursinis_faktorialas;

var n : integer;

function Fact( i:integer ) : longint;

begin

if i = 1 then Fact := 1

else Fact := i * Fact(i-1);

end;

begin

write('Iveskite sveika skaiciu: ');

readln(n);

writeln(n,'! =', Fact(n))

end.

�2+�$������G%+1' $�%�' ��+%�F �%9�-' �%�0 ' $�1-%���%($%&>1%����+%�3%�

#include <stdio.h>

long Fact(long);

int main()

{

int n;

printf("\n Iveskite sveika skaciu:");

scanf("%d", &n);

printf ("%d! = %d\n", n, Fact(n));

return 0;

Page 58: Programavimas C,Pascal

� <�

}

long Fact(long skaicius) {

if ( skaicius <=1 ) return 1;

else return (skaicius*Fact(skaicius-1));

}

5.3.2. Vienkryp�io s�rašo spausdinimas atvirkš�ia tvarka

K���(%9>E7>��3�9' �(%12�+1%��7�' -2�D ��1$�+1,$D ��"�"����+�$��>/2"�

5.3.3. Medžio ap�jimo rekursiniai algoritmai

�%9>E7>/2�>$%�(%12�+�%-%��-278�' �+,$�-%���$�%(@/�-%������19%$+%"��

5.3.3.1. Paskalio pavyzdys Medžio ap�jimo rekursini� algoritm� pavyzdžiai:

Program sukurti_medi;

type tree = ^treeNode;

treeNode = record

leftPtr : tree;

data : integer;

rightPtr : tree;

end;

procedure InsertNode( var treePtr : tree; value : integer);

begin

if treePtr = nil then

begin

new ( treePtr );

if treePtr <> nil then

begin

treePtr^.data := value;

treePtr^.leftPtr := nil;

treePtr^.rightPtr := nil;

end

else

writeln(value, 'Neitrauktas, nes truksta atminties.');

end

else

if value < treePtr^.data then

insertNode (treePtr^.leftPtr , value)

else

Page 59: Programavimas C,Pascal

� =�

if value > treePtr^.data then

insertNode ( treePtr^.rightPtr, value )

else write('Kartojasi. ');

end;

Procedure inOrder( var treePtr : tree ); /* apeisime KVD tvarka */

begin

if treePtr <> nil then

begin

inOrder( treePtr^.leftPtr );

write ( treePtr^.data, ' ');

inOrder( treePtr^.rightPtr );

end

end;

var i, item : integer;

rootPtr : tree;

begin

rootPtr := nil;

writeln('===========================');

writeln( 'Skaiciai, saugomi medyje:' );

randomize;

for i:=1 to 10 do

begin

item := random(15);

write ( item, ' ' );

insertNode ( rootPtr, item )

end;

writeln;

writeln( 'Apeiname medi:' );

inOrder( rootPtr );

writeln;

end.

5.3.3.2. C kalba: #include<stdio.h>

#include<string.h>

#include<time.h>

#include<stdlib.h>

Page 60: Programavimas C,Pascal

� ;��

struct treeNode {

struct treeNode *leftPtr;

int data;

struct treeNode *rightPtr;

};

typedef struct treeNode TreeNode;

typedef TreeNode *TreeNodePtr;

void insertNode ( TreeNodePtr *, int );

void inOrder ( TreeNodePtr );

int main()

{

int i, item;

TreeNodePtr rootPtr = NULL;

srand( time(NULL) );

puts("---------------------");

printf("\nSkaiciai saugomi medyje: ");

for ( i = 1; i <= 10; i++ ) {

item = rand() %15;

printf ( "%3d ", item );

insertNode ( &rootPtr, item );

}

printf ( "\n\n Apeiname medi:" );

inOrder( rootPtr );

return 0;

}

void insertNode ( TreeNodePtr *treePtr, int value )

{

if ( *treePtr == NULL ) {

*treePtr = ( TreeNodePtr ) malloc ( sizeof ( TreeNode ));

if ( *treePtr != NULL) {

( *treePtr )->data = value;

( *treePtr )->leftPtr = NULL;

( *treePtr )->rightPtr = NULL;

}

else

Page 61: Programavimas C,Pascal

� ;��

printf("%d neitrauktas i medi, nes truksta atminties.\n", value );

}

else

if ( value < ( *treePtr )->data )

insertNode (&((*treePtr)->leftPtr), value);

else if ( value > ( *treePtr )->data )

insertNode (&((*treePtr)->rightPtr), value);

else printf("Duplicated");

}

void inOrder(TreeNodePtr treePtr)

{

if (treePtr != NULL) {

inOrder (treePtr->leftPtr);

printf("%3d",treePtr->data );

inOrder (treePtr->rightPtr);

}

}

5.3.4. Naujos reiškm�s �traukimas � dvejetain� paieškos med�

5.3.4.1. Paskalio kalba Program sukurti_medi;

type medis=^virsune;

virsune = record

kaire : medis;

duom : integer;

desine : medis;

end;

procedure Iterpti_virsune(var virs : medis; reiksme : integer);

begin

if virs = nil then

begin

new( virs);

if virs <> nil then

begin

virs^.duom := reiksme;

virs^.kaire := nil;

virs^.desine := nil;

Page 62: Programavimas C,Pascal

� ;��

end

else

writeln(reiksme, ' neitraukta, nes truksta atminties.');

end

else

if reiksme < virs^.duom then

Iterpti_virsune (virs^.kaire, reiksme)

else

if reiksme > virs^.duom then

Iterpti_virsune (virs^.desine, reiksme)

else write('dubliuojasi ');

end;

Procedure Infix_KVD(var virs : medis);

begin

if virs <> nil then

begin

Infix_KVD ( virs^.kaire);

write ( virs^.duom , ' ' );

Infix_KVD ( virs^.desine);

end

end;

var i, skaic:integer;

saknis:medis;

begin

saknis := nil;

writeln('==============================');

writeln('Skaiciai, saugomi medyje:');

randomize;

for i:=1 to 10 do

begin

skaic := random(15);

write(skaic,' ');

Iterpti_virsune( saknis, skaic)

end;

writeln;

writeln('Apeiname medi KVD tvarka:');

Infix_KVD(saknis);

Page 63: Programavimas C,Pascal

� ;.�

writeln;

end.

��$' 0 $%-' ��9>+7>-' �$2E��1%1%�N��============================== Skaiciai, saugomi medyje: 2 13 4 12 8 3 13 dubliuojasi 12 dubliuojasi 2 dubliuojasi 12 dubliuojasi Apeiname medi KVD tvarka: 2 3 4 8 12 13 �

5.3.4.2. C kalba �

#include<stdio.h>

#include<string.h>

#include<time.h>

#include<stdlib.h>

struct virsune {

struct virsune *kaire;

int duom;

struct virsune *desine;

};

typedef struct virsune MedzioVirsune;

typedef struct virsune * MedzioVirsRod;

void Iterpti_virsune(MedzioVirsRod *, int);

void Infix_KVD (MedzioVirsRod);

int main()

{

int i, skaic;

MedzioVirsRod saknis = NULL;

srand(time(NULL));

puts("----------------------------------------------");

printf("\n Skaiciai saugomi medyje: ");

for ( i = 1; i <= 10; i++ ) {

skaic = rand() %15;

Page 64: Programavimas C,Pascal

� ;4�

printf("%3d ", skaic);

Iterpti_virsune(&saknis, skaic);

}

printf("\n\n Apeiname medi KVD tvarka:");

Infix_KVD(saknis);

printf("\n");

return 0;

}

void Iterpti_virsune(MedzioVirsRod *virs, int reiksme)

{

if ((*virs) == NULL) {

(*virs) = (MedzioVirsRod) malloc(sizeof(struct virsune));

if ((*virs) != NULL) {

(*virs)->duom = reiksme;

(*virs)->kaire = NULL;

(*virs)->desine= NULL;

}

else

printf("%d neitrauktas i medi, nes truksta atminties.\n", reiksme);

}

else

if ( reiksme < ( *virs )->duom )

Iterpti_virsune (&((*virs)->kaire), reiksme);

else if ( reiksme > ( *virs )->duom )

Iterpti_virsune (&((*virs)->desine), reiksme);

else printf("Dubliuojasi");

}

void Infix_KVD(MedzioVirsRod virs)

{

if (virs != NULL) {

Infix_KVD (virs->kaire);

printf("%3d",virs->duom );

Infix_KVD (virs->desine);

}

}

Page 65: Programavimas C,Pascal

� ; �

6. R�šiavimo suliejimu (angl. mergesort) algoritmas �' (���%$�%����$�+�%9�-' �%�0 ' $�1-%��>$%��&�%-�%���&7@�1>1%�7' B"�7$"��%���%����%0 %�&�' �-21' 7��@/2�

-278�%0 ' /2N��H 11(NQ Q R R R "-�G"9�"�1Q S $%0 %����Q ��G�9%7%�Q �%�2����"H 1-��

K�%-2��+>$��/2�(%12�+�%-%��%�0 ' $�1-' �%($%&%���+�$�' ��@$%�-��@1' /2�-21' 7��@/2�($�2-' �@/2"�

�,&�%9�-' �����2/�-��%�0 ' $�1-%����7%$' ���$,&��' 1#��2+#��$,&��' 7%-%�79��(��2���$�/%������27%-%"��%�%&�%���+%�(�0 $2�1' �$,&�%9�-' �%�0 ' $�1-%���$,&�%9�-' �����2/�-��%�0 ' $�1-%��>$%�(%$2-1%��($��B�(��I�+%�7>+��$�9%�7>+J "�

6.1. Algoritmo aprašas 6 .& 2 "& .�.�

$� B �� C )������� � � � ��������� ���� ������� ���������! ��� ����� � �� �� ! ���� ���

�� 8 ���� ��� ��������� ��� � � ����#���� 8 ���� ��� �� ������ ��� � � ����#��A� ���� ��� ���#����� �� #���� ���

� �7 3 �8 .& 2 "& 9��: ��-% �"# '.( 0.�% ���'2 % �.���";�����< .& �"�"= '> 2 % "�

! �$�1�� %�1����77�2�A+%�$�' ��' ��7%��2��(%�+�1���' �2�2-2�1' ���72+�%�C���2>�L! �$�1"" %�1M��+�$�%-2�+%$�' /���$�72&���' /��7%�>��/%����$,&��' 1' ���1%��>$%�>$%�12�+��%-' ���#�>0 ' �N���2>L! �$�1M�_��2>L! �$�1U �M�_` �_��2>L��77�2M��$��2>L��77�2M�_��2>L��77�2U �M�_` �_��2>L %�1M"�

? �'.& �"�"= '> 2 % "�

������%��-%�>9%����$,&��' 1%�N��2>L! �$�1M�_��2>L! �$�1U �M�_` �_��2>L %�1M��

6 .& 2 "& .�.�

�" ��+' (�/�' 1���2>L! �$�1"�"� %�1M�6�(%0 %�3��6�-%�>9#��%0 %�3L! �$�1"" %�1M�

�" ��72+�%-������$�+�($��+�$1��$2�+&-? �! �$�1����72+����/�($��+�$1��$2�+&-? ���77�2U �"�

." �' �����_���77�2��$�/�_� %�1�

�2���%0 %�3L�M�>$%�-%82������8��%0 %�3L/M���

1%��+' (�/�' 1���%0 %�3L�M�6��2>L+M�����$�+�(%7�7��1��9�2�21�^�

($�2&��0 ��%192/���+' (�/�' 1���%0 %�3L/M�6��2>L+M��/��$�+�(%7�7��1��9�2�21�^�

4" �2��1$2F �%-2�8��0 ��>/2���+' �+%�$�' ��' ��(��@���2��+' (�/�' 1%�7%�����1�' -21���+' (�/�' 1��/#�6�-%�>9' �(%3%�0 #��2>L+"" %�1M�A/2��1$2F �%-2�8��0 ��>/2���+' �72&���' ��' ��7%��2��2�2-2�1%���/�2�/%��%1@/���%-2�-%�>92��1' 9@/' ��%9' �9�21' �2��$�/D ��2$2�+�%�/�7��1�C"�

6.2. Algoritmo sud�tingumo vertinimas �2$1��%�1�$,&�%9�-' ��%�+#��6($%�1%��92$1��%-2�$%+1' ��>0 ���-' �' (2$%B�/D ��+%�F �D "��%8>-@+�-2�/6�

�A�C"��%0 $��7�����$2+�$��/' ��%192/����

� � �A�C�a ����+%���b �"���1%���%192/%���������A�C�a ��A�Q �C�U ��A�Q �C�U �����c �"�

Page 66: Programavimas C,Pascal

� ;;�

��$-%��7@-�' �$2�&+�%�+%�$@��(��@��$%+1D ��>0 ���-' �' (2$%B�/D ��+%�F �����%�1$%��O�72&��@��(��@��$,&�%9�-' �$%+1' ��>0 ���-' �' (2$%B�/D ��+%�F �����1$2F �%��O�' (2$%B�/' ���$2�+%���0 ' ��79�2/D �-%�>9D �����2/�-��"�

�%�+%�F ��' +�-2��;�2�2-2�1D �-%�>9' �$%+1' ��>0 ���-' �' (2$%B�/D ��+%�F �����A�;CN�

�A�;C�a ���A<CU ��;��A<C�a ���A4CU �<��A4C�a ���A�CU �4��A�C�a ���A�CU ����A�C�a ���

�' ��%��0 $681%-2��$�6�1%1' -2�$2�+&-2��

�A�C�a ����A�C�a ���A�C�U ����a ���U ����a ����A4C�a ���A�C�U �4��a ��X ��U �4��a �<��A<C�a ���A4C�U �<��a ��X <�U �<��a �4��A�;C�a ���A<C�U ��;��a ��X �4�U ��;��a �;4��

T 2�7$��%192/���

nn

Tnnn

Tnn

TnT *2)4

(*4)2

)4

((*2)2

(*2)( ������� �

�%8>-@+�-2�+�a ��' 0 ���O�1�2+��>0 F �D �1�$�-2��+��(%0 $��7���' �%192/' ��A�CN�

)1(log*log*log*)1(*)( ������ nnnnnnnTnnT ��

�%�0 ���92$1��%�1�%(>1�+$�%��0 %��%-2��%�+' ���7@1��0 �-#� )log*( nn� �O�9�2�%��' (1�-%��%���D ��&�9��D ��%0 $��@1D �%�0 ' $�1-D "�

�K6�%�0 ' $�1-#�0 %��-%�$2%��E�' 1��1�2+�$2+�$��&+%���1�2+��12$%B�&+%�"��

��

��

Page 67: Programavimas C,Pascal

� ;*�

7. Simboli� eilut�s ��-3' ��D �2���F �D �%(7' $' /�-%���%�+%�>/2�>$%��&7@�1>1%��7' B"�7$"��%���%����%0 %�&�' �-21' 7��@/2�

-278�%0 ' /2N�H 11(NQ Q R R R "-�G"9�"�1Q S $%0 %����Q ��G�9%7%�Q ��-3����12�"H 1-��+�$�%�$2+' -2�7�' /���%�7' 1��"�

��+%�3%���-3' ��D �2���F �D �%(7' $' /�-%��>$%�%1��2+%-%���$2-�%�1���$' 7>+�@-��"��' 7@��&����+>$����>$%�(%12�+�%-%�����7%�>/2���&�%0 $��@/���$' 7>+�@��1�(#"�

7.1. Simboliai ir eilut�s

��-3' ����O�1%��int�1�(' �$2�+&-@��%(�+��%��1%�%(' �1$' G%����(%9>E78�����‘a’�>$%���-3' ��' �%�+' 7%���' �‘\n’�>$%��%�/' ��2���1@����-3' ��' �+' 7%�"�

��-3' ��D �2���1@�O���-3' ��D ��2+%��+�$��>$%�%(7' $' /%-%�+%�(�9�2�1��%��' 3/2+1%�"���-3' ��D �2���1@/2�0 %���3,1��$%�7@����+%�1-2�>����(2B�%�,����-3' ��%���+%�(�%�1%��U ��:��X ��Q ��d ��$�+�1�"�

7.2. Simboli� eilu�i� aprašymas ��-3' ���@��2���1@��>$%�9�2�-%F �' �-%�>9' �(' %�3��"���-3' ��D �2���1@���+�$�%�����' �6($%�1' �

��-3' ��D �-%�>9' �1�' ��+%7�/��3%�0 �%�������' ���-3' ����Y\�Z"��2����-3' ��D �2���1@�>$%�+�$�%-%���%�7' /%�1���1%-��+�$1' -���G��+B�/' -����&�����-3' ����>$%�6$%&' -%��%�1' -%1�&+%�"��2���%�7' 1' /%��(%1��G' $-�' /%�2���1? ��1�' -21�/%-�(%F �%-�12+��(%��$,(��1��6$%&>1��(%3%�0 ' ����-3' �6"��

��-3' ��D �2���1? �0 %��-%�%($%&>1��+2��%���3,7%��N�

� ��-3' ���@�+' ��1%�1%��� ��-3' ��D �ABH %$C�-%�>9���� ��' $' 7%�6���-3' �6��� ��-3' ��D �2���F �D �-%�>9�"�

7.2.1. Simboli� konstanta

��-3' ���@�+' ��1%�1%�>$%�$%&' -%�79�0 �3' �2�+%3�1@�2"�����1@����-3' ��%���$�(%3%�0 ' ����-3' ����>$%�$%&' -%����' �2+��%��%1-��1�2���#�12�@�2��(%9>E78�����

�%$7%�� �� �� �� �� � �� \��

�' -(���%1' $�������+%�F ��' /%��+�2+�%1-��1�2��$2�+�%��+�$1��1' +�%��+' ��1%�1%���$�%1�1��+%-%���&�+�$�%�/%��9�21' �"��2����-3' ��D �2��@/2�$2�+�%�(%�%�7' 1��79�0 �3' ��+%3�1@����-3' �6��1�' -21�($�2&�/6�>$%�$%&' -%��(%�9�$? ��3$,+&�>��\J "�

�%$7%��O�1%����' $' 7%��+�$��$' 7' �6���-3' ���@��+' ��1%�1' ��(�$-#/6���-3' �6"��

7.2.2. Simboli� eilut�

����1@�0 %���3,1��($��+�$�%-%�1�2+���-3' ��D �-%�>9����1�2+���' $' 7%��6���-3' �6��

char spalva[]="balta";

K���%($%&%����+�$�%�-%�>9#��(%�9%��+�$�%-2�>$%�(2�+��2�2-2�1%�N�Y3Z��Y%Z��Y�Z��Y1Z��Y%Z��Y\�Z"�

Page 68: Programavimas C,Pascal

� ;<�

��1%��%($%&%�N�

const char * rod_spalva="balta";

��+�$�%�+��1%-#/6�rod_spalva��+�$���$' 7' �6�2���1? �"balta""��

�2$�2&%-�-' �(%�1%3%"��2��2���1@�>$%����B�%��E�' /%-%�BH %$�X �%($%&2��1%��1%�(����B�%��E�' 1%�2���1@�+%��+�$�' �2����12-' �2�0 %���3,1��1%�(��%-%�(%�1' 9�' /2�%1-��1�2��7%�>/2"��2��2���1? �3���+2�F �%-%�($' 0 $%-' /2��1%����2+�%�1�(2$�2&%-�-' �����B�%��E�' 1��2���1? �$2�+1D ���-3' ��D �-%�>92N�

char spalva[]={‘b’, ‘a’, ‘l’, ‘t’, ‘a’, ‘\0’};

K��' �%192/��-%�>9' ���0 ���>$%����1%1' -%��%�1' -%1�&+%�"��' -(���%1' $����(%�+%�F ��' /%���-3' ��D �+�2+6��$��&�+�$�%�%1�1��+%-#�9�21#"��2��>$%���$' 7' -%��-%�>9' �2�2-2�1D ��+%�F ����%($%&2��1�' -21�$2�+�%��2(%-�$&1���$�9�21#�NULL���-3' ����"��

�%8�' ��+�%�7' �N�

� �%-�$&1%-%��&�+�$1��9�21' ����-3' �����NULL"�� T %�7' -%��(%��7��1��2���1? ��+�$�' ��(%3%�0 ' /2��2��G' $-�' 1%��NULL���-3' ���"�

� ����� ����B ��� ��������� � ������ �� ��� �� ��� � ����� �� ������� ������� �� � �� � � ���� � � ��� ������ �� � �� �� ��� ��������! �� � ��� �����NULL���� �� ������� �� �����"��� ��� �� ���� ���! �� � ��� ��� B �� ����� � ��� ��! � �� �� ������ ��� � ��� � � � ��! ���� ��� ��� � ����� �� ����� � ����� �� � �� � � ��� �� � ���+ � � ��� � � � ���� � ��� ��� ! ��� � �� � �� �� ��� ���� ��� ! � (�� ��� ����

#include <stdio.h>

int main()

{

char eil1[30]="Juodas katinas"; /* konstanta */

char eil2[]="Baltas katinas"; /* konstanta */

char *eil3="Pilkas katinas"; /* kintamasis */

printf("eil1=%s\n", eil1);

printf("eil2=%s\n", eil2);

printf("eil3=%s\n", eil3);

return 0;

}

K�' ��($' 0 $%-' ��$2E��1%1%��>$%�1' +�2N�

eil1=Juodas katinas eil2=Baltas katinas eil3=Pilkas katinas

��$-�2/��7��%($%&>-' �3,7%��%�%�' 0 �&+��-%�>9%-�"��$2F �%��%($%&%��0 %��-%��1�+���-3' ��D �-%�>9%-�"�K��' �%192/��eil3�>$%�+��1%-%�������' $' 7%�6�2���1@"����%���%192/%���2���1@��9%$7%��>$%�

4-1 pavyzdys. Eilu�i� inicializavimo b�dai.

Page 69: Programavimas C,Pascal

� ;=�

��' $' 7%�6�(�$-#/6�2���1@����-3' �6"��%7%�0 ��eil1��$�eil2�>$%�+' ��1%�1' ���1%��($��+>$�-%��eil1 = eil2�>$%��20 %��-%����2��+' ��1%�1D �$2�+&-�D ��20 %��-%�+2��1�"��%F �%��+�1%��($��+>$�-%��eil3 = eil2�>$%�12����0 %����2��eil3 >$%�+��1%-%���"�

�%�' 0 �&+%��79�-%F �%-�-%�>9���>$%��%�7' /%-%��2���F �D �-%�>9%�"�

char *spalvos[5]=”raudona spalva”, “melyna spalva”, “zalia spalva”, “oranzine spalva”, “juoda spalva”;

K��' �%192/���&6���-3' ��D �-%�>9#���7%$' �(2�+�' ����' $' 7' ��6���-3' ��D �2���12�"���$-' /�����' $' 7%�>$%�spalvos[0]���$�/��$' 7' �6�(�$-#�2���1? ��%�1$' /��O�spalvos[1]��$�$' 7' �6�%�1$#�2���1? ��$�(%�%&�%�"��2����-3' ��D �2���1@��>$%�%($%&' -' ��1%�(N�char [5][20]��1�' -21�9��' ��2���1@��3���9�2�' 7' ���0 �' "�1-��1���1' +���%192/��>$%��%�7' /%-%��22G2+1>9�%����2��3�����$' 7' -%��7>7���(%0 %����0 �%���#�2���1? "�

7.2.3. Eilut�s �vedimas (standartin�s funkcijos iš stdio.h)

����1@��6927�-%��%(�-%�%1-��1�2���&�+>$�-#��$�$2�+&-2��($��+>$�-#"���21%�%1-��1>/2�>$%��&�+�$�%-%��1%1�&+%���

char vardas[20]:

%$3%�7��%-�&+%���

char * vardas;

�%�1%$�' /��%192/���9�21%�>$%��&�+�$�%-%�7��%-�&+%����%�7' /%�1�G��+B�/%��malloc�%$3%�calloc���

vardas = malloc(20);

����1@��>$%�6927%-' ����%�7' /%�1�G��+B�/%��scanf()��$�gets()"�

! ��+B�/%�scanf()�6927%���-3' ��D �2���12�����$' 7%�1�/' -��G' $-%1#�%s"��%7%�0 ��2���1@��9%$7%��>$%�/' ��($%78�' ��%7$2�%���1' 7@���2�%�7' /%-2�e �($�2&�6927%-#�9%$7#N�

scanf( “%s”, word);

! ��+B�/%�gets()��+%�1' ���-3' �����1' ���+' ���2%(1��+%��%�/' ��2���1@��(' 8>-�' �‘\n’"�K�����-3' ����%1��$%�7%��(%�(%�7���������+�%9�&#"�K��G��+B�/%�($�2�692�1D ���-3' ��D �($�727%�����' ���-3' �6"��

#include<stdio.h>

int main()

{

char name[81];

printf("Kuo Jus vardu? ");

gets(name);

printf("Sveiki, %s \n", name);

return 0;

}

4-2 pavyzdys. Funkcijos gets() naudojimo paprastas pavyzd�lis.

Page 70: Programavimas C,Pascal

� *��

�$' 0 $%-' ��$2E��1%1%�N�

Kuo Jus vardu? Ona Sveiki, Ona

! ��+B�/%�gets()�1�$��7%�0 �%��0 %��->3�D "��2��G��+B�/%�gets()�%(1��+%�G%��' �(%3%�0 ' ��(' 8>-6�EOF��1%��/��(2$�9%$7#�0 $#8��%�NULL�$2�+&-? "�NULL�$2�+&-@�%(�3$@81%�G%��2�<stdio.hc ��$��>0 ���"��' 7@��G��+B�/%�7%8�%���%�7' /%-%�1' +�' �2�+' ��1$�+B�/' �2N�

while(gets(name)!= NULL)

�' 7@��G��+B�/%�7%8�%���%�7' /%-%�1' +�' �2�+' ��1$�+B�/' �2N�

! ��+B�/%�sscanf(char *s, const char *format, …)�2+9�9%�2�1���B%�G���&�+>$���1%���+%7�6927%��&�-%�>9' ����' ��2��&�+�%9�%1,$' ���(%9>E7>�N�

7.2.4. Eilu�i� išvedimas

����1@-���&92�1��>$%��+�$1' ��79���1%�7%$1��@��G��+B�/' ��puts()��$�printf()"�Printf()�/%��3�9' ��%�7' /%-%��1' 7@��%(1%$��-2�puts()"����1�$��1�+�9�2�#�%$0 �-2�1#��3,12�1���' $' 7#�6��&927%-#�2���1? "��%9>E7>�������1$�' /%�puts()��%�7' /�-' �0 %��->32�"�

#include<stdio.h> /* isvestis.c */

#define DEF "Eilute #define."

int main()

{

static char eil1[]="Inicializuota eilute.";

char *eil2="Inicializuota rodykle.";

puts("Funkcijos puts() argumentas ");

puts(DEF);

puts(eil1);

puts(eil2);

puts(&eil1[3]); /* nuo ketvirto elemento */

puts(eil2+6);

}

K�' ��($' 0 $%-' ��92�+�' ��$2E��1%1%��>$%�1' +�N�

Funkcijos puts() argumentas Eilute #define. Inicializuota eilute. Inicializuota rodykle. cializuota eilute. lizuota rodykle.

K���(%9>E7>�������1$�' /%��+%7�1�2+�12+�1%��1%$(�+%3�F �D ��1�2+���-3' ��D �2���F �D �9%$7%���>$%���' $' 7' �"��1$' /2�2���1@/2���' �(%3%�0 ' ��>$%��(%��7��%-%��($%727%�1�+219�$1�' /����-3' �����$��+��2���1@��(%3%�0 ' ������' ���-3' ��' "��%�1%$%������-3' ����>$%�+2�F �%-%���%�/' ��2���1@����-3' ���"��' 7@���+�2+9�2�%��puts()��&927%-%��12+�1%��>$%��(%��7��%-%���&��%�/' ��2���1@�"��

4-3 pavyzdys. Puts() naudojimo ilistracija.

Page 71: Programavimas C,Pascal

� *��

�%�0 ���G��+B�/%�puts()��(%��7��%��+������' ���-3' ��' �‘\0’"��' 7@����-3' ��D �-%�>9%-��&��G��+B�/%��21��+%��+%7%�0 ��/%-2��@$%�2���1@��(%3%�0 ' ��(' 8>-�' "��

�&927%�1�2���12����%�7' /%�1�G��+B�/#�printf()����$' 7' -%��%s�G' $-%1%�"��2��$2�+�%�(2$+2�1��8>-2+�6�6��%�/#�2���1? ��$2�+�%���$' 7>1���%�/' ��2���1@����-3' �6�‘\n’N�

printf(“%s\n”, SimbEilut�); = puts(SimbEilut�)

��%�����1$�' ��-2�sscanf��$�sprintf�G��+B�/%�"�

#include<stdio.h>

int main()

{

char str[]="31351 74.545",

eil[80]; int x;

double y;

puts("Demonstruojame eiluciu ivedimo ir isvedimo operacijas.");

sscanf(str, "%d%lf", &x, &y);

printf("%s\n%s%6d\n%s%8.3f\n",

"Reiksmes, kurios buvo issaugotos masyve:",

"sveika:",x, "ilga reali:",y);

sprintf(eil, "integer:%6d\ndouble:%8.2f", x, y);

printf("%s\n%s\n", "Formatuota isvestis, issaugota masyve yra:", eil);

return 0;

}

�$' 0 $%-' ��$2E��1%1%�N�

Demonstruojame eiluciu ivedimo ir isvedimo operacijas. Reiksmes, kurios buvo issaugotos masyve: sveika: 31351 ilga reali: 74.545 Formatuota isvestis, issaugota masyve yra: integer: 31351 double: 74.55

�' �9�2�#���-3' �6�6927%�G��+B�/#�getchar()��' ��&927%�putchar()"�

7.2.5. Kitos String.h funkcijos

��12$�212�0 %��-%�(%���+%�1>1��

H 11(NQ Q B2$-�B�"2�(B"G$Q S 1�Q �Q ! � ����� ��Q G��B1�' �"$2G"H 1-��

4-4 pavyzdys. Funkcij� sscanf ir sprintf naudojimo pavyzd�lis

Page 72: Programavimas C,Pascal

� *��

7.2.6. Eilu�i� apdorojimo operacijos �BH %$�X ��1$B(>�A�BH %$�X $2E��BH %$�X ($%7�C� �' (�/�' /%�2���1@�prad�6�2���1? �rez"�

BH %$�X ��1$�B(>�A�BH %$�X $2E��BH %$�X ($%7������0 �27�+�2+�C� �' (�/�' /%�2���1@��prad�+�2+���-3' ��D �6�2���1? �rez"�

BH %$�X ��1$B%1�A�BH %$�X $2E��BH %$�X ($%7�C� ��/��0 �%�79��2���12��

BH %$�X ��1$�B%1�A�BH %$�X $2E��BH %$�X ($%7������0 �27�-%[ �2�C�

�$�/��0 �%�2���1@��prad�maxlen���-3' ��D �($�2�2���1@��rez�

��1��1$�2��A�BH %$�X 2���C� �%�+%�F ��' /%�2���1@����-3' ��D ��+%�F �D �32�����' ���-3' ��' "�

#include<stdio.h>

#include<string.h>

int main()

{

char x1[]="Laimingu ",

x2[]="Naujuju metu",

*x3="Viskas";

char x[25], y[25], z[17];

/* char x[25], *y, z[17]; luzimas */

unsigned ilgis;

strcpy(x,x1);

x3=strcpy(x1, x2);

printf("x1=%s\nx2=%s\nx3=%s\n",x1,x2, x3);

strcpy(y,x);

printf("\n%s%s\n%s%s\n",

"x simboliu eilute:", strcat(x,x2 ),

"y simboliu eilute:", y);

strncpy(z,x,16);

z[16]='\0';

printf("z simboliu eilute: %s\n", z);

ilgis=strlen(x);

printf("x eilutes ilgis: %d\n",ilgis );

printf("y eilutes ilgis: %d\n",strlen(y) );

printf("z eilutes ilgis: %d\n",strlen(z) );

return 0; }

4-5 pavyzdys. Keleto lentel�je pateikt� funkcij� naudojimas.

Page 73: Programavimas C,Pascal

� *.�

K�' ��($' 0 $%-' ��$2E��1%1%��>$%�1' +�2N�

x1=Naujuju metu x2=Naujuju metu x3=Naujuju metu x simboliu eilute:Laimingu Naujuju metu y simboliu eilute:Laimingu z simboliu eilute: Laimingu Naujuju x eilutes ilgis: 21 y eilutes ilgis: 9 z eilutes ilgis: 16 �

7.2.7. Eilu�i� palyginimas

��1��1$B-(�A�BH %$�X ����BH %$�X ���C� �2E��1%1%�����/2����a a ��^����������������b ���/2����b ��^����������������c ���/2����c ��"�

��1��1$�B-(��A�BH %$�X ����BH %$�X ������1�-%[ �2��C� �2E��1%1%�����/2����a a ��^����������������b ���/2����b ��^����������������c ���/2����c ��"� >0 ��%-��1�+�(�$-��-%[ �2����-3' ��%��

#include<stdio.h> /* palyg.c */

#include<string.h>

int main()

{

char x1[]="Laimingu ",

x2[]="Naujuju metu";

/* char x[25], y[25], z[17];*/

char x[25], *y, z[17];

unsigned ilgis;

strcpy(x,x1);

strcpy(y,x);

printf("%s%s\n%s%s\n",

"x simboliu eilute:", strcat(x,x2 ),

"y simboliu eilute:", y);

strncpy(z,x,16);

z[16]='\0';

printf("z simboliu eilute: %s\n", z);

printf("\nLyginame x ir y: %d\n", strcmp(x,y) );

4-6 pavyzdys. Keleto lentel�je pateikt� funkcij� naudojimas.

Page 74: Programavimas C,Pascal

� *4�

printf("Lyginame z ir x: %d\n", strcmp(z,x) );

printf("Lyginame y ir z pirmus 5 simbolius: %d\n", strncmp(y,z,5) );

return 0;

}

K�' ��($' 0 $%-' ��$2E��1%1%�N�

x simboliu eilute:Laimingu Naujuju metu y simboliu eilute:Laimingu z simboliu eilute: Laimingu Naujuju Lyginame x ir y: 78 Lyginame z ir x: -32 Lyginame y ir z pirmus 5 simbolius: 0 ��

7.2.8. Paieška eilut�se BH %$�X �1$BH $�A�BH %$�X ($%7��BH %$���C� ����1@/2�prad��2&+' �(�$-' /' ���-3' ��' ��>0 %����"��2��

�2$%�7%��0 $#8��%�NULL"�

BH %$�X �1$$BH $ABH %$�X 2����BH %$�BC� �2$8�,$��2���1? �eil��+' ��(%��$' 7' �(%�+�1�������-3' ����c"��2���2$%�7%��0 $#8��%�NULL"�

��E2)1��1$B�(�ABH %$�X 2�����BH %$�X 2���C� $#8��%���0 6�eil1�7%��2����' �2���1@��($%78�' ���+�$�' /2��@$%���-3' ��D ��&�eil2"�

��E2)1��1$�(�ABH %$�X 2�����BH %$�X 2���C� $#8��%���0 6�eil1�7%��2����' �2���1@��($%78�' ���+�$�' /2�>$%���-3' ��D ��&�eil2"�

BH %$�X �1$(3$+ABH %$�X 2�����BH %$�X 2���C� �2$8�,$��2���1? �eil1�1' ���+' ��%(1��+%�(�$-#/6���-3' �6��2�%�16�eil2"��2��$%�7%��1%��G��+B�/%�0 $#8��%���' $' 7#��6�$%�1#���-3' �6�2���1@/2�eil1"��2���2$%�7%��0 $#8��%�NULL"�

BH %$�X �1$�1$ABH %$�X ����BH %$�X ��C^� �2&+' �2���1@��s2�2���1@/2�s1"��2��$%7' ��0 $#8��%���' $' 7#�6�$%�1#�2���1? �2���1@/2�s1"��2���2$%�7%��0 $#8��%�NULL"�

#include<stdio.h>

#include<string.h>

int main()

{

char *eilute="Cia yra tekstas",

*kita="et";

char simbolis='a';

if (strchr(eilute, simbolis)!=NULL)

printf("Simbolis \'%c\' rastas eiluteje \"%s\"\n", simbolis, eilute);

4-7 pavyzdys. Keleto lentel�je pateikt� funkcij� naudojimas.

Page 75: Programavimas C,Pascal

� * �

else

printf("Simbolis \'%c\'nerastas eiluteje \"%s\"\n", simbolis, eilute);

printf("Eilutes \"%s\" segmento ilgis, kuriame nera eilutes \"%s\" simboliu ilgis yra %d\n",

eilute, kita, strcspn(eilute, kita));

return 0;

}

Simbolis 'a' rastas eiluteje "Cia yra tekstas" Eilutes "Cia yra tekstas" segmento ilgis, kuriame nera eilutes "et" simboliu ilgis yra 8 ��

7.2.9. Kai kurios simboli� apdorojimo funkcijos, iš ctype.h ���1���7�0 �1�A��1�BC� �$�2�O�/2��c��+%�1-�' ��($�2&��0 ��%192/��O�G%��2"�

��1���%�(H %�A��1�BC� �$�2�O�/2��c�$%�7@��($�2&��0 ��%192/��O�G%��2"�

��1���%���-�A��1�BC� �$�2�O�/2��c�$%�7@�%$3%��+%�1-�' ��($�2&��0 ��%192/��O�G%��2"�

��1����' R 2$�A��1�BC� �$�2�O�/2��c�-%8' /��$%�7@��($�2&��0 ��%192/��O�G%��2"�

��1����((2$�A��1�BC� �$�2�O�/2��c�7�78�' /��$%�7@��($�2&��0 ��%192/��O�G%��2"�

��1�1' �' R 2$�A��1�BC� �2��c�7�78�' /��$%�7@��1%��G��+B�/%�0 $#8��%�%1�1��+%-%��-%8#/#�$%�7? "��2��-%8' /���1%��0 $#8��%�1#�(%F �#�$2�+&-? "�

��1�1' �((2$�A��1�BC� �2��c�-%8' /��$%�7@��1%��G��+B�/%�0 $#8��%�%1�1��+%-%��7�78�#/#�$%�7? "��2��7�78�' /���1%��0 $#8��%�1#�(%F �#�$2�+&-? "�

��1����(%B2�A��1�BC� �$�2�O�/2��c�1%$(%���($�2&��0 %��O�G%��2"�

��1���B�1$��A��1�BC� �$�2�O�/2��c�9%�7%�1�����-3' �����($�2&��0 %��O�G%��2"�

�%9>E78�����

a='2';

printf("%s \n", isdigit(a)? "a yra skaitmuo":"a n�ra skaitmuo");

! $%0 -2�1' �9>+7>-' �$2E��1%1%�N�

a yra skaitmuo

7.2.10. Kitos funkcijos ��1��1$�B-(ABH %$�X ����BH %$�X ��C� �2E��1%1%�����/2����a a ��^�

���������������b ���/2����b ��^����������������c ���/2����c ��"��21�+$��%-%��$%�78�D �$20 ��1$%��

��1��1$��B-(ABH %$�X ����BH %$�X ������1�-%[ �2�C� �2E��1%1%�����/2����a a ��^����������������b ���/2����b ��^����������������c ���/2����c ��"� >0 ��%-��1�+�(�$-��maxlen�

Page 76: Programavimas C,Pascal

� *;�

��-3' ��%�"��21�+$��%-%��$%�78�D �$20 ��1$%�"�

BH %$�X �1$�R $ABH %$�X 2��C�� �2$927%�9�����eil���-3' �����6�%(%1��6�$20 ��1$#�A-%8#��%��$%�72�C��

BH %$�X �1$�($ABH %$�X 2��C� �2$927%�9�����eil���-3' �����6�9�$&�1��6�$20 ��1$#�A7�78�#��%��$%�72�C��

BH %$�X �1$7�(ABH %$�X 2��C� �%�7' /%�1�G��+B�/%�malloc�2���1@��eil�+' (�/%��>$%��+�$�%-%�9�21%"�

BH %$�X �1$�21ABH %$�X 2����BH %$�BH C� � 8(��7' �2���1? �eil���-3' ��%���ch"�

BH %$�X �1$��21ABH %$�X 2����BH %$�BH ������0 �27�+�2+C� � 8(��7' �+�2+�2���1@��eil���-3' ��D ���-3' ��%���ch"�

Pavyzdžiai

program eiluciu_apdorojimas;

var x1,x2,y:string;

x : string[25];

z : string[17];

ilgis:byte;

begin

x1:='Laimingu ';

x2:='Naujuju metu!';

x:=Copy(x1,1,length(x1));

y:=Copy(x,1,length(x));

x:=Concat (x,x2);

writeln('x simboliu eilute: ',x);

writeln('y simboliu eilute: ',y);

z:=Copy(x,1,16);

writeln('z simboliu eilute: ',z);

writeln('X simboliu eilutes ilgis: ',length(x));

writeln('Y simboliu eilutes ilgis: ',length(y));

writeln('Z simboliu eilutes ilgis: ',length(z));

end.

#include<stdio.h>

#include<string.h>

int main()

{

4-8 pavyzdys. Eilu�i� kopijavimas ir spausdinimas

4-9 pavyzdys. Eilu�i� ilgio nustatymas ir spausdinimas

Page 77: Programavimas C,Pascal

� **�

char x1[]="Laimingu ",

x2[]="Naujuju metu",

*x3="Viskas";

char x[25], y[25], z[17];

/* char x[25], *y, z[17]; luzimas */

unsigned ilgis;

strcpy(x,x1);

x3=strcpy(x1, x2);

printf("x1=%s\nx2=%s\nx3=%s\n",x1,x2, x3);

strcpy(y,x);

printf("\n%s%s\n%s%s\n",

"x simboliu eilute:", strcat(x,x2 ),

"y simboliu eilute:", y);

strncpy(z,x,16);

z[16]='\0';

printf("z simboliu eilute: %s\n", z);

printf("x eilutes ilgis: %d\n",strlen(x) );

printf("y eilutes ilgis: %d\n",strlen(y) );

printf("z eilutes ilgis: %d\n",strlen(z) );

return 0;

}

K�%-2��+>$��/2�(%12�+�%-' ��7%8��%���%�7' /%-' ��' (2$%B�/' �������-3' ��D �2���1@-��"��%$3������2���1@-�����+%�3' /2�>$%���+�$1��(�@1���%���+�$��' ���%�7' 1��(%1' 0 �%����2��(%12�+�%-%��3,7%�"��%F �%��&���3,7%��>$%�(2$�2&%-%��69%�$��' �2���+%�3' ��92$��/' �2"��

Page 78: Programavimas C,Pascal

� *<�

Literat�ra �"���%7%����-%�' ���"�� ��� ��������- ���� �� ��� �����5�: "�f +%�������������==."�

�"��%�������%0 %�&��"���G' $-%1�+' ��69%7%�N�-21' 7��@�($�2-' �@"�����"�H 11(NQ Q R R R "-�G"9�"�1Q S $%0 %����Q ��G�9%7%�Q ��72[ "H 1-���

."��' �%��T �' ��+�����>1%�1%��T �+&�%�1�����' �%���-' ����+%����1%�%����78�,�%�"�� �� ! ��� �� �� � ����� �� �� ��<���� ! ��� �� �� ������- ���� �� ��� ����"�I�-%�1�/' �J ��2�7>+�%���%��%�������"�

4"�g "��"��2�12����"��"��2�12�"�� <��� D �� ���� ! ��� ����H �$7�27�1�' ����$2�1�B2�g %��������"�

"�h "�i "�i j k l m n o ��p "p "�p q r s t u v n o l ��w "�x "�y l z { | } u q l ��~ "�� "�h r v � q "�� ltl�u �zn �zkn�klmm uknolqu� "�x l { � l ��~ n | � u l ���=<<*�