Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра ЕОМ
/
Звіт
до лабораторної роботи № 7
з дисципліни «Основи алгоритмізації та програмування, частина 1» на тему: «Розв'язування на С задач, які використовують файли для вводу та виводу даних»
Варіант № 23
2016
Мета: познайомитися iз засобами файлового вводу та виводу в мовi програмування С.
Завдання:
1)
/
2)
/
3)
/.
Небхідно написати два варіанти програми:
• програма у якій ввід здійснюється з текстового файлу і вивід виконується в текстовий файл;
• програма у якій ввід здійснюється з бінарного файлу і вивід відбувається в бінарний файл.
У бінарному файлі дані зберігаються у внутрішньому представлені.
Для варіанту, який використовує бінарні файли, необхідно написати дві допоміжні програми:
• допоміжну програму яка формує бінарний файл із вхідними даними;
• допоміжну програму яка читає вихідний бінарний файл і виводить на екран монітори вихідні дані.
Хід виконання роботи
Познайомитися зі засобами вводу з файлів та виводу у файл в мові програмування С.
Підготувати тексти програм, у яких використовуються функції роботи з файлами, відлагодити їх та отримати результати роботи програм.
Виконати індивідуальне завдання:
1)
а) Код програми
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <conio.h>
int sign(int a)
{
if (a < 0)
{
return -1;
}
else if (a == 0)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
int x, y;
float z = 0;
FILE *input;
FILE *output;
input = fopen("input.txt", "rt");
if (input == NULL)
{
printf ("Error");
}
fscanf_s(input, "%d %d", &x, &y);
fclose(input);
output = fopen("output.txt", "wt");
z = z+ (sign(x) + sign(y) * sqrt(x*sign(x)) + sqrt(y*sign(y) ) );
fprintf(output, "z=%5.2f\n", z);
fclose(output);
return 0;
}
/
Рис.1. - Результат виконання програми.
б) Код програми
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <conio.h>
int sign(int a)
{
if (a < 0)
{
return -1;
}
else if (a == 0)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
int x, y, z;
FILE *input;
FILE *output;
input = fopen("input.bin", "rt");
if (input == NULL)
{
printf("Error\n");
return 0;
}
fscanf_s(input, "%d %d", &x, &y);
int v = 0, q = 0;
do
{
v = (int)v + (((int)x % (int)10)*((int)pow(2, (int)q)));
x = (x / 10);
q++;
} while (x != 0);
x = v;
int p = 0, g = 0;
do
{
p = (int)p + (((int)y % (int)10)*((int)pow(2, (int)g)));
y = (y / 10);
g++;
} while (y != 0);
y = p;
fclose(input);
output = fopen("output.bin", "wt");
z = (sign(x) + sign(y) * sqrt(x*sign(x)) + sqrt(y*sign(y)));
int u, s[64];
for (u = 0; u < 64; u++)
{
s[u] = 0;
}
u = 0;
while (z != 0)
{
if (z % 2 == 0)
{
s[u] = 0;
z = z / 2;
}
else
{
s[u] = 1;
z = z / 2;
}
u++;
}
u = u - 1;
fprintf(output, "z=");
for (; u >= 0; u--)
fprintf(output, "%d", s[u]);
fclose(output);
return 0;
}
/
Рис.2. - Результат виконання програми.
2)
а) Код програми
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
int main()
{
int left, right, newLeft, newRight;
int i;
FILE *input;
FILE *output;
input = fopen("input.txt", "rb");
if (input == NULL)
{
printf("Error\n");
return 0;
}
fscanf_s(input, "%d\n %d\n", &left, &right);
fscanf_s(input, "%d\n %d\n", &newLeft, &newRight);
fclose(input);
output = fopen("output.txt", "wb");
for (int i = 0; i < 1; i++)
{left = max(left, newLeft);
right = min(right, newRight);
}
if (left >= right)
{
printf(" No intersection");
}
else
printf("left%d right %d", left, right);
return 0;
}
/
Рис.3. - Результат виконання програми.
б) Код програми
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
int main()
{
int left, right, newLeft, newRight;
int i;
FILE *input;
FILE *output;
input = fopen("input.bin", "rb");
if (input == NULL)
{
printf("Error\n");
return 0;
}
fscanf_s(input, "%d\n %d\n", &left, &right);
fscanf_s(input, "%d\n %d\n", &newLeft, &newRight);
int v = 0, q = 0;
do
{
v = (int)v + (((int)left % (int)10)*((int)pow(2, (int)q)));
left = (left / 10);
q++;
} while (left != 0);
left = v;
int p = 0, g = 0;
do
{
p = (int)p + (((int)right % (int)10)*((int)pow(2, (int)g)));
right = (right / 10);
g++;
} while (right != 0);
right = p;
int v1 = 0, q1 = 0;
do
{
v1 = (int)v1 + (((int)newLeft % (int)10)*((int)pow(2, (int)q1)));
newLeft = (newLeft / 10);
q1++;
} while (newLeft != 0);
newLeft = v1;
int p1 = 0, g1 = 0;
do
{
p1 = (int)p1 + (((int)newRight % (int)10)*((int)pow(2, (int)g1)));
newRight = (newRight / 10);
g1++;
} while (newRight != 0);
newRight = p1;
for (i = 0; i < 1; i++);
fclose(input);
output = fopen("output.bin", "wb");
left = max(left, newLeft);
right = min(right, newRight);
if (left > right)
{
fprintf(output, " No intersection");
}
else
{
int u, y[10];
for (u = 0; u < 10; u++)
{
y[u] = 0;
}
u = 0;
while (left != 0)
{
if (left % 2 == 0)
{
y[u] = 0;
left = left / 2;
}
else {
y[u] = 1;
left = left / 2;
}
u++;
}
u = u - 1;
fprintf(output, "left=");
for (; u >= 0; u--)
fprintf(output, "%d", y[u]);
int u2, y2[10];
for (u2 = 0; u2 < 10; u2++)
{
y2[u2] = 0;
}
u2 = 0;
while (right != 0)
{
if (right % 2 == 0)
{
y2[u2] = 0;
right = right / 2;
}
else {
y2[u2] = 1;
right = right / 2;
}
u2++;
}
u2 = u2 - 1;
fprintf(output, "right=");
for (; u2 >= 0; u2--)
fprintf(output, "%d", y2[u2]);
}
fclose(output);
return 0;
}
/
Рис.4. - Результат виконання програми.
3)
а) Код програми
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <malloc.h>
#include <stdlib.h>
int main()
{
int i, j; //для циклів
int size; //розмір масива
int **a; //резервування пам"яті для масива
FILE *input;
FILE *output;
input = fopen("input.txt", "rt");
fscanf_s(input, "%d", &size);
//виділення пам"яті під динамічний масив
a = (int **)malloc(size * sizeof(int *));
for (i = 0; i<size; i++)
a[i] = (int *)malloc(size * sizeof(int));
//заповнення матриці нулями
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
a[i][j] = 0;
}
}
for (i = 0; i < size; i++) //для усіх рядків
{
//верхня частина
for (j = i + 1; j < size - i - 1; j++) {//заповнення випадковими числами усіх стовпців між головною і побічною діагоналями до перетину, тобто галочкою (V)
a[i][j] = 0 + rand() % 15;
}
//нижня частина
for (j = size - i; j < i; j++) {//заповнення випадковими числами усіх стовпців між головною і побічною діагоналями до перетину, тобто перевернутою галочкою (^)
a[i][j] = 0 + rand() % 15;
}
}
fclose(input);
output = fopen("output.txt", "wt");
//виведення масива
fprintf(output, "Matrix:\n");
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
fprintf(output, "%d\t", a[i][j]);
}
fprintf(output, "\n");
}
fclose(output);
return 0;
}
/
Рис.5. Результат виконання програми.
б)Код програми
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <malloc.h>
#include<conio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int i, j, v = 0, h = 0;
int size; //розмір масива
int **a; //резервування пам"яті для масива
FILE *input;
FILE *output;
input = fopen("input.bin", "rt");
fscanf_s(input, "%d", &size);
do
{
v = (int)v + (((int)size % (int)10)*((int)pow(2, (int)h)));
size = (size / 10);
h++;
} while (size != 0);
size = v;
input = fopen("input.bin", "rb");
if (size == NULL)
{
printf("Error\n");
return 0;
}
//виділення пам"яті під динамічний масив
a = (int **)malloc(size * sizeof(int *));
for (i = 0; i < size; i++)
a[i] = (int *)malloc(size * sizeof(int));
//заповнення матриці нулями
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
a[i][j] = 0;
}
}
for (i = 0; i < size; i++) //для усіх рядків
{
//верхня частина
for (j = i + 1; j < size - i - 1; j++) {//заповнення випадковими числами усіх стовпців між головною і побічною діагоналями до перетину, тобто галочкою (V)
a[i][j] = 1 + rand() % 15;
}
//нижня частина
for (j = size - i; j < i; j++) {//заповнення випадковими числами усіх стовпців між головною і побічною діагоналями до перетину, тобто перевернутою галочкою (^)
a[i][j] = 1 + rand() % 15;
}
}
fclose(input);
output = fopen("output.bin", "wt");
//виведення масива
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
if (a[i][j] == 0)
{
fprintf(output, "%d", 0);
}
int u, y[10];
for (u = 0; u < 10; u++)
{
y[u] = 0;
}
u = 0;
while (a[i][j] != 0)
{
if (a[i][j] % 2 == 0)
{
y[u] = 0;
a[i][j] = a[i][j] / 2;
}
else
{
y[u] = 1;
a[i][j] = a[i][j] / 2;
}
u++;
}
u = u - 1;
for (; u >= 0; u--)
fprintf(output, "%d", y[u]);
fprintf(output, "\t");
}
fprintf(output, "\n");
}
return 0;
}
/
Рис.6. - Результат виконання програми.
Висновок: на даній лабораторній роботі я познайомився із засобами файлового вводу та виводу в мовi програмування С.