Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_pr.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
147.46 Кб
Скачать

Лабораторна робота №1 Тема: створення та обробка динамічних масивів

Мета: отримати навики в використанні функцій розподілу, перерозподілу, звільнення динамічної пам'яті для створення та обробки масивів, розмірність яких контролює користувач

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

Мова С в своєму підході до операцій з адресами відрізняється послідовністю та логічністю. Існує тісний зв'язок між масивами, покажчиками та адресною арифметикою.

Якщо покажчик ра посилається на який — небудь елемент масиву, то, за визначенням, збільшення покажчика на 1 дозволяє перейти до адреси наступного елемента масиву, збільшення покажчика на значення i — до адреси i -го елементу після ра, а зменшення на значення i — до адреси i -го елементу перед ра. Нехай ра=&a[0], тоді pa+i a[i] *(pa+i)

Приклади до виконання лабораторної роботи

Завдання 1. Створити динамічний масив з n чисел (кількість елементів масиву обирає користувач). Відсортувати елементи масиву в порядку зростання їх значень. Збільшити масив на 4 елементи. Виконати сортування перетвореного масиву

#include <stdio.h>

//прототипи функцій printf(), scanf(),getchar(),fprintf()

#include <stdlib.h>

//прототипи функцій calloc(), realloc(),free()

/* функція виводить n елементів одновимірного масиву починаючи з адреси р */

void show(int* p,int n)

{int i;

for(i=0;i<n;++i)

printf("%4d",p[i]);

getchar();

/* функція очікує введення символу з потоку stdin*/

}

/* функція сортує n елементів одновимірного масиву починаючи з адреси р наступним чином:

1) фіксується перший елемент у масиві;

2) виконується пошук найменшого елементу в масиві починаючи з зафіксованого;

2) обмінються значеннями перший і знайдений елементи масиву;

3) номер фіксованого елемента збільшується на одиницю, продовжуємо сортування з 2 кроку*/

void sort(int *p,int n)

{int i,j,temp,ind;

for(i=0;i<n-1;++i)

{ ind=i;

for(j=i+1;j<n;++j)

if(p[ind]>p[j]) ind=j;

temp=p[ind];

p[ind]=p[i];

p[i]=temp;

}

}

int main()

{int* pm,n,i;

printf("\n Введіть кількість елементів послідовності: ");

scanf("%d",&n);

if(n<2) n=7;

pm=calloc(n,sizeof(int));

if(!pm) { fprintf(stderr,"Error: memory!! ");

return -1;}

printf("Введіть %i чисел:\n",n);

for(i=0;i<n;++i)

scanf("%d",pm+i);

printf("Створено масив:\n");

show(pm,n);

/*сортування елементів масиву*/

sort(pm,n);

printf("\nМасив має наступний вигляд після сортування:\n");

show(pm,n);

n+=4;

//збільшуємо кількість елементів масиву на 4

pm=realloc(pm,n*sizeof(int));

//виконуємо перерозподіл пам'яті

printf("Ведіть 4 числа:\n");

for(i=n-4;i<n;++i)

scanf("%d",pm+i);

printf("Новий масив має вигляд:\n");

show(pm,n);

/*сортування елементів масиву*/

sort(pm,n);

printf("\nМасив має наступний вигляд після сортування:\n");

show(pm,n);

free(pm);

return 0;

}

Завдання 1. Створити динамічний масив розмірності n рядків та m стовпчиків (кількість елементів обирає користувач). Відсортувати елементи рядків обраних користувачем в порядку зростання їх значень.

#include <stdio.h>

#include <stdlib.h>

/* функція виводить елементи двовимірного масиву розмірності n рядків m стовпчиків */

void show(float** p,int n,int m)

{int i,j;

for(i=0;i<n;++i)

{for(j=0;j<m;++j)

printf("%5.2f",p[i][j]);

printf("\n");

}

getchar();

}

/* опис сортування елментів масиву дивись у попередньому прикладі */

void sort(float *p,int n)

{int i,j,ind;

float temp;

for(i=0;i<n-1;++i)

{ ind=i;

for(j=i+1;j<n;++j)

if(p[ind]>p[j]) ind=j;

temp=p[ind];

p[ind]=p[i];

p[i]=temp;

}

}

int main()

{float** pm;

int n,m,i,j;

printf("\n Введіть кількість рядків, стовпчиків: ");

scanf("%d %d",&n,&m);

if(n<2) n=5;

if(m<2) m=6;

pm=calloc(n,sizeof(float*));

if(!pm) {fprintf(stderr,"Error: memory!! ");

return -1;}

for(i=0;i<n;++i)

{pm[i]=calloc(m,sizeof(float));

printf("Введіть %i чисел:\n",m);

for(j=0;j<m;++j)

scanf("%f",(*(pm+i)+j));

}

printf("Створено масив:\n");

show(pm,n,m);

/*сортування елементів масиву*/

do{ printf("Номер рядка для сортування(від 0 до %d) ? ",(n-1));

scanf("%d",&i);

if((i<0)||(i>n)) i=abs(i%4);

sort(pm[i],m);

printf("Продовжити (0(ні))");

scanf("%d",&j);

}while(j!=0);

printf("\nМасив після сортування елементів має вигляд:\n");

show(pm,n,m);

for(i=0;i<n;++i) free(pm+i);

free(pm);

return 0;

}

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