Программа практических занятий по курсу: "Информатика и основы структурного программирования"

Основные материалы к Лабораторным работам расположены в каталоге: /afs/dims.prv/public/Informatics_2023/Labs

Основы Linux

Учебник по языку Си: ВВЕДЕНИЕ В ЯЗЫК СИ

План занятий. Cроки выполнения и Сдачи Лабораторных работ. Семестр I

12.09/13.09.2023-Lab N1. Работа в ОС Linux
26.09/27.09.2023-Lab N2. Форматированный ввод/вывод данных + отчет по Lab N1
10.10/11.10.2023-Lab N3. Форматированный ввод/вывод и циклы + отчет по Lab N2
24.10/25.10.2023-Lab N4. Операторы условных переходов, циклы и массивы + отчет по Lab N3
07.11/08.11.2023-Lab N5. Указатели и работа со строками + отчет по Lab N4
28.11/29.11.2023-Lab N6. Умножение матриц + отчет по Lab N5
19.12/20.12.2023-Lab N6. - отчет.
Семестр II:
06.02/07.02.2024-Lab N7. Работа с файлами
20.02/21.02.2024-Lab N8. Структуры данных + отчет по Lab N7
12.03/13.03.2024-Lab N9. Структуры данных и связный список + отчет по Lab N8
02.04/03.04.2024-Lab N10. Рекурсия + отчет по Lab N9
16.04/17.04.2024-Lab N11. Указатели на функции + отчет по Lab N10
07.05/08.05.2024-Lab N12. Директивы препроцессора + отчет по Lab N11
28.05/29.05.2024-Lab N12. - отчет.

Все программы выполняем на языке C (не C++)

Лабораторная работа N1. "Работа в ОС Linux"

  А.Открыть ссылку: Основы Linux: (https://dims.karelia.ru/prog/linux-basics.html) и 2-ую страницу в методичке Lab N1 и с использованием представленного там материала и справочной системы man изучить часто используемые команды и утилиты в Unix-системах.
  Б.Запустить два терминальных окна. В одном из них запустить mc (MidnightCommander), в этом окне будет формироваться текстовый файл отчета, который должен быть размещен в каталоге: "informatics" (для создания файла в mc: Shift-F4).
  В.Во втором терминальном окне выполнить пункты Заданий представленных ниже, записывая выполненные действия (или команды) и результаты их выполнения в файл (в окне с mc).
  Г.По выполнению работы показать текстовый файл со списком действий и результатами преподавателю.

Задания:

  1.Определить текущий каталог, текущую дату (pwd, date).
  2.Вывести на экран список содержимого каталога /sbin; вывести список файлов начинающихся на букву "d" (подсказка: ls, использовать шаблон названия файла со звездочкой).
  3.Создать в домашнем каталоге рабочий каталог для хранения временных файлов, исходных кодов и скомпилированных программ с названием "informatics" (подсказка: mkdir).
  4.Перейти в созданный каталог (подсказка: cd): "informatics" (и далее все результаты работы сохраняем только в каталоге: "informatics").
  5.Сохранить в текстовый файл список имен файлов с символом "_" в названии из каталога: /usr/include/netinet (подсказка: использовать символ перенаправления > и шаблон названия файла). В результате выполнения задания текстовый файл должен быть в созданном каталоге: "informatics".
  6.Дописать в созданный файл список всех файлов, включающих только 3 символа в названии из каталога: /usr/include/netinet (подсказка: использовать символ перенаправления и дозаписи в файл >>).
  7.Создать копию созданного файла в домашнем каталоге под новым именем. Проверить его наличие и содержимое (подсказка: cp, cat).
  8.Создать внутри каталога informatics каталог tmp, скопировать в него несколько файлов, перейти в каталог tmp и удалить все файлы в созданном каталоге (tmp) одной командой (подсказка: rm, шаблон).
  9.Перейти в каталог: /afs/dims.prv/public/Informatics_2023/Labs (здесь расположены материалы к Лабораторным работам).
  10.На странице kompot.petrsu.ru перейти в Меню: Инфо\SSH-Шлюзы и прочитать как получить удаленный доступ к удаленной консоли Linux и своим папкам. Проверить удаленный доступ к консоли Linux из Windows с помощью программы putty (запустить: c:\utils\putty.exe). При подключении использовать IP-адреса, указанные в Инфо\SSH-Шлюзы.
В macOS, как и в Linux, есть встроенный SSH-клиент в приложении Терминал (Terminal). Подключение к серверу в нем создается так же, как и в Linux, командой: ssh your_username@host_ip_address.
  11.Посмотреть ролик как использовать WinSCP (для удаленного доступа к папкам из Windows).

  Все производимые действия и вводимые команды (и что они делают) записывать в Тетрадь. Результат работы представить в виде файла со списком команд (и результатов их выполнения), позволивших выполнить тот или иной пункт задания.

Лабораторная работа N2. "Форматированный ввод/вывод данных"

  1.Изучить Раздел 1 онлайн-учебника "Введение в язык Си", в частности, пункты: "Типы данных", "Форматированный вывод данных" и "Форматированный ввод данных".
  2.В каталоге: /afs/dims.prv/public/Informatics_2023/Labs/Examples/Lab2_3/ располагаются примеры готовых программ.
      a. скопируйте примеры (bases.c, charcode.c, floaterr.c, print1.c, rhodium.c, showf_pt.c и все примеры N2 на одной странице) в рабочий каталог домашней директории (в каталог: informatics) и изучите исходный код
      b.скомпилируйте код программ используя стандартные средства gcc следующим образом: gcc -Wall -o имя_выходного_файла исходный_код.c
При инициализации переменных в описании цикла (for) некоторые компиляторы требуют при компиляции использовать опцию (ключ): -std=c99. При появлении ошибок типа: 'for' loop initial declarations are only allowed in C99 mode - использовать компиляцию со следующими ключами: gcc -std=c99 -Wall -o myprog myprog.c (или не инициализировать переменные в описании цикла типа: for (int i=0; i<10; i++) {...}, а использовать описание без инициализации переменной: for (i=0; i<10; i++) {...}
      c. запустите программы на исполнение: ./имя_скомпилированного_файла (пример: ./my_prog) и проанализируйте результат. На основе данных примеров и теоретических сведений выполните следующие пункты лабораторной работы.

  3.В удобном текстовом редакторе (mc editor, gedit, kwrite и т.д.) набрать код программы на языке С, реализующей следующее:
      a. ждет ввода целого числа (например, 66), распечатывает символ в коде ASCII, которому соответствует введенное число
      b. ждет ввода вещественного значения объема воды в литрах, рассчитывает и отображает количество молекул воды в этом объеме. Для справки: масса одной молекулы воды приблизительно равна 3.0E-23 грамма, в одном литре воды 1000 грамм
      c. печатает на экране прямоугольный треугольник из звездочек:
*
**
***
****
  4.Скомпилировать код программы, исправить возможные ошибки (Errors) и предупреждения (Warnings), проверить смысловую корректность исполнения программы.
  5.Результат работы представить преподавателю.

Базовый шаблон программы:
/* -- Your comments -- */
#include <stdio.h>

int main(void){
      // put your code here

      return 0;
}

Лабораторная работа N3. "Форматированный ввод/вывод и циклы"

  1.Изучить Раздел 1 онлайн-учебника "Введение в язык Си", в частности, пункты: "Типы данных", "Как вводить и выводить информацию", "Форматированный вывод данных", "Форматированный ввод данных", "Операции языка Си" и "Операторы цикла".
  2.Посмотреть примеры программ для лабораторной работы N3 (они есть также в каталоге: /afs/dims.prv/public/Informatics_2023/Labs/Examples/Lab3_4/ )
      a. скопируйте примеры (animals1.c, colddays.c, cypher1.c, for_cube.c, sum_arr.c, summing.c и все примеры N3 и N4 на одной странице) в рабочий каталог домашней директории (в каталог: informatics) и изучите исходный код
      b. скомпилируйте код программ используя стандартные средства gcc следующим образом: gcc -Wall -o имя_выходного_файла исходный_код.c
При инициализации переменных в описании цикла (for) некоторые компиляторы требуют при компиляции использовать опцию (ключ): -std=c99. При появлении ошибок типа: 'for' loop initial declarations are only allowed in C99 mode - использовать компиляцию со следующими ключами: gcc -std=c99 -Wall -o myprog myprog.c (или не инициализировать переменные в описании цикла типа: for (int i=0; i<10; i++) {...}, а использовать описание без инициализации переменной: for (i=0; i<10; i++) {...}
      c. запустите программы на исполнение: ./имя_скомпилированного_файла (пример: ./my_prog) и проанализируйте результат. На основе данных примеров и теоретических сведений выполните следующие пункты лабораторной работы.

  3.В удобном текстовом редакторе (mc editor, gedit, kwrite и т.д.) набрать код программы на языке С, реализующей следующее:
Вывод на экран кодов вводимых символов (в восьмеричной, десятичной и шестнадцатеричной системах счисления). Ввод осуществляется до нажатия клавиши <ESC>.
  Обратите внимание, при вводе каждого символа используется клавиша <Enter>, в таблице ASCII ей соответствует специальный символ с кодом 10. Вывод информации о коде символа соответствующего клавише <Enter> должен осуществляться только в случае явного указания пользователя. В программе следует воспользоваться конструкцией, позволяющей организовать цикл с проверкой ввода кода символа клавиши <Escape> (код равен 27).
  4.Скомпилировать код программы, исправить возможные ошибки (Errors) и, по возможности, предупреждения (Warnings), проверить смысловую корректность исполнения программы.
  5.Результат работы представить преподавателю.

Лабораторная работа N4. "Операторы условных переходов, циклы и массивы"

  1.Изучить Раздел 1 онлайн-учебника "Введение в язык Си", в частности, пункты: "Типы данных", "Операции языка Си", "Операторы условных и безусловных переходов", "Операторы цикла" и "Массивы".

  2.Еще раз посмотреть примеры программ для лабораторных работ: N3 и N4.
  3.В удобном текстовом редакторе (mc editor, gedit, kwrite и т.д.) набрать код программы, реализующей следующее:
По двум введенным целым числам (день и месяц) вывести количество дней, оставшихся до Нового года (считать, что в феврале 28 дней), двумя способами:
      a) используя конструкцию switch ... case,
      b) используя предопределенный массив дней в месяцах.

  4.Скомпилировать код программы, исправить возможные ошибки (Errors) и, по возможности, предупреждения (Warnings), проверить смысловую корректность исполнения программы.
  5.Результат работы представить преподавателю.

Лабораторная работа N5. "Указатели и работа со строками"

  1.Изучить Разделы: 1, 2, 3 и 6 онлайн-учебника "Введение в язык Си", в частности, пункты: "Типы данных", "Операции языка Си", "Указатели и операции с ними", "Операторы цикла", "Массивы", "Строки символов" и "Динамическое распределение памяти. Функции malloc() и free()".

  2.Посмотреть примеры программ для лабораторной работы N5 (они есть также в каталоге: /afs/dims.prv/public/Informatics_2023/Labs/Examples/Lab5/ )
      a. скопируйте примеры (day_mon3.c, p_and_s.c, pnt_add.c, praise1.c, ptr_ops.c, strings.c и все примеры N5 на одной странице) в рабочий каталог домашней директории (в каталог: informatics) и изучите исходный код.
      b. скомпилируйте коды примеров, запустите на исполнение и проанализируйте результат. На основе данных примеров и теоретических сведений выполните следующие пункты лабораторной работы.

  3.В удобном текстовом редакторе (mc editor, gedit, kwrite и т.д.) набрать код программы, реализующей следующее:
Программа объединяет вводимые с клавиатуры строки символов в предложение, разделяя их пробелами. Ввод строк осуществляется до появления точки, после чего программа выводит итоговое предложение в консоль.
Дополнительные указания:
      a) Строки объявить с помощью указателей, память под массивы символов распределить динамически с помощью функций malloc() и free().
      b) Использование стандартной функции char *gets(char *s) считается (и является) небезопасным, поскольку может приводить к переполнению буфера данных, отведённого на хранение считываемой строки, поэтому в программе нужно использовать аналог этой функции - функцию fgets().
      c) Обратите внимание, при использовании fgets() в отличие от gets() после ввода строки при нажатии клавиши <Enter> в буферную память компьютера попадает строка введенных символов вместе с символом <Enter> ('\n').
      d) Обращение к отдельным символам вводимых строк и выходного предложения осуществить с помощью указателей.

  4.Скомпилировать код программы, исправить возможные ошибки (Errors) и, по возможности, предупреждения (Warnings), проверить смысловую корректность исполнения программы.
  5.Результат работы представить преподавателю.

Лабораторная работа N6. "Умножение матриц"

  1.Изучить Разделы: 1-4 онлайн-учебника "Введение в язык Си", в частности, пункты: "Типы данных", "Операции языка Си", "Указатели и операции с ними", "Операторы цикла", "Массивы" и "Функции".

  2.Посмотреть примеры программ для лабораторной работы N6 (в каталоге: /afs/dims.prv/public/Informatics_2023/Labs/Examples/Lab6/ )
      a. скопируйте примеры (array2d.c, lesser.c, lethead2.c, sum_arr2.c, sumarr1.c, swap3.c, zippo1.c, zippo2.c и все примеры N6 на одной странице) в рабочий каталог домашней директории (в каталог: informatics) и изучите исходный код.
      b. скомпилируйте коды примеров, запустите на исполнение и проанализируйте результат. На основе данных примеров и теоретических сведений выполните следующие пункты лабораторной работы.

  3.В удобном текстовом редакторе (mc editor, gedit, kwrite и т.д.) набрать код программы, реализующей следующее:
Программа перемножает два двумерных массива A и B целых чисел, записывает результат в массив С, а затем выводит массив С на экран в консоль (в случае, если перемножение матриц прошло успешно).
Массивы заданы глобально.
Размерности массивов А - 3*4, В - 4*2, С - 3*2.
Массивы А и В заполняются значениями при объявлении.
Перемножение матриц оформить в виде функции. В функцию передаются три типизированных указателя на массивы и шесть параметров размерностей.
  Функция перемножения возвращает:
0 - в случае успешного перемножения;
1 - в случае, если хотя бы один из указателей, переданных в функцию, содержит значение NULL;
2 - в случае, если размерности массивов A, B и С не позволяют корректно выполнить процедуру перемножения матриц.
  Вывод матрицы С на экран оформить функцией, в которую передаются указатель на массив и размерности массива. В случае несоответствия размерности перемножаемых матриц и указателей содержащих NULL - выдавать ошибку на экран, проверить задавая матрицы других размерностей и указателей содержащих NULL.

Вспомогательные материалы:
      Умножение матриц (википедия) https://en.wikipedia.org/wiki/Matrix_multiplication

  4.Скомпилировать код программы, исправить возможные ошибки (Errors) и, по возможности, предупреждения (Warnings), проверить смысловую корректность исполнения программы.
  5.Результат работы представить преподавателю.

Семестр II

Лабораторная работа N7. "Работа с файлами"

  1.Изучить Разделы: 1-5 онлайн-учебника "Введение в язык Си", в частности, пункты: "Типы данных", "Операции языка Си", "Указатели и операции с ними", "Операторы цикла", "Массивы", "Функции" и "Файлы".

  2.Посмотреть примеры программ для лабораторной работы N7 (в каталоге: /afs/dims.prv/public/Informatics_2023/Labs/Examples/Lab7/ )
      a. скопируйте примеры (addaword.c, append.c, count_symb.c, parrot.c, randbin.c, reducto.c, reverse.c, test_mass.c и все примеры N7 на одной странице) в рабочий каталог домашней директории (в каталог: informatics) и изучите исходный код.
      b. скомпилируйте коды примеров, запустите на исполнение и проанализируйте результат. На основе данных примеров и теоретических сведений выполните следующие пункты лабораторной работы.

  3.В удобном текстовом редакторе (mc editor, gedit, kwrite и т.д.) набрать код программы, реализующей следующее:
Программа считывает из текстового файла два двумерных массива A и B вещественных чисел, перемножает их и записывает результат в массив С, затем выводит массив С на экран в консоль (в случае, если перемножение матриц прошло успешно) и сохраняет его в новый файл.
Также программа должна определить и вывести на экран координаты элемента, наиболее близкого к среднему значению всех элементов массива C.
Текстовый файл первоначальных значений элементов массивов A и B нужно создать вручную самостоятельно. Формат файла с массивами A и B следующий.
В первой строке два целых числа - количество строк N и столбцов M массива A (разделенных пробелом).
Далее N строк по M вещественных чисел, разделенных пробелами.
В строке N+2 - два целых числа - количество строк K и столбцов L массива B (разделенных пробелом).
Далее K строк по L вещественных чисел, разделенных пробелами.
Рекомендуемые размерности массивов А - 3*4, В - 4*2, С - 3*2.
Массивы в программе задаются динамически, т.е. для каждого двумерного массива при чтении из исходного файла необходимо выделить память с помощью функции malloc() и в конце работы программы освободить память с помощью функции free().
Перемножение матриц оформить в виде функции. В функцию передаются три типизированных указателя на массивы и шесть параметров размерностей.
  Функция перемножения возвращает:
0 - в случае успешного перемножения;
1 - в случае, если хотя бы один из указателей, переданных в функцию, содержит значение NULL;
2 - в случае, если размерности массивов A, B и С не позволяют корректно выполнить процедуру перемножения матриц.
  Вывод матрицы С на экран и сохранение в новый файл оформить функцией, в которую передаются указатель на массив, размерности массива и указатель на файловую переменную. В случае несоответствия размерности перемножаемых матриц и указателей содержащих NULL - выдавать ошибку на экран, проверить задавая матрицы других размерностей и указателей содержащих NULL.

Вспомогательные материалы:
      Умножение матриц (википедия) https://en.wikipedia.org/wiki/Matrix_multiplication

  4.Скомпилировать код программы, исправить возможные ошибки (Errors) и, по возможности, предупреждения (Warnings), проверить смысловую корректность исполнения программы.
  5.Результат работы представить преподавателю.

Лабораторная работа N8. "Структуры данных"

  1.Изучить Разделы: 1-5 онлайн-учебника "Введение в язык Си", в частности, пункты: "Типы данных", "Операции языка Си", "Указатели и операции с ними", "Структуры", "Функции" и "Файлы".

  2.Посмотреть примеры программ для лабораторной работы N8 (в каталоге: /afs/dims.prv/public/Informatics_2023/Labs/Examples/lab8/ )
      a. скопируйте примеры (booksave.c, friend.c, friends.c, funds4.c и все примеры N8 на одной странице) в рабочий каталог домашней директории (в каталог: informatics) и изучите исходный код.
      b. скомпилируйте коды примеров, запустите на исполнение и проанализируйте результат. На основе данных примеров и теоретических сведений выполните следующие пункты лабораторной работы.

  3.В удобном текстовом редакторе (mc editor, gedit, kwrite и т.д.) набрать код программы, реализующей следующее:
      а) Дайте внешнее определение шаблона структуры name с двумя элементами: строка, предназначенная для хранения фамилии и строка, предназначенная для хранения имени.
      б) Дайте внешнее определение шаблона структуры student с тремя элементами: структура name, массив grade для хранения трех оценок в виде чисел с плавающей запятой и переменная для хранения среднего значения этих трех оценок.
      в) Напишите функцию main(), в которой объявляется массив структур student размерности CSIZE (в рассматриваемом случае CSIZE=4) и инициализируются элементы name именами по вашему выбору. Используйте функции для выполнения заданий, описанных в частях г), д), е) и ж).
      г) В интерактивном режиме введите оценки для каждого студента, запрашивая у пользователя ввод ФИО студента и его оценок. Поместите оценки в массив grade соответствующей структуры. Требуемый цикл можно реализовать в функции main() или в любой другой функции по вашему усмотрению.
      д) Вычислите среднюю оценку по каждой структуре и присвойте ее соответствующему элементу структуры.
      е) Распечатайте информацию из каждой структуры.
      ж) Распечатайте среднее значение по классу для каждого числового элемента структуры.

  4.Скомпилировать код программы, исправить возможные ошибки (Errors) и, по возможности, предупреждения (Warnings), проверить смысловую корректность исполнения программы.
  5.Результат работы представить преподавателю.

Лабораторная работа N9. "Структуры данных и связный список"

  1.Изучить Разделы: 1-5 онлайн-учебника "Введение в язык Си", в частности, пункты: "Типы данных", "Операции языка Си", "Указатели и операции с ними", "Структуры", "Функции" и "Файлы".

  2.Посмотреть примеры программ для лабораторной работы N9 (в каталоге: /afs/dims.prv/public/Informatics_2023/Labs/Examples/lab9/ )
      a. скопируйте примеры (films1.c, films2.c, films3.c, list.h, list.c и все примеры N9 на одной странице) в рабочий каталог домашней директории (в каталог: informatics) и изучите исходный код.
      b. скомпилируйте коды примеров, запустите на исполнение и проанализируйте результат. На основе данных примеров и теоретических сведений выполните следующие пункты лабораторной работы.

  3.В удобном текстовом редакторе (mc editor, gedit, kwrite и т.д.) набрать код программы, реализующей следующее:
      а) Дайте внешнее определение шаблона структуры name с двумя элементами: строка, предназначенная для хранения фамилии и строка, предназначенная для хранения имени.
      б) Дайте внешнее определение шаблона структуры student с четырьмя элементами: структура name, массив grade для хранения трех оценок в виде чисел с плавающей запятой, переменная для хранения среднего значения этих трех оценок и переменная для хранения указателя на структуру типа student.
      в) Напишите функцию main(), в которой объявляется указатель на структуру типа student и инициализируются, по крайней мере, все поля одной записи, располагающейся по адресу объявленного указателя. Используйте функции для выполнения заданий, описанных в частях г), д), е) и ж).
      г) В интерактивном режиме организуйте ввод данных в поля структуры о новом студенте, запрашивая у пользователя ввод ФИО студента и его оценок. Свяжите вновь создаваемые записи о студентах в односвязный список. Требуемый цикл ввода данных реализовать в отдельной функции.
      д) Вычислите среднюю оценку по каждой структуре и присвойте ее соответствующему элементу структуры.
      е) Организуйте вывод полей элементов связного списка с помощью отдельной функции.
      ж) Осуществите сортировку связного списка по фамилиям студентов в алфавитном порядке, удаление сведений о студенте с заданной фамилией, вставку нового элемента в список после заданного, поиск элемента в списке, а также определение количества элементов в списке. Указанные возможности реализовать с помощью отдельных функций в интерактивном режиме по запросу пользователя.

  4.Скомпилировать код программы, исправить возможные ошибки (Errors) и, по возможности, предупреждения (Warnings), проверить смысловую корректность исполнения программы.
  5.Результат работы представить преподавателю.

Лабораторная работа N10. "Рекурсия"

  1.Изучить Разделы: 1-4 онлайн-учебника "Введение в язык Си", в частности, пункты: "Типы данных", "Операции языка Си" и "Функции".

  2.Посмотреть примеры программ для лабораторной работы N10 (в каталоге: /afs/dims.prv/public/Informatics_2023/Labs/Examples/lab10/ )
      a. скопируйте примеры (factor.c, fibonacci.c, recur.c, tower.c и все примеры N10 на одной странице) в рабочий каталог домашней директории (в каталог: informatics) и изучите исходный код.
      b. скомпилируйте коды примеров, запустите на исполнение и проанализируйте результат. На основе данных примеров и теоретических сведений выполните следующие пункты лабораторной работы.

  3.В удобном текстовом редакторе (mc editor, gedit, kwrite и т.д.) набрать код программы, реализующей следующее:
      а) Напишите функцию main(), в которой в интерактивном режиме пользователю предлагается ввести два числа, одно из которых имеет тип double, а другое тип int.
      б) Разработайте рекурсивную функцию, принимающую на вход, введённые пользователем числа, и возвращающую результат возведения числа типа double в целую степень типа int. Наряду с этим, внесите в эту функцию такие изменения, которые при возведении 0 в любую степень давали бы в результате 0, а при возведении любого числа в степень 0 выдавали бы в качестве результата 1.

  4.Скомпилировать код программы, исправить возможные ошибки (Errors) и, по возможности, предупреждения (Warnings), проверить смысловую корректность исполнения программы.
  5.Результат работы представить преподавателю.

Лабораторная работа N11. "Указатели на функции"

  1.Изучить Разделы: 1,2 и 4 онлайн-учебника "Введение в язык Си", в частности, пункты: "Типы данных", "Операции языка Си" и "Указатели на функции".

  2.Посмотреть примеры программ для лабораторной работы N11 (в каталоге: /afs/dims.prv/public/Informatics_2023/Labs/Examples/lab11/ )
      a. скопируйте пример (func_ptr.c или пример N11 со страницы) в рабочий каталог домашней директории (в каталог: informatics) и изучите исходный код.
      b. скомпилируйте коды примеров, запустите на исполнение и проанализируйте результат. На основе данных примеров и теоретических сведений выполните следующие пункты лабораторной работы.

  3.В удобном текстовом редакторе (mc editor, gedit, kwrite и т.д.) набрать код программы, реализующей следующее:
      а) Напишите функцию main(), в которой в интерактивном режиме в цикле пользователю предлагается ввести пару вещественных чисел и операцию, которую над ними необходимо совершить. Для выхода из цикла предусмотрите возможность учёта ввода специального символа, например, "q".
      б) Разработайте несколько функций, реализующих операции: сложения, вычитания, умножения и деления над двумя числами, введёнными пользователем.
      в) Разработайте функцию-обработчик, в которую передаются два числа, введённые пользователем, и указатель на функцию, осуществляющую расчёт в соответствии с операцией. В самой функции осуществите вызов переданной с помощью указателя функции расчёта операции.
      г) В зависимости от введенных чисел и вида операции в коде main() вызывайте функцию-обработчик с необходимыми параметрами.

  4.Скомпилировать код программы, исправить возможные ошибки (Errors) и, по возможности, предупреждения (Warnings), проверить смысловую корректность исполнения программы.
  5.Результат работы представить преподавателю.

Лабораторная работа N12. "Директивы препроцессора"

  1.Изучить Разделы: 1,2 и 6 онлайн-учебника "Введение в язык Си", в частности, пункты: "Типы данных", "Операции языка Си" и "Препроцессор".

  2.Посмотреть примеры программ для лабораторной работы N12 (в каталоге: /afs/dims.prv/public/Informatics_2023/Labs/Examples/lab12/ )
      a. скопируйте пример (doubincl.c, names.h, ifdef.c, mac_arg.c, predef.c и все примеры N12 на одной странице) в рабочий каталог домашней директории (в каталог: informatics) и изучите исходный код.
      b. скомпилируйте коды примеров, запустите на исполнение и проанализируйте результат. На основе данных примеров и теоретических сведений выполните следующие пункты лабораторной работы.

  3.В удобном текстовом редакторе (mc editor, gedit, kwrite и т.д.) набрать код программы, реализующей следующее:
      а) Напишите функцию main(), в которой в интерактивном режиме пользователю предлагается ввести несколько положительных чисел, одно из которых является их общим количеством и имеет тип int, а остальные float.
      б) Разработайте заголовочный файл (файл с расширением ".h"), в котором воспользуйтесь директивой #define для определения макроса-функции, который выполняет операцию расчета гармонического среднего N чисел. Добавьте в код заголовочного файла защиту от его многократного подключения к основному тексту программы.
      в) Подключите заголовочный файл к исходному коду программы и воспользуйтесь разработанным макросом для расчета среднего гармонического введенных пользователем чисел.

Вспомогательные материалы:
      Среднее гармоническое (википедия): https://ru.wikipedia.org/wiki/Среднее_гармоническое
      H(x1, ..., xn) = n/(1/x1 + ... + 1/xn).

  4.Скомпилировать код программы, исправить возможные ошибки (Errors) и, по возможности, предупреждения (Warnings), проверить смысловую корректность исполнения программы.
  5.Результат работы представить преподавателю.