Лабораторная работа №1 по СИ, программирование ИУ7
Описание
- Умение компилировать программу из командной строки в рамках однофайлового проекта.
- Умение работать в интегрированной среде разработки на примере Qt Creator, в том числе
(a) создавать проект;
(b) настраивать различные варианты сборки и очистки проекта;
(c) отлаживать программу. - Умение декомпозировать задачи на подзадачи.
- Умение имплементировать решения подзадач в виде «чистых» функций.
- Умение задавать ограничения на входные данные и планировать процесс обработки ошибочных ситуаций.
- Умение готовить тестовые данные и оценивать полноту оных.
Входные данные вводятся, а выходные выводятся строго в том порядке, в котором они встречаются в задании. Вариант для каждой задачи определяется отдельно, по умолчанию по кольцу¹, но может быть изменён преподавателем на его усмотрение.
Помните, что кодируется не задача, а её решение, которое необходимо иметь до того, как Вы сели за клавиатуру. Попробуйте поступить следующим образом:
- Выделите в задаче входные и выходные данные. Обычно это те данные, которые предлагается ввести самостоятельно и требуется распечатать соответственно.
- Найдите однозначную зависимость между входными и выходными данными, иначе говоря, решите задачу аналитически.
- Выберите типы для представления данных.
- Мысленно разделите решение на три блока — блок ввода, блок расчёта, блок вывода; в первом закодируйте ввод и, если необходимо, проверку на валидность всех входных данных; во втором запишите последовательность действий для вычисления выходных данных по входным; в третьем реализуйте распечатку выходных данных на экран.
- Познакомьтесь с сообщениями, которые выдаёт компилятор во время компиляции программы с синтаксическими ошибками:
(a) Попытайтесь скомпилировать программу из задачи №1, которая заведомо содержит синтаксические ошибки.
(b) Изучите выдачу компилятора. Какая информация помогает вам понять, к какой строке исходной программы относится сообщение об ошибке?
(c) Исправьте ошибки. В силу специфики работы компилятора исправлять ошибки рекомендуется строго по одной и по порядку обнаружения с последующей попыткой компиляции после каждого исправления. - Познакомьтесь с интегрированной средой разработки на примере QT Creator. В результате знакомства Вы должны уметь:
(a) Создавать проект, настраивать этапы сборки и очистки проекта, запуск приложения.
(b) Анализировать сообщения об ошибках компиляции; знать, где посмотреть сообщения об ошибках, выданные самим компилятором.
(c) Использовать отладчик: выполнять программу в пошаговом режиме; устанавливать точки останова и условия их срабатывания; работать с переменными.
- Принять с клавиатуры координаты xₐ, yₐ, x_b, y_b, x_c, y_c треугольника abc на плоскости. Найти и вывести на экран периметр P треугольника.
- С клавиатуры вводятся величины начальной скорости v₀, ускорения *a* и времени *t* равноускоренного прямолинейного движения тела. Найти и вывести на экран перемещение S.
- С клавиатуры задаётся время в секундах. Перевести в часы, минуты, секунды и вывести на экран.
Входные данные вводятся, а выходные выводятся строго в том порядке, в котором они встречаются в задании.
Начиная с пятой задачи, следует проверять валидность входных данных. Перечень и примеры проверок Вы можете найти в методических указаниях в кафедральном moodle.
Начиная с пятой задачи, следует отслеживать полноту тестовых данных с помощью утилиты gcov. Подробные методические указания Вы можете найти в кафедральном moodle.
При реализации каждой из задач второй части Вам необходимо выделить, по крайней мере, одну осмысленную функцию.
Задача №5
- Составить программу для печати разложения на простые множители заданного натурального числа *n*. При *n* = 1 ничего не печатать.
- С клавиатуры задаются координаты точек x_q, y_q, x_r, y_r отрезка qr и координаты произвольной точки x_p, y_p. Определить, не принадлежит или принадлежит точка отрезку, и вывести на экран 0 или 1 соответственно.
Приняв с клавиатуры *x* и ε, 0 < ε ≤ 1, вывести на экран вычисленное с точностью² ε приближённое значение s(x) и точное значение f(x) функции *f*, абсолютную Δ и относительную δ погрешности:
Δ=∣f(x)−s(x)∣,δ=∣f(x)−s(x)∣∣f(x)∣.Δ=∣f(x)−s(x)∣,δ=∣f(x)∣∣f(x)−s(x)∣.
²Накопление суммы следует выполнять до тех пор, пока очередной член ряда по абсолютной величине не окажется меньше заданной ε.
- (∀x:∣x∣<1) f(x)=1(1+x)3, s(x)=1−2⋅3⋅x2+3⋅4⋅x22−4⋅5⋅x32+5⋅6⋅x42+…(∀x:∣x∣<1) f(x)=(1+x)31, s(x)=1−22⋅3⋅x+23⋅4⋅x2−24⋅5⋅x3+25⋅6⋅x4+…
Если во время выполнения программы в этой задаче ошибок не было, вывод результата следует начинать с сообщения «Result: », за которым выводить результат вычислений.
В случае возникновения ошибочной ситуации вывод следует начинать с сообщения «Error: », за которым должно следовать описание ошибочной ситуации.
- Вводятся беззнаковое целое число длиной 4 байта *a* и целое число *n*. Числа вводятся в десятичной системе счисления. Необходимо циклически сдвинуть значение переменной *a* на *n* позиций влево. Результат вывести в двоичной системе счисления.
Приняв с клавиатуры по концевой признак до первого отрицательного числа элементы непустой последовательности неотрицательных чисел *x*, вычислить и вывести на экран значение g(x).
- g(x)=1n(1+x1+2+x2+⋯+n+xn)g(x)=n1(1+x1+2+x2+⋯+n+xn)
Целью лабораторной работы является знакомство студента с инструментарием для создания, отладки и сопровождения программ, написанных на языке программирования Си. Студент должен получить и закрепить на практике следующие знания и умения: Умение компилировать программу из командной строки в рамках однофайлового проекта. Умение работать в интегрированной среде разработки на примере Qt Creator, в том числе (a) создавать проект; (b) настраивать различные варианты сборки и очистки проекта; (c) отлаживать программу. Умение декомпозировать задачи на подзадачи. Умение имплементировать решения подзадач в виде «чистых» функций. Умение задавать ограничения на входные данные и планировать процесс обработки ошибочных ситуаций.
Умение готовить тестовые данные и оценивать полноту оных. Первая часть Входные данные вводятся, а выходные выводятся строго в том порядке, в котором они встречаются в задании. Вариант для каждой задачи определяется отдельно, по умолчанию по кольцу¹, но может быть изменён преподавателем на его усмотрение. Помните, что кодируется не задача, а её решение, которое необходимо иметь до того, как Вы сели за клавиатуру. Попробуйте поступить следующим образом: Выделите в задаче входные и выходные данные. Обычно это те данные, которые предлагается ввести самостоятельно и требуется распечатать соответственно. Найдите однозначную зависимость между входными и выходными данными, иначе говоря, решите задачу аналитически.
Выберите типы для представления данных. Мысленно разделите решение на три блока — блок ввода, блок расчёта, блок вывода; в первом закодируйте ввод и, если необходимо, проверку на валидность всех входных данных; во втором запишите последовательность действий для вычисления выходных данных по входным; в третьем реализуйте распечатку выходных данных на экран. Для задач первой части первой лабораторной работы можно считать, что пользователь всегда вводит только валидные данные, никаких проверок ввода совершать не нужно. Познакомьтесь с сообщениями, которые выдаёт компилятор во время компиляции программы с синтаксическими ошибками: (a) Попытайтесь скомпилировать программу из задачи №1, которая заведомо содержит синтаксические ошибки.
(b) Изучите выдачу компилятора. Какая информация помогает вам понять, к какой строке исходной программы относится сообщение об ошибке? (c) Исправьте ошибки. В силу специфики работы компилятора исправлять ошибки рекомендуется строго по одной и по порядку обнаружения с последующей попыткой компиляции после каждого исправления. Познакомьтесь с интегрированной средой разработки на примере QT Creator. В результате знакомства Вы должны уметь: (a) Создавать проект, настраивать этапы сборки и очистки проекта, запуск приложения. (b) Анализировать сообщения об ошибках компиляции; знать, где посмотреть сообщения об ошибках, выданные самим компилятором. (c) Использовать отладчик: выполнять программу в пошаговом режиме; устанавливать точки останова и условия их срабатывания; работать с переменными.
Задача №2 Принять с клавиатуры координаты xₐ, yₐ, x_b, y_b, x_c, y_c треугольника abc на плоскости. Найти и вывести на экран периметр P треугольника. Задача №3 С клавиатуры вводятся величины начальной скорости v₀, ускорения *a* и времени *t* равноускоренного прямолинейного движения тела. Найти и вывести на экран перемещение S. Задача №4 С клавиатуры задаётся время в секундах. Перевести в часы, минуты, секунды и вывести на экран. Вторая часть Входные данные вводятся, а выходные выводятся строго в том порядке, в котором они встречаются в задании. Начиная с пятой задачи, следует проверять валидность входных данных. Перечень и примеры проверок Вы можете найти в методических указаниях в кафедральном moodle.
Начиная с пятой задачи, следует отслеживать полноту тестовых данных с помощью утилиты gcov. Подробные методические указания Вы можете найти в кафедральном moodle. При реализации каждой из задач второй части Вам необходимо выделить, по крайней мере, одну осмысленную функцию. Задача №5 Составить программу для печати разложения на простые множители заданного натурального числа *n*. При *n* = 1 ничего не печатать. Задача №6 С клавиатуры задаются координаты точек x_q, y_q, x_r, y_r отрезка qr и координаты произвольной точки x_p, y_p. Определить, не принадлежит или принадлежит точка отрезку, и вывести на экран 0 или 1 соответственно. Задача №7 Приняв с клавиатуры *x* и ε, 0 < ε ≤ 1, вывести на экран вычисленное с точностью² ε приближённое значение s(x) и точное значение f(x) функции *f*, абсолютную Δ и относительную δ погрешности: Δ=∣f(x)−s(x)∣,δ=∣f(x)−s(x)∣∣f(x)∣.Δ=∣f(x)−s(x)∣,δ=∣f(x)∣∣f(x)−s(x)∣.
²Накопление суммы следует выполнять до тех пор, пока очередной член ряда по абсолютной величине не окажется меньше заданной ε. (∀x:∣x∣<1) f(x)=1(1+x)3, s(x)=1−2⋅3⋅x2+3⋅4⋅x22−4⋅5⋅x32+5⋅6⋅x42+…(∀x:∣x∣<1) f(x)=(1+x)31, s(x)=1−22⋅3⋅x+23⋅4⋅x2−24⋅5⋅x3+25⋅6⋅x4+… Задача №8 Если во время выполнения программы в этой задаче ошибок не было, вывод результата следует начинать с сообщения «Result: », за которым выводить результат вычислений. В случае возникновения ошибочной ситуации вывод следует начинать с сообщения «Error: », за которым должно следовать описание ошибочной ситуации. Вводятся беззнаковое целое число длиной 4 байта *a* и целое число *n*. Числа вводятся в десятичной системе счисления.
Необходимо циклически сдвинуть значение переменной *a* на *n* позиций влево. Результат вывести в двоичной системе счисления. Задача №9 Приняв с клавиатуры по концевой признак до первого отрицательного числа элементы непустой последовательности неотрицательных чисел *x*, вычислить и вывести на экран значение g(x). g(x)=1n(1+x1+2+x2+⋯+n+xn)g(x)=n1(1+x1+2+x2+⋯+n+xn).
МГТУ им. Н.Э.Баумана



















