Динамик массивлар қаерда ишлатилади - Масала. Массив ўлчамини киритинг ва унинг элементларини киритинг. Массивни тартибланг ва уни экранга чиқаринг.
- Муаммо:
- массив ўлчами олдиндан маълум эмас.
- Ечиш усуллари:
- Хотирани ортиғи билан ажратиш
- Хотирани ўлчов аниқ бўлганда керагича ажратиш.
- Алгоритм:
- Массив ўлчовини киритиш;
- Хотира ажратиш ;
- Массив элементларини киритиш;
- Массивни тартиблаш ва экранга чиқариш;
- Массивни хотирадан ўчириш.
- #include
- void main()
- {
- int *A, N;
- printf (“Massiv o’lchovini kiriitng > ");
- scanf ("%d", &N);
- A = new int [N];
- if ( A == NULL ) {
- printf(“хотира ажратишда муаммо");
- return;
- }
- for (i = 0; i < N; i ++ ) {
- printf ("\nA[%d] = ", i+1);
- scanf ("%d", &A[i]);
- }
- ...
- delete pI;
- }
- for (i = 0; i < N; i ++ ) {
- printf ("\nA[%d] = ", i+1);
- scanf ("%d", &A[i]);
- }
- оддий массив каби ишлайди !
- if ( A == NULL ) {
- printf(“xotira ajratish muammo");
- return;
- }
- Си тилида хотирадан жой ажратиш учун malloc ва calloc функцияларидан фойдаланилади.
- C++тилида new операторидан фойдаланилади;
- курсаткич = new тур [ўлчами];
- new оператори натижасини, яъни ажратилган хотира блоки адресини кўрсаткичда сақлаш керак;
- агар new оператори (NULL) қийматни қайтарса, демак хотира ажратиш амалга ошмаганлигини билдиради;
- динамик массив билан хам худди статик массив каби ишланади;
- динамик хотирани бўшатиш учун delete операторидан фойдаланилади :
- delete кўрсаткич;
- Хотира билан ишлашдаги хатолар.
- Хотиранинг бошқа жойига ёзиш:
- хотира ажратилмаган,аммо массив шу жойдан фойдаланмоқчи.
- Нима қилиш керак: курсаткични NULL га текшириш керак .
- Массив чегараларидан чиқиб кетиши:
- массив элементининг индексини хато берилиши билан мурожаат қилиш, массивга элементларини киритаётганда чегарадан чиқиб кетиши.
- Нима қилиш керак: массивнинг чегарадан чиқишини текширувчи транслятор функциясини ишлатиш керак кўрсаткич иккинчи марта ўчирилди :
- хотира структураси бузилди.
- Нима қилиш керак: ўчирилган кўрсаткичга NULL қийматни бериб текшириш керак.
Do'stlaringiz bilan baham: |