Міністерство освіти і науки
Національний університет „Львівська політехніка”
Кафедра EОМ
Звіт
з лабораторної роботи №5
з дисципліни: “Основи алгоритмізації та програмування ”
«Засоби вiдлагодження iнтегрованого середовища Visual C++ 2005: точки переривання, покрокове виконання. Розв'язування на С задач, в яких використовуються числовi масиви та визначення i виклик функцiй»
2015
Мета роботи
Познайомитися iз основними засобами вiдлагодження iнтегрованого середовища Visual C++ 2005;
Познайомитися iз засобами опису функцiй та виклику їх в мовi програмування С;
Познайомитися iз використанням масивiв в мовi програмування С.
Завдання лабораторної роботи
4-7. Задані дійсні числа x, y. Отримати:
/
5-7. Задані дійсні числа a 1 , b 1 , a 2 , b 2 , . . . , a 24 , b 24 . (a i < b i ). Розглядаючи пари a i і b i як ліві і праві кінці відрізків на тій самій прямій, визначити кінці відрізка, який є перетином всіх цих відрізків. Якщо такого відрізка нема, то повідомити про це.
6-7. Заповнити сектори матрицi, якi лежать влiво i вправо вiд головної та побiчної дiагоналей, значеннями вектора b1, b2, ... , b32, вiд лiвого верхньго кута вниз - вправо. Решта матрицi заповнити нулями.
Хід виконання роботи
1.Текст першої програми:
#include <stdio.h>
#include <math.h>
int sign(double x);
int main(void)
{
double x, y, z;
// Ввід x i y
scanf("%lf", &x);
scanf("%lf", &y);
// Обчислення умови задачі
z = (sign(x) + sign(y)) * (sqrt(x * sign(x)) + sqrt(y * sign(y)));
printf("%f\n", z);
return 0;
}
// Обчислення потрібного значення в залежності від переданого параметра
int sign(double x)
{
int a;
if (x == 0) a = 0;
else {
if (x < 0) a = -1;
else a = 1;
}
return (a);
}
Результат виконання програми:
/
Рис. 1. Результат виконання програми
Моя програма правильно інтерпретувала введені числа і обчислила результат(рис. 1) згідно заданої умови.
2.Текст другої програми:
#include <stdio.h>
#include <conio.h>
#define N 25
int main(void)
{
int x[N], y[N], k = 0, k1 = 0;
int desux = 0, desuy = 0; // Тимчасові змінні для зберігання координат
//Цикл для вводу координат x і у
while (k <= N) {
scanf("%d", x + k);
scanf("%d", y + k);
// Умова переревання вводу координат
if (y[k] == 404 && x[k] == 404) break;
k++;
}
while (k1 <= k - 2) {
// Вихід з циклу якщо відрізки не перетинаються
if (x[k1] < x[k1 + 1] && x[k1+1] > y[k1] && y[k1] < y[k1 + 1]) break;
if (x[k1] > x[k1 + 1] && x[k1] > y[k1+1] && y[k1] > y[k1 + 1]) break;
// Перевірка на перетин за різних умов
if (x[k1] < x[k1 + 1] && y[k1] > y[k1 + 1]) {
desux = x[k1 + 1]; desuy = y[k1 + 1];
}
if (x[k1] > x[k1 + 1] && y[k1] < y[k1 + 1]) {
desux = x[k1]; desuy = y[k1];
}
if (x[k1] > x[k1 + 1] && x[k1] < y[k1 + 1] && y[k1] > y[k1 + 1]) {
desux = x[k1]; desuy = y[k1 + 1];
}
if (x[k1] < x[k1 + 1] && y[k1] < y[k1 + 1] && y[k1] > x[k+1]) {
desux = x[k1 + 1]; desuy = y[k1];
}
if (x[k1] == x[k1 + 1] && y[k1] == y[k1 + 1]) {
desux = x[k1]; desuy = y[k1];
}
k1++;
// Координати відрізка який є перетином записуються для наступного циклу x[k1] = desux;
y[k1] = desuy;
}
printf("\tRESULT = %d, %d\n", desux, desuy);
getch();
return 0;
}
Результат виконання програми:
/
Рис. 2. Перевірка двох відрізків на перетин
Програма знайшла перетин відрізків і вивела координати відрізку перетину на екран(рис. 2).
3.Текст третьої програми:
#include <stdio.h>
#include <conio.h>
int FillingZeros(int *a, int array_size);
int main(void)
{
int i, j;
int cnt = 0, num = 1;
int array_size;
printf("Input the size of array: ");
scanf("%d", &array_size);
// Виділення пам’яті для матриці
int **a = (int **)malloc(array_size*sizeof(int *));
for (int i = 0; i < array_size; i++)
{
a[i] = (int *)malloc(array_size*sizeof(int));
}
FillingZeros(a, array_size);
for (i = 0; i < (array_size / 2); i++)
{
cnt++;
for (j = cnt; j < array_size - cnt; j++)
{
a[i][j] = num;
num++;
}
}
// Вибір початкової позиції для заповнення другої половини матриці.
if (array_size % 2 == 0) cnt = (array_size / 2);
else cnt = (array_size / 2) + 1;
for (i = ((array_size / 2) + 1); i < array_size; i++)
{
cnt--;
for (j = cnt; j < array_size - cnt; j++)
{
a[i][j] = num;
num++;
}
}
// Вивід матриці
for (i = 0; i < array_size; i++)
{
printf("\t\t");
for (j = 0; j < array_size; j++)
{
printf("%d ", a[j][i]);
if (j == (array_size - 1)) printf("\n");
}
}
getch();
return 0;
}
// Функція призначена для заповнення масиву нулями
int FillingZeros(int **a, int array_size)
{
int i, j;
for (i = 0; i < array_size; i++)
{
for (j = 0; j < array_size; j++)
{
a[i][j] = 0;
}
}
return 0;
}
Результат виконання програми:
/
Рис. 3. Консольне вікно з матрицею-результатом
Моя програма створила матрицю заданого розміру і підібрала правильну кількість елементів для неї(рис. 3), введені елементи розміщені правильно.
Висновки
Познайомився iз основними засобами вiдлагодження iнтегрованого середовища Visual C++ 2005;
Познайомимився iз засобами опису функцiй та виклику їх в мовi програмування С;
Познайомився iз використанням масивiв в мовi програмування С.