Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра електронних
обчислювальних машин
Звіт
про виконання лабораторної роботи № 6
з курсу „ Засоби системного програмування ”
Тема:
Опрацювання одно- та двовимірних масивів.
Виконав:
студент групи КІ-2
Львів – 2004
Мета роботи: Закріпити теоретичні знання та оволодіти практичними навиками опрацювання одно- та двовимірних масивів. Засвоїти основи адресної арифметики.
Завдання на лабораторну роботу
Розробити програмне забезпечення для опрацювання одно- та двовимірних масивів (матриць) відповідно до заданого варіанту.
Розміри матриць (в загальному не квадратних) передавати через аргументи функції main(). Параметри, що задають кількість рядків та стовпців повинні бути іменованими і можуть зустрічатися в командному рядку в довільному порядку.
Значення елементів матриць вводити зі стандартного пристрою вводу. Пам’ять під матриці виділяти динамічно. Для трикутних матриць (опираючись на їх структуру) виділяти мінімальні об’єми пам’яті.
Виконати контрольний друк вхідних даних та результатів.
Звернути особливу увагу на обробку помилок, які користувач може зробити при використанні програми.
При вирішенні задач забезпечити дружній інтерфейс з користувачем.
Варіант 23. Множення квадратної матриці на матрицю стовпець.
Аналіз завдання та опис алгоритму вирішення задачі
Матрицю (двовимірний масив) зберігаємо в одновимірному масиві. Для звертання до елементу m[i][j] використовуємо звертання m[i*x+j], де х – кількість елементів в одному рядку масива. Розміри матриць передаємо програмі через аргументи функції main(). int argc (кількіть аргументів) ; char *argv[] – самі аргументи. Оскільки опрацьовуються квадратна матриця і матриця-стовпець такої ж висоти, то використовується лише один параметр.
При множенні двох матриць ми отримуємо нову матрицю, в якій число рядків таке ж як і в першій, а кількість стовпців – як в другій матриці.
Текст програми
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
void Err (int e)
{
if (e==0) puts("ERROR: Wrong argument count!");
else if (e==1) puts("ERROR: Wrong argument name!");
puts("\nSYNTAX: <prog_name> x=<matrix_size>");
getchar(); exit(0);
}
void main (int argc,char *argv[])
{
int *m, *s, *result, i, j, x, tmp=0;
clrscr();
if (argc!=2) Err(0);
for(i=1;i<argc;i++)
{
for(j=0;j<strlen(argv[i]);j++) {
if(argv[i][j]>47&&argv[i][j]<58) {
if(tmp>0)tmp*=10;
tmp+=(argv[i][j]-48);
}
}
if(argv[i][0]=='x') x=tmp;
else Err(1);
tmp=0;
}
printf("\nSquare matrix size : %d x %d",x,x);
m=(int*)malloc(sizeof(int)*x*x);
s=(int*)malloc(sizeof(int)*x);
result=(int*)malloc(sizeof(int)*x);
puts("\nInput elements of square matrix :");
for(i=0;i<x;i++)
for(j=0;j<x;j++)
scanf("%d",&m[i*x+j]);
puts("\nInput elements of column-matrix :");
for(i=0;i<x;i++)
scanf("%d",&s[i]);
puts("\nVisualized matrixes :");
for(i=0;i<x;i++)
{
printf(" │");
for(j=0;j<x;j++)
printf("%4d",m[i*x+j]);
printf(" │ * │ %4d │\n",s[i]);
}
for(i=0;i<x;i++)
{
result[i]=0;
for(j=0;j<x;j++)
result[i] += m[i*x+j]*s[j];
}
puts("\nResult of matrix multiplication :");
for(i=0;i<x;i++)
{
printf(" │ ");
printf("%5d",result[i]);
puts(" │");
}
free(m); free(s); getchar(); getchar();
}
Опис результатів тестування
Для тестування програми було використано матрицю розміром 2 х 2.
Для запуска програми в командний рядок потрібно ввести ім’я програми з необхідним аргументом:
Lab6.exe x=n , де n – розмір матриці.
Кінцевий вигляд результатів тестування програми:
Square matrix size : 2 x 2
Input elements of square matrix :
1
2
3
4
Input elements of column-matrix :
100
200
Visualized matrixes :
│ 1 2 │ * │ 100 │
│ 3 4 │ * │ 200 │
Result of matrix multiplication :
│ 500 │
│ 1100 │
Висновок: Виконуючи дану лабораторну роботу, я закріпив теоретичні знання та оволодів практичними навиками опрацювання одно- та двовимірних масивів. Засвоїв основи адресної арифметики, використовував передачу параметрів програмі через аргументи функції main(), при вводі невірної кількості параметрів, або параметрів з невірною назвою параметру, програма повідомляє про помилку та припиняє свою роботу.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!