МІНІСТЕРСТВО ОСВІТИ І НАУКИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра інформаційних
систем та мереж
Лабораторна робота №7
на тему:
Використання вказівників для роботи з масивами даних.
Збереження
масивів даних у динамічній пам’яті.
Львів-2008р.
Назва роботи:
Використання вказівників для роботи з масивами даних. Збереження масивів даних у динамічній пам’яті.
Мета роботи:
Освоїти способи звернення до елементів масивів за допомогою вказівників. Навчитись виділяти та використовувати динамічну пам’ять для розміщення масивів даних.
Завдання лабораторної роботи:
У завданнях першої частини необхідно:
Визначити кількість елементів масиву за допомогою макроконстанти директиви #define;
Для введення, опрацювання та виведення елементів масивів використати попередньо оголошені вказівники;
Введення вхідних даних та виведення результатів супроводжувати відповідними до умови задачі текстовими повідомленнями;
Після введення вхідних даних виконувати ехо-виведення їх значень на екран.
У завданнях другої частини необхідно:
Кількість елементів масиву ввести з клавіатури, після чого виділити необхідний об’єм динамічної пам’яті для розміщення масиву (див. табл. 14);
Занести у динамічну пам’ять введені з клавіатури дані; для звернення до елементів масиву перевагу надати використанню вказівників замість індексів;
Перед виходом з програми звільнити зайняту динамічну пам’ять.
Блок-схема:
Програма 1
Програма 2
Текст програми:
Програма 1
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#define N 30
void sw(unsigned n);
void main()
{
unsigned n;
textcolor(BLACK);
textbackground(WHITE);
clrscr();
printf("Введiть число у десятковiй системi числення\n");
scanf("%u",&n);
//printf("%u\n\n",n);
sw(n);
}
void sw(unsigned n)
{
unsigned *a;
int d=0,i;
a=(unsigned *)malloc(N*sizeof(unsigned));
//printf("%u\n\n",n);
while (n>0)
{
*(a+d)=n%16;
n/=16;
d++;
}
printf("\nЧисло у шiстнадцятковiй системi числення:\n");
for (i=d-1;i>-1;i--)
printf("%X",*(a+i));
getch();
free(a);
}
Програма 2
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#define N 30
int ZV(int n, int m, int **a);
int main()
{
int **c;
int k,n,m,i,j;
textbackground(WHITE);
textcolor(BLACK);
clrscr();
c=(int **) malloc(N*N*sizeof(int));
printf("Введiть розмiр прямокутної матрицi:\n");
printf("n="); scanf("%d",&n);
printf("m="); scanf("%d",&m);
puts("\nВведiть елементи матрицi:");
for (i=0;i<n;i++)
for (j=0;j<m;j++)
{
printf("a[%d,%d]=",i+1,j+1);
scanf("%d",&*(*(c+i)+j));
}
k=ZV(n,m,c);
printf("Кiлькiсть рiзних елементiв прямокутної матрицi=%d",k);
getch();
free(c);
}
int ZV(int n, int m, int **a)
#define true 1
#define false 0
{
int y,x,i,j,K=0,z; int *b[N][N];
puts(" ");
for (i=0; i<n;i++)
for (j=0; j<m;j++)
{z=true;
for (x=0; x<n;x++)
for (y=0; y<m;y++)
if ((i!=x||j!=y)&&(x<=i)&&(i>x||j>y))
{
if ((*(*(a+i)+j))==(*(*(a+x)+y))) z=false;
//printf("K=%d ij[%d,%d] xy[%d,%d] \n",K,i,j,x,y);
}
if (z==true) K++;
}
return K;
}
Результати виконання програми:
Програма 1
Програма 2
Висновки:
Я освоїв способи звернення до елементів масивів за допомогою вказівників. Навчився виділяти та використовувати динамічну пам’ять для розміщення масивів даних.