
- •Министерство образования республики беларусь учреждение образования гомельский государственный технический университет имени п. О. Сухого
- •Лабораторная работа №3 «Программирование разветвляющихся алгоритмов»
- •Задание: Разработать алгоритмы, написать на языке Си программы в соответствиями с заданиями, подготовить тексты для отладки программ. Задания, которые необходимо выполнить, задает преподаватель.
- •Задание 4.1.
- •Задание 4.2.
- •Задача 4.4
Задача 4.4
Даны действительные числа x, y. Определить, принадлежит ли точка с координатами x, y заштрихованной части плоскости.
Блок-схема:
0
Да
1
2
3
5
Нет
Таблица соответствия переменных:
Переменные в задаче |
Переменные на языке Си |
Тип |
Комментарий |
x |
x |
float |
исходное данное |
y |
y |
float |
исходное данное |
Листинг программы:
#include <stdio.h>
#include <math.h>
main()
{
float x,y;
puts("Введите координаты точки А(x,y)\n");
scanf("%f%f", &x,&y);
if(x*x+y*y<=1)
{printf("Точка А лежит в плоскости");
}
else
{
printf("Точка А не лежит в плоскости ");
}
fflush(stdin);
getchar();
return(0);
}
Тесты:
тест № |
значение |
результат вычисления |
результат выполнения программы |
|
x |
y |
|||
Точка А находится |
||||
1 |
0,5 |
0,5 |
в плоскости |
в плоскости |
2 |
3 |
2 |
не в плоскости |
не в плоскости |
Тесты показали, что программа работает правильно.
Задание 4.5
Даны координаты (как целые от 1 до 8) двух различных полей шахматной доски. Если ладья за один ход может перейти с одного поля на другое, вывести логическое значение True, в противном случае вывести значение False.
Блок-схема:
Да Нет
да нет
Таблица соответствия переменных:
Переменные в задаче |
Переменные на языке Си |
Тип |
Комментарий |
x |
x |
int |
исходное данное |
y |
y |
int |
исходное данное |
X0 |
a |
int |
исходное данное |
Y0 |
b |
int |
исходное данное |
Листинг программы:
#include <stdio.h>
#include <math.h>
main()
{
int x,y,a,b;
puts("Введите координаты нахождения ладьи");
scanf("%d%d", &a,&b);
puts("Введите координаты клетки, куда должна перейти ладья за один ход");
scanf("%d%d", &x,&y);
if(a<=0||a>8||b<=0||b>8||x<=0||x>8||y<=0||y>8)
{puts("Введены неправильные координаты");}
else
if(a==x||b==y)
{puts("True");}
else
{puts("false");}
fflush(stdin);
getchar();
return(0);
}
Тесты:
тест № |
значение |
результат вычисления |
результат выполнения программы |
|||
x |
y |
X0 |
Y0 |
|||
1 |
1 |
1 |
5 |
6 |
false |
false |
2 |
1 |
1 |
1 |
8 |
True |
True |
3 |
1 |
1 |
1 |
10 |
Не правильные координаты |
Не правильные координаты |
Тесты показали, что программа работает правильно.
Задание 4.6
задача:
Дан номер некоторого года (положительное целое число). Вывести число дней в этом году, учитывая, что обычный год насчитывает 365 дней, а високосный — 366 дней. Високосным считается год, делящийся на 4, за исключением тех годов, которые делятся на 100 и не делятся на 400 (например, годы 300, 1300 и 1900 не являются високосными, а 1200 и 2000 — являются).
Блок-схема:
да
нет
да нет
Таблица соответствия переменных:
Переменные в задаче |
Переменные на языке Си |
Тип |
Комментарий |
a |
a |
int |
исходное данное |
Листинг программы:
#include <stdio.h>
#include <math.h>
main()
{int a;
printf("Введите год\n");
scanf("%d",&a);
if(a%4!=0)
{puts("В этом году 365 дней");}
else
if(a%100==0&&a%400!=0)
{puts("В этом году 365 дней");}
else
{puts("В этом году 366 дней");}
fflush(stdin);
getchar();
return(0);
}
Тесты:
тест № |
значение a |
Число дней |
Число дней (программа) |
1 |
2007 |
365 |
365 |
2 |
2000 |
366 |
366 |
3 |
1300 |
365 |
365 |
Тесты показали, что программа работает правильно.
4.7
задача:
Единицы массы пронумерованы следующим образом: 1 — килограмм, 2 — миллиграмм, 3 — грамм, 4 — тонна, 5 — центнер. Дан номер единицы массы и масса тела M в этих единицах (вещественное число). Вывести массу данного тела в килограммах.
блок-схема:
к1
к2 к3 к4 к5 другое
m
m/1000
m/1000000
m*1000
m*100
не правильно
Таблица соответствия переменных:
Переменные в задаче |
Переменные на языке Си |
Тип |
Комментарий |
k |
k |
int |
исходное данное |
m |
m |
float |
|
Листинг программы:
#include <stdio.h>
#include <math.h>
main()
{
int k;
puts("Введите единицу массы\n");
scanf("%d", &k);
float m;
puts("Введите массу");
scanf("%f", &m);
printf("масса в кг. равна:\n");
switch(k)
{
case 1: {m=m; printf("m=%f", m);}
break;
case 2: {m=m/1000; printf("m=%f", m);}
break;
case 3: {m=m/1000000; printf("m=f", m);}
break;
case 4: {m=m*1000; printf("m=%f", m);}
break;
case 5: {m=m*100; printf("m=% f ", m);}
break;
default: puts("неверное значение единицы массы");
}
fflush(stdin);
getchar();
return(0);
}
Тесты:
тест № |
значение m |
значение k |
Масса в кг. |
Масса в кг. (программа) |
1 |
10 |
1 |
10 |
10 |
2 |
100 |
2 |
0,1 |
0,1 |
3 |
1 |
3 |
0,000001 |
0,000001 |
4 |
10 |
4 |
10000 |
10000 |
5 |
10 |
5 |
1000 |
1000 |
6 |
10 |
6 |
Не правильно |
Не правильно |
Тесты показали, что программа работает правильно.
Вывод: Я изучил операции отношения, логические операции, правила записи логических отношений, правила записи и использования операторов if; научиться составлять разветвляющиеся алгоритмы и оформлять их в виде графической схемы, составлять, тестировать и отлаживать в среде IDE разветвляющиеся программы.