Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB_TO2.doc
Скачиваний:
15
Добавлен:
19.02.2016
Размер:
2.62 Mб
Скачать

4 Приклад виконання практичної роботи Завдання

  1. Задати одновимірний масив дійсних чисел розмірністю 17.

  2. Знищити перший елемент, який дорівнює 8. Одержаний масив вивести на екран.

  3. Додати після кожного непарного елемента масиву елемент зі значенням. Одержаний масив вивести на екран.

Програма розв'язку

#include<stdio.h>

#include<conio.h>

#include<math.h>

float A[17]={5,4,6,8,5,6,8,9,1,2,4,4,3,9,8,7,4},B[17],C[34],n;

int i,k,l,m,j;

void main() { clrscr();

for(i=0,j=0;(i<17)&&(j<17);i++,j++)

if(A[i]==8) { k++; B[j]=A[i+1];} else if(k<1) B[j]=A[i]; else B[j]=A[i+1];

for(i=0;i<17;i++) printf("B[%d]=%1.0f\t",i,B[i]);

printf("\n");

for(i=0;i<17;i++) { n=fmod(B[i],2); if(n!=0) l++; }

for(i=0,j=0;(i<17)&&(j<(17+l));i++,j++)

{ n=fmod(B[i],2); if(n!=0) { C[j+m]=B[i]; C[j+m+1]=-8; m=m+1; } else

{ if(m<1) C[j]=B[i]; else C[j+m]=B[i]; } }

for(i=0;i<(17+l);i++) printf("C[%d]=%1.0f\t",i,C[i]); }

Результати:

B[0]=5 B[1]=4 B[2]=6 B[3]=5 B[4]=6 B[5]=8 B[6]=9 B[7]=1 B[8]=2 B[9]=4 B[10]=4 B[11]=3 B[12]=9 B[13]=8 B[14]=7 B[15]=4

C[0]=5 C[1]=-8 C[2]=4 C[3]=6 C[4]=5 C[5]=-8 C[6]=6 C[7]=8 C[8]=9 C[9]=-8 C[10]=1 C[11]=-8 C[12]=2 C[13]=4 C[14]=4 C[15]=3 C[16]=-8 C[17]=9 C[18]=-8 C[19]=8 C[20]=7 C[21]=-8 C[22]=4

5 Контрольні запитання

        1. Що таке масив?

        2. Яке значення має індекс 1-го елементу масиву

        3. Які типи даних можна використати для опису масивів ?

        4. Яке значення має індекс останнього елементу масиву, коли він має 67 елементів?

        5. Яке значення має індекс 10-го елементу масиву?

Практична робота № 4

Тема: Звернення до елементів масиву через вказівники

Мета: Навчитися звертатися до елементів масиву черех вказівники на них і використовувати операцію посилання по вказівнику для визначення значення елементів

1 Короткі теоретичні відомості

Індексний запис і вказівники. Ім’я масиву без квадратних дужок – це вказівник на перший елемент масиву. Тому до першого елементу можна звертатися з допомогою операції посилання по вказівнику. Нехай описаний масив array[]. Тоді вираз *array дасть його перший елемент, *(array +1) - другий і т. д. . Тоді можна записати такі співвідношення.

*(array)== array[0]

*(array +1) == array[1]

*(array +2) == array[2]

………………………………

*(array +n) == array[n]

Це зв’язок між зверненням до масиву по індексу і через операції з вказівниками.

Не можна використовувати не заданого (не ініціалізованого) вказівника в лівій частині оператора присвоєння.

Наприклад, описаний вказівник типу int

int *ptr;

Цей вказівник не ініціалізований, тому не вказує ні на що відоме. В неініціалізованих вказівниках є певне значення, тільки ми його не знаємо. В більшості випадків це 0. Нехай

*ptr=12;

Значення 12 поміститься по адресі ptr Ця адреса може відноситися до довільного місця в пам’яті, де розміщується операційна система, або сама програма. Значення 12 може затерти цінну інформацію і може привести до повного краху системи.

Обчислення зміщення і порівняння вказівників. Зміщення – це фактичне віднімання двох вказівників, Якщо є два вказівники на різні елементи одного масиву, то їх можна відняти один від одного і вияснити , на якій відстані вони знаходяться Адресна арифметика забезпечує автоматичне масштабування результату, і в підсумку відстань виражається в кількості елементів. Якщо ptr1 i ptr2 вказують на елементи одного і того масиву, то вираз ptr1-ptr2 дає відстань між цими елементами.

Вказівники можна також порівнювати. Порівняння має сенс тільки для вказівників на один і той масив. При цьому виконуються операції порівняння = =, !=, <, >, >+, <+.

Молодші елементи масиву, тобто елементи з меншими індексами мають і менші адреси. Якщо ptr1 i ptr2 вказують на елементи одного і того масиву, то співвідношення ptr1 < ptr2 істинне, коли ptr1 вказує на елемент з меншим індексом, ніж ptr2. Множення і ділення над вказівниками не виконується.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]