
- •Лабораторна робота №1 Тема: створення та обробка динамічних масивів
- •Короткі теоретичні відомості
- •Приклади до виконання лабораторної роботи
- •Варіанти індивідуальних завдань
- •Лабораторна робота №2 Тема: створення та обробка рядків
- •Короткі теоретичні відомості
- •Приклад до виконання лабораторної роботи
Лабораторна робота №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;
}