Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторн_робот_Ч2.doc
Скачиваний:
19
Добавлен:
03.11.2018
Размер:
2.12 Mб
Скачать

Void fill(int *, int);

/*** головна функція ***/

main() {

int *Ar, /* покажчик на початок масиву */

*Cr; /* поточний покажчик у масиві */

int і, /* лічильник елементів */

S; /* розмірність матриці */

/* задання розмірності */

printf("Введіть розмірність матриці >");

scanf("%d",&S);

/* перевірка розмірності */

if (S<=0) {

printf("Розмірність занадто мала\n");

exit(0);

}

if (S>24) {

printf("Розмірність занадто велика\n");

exit(0);

}

printf("S=%d\n",S);

/* виділення пам'яті */

if ((Ar=(int *)malloc(sizeof(int)*S*S))==NULL) {

printf("Недостача пам'яті\n");

exit(0);

}

/* звертання до функції заповнення матриці */

fill(Ar,S);

/* висновок матриці */

for (Cr=Ar, i=0; i<S*S; Cr++,i++) {

printf("%3d",*Cr);

if (i%S==S-1) putchar('\n');

}

/* звільнення пам'яті */

free(Ar);

return 0;

}

/*** функція заповнення матриці ***/

/* параметри: A - покажчик на початок масиву

s - розмірність матриці */

Void fill(int *a, int s) {

int *C; /* поточний покажчик у масиві */

short l, r; /* рядок і стовпець */

int k=1; /* поточний член ЛП */

for (l=0,C=A; l<s; l++) /* перебір стрічок */

for (r=0; r<s; r++, C++) /* перебір стовпців */

/* умова нульового значення */

if ((r>=max(l,s-l-1))||(r<=min(l,s-l-1))) *C=0;

else *C=k++;

/* кінець перебору стрічок */

/* кінець перебору стовпців * /}

3.5. Відмінності для варіанту реалізації 3

У тексті програми для варіанту реалізації 3 для спрощення виключаємо всі перевірки коректності. Опис реалізації ми обмежуємо тільки відмінностями від варіанту 1.

Покажчик Ar у функції main() - покажчик на масив покажчиків, отже, його тип - int**. Виділення пам'яті ведеться в кілька прийомів: спочатку виділяється пам'ять для масиву з S покажчиків, а потім у циклі - S виділяється пам'ять для масиву з S цілих чисел, адреси виділених масивів записуються в елементи масиву покажчиків. При виводі матриці використовуються i і j - номери стрічки і стовпця і звернення до елементів матриці ведеться як до елементів 2-мірного масиву.

Перший параметр функції fill() - покажчик на покажчик на int. Це дає можливість використовувати номери стрічки і стовпця - l і r також і для звертання до елементів матриці.

#include <stdio.h>

#include <stdlib.h>

#include <alloc.h>

Void fill(int far **, int);

/*** головна функція ***/

main() {

int far **Ar; /* покажчик на масив покажчиків */

int і, j; /* рядок і стовпець */

int S; /* розмірність матриці */

/* введення розмірності */

printf("Enter S>"); scanf("%d",&S);

printf("S=%d\n",S);

/* виділення пам'яті для масиву покажчиків */

Ar=(int far **)malloc(sizeof(int *)*S);

/* виділення пам'яті для кожного рядка

і заповнення масиву покажчиків */

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

Ar[i]=(int far *)malloc(sizeof(int)*S);

/* звертання до функції заповнення матриці */

fill(Ar,S);

/* висновок матриці */

for (i=0; i<S; i++) {

for (j=0; j<S; printf("%3d",Ar[i][j++]) );

putchar('\n');

}

/* звільнення пам'яті рядків */

for ( і=0; і<S; free(Ar[і++]) );

/* звільнення пам'яті масиву покажчиків */

free(Ar);

return 0;

}

/*** функція заповнення матриці ***/

/* параметри: A - покажчик на масив покажчиків

s - розмірність матриці */