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

Лабораторна робота № 15

Масиви. Дії над одномірними та двомірними масивами

з використанням файлового введення/виводу

Мета роботи

Придбання і закріплення практичних навичок у використанні масивів та файлового введення/виводу при складанні програми мовою С.

Завдання

1. В лабораторній роботі необхідно скласти алгоритм та розробити программу рішення задачі з використанням масивів та функцій файлового введення/виводу. Варіанти завдань надано в додатку 14. Номер варіанта призначається викладачем.

2. Налагодити та протестувати програму.

3. Скласти звіт про роботу.

Вказівки до виконання завдання

Масив – це кінцева сукупність даних одного типу. Можна говорити про масиви цілих чисел, масивів символів і т.д. Ми можемо навіть визначити масив, елементи якого – масиви (масив масивів), визначаючи, таким чином, багатомірні масиви. Кожен масив у програмі має бути описаний: після імені масиву додають квадратні дужки [], усередині яких звичайно знаходиться число, що показує кількість елементів масиву. Наприклад, запис int x[10]; визначає x як масив з 10 цілих чисел. У випадку багатомірних масивів показують стільки пар дужок, відповідно до розмірності масиву, а число усередині дужок показує розмір масиву за даним виміром. Наприклад, опис двовимірного масиву виглядає так: int a[2][5];. Такий опис можна трактувати як матрицю з 2 рядків і 5 стовпців. Для звернення до деякого елемента масиву вказують його ім'я й індекс, укладений у квадратні дужки (для багатомірного масиву – кілька індексів, узятих в окремі квадратні дужки): a[1][3]. Індекси масиву в С завжди починаються з 0, а не з 1, тобто опис int x[5]; породжує елементи x[0], x[1], x[2], x[3], x[4], x[5].

Початкові значення масивам у мові С можуть бути привласнені при компіляції тільки в тому випадку, якщо вони оголошені з класом пам'яті extern або static, наприклад:

         static int a[6]={5,0,4,-17,49,1};   

забезпечує присвоєння a[0]=5; a[1]=0; a[2]=4 ... a[5]=1. Як бачите, для початкового присвоєння значень деякому масивові треба в описі помістити праворуч від знака = список, що ініціюють значення, укладені у фігурні дужки і розділені комами. Двовимірний масив можна ініціювати так:

     static int matr[2][5] = {{3,4,0,1,2},{6,5,1,4,9}};  

Матриця зберігається в пам'яті рядками, тобто самий правий індекс у наборі індексів масиву змінюється швидше за все.

Приклад: Дано двомірний масив. Зробити ввід масиву з файла. Знайти максимальний елемент масиву та суму елементів кожного рядка і стовпця. Видати результат у файл.

Спочатку створюємо файл вхідних даних, для нашого приклада це  massiv.txt, і записуємо масив даних:

1 2 3

4 5 6

7 8 9

#include <stdio.h>

#define m 3

#define n 3

int main (void)

{

FILE *vv,*vi;

float a[m][n], sum, sums, max=0, b;

int i, j;

vv=fopen ("massiv.txt","r"); /* відкриття файла вхідних даних. */

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

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

fscanf(vv,"%f",&a[i][j]); /*Введення двомірного масиву із файла*/

fclose(vv); /* Закриття файла вхідних даних. */

vi=fopen("massiv.rez","w"); /*відкриття файла для запису . */

/* Запис даного масиву у файл.*/

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

{

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

fprintf(vi," %.0f",a[i][j]);

fprintf(vi,"\n"); /* запис масиву рядок-стовпець. */

}

max=a[0][0]; /*ініціалізація змінної max 1-м елементом масиву*/

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

{

sum=0;

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

{

sum=sum+a[i][j]; /*сума елементів i-го рядка */

if(a[i][j]>max)

max=a[i][j]; /*визначення максимального ел-та масиву*/

}

/*Запис результату у файл*/

fprintf(vi,"Сума %d рядка \t %.0f\n" , i+1, sum);

}

fprintf(vi,"\n");

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

{

sums=0;

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

sums=sums+a[i][j]; /*сума елементів j-го стовпця */

/*Запис результату у файл*/

fprintf(vi,"Сума %d стовпця\t %.0f\n",j+1,sums);

}

fprintf(vi,"max=%.0f",max);

fclose(vi); /* закриття файла вихідних даних. */

return(0);

}

Результати розв’язання:

1 2 3

4 5 6

7 8 9

Сума 1 рядка 6

Сума 2 рядка 15

Сума 3 рядка 24

Сума 1 стовпця 12

Сума 2 стовпця 15

Сума 3 стовпця 18

max=9

Коментарі до програми: у програмі організовано два цикли, ініціалізація змінної sum=0 у зовнішньому циклі дає можливість обнулити попередній результат після кожної ітерації зовнішнього циклу і таким чином знайти суму елементів кожного рядка. Аналогічно визначається сума елементів кожного стовпця.

Звіт про роботу має включати стислий опис роботи, алгоритм виконання індивідуального завдання у вигляді блок–схеми, текст програми і результати її виконання.

Лабораторна робота № 16