Главная страница
Навигация по странице:

  • Лабораторная работа №1

  • Цель работы Получить практические навыки работы с условными операторами и операторами цикла в языке C/C++.Задание

  • Рис. 1. Заданная область

  • Математическое описание

  • Контрольные пример ы Контрольные примеры представлены в таблице 1. Таблица 1. Контрольные примеры

  • Описание переменных Описание переменных представлено в таблице 2. Таблица 2. Описание переменных

  • Описание алгоритма программы

  • Cхема алгоритма

  • Рис. 2. Схема алгоритма

  • Условные операторы и циклы на языке CC. Лабораторная 1. Условные операторы и циклы на языке CC по курсу Программирование


    Скачать 93.37 Kb.
    НазваниеУсловные операторы и циклы на языке CC по курсу Программирование
    АнкорУсловные операторы и циклы на языке CC
    Дата20.12.2021
    Размер93.37 Kb.
    Формат файлаdocx
    Имя файлаЛабораторная 1.docx
    ТипЛабораторная работа
    #311534

    Минобрнауки Российской Федерации

    Федеральное государственное бюджетное образовательное учреждение

    высшего профессионального образования «Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им В.И. Ульянова(Ленина)»
    Факультет компьютерных технологий и информатики

    Кафедра вычислительной техники


    Лабораторная работа №1

    на тему: «Условные операторы и циклы на языке C/C++»

    по курсу «Программирование»

    Выполнил:

    Принял: к.т.н., доцент


    Санкт-Петербург

    2016

    Оглавление


    Оглавление 2

    Цель работы
    Получить практические навыки работы с условными операторами и операторами цикла в языке C/C++.
    Задание
    Разработать алгоритм и написать программу на языке Си,определяющую, попадает ли точка, заданная координатами X и Y в указанную пользователем область, находится ли точка на границе области или находится вне области. Для работы алгоритма необходимо рассматривать возможность изменения координат точки и параметров области.
    Заданная область изображена на рис. 1.



    Рис. 1. Заданная область


    Уточнение задания
    По условию задания пользователь должен ввести радиус окружности, при этом введенный радиус проверяется на положительность до тех пор, пока не будет получено требуемое значение. Затем пользователь должен ввести параметр А для прямой, при этом введенный параметр проверяется на отрицательное значение до тех пор, пока не будет получено отрицательное значение. Далее пользователь должен ввести координаты проверяемой точки. После ввода координат, программа должна вывести результат проверки принадлежности данной точки заданной области (точка лежит внутри области, на её границе или за её пределами) на экран и дать возможность пользователю ввести новые координаты точки и новый отрицательный параметр A или начать программу заново.

    Математическое описание
    Принадлежность точки области:

    ((X*X + Y*Y < R*R) && (X > A) && (X < 0) && (Y > 0)) || ((X < A) && (Y > 0) && (X*X + Y*Y > R*R))

    Принадлежность точки границе:

    ((|X*X + Y*Y - R*R| <= Eps) && (X < 0) && (Y > 0)) || ((|X – A| <= Eps) && (Y >= 0)) || ((Y >= 0) && (Y <= R) && (|X| <= Eps)) || ((X <= 0) && (|Y| <= Eps) && (X >= A)) || ((|Y| <= Eps) && (X + R <= 0))
    Контрольные примеры
    Контрольные примеры представлены в таблице 1.
    Таблица 1. Контрольные примеры




    Исходные данные

    Результат

    Eps

    Х

    У

    R

    A

    1

    0.000001

    -2

    4

    5

    -3

    Точка лежит внутри области

    2

    0.000001

    -5

    8

    5

    -3

    Точка лежит внутри области

    3

    0.000001

    -5

    0

    5

    -3

    Точка лежит на границе области

    4

    0.000001

    -9

    0

    5

    -3

    Точка лежит на границе области

    5

    0.000001

    -3

    0

    5

    -3

    Точка лежит на границе области

    6

    0.000001

    -2

    0

    5

    -3

    Точка лежит на границе области

    7

    0.000001

    0

    0

    5

    -3

    Точка лежит на границе области

    8

    0.000001

    0

    5

    5

    -3

    Точка лежит на границе области

    9

    0.000001

    0

    3

    5

    -3

    Точка лежит на границе области

    10

    0.000001

    -3

    4

    5

    -3

    Точка лежит на границе области

    11

    0.000001

    -3

    70

    5

    -3

    Точка лежит на границе области

    12

    0.000001

    -4

    2

    5

    -3

    Точка лежит за границей области

    13

    0.000001

    5

    5

    5

    -3

    Точка лежит за границей области

    13

    0.000001

    -

    -

    -6

    -

    Некорректный ввод! Введите R > 0

    14

    0.000001

    -

    -

    5

    5

    Некорректный ввод! А должно быть меньше 0 и |A| должен быть меньше R.

    15

    0.000001

    -

    -

    5

    -5

    Некорректный ввод! А должно быть меньше 0 и |A| должен быть меньше R.

    16

    0.000001

    -

    -

    5

    -6

    Некорректный ввод! А должно быть меньше 0 и |A| должен быть меньше R.


    17


    -0.00001

    -

    -

    -

    -

    Некорректный ввод! Введите Eps > 0


    Описание переменных
    Описание переменных представлено в таблице 2.
    Таблица 2. Описание переменных


    Имя переменной

    Тип переменной

    Назначение переменной

    X

    float

    Абсцисса проверяемой точки

    Y

    float

    Ордината проверяемой точки

    R

    float

    Радиус окружности

    А

    float

    Прямая, параллельная оси Х

    Eps

    float

    Погрешность

    k

    int

    Вспомогательная переменная для управления циклом

    f

    int

    Переменная для проверки желания пользователя ввести новые данные


    Описание алгоритма программы
    Шаг 1. Вывод на экран сообщения 1: «Введите погрешность вычислений:»

    Шаг 2. Ввод погрешности Eps

    Шаг 3. Проверка условия Eps < 0. Если выражение истина – вывод на экран сообщения 2: «Некорректный ввод! Введите Eps > 0». Если выражение ложь – переход к шагу 4.

    Шаг 4. Проверка условия Eps <= 0. Если выражение истина – возвращаем пользователя на шаг 1. Если выражение ложь – переход к шагу 5.

    Шаг 5. Вывод на экран сообщения 3: «Введите радиус окружности:».

    Шаг 6. Ввод R.

    Шаг 7. Проверка условия R <= Eps. Если выражение истина – вывод сообщения 4: «Некорректный ввод! Введите R > Eps.» Если выражение ложь – переход к шагу 8.

    Шаг 8. Проверка условия R <= Eps. Если выражение истина – возвращаем пользователя на шаг 5. Если выражение ложно – переход к шагу 9.

    Шаг 9. Вывод на экран сообщения 5: «Введите значение A, задающее прямую X = A, параллельную оси Y. Помните: для нашего случая |А| должен быть меньше радиуса и само значение А должно быть меньше 0»

    Шаг 10. Ввод А.

    Шаг 11. Проверка условия A < Eps. Если выражение истина – проверка условия

    |A| – R = Eps. Если выражение истина – выполняется операция инкремента К, если ложь – операция инкремента не выполняется. Если выражение A < Eps ложно – выполняется операция инкремента переменной К. Переход к шагу 12.

    Шаг 12. Проверка условия K != 0. Если выражение истинно – возвращаем пользователя на шаг 9, если ложно – переход к шагу 13.

    Шаг 13. Вывод на экран сообщения 7: «Введите координату Х:».

    Шаг 14. Ввод Х.

    Шаг 15. Вывод на экран сообщения 8: «Введите координату У:».

    Шаг 16. Ввод У.

    Шаг 17. Проверка условия 1: ((X*X + Y*Y < R*R) && (X > A) && (X < 0) && (Y > 0)) || ((X < A) && (Y > 0) && (X*X + Y*Y > R*R)). Если выражение истинно – вывод сообщения 9: «Точка с указанными координатами лежит внутри закрашенной области». Если выражение ложно – проверка условия 2:

    ((|X*X + Y*Y - R*R| <= Eps) && (X < 0) && (Y > 0)) || ((|X – A| <= Eps) && (Y >= 0)) || ((Y >= 0) && (Y <= R) && (|X| <= Eps)) || ((X <= 0) && (|Y| <= Eps) && (X >= A)) || ((|Y| <= Eps) && (X + R <= 0)). Если выражение истинно – вывод сообщения 10: «Точка с указанными координатами лежит на границе закрашенной области», если выражение ложно – вывод сообщения 11: «Точка с указанными координатами лежит за границами закрашенной области».

    Шаг 18. Вывод сообщения 12: «Хотите ввести координаты точки повторно? Введите «1», если да, любую другую цифру, если нет:»

    Шаг 19. Ввод f.

    Шаг 20. Проверка f на равенство 1. Если f == 1 истина - передаем управление цикла на шаг 14. Если выражение ложно – переход к шагу 21.

    Шаг 21. Вывод сообщения 13: «Хотите ввести координаты параметра А повторно? Введите «1», если да, любую другую цифру, если нет:»

    Шаг 22. Ввод f.

    Шаг 23. Проверка f на равенство 1. Если f == 1 истина – передаем управление цикла на шаг 9. Если ложно – переход к шагу 24.

    Шаг 24. Вывод сообщение 14: «Хотите ввести радиус окружности R повторно? Введите «1», если да, любую другую цифру, если нет:»

    Шаг 25. Ввод f.

    Шаг 26. Проверка f на равенство 1. Если f == 1 истина – передаем управление цикла на шаг 5. Если ложно – переход к шагу 27.

    Шаг 27. Вывод сообщения 15: «Хотите ввести все данные заново, начиная с погрешности? Введите «1», если да, любую другую цифру, если нет:»

    Шаг 28. Ввод f.

    Шаг 29. Проверка f на равенство 1. Если f == 1 истина – передаем управление цикла на шаг 1. Если ложно – происходит выход из программы.

    Cхема алгоритма
    Схема алгоритма представлена на рисунке 2.




    Сообщение 1: «Введите погрешность вычислений:»

    Сообщение 2: «Некорректный ввод! Введите Eps > 0»

    Сообщение 3: «Введите радиус окружности»

    Сообщение 4: «Некорректный ввод! Введите R > 0»

    Сообщение 5: «Введите значение A, задающее прямую X = A, параллельную оси Y. Помните: для нашего случая |А| должен быть меньше радиуса и само значение А должно быть меньше 0».

    Сообщение 6: «Некорректный ввод! А должно быть больше 0 и |A| должен быть меньше R.»

    Сообщение 7: «Введите координату Х:»

    Сообщение 8: «Введите координату У:»

    Сообщение 9: «Точка с указанными координатами лежит внутри области»

    Сообщение 10: «Точка с указанными координатами лежит на границе области»

    Сообщение 11: «Точка с указанными координатами лежит за границами области»

    Сообщение 12: «Хотите ввести координаты точки повторно? Введите «1», если да, любую другую цифру, если нет:»

    Сообщение 13: «Хотите ввести параметр А повторно? Введите «1», если да, любую другую цифру, если нет:»

    Сообщение 14: «Хотите ввести радиус окружности повторно? Введите «1», если да, любую другую цифру, если нет:»

    Сообщение 15: «Хотите ввести все данные повторно, начиная с погрешности? Введите «1», если да, любую другую цифру, если нет:»
    Условие 1: ((X*X + Y*Y < R*R) && (X > A) && (X < 0) && (Y > 0)) || ((X < A) && (Y > 0) && (X*X + Y*Y > R*R))

    Условие 2: ((|X*X + Y*Y - R*R| <= Eps) && (X < 0) && (Y > 0)) || ((|X – A| <= Eps) && (Y >= 0)) || ((Y >= 0) && (Y <= R) && (|X| <= Eps)) || ((X <= 0) && (|Y| <= Eps) && (X >= A)) || ((|Y| <= Eps) && (X + R <= 0))
    Рис. 2. Схема алгоритма

    Исходный код

    Результаты решения задачи

    При выполнении программы были получены результаты, совпадающие со значениями, приведенными в таблице 1. Ошибок не обнаружено.

    Вывод

    При выполнении лабораторной работы были получены практические навыки использования условных операторов и циклов на языке C/C++.
    #include

    #include

    #include
    int main()

    {

    setlocale(LC_ALL, "Russian");
    float R, A, X, Y, Eps, k = 0;

    int f;

    do

    {

    puts ("Введите погрешность вычислений:");

    scanf ("%Eps", &Eps);

    if (Eps <= 0)

    puts("Некорректный ввод! Введите Eps > 0");

    }

    while (Eps <= 0);

    do

    {

    puts ("Введите радиус окружности:");

    scanf ("%f", &R);

    if (R <= 0)

    puts ("Некорректный ввод! Введите R > 0");

    }while (R <= 0);

    do

    {

    puts ("Введите значение A, задающее прямую X = A, параллельную оси Y. Помните: для нашего случая |А| должен быть меньше радиуса и само значение А должно быть меньше 0:");

    scanf ("%f", &A);

    if (A < Eps)

    {if (fabs(A) - R == Eps)

    k++;

    }

    else

    k++;

    {if ( k != 0)

    puts ("Некорректный ввод! А должно быть больше 0 и |A| должен быть меньше R.");

    }

    }while (k != 0);

    do

    {

    puts("Введите координату Х:");

    scanf("%f", &X);

    puts("Введите координату Y:");

    scanf("%f", &Y);

    if (((X*X + Y*Y < R*R) && (X > A) && (X < 0) && (Y > 0)) || ((X + R < 0) && (Y > 0) && (X*X + Y*Y > R*R)))

    puts ("Точка с указанными координатами лежит внутри области");

    else

    {if

    ((X*X + Y*Y - R*R == Eps) && (X <= Eps) && (Y >= Eps)) || ((X - A == Eps) && (Y >= Eps)) || ((Y >= Eps) && (Y - R <= Eps) && (X == Eps)) || ((X <= Eps) && (Y == Eps) && (X - A >= Eps)) || ((Y == Eps) && (X + R <= Eps))

    puts ("Точка с указанными координатами лежит на границе области");

    else

    puts ("Точка с указанными координатами лежит за границами области");

    }

    puts ("Хотите ввести координаты точки повторно? Введите "1", если да, любую другую цифру, если нет:");

    scanf("%d", &f);

    }while(f == 1);

    puts ("Хотите ввести параметр А повторно? Введите "1", если да, любую другую цифру, если нет:");

    scanf("%d", &f);

    }while(f == 1);

    puts ("Хотите ввести радиус окружности повторно? Введите "1", если да, любую другую цифру, если нет:");

    scanf("%d", &f);

    }while(f == 1);

    puts ("Хотите ввести все данные повторно, начиная с погрешности? Введите "1", если да, любую другую цифру, если нет:");

    scanf("%d", &f);

    }while(f == 1);

    return 0;

    }


    написать администратору сайта