Т.В. Руденко - Сборник задач и упражнений по языку Си (1114664), страница 11
Текст из файла (страница 11)
Если корень был найден (с заданнойточностью eps) до нажатия клавиш Ctrl+C, то выдается соответствующее сообщение, печатается результат и программа прекращает работу.8.45. Написать программу вычисления определенного интеграла функции f(x) на отрезке [a,b] с точностью eps (любым известным Вам методом: прямоугольников, трапеций, Симпсона ), которая при возникновении сигналаSIGFPE (арифметическая ошибка: деление на 0 или переполнение) выдает значение частичной суммы, количество точек разбиения и запрос о дальнейшихдействиях:A - закончить работу программы;R - вычислять значение интеграла на другом отрезке (новые значения aи b вводятся с клавиатуры; реакция на сигнал SIGFPE сохраняется).Затем выполняет эти действия. Если вычисление интеграла (с заданнойточностью) успешно завершилось, то выдается соответствующее сообщение,печатается результат и программа прекращает работу.8.46. Написать программу копирования содержимого одного файла вдругой.
Копирование осуществляет вспомогательный процесс. Если во времякопирования считывается строка, длина которой больше N, то этот процесс сообщает процессу-родителю о возникшей ситуации. Головной процесс спрашивает пользователя о том, что делать с этой строкой:D - не записывать строку в формируемый файлC - записать только первые N символовA - прекратить копированиеи сообщает вспомогательному процессу о принятом пользователем решении.Головной процесс ждет, когда вспомогательный закончит свою работу, сообщает пользователю о том, что копирование завершено и завершается сам. Именафайлов и величина N задаются в командной строке.8.47. Написать программу копирования из одного файла в другой только тех восьмерок байт, в которых первый символ равен заданному. Использовать низкоуровневый ввод/вывод.
Все аргументы (файлы и символ) задаются вкомандной строке. Программа в ответ на первые два нажатия клавиш Ctrl+Cвыдает количество восьмерок байт, записанных в файл-результат к этому моменту, после третьего нажатия - прекращает работу, выдав содержимое сформированного к этому моменту файла. Если не было третьего (второго, первого)Ctrl+C, то работа продолжается до тех пор, пока не будет проанализирован исходный файл и создан файл-результат.8.48. Написать программу, выдающую на экран содержимое файла порциями по N строк: каждая последующая порция выдается после нажатия клавишCtrl+C. Имя файла и величина N задаются в командной строке.499. ЗАДАНИЯ ПРАКТИКУМА9.1 Свойства транслятора1. Выяснить, сколько байт отведено для хранения данных типа short,int, long, float, double и long double.2.
Выяснить способ представления типа char: signed- или unsignedвариант.3. Проконтролировать, все ли способы записи констант допустимы:• целых (обычная форма записи, u/U, l/L, их комбинации, восьмеричная и шестнадцатиричная системы счисления )• вещественных (обычная форма записи, в экспоненциальном виде, f/F,l/L, e/E )• символьных и строковых (в частности, происходит ли конкатенациярядом расположенных строковых констант )4. Выяснить, как упорядочены коды символов '0'-'9', 'a'-'z', 'A'- 'Z', пробел(между собой и относительно друг друга ).5. Проверить наличие и качество диагностических сообщений при неверной записи констант:• целых и вещественных• символьных и строковых6.
Проконтролировать, допускается ли инициализация переменных приописании; происходит ли инициализация по умолчанию.7. Проверить, реагирует ли компилятор на попытку изменить константу(внешнюю, автоматическую, статическую; арифметических типов, строковую).8. Исследовать особенности выполнения операции % с отрицательнымиоперандами.9.
Проверьте, действительно ли операции отношения == и != имеютболее низкий приоритет, чем все другие операции отношения.10. Проверьте, выполняется ли правило "ленивых вычислений" выражений в Си, т.е. прекращается ли вычисление выражений с логическими операциями, если возможно "досрочно" установить значение результата.11. Проверьте, все ли виды операнда операции sizeof, определяемыестандартом для арифметических типов, допускаются компилятором; действительно ли аргумент-выражение не вычисляется.12.
Определите, каким образом "малое" целое расширяется до int(старшие разряды int заполняются нулями или знаковым разрядом "малого" целого ).5013. Определите, каким образом расширяются unsigned- варианты "малых" целых ( до unsigned int как в "классическом" Си или сначала делается попытка расширить до int, и только в случае неудачи - до unsigned int ).14. Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование знаковых целых(M-битовое представление ) к знаковым целым (N-битовое представление ) приM > N, M = N, M < N.15.
Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование беззнаковых целых(M-битовое представление ) к знаковым целым (N-битовое представление ) приM > N, M = N, M < N.16. Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование вещественных чисел ( X )к знаковым целым ( N-битовое представление ) при | X | < 2N-1, | X | >= 2N-1.17. Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование знаковых целых X(M-битовое представление ) к беззнаковым целым ( N-битовое представление )при M > N, M = N, M < N; X >= 0, X < 0.18.
Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование беззнаковых целых(M-битовое представление ) к беззнаковым целым ( N-битовое представление )при M > N, M = N, M < N.19. Определите, каким образом при выполнении операции присваивания и явном приведении происходит преобразование вещественных чисел ( X )к беззнаковым целым (N-битовое представление ) при 0<=X< 2N, X < 0, X >= 2N.9.2КалькуляторКалькулятор – это программа, вычисляющая значения выражений, вводимых с клавиатуры. Ввод выражений и значений переменных, входящих в выражение, осуществляется по запросу программы.Требуется контролировать правильность записи выражений. Минимальный набор диагностических сообщений:- нарушен баланс скобок ( с указанием – открывающих / закрывающих)- отсутствует операнд- пропущена операция- недопустимая операция- неверный операнд (ошибочно записана константа или имя переменной).Выражение содержит знаки операций +, - ,∗, / ; круглые скобки без ограничения уровней вложенности; операнды – константы (целые и вещественные) и переменные.
Имя переменной – идентификатор, его максимальная длина– 6 символов; в вещественных константах порядок не используется, т.е. числа51имеют вид целая_часть.дробная_часть, где либо одно, либо другое может бытьопущено. Целочисленные константы записываются в десятичной форме (восьмеричное и шестнадцатиричное представление не используется).Старшинство операций и правила приведения типов аналогичны правилам Си. Тип переменной определяется по виду константы – инициализатора.Некоторые рекомендации:- если синтаксический анализ реализован методом рекурсивного спуска, тодля выхода из «глубокой» рекурсии удобны функции setjmp и longjmp.- в функции метода рекурсивного спуска можно вставить действия по переводу анализируемого выражения в польскую инверсную запись (ПОЛИЗ).
Этопозволит за один просмотр провести анализ исходного выражения и генерациюего польской записи; при использовании алгоритма Дейкстры может потребоваться еще один просмотр.- выражения в ПОЛИЗе можно интерпретировать многократно при разныхзначениях переменных (если пользователь потребует этого в процессе диалога).- таблицу переменных удобно представлять с использованием объединений, т.к. для переменных разных типов придется хранить значения типа int итипа double.Приведенный здесь вариант калькулятора можно упростить: реализоватьтолько целочисленную либо только вещественную арифметику.9.3Моделирование работы интерпретатора SHELL(программа My_Shell)Входной язык: подмножество командного языка SHELL (определяетсявариантом).Поток команд:1. командный файл, т.е.
каждая строка файла - это отдельная команда,которая должна быть выполнена интерпретатором (имя файла - аргумент в командной строке при вызове интерпретатора);2. стандартный входной поток команд;3. для исполнения каждой команды требуется запуск программыMy_Shell.ВНИМАНИЕ!!! "побочный" эффект выполнения уже обработанных команд (например, перенаправление ввода-вывода) не должен влиять на выполнение последующих команд.Входной язык (варианты):Общая часть (одинаковая для всех вариантов):• # конвейер pr1 | pr2 | ...
| prN для произвольного N>=2; считать, что аргументов у prI (1 <= I<= N) нет (но возможнареализация с произвольным числом аргументов у каждогопроцесса)• # перенаправление ввода-вывода <, >, >> (в том числе дляpr1 и prN в конвейере)52Например,pr < data > respr1 | pr2 > res.txt• # запуск в фоновом режиме & (в том числе и для конвейеров)Например,pr arg1 arg2 &pr1 | pr2 | pr3 > res.all &Вариантная часть:В каждый вариант входит (как минимум) один из подпунктов каждогопункта, отмеченного римской цифрой. Звездочкой отмечены более сложныеподпункты. Части подпунктов, содержащие слово «возможно», могут бытьопущены при выборе варианта; их реализация усложняет вариант. Вариант определяет преподаватель.I.
1. mv old_file new_file2. cp file copy_fileII. 1. wc filenameрезультат: filename строк слов символов (возможен список имен файлов; в этом случае подобная информация выдаются о каждомфайле)2. grep substring filenameрезультат: строки файла filename, содержащие substring как подстроку(возможен флаг -v; в этом случае результат - это строки, которые не содержат substring как подстроку)3. cmp filename1 filename2результат: информация о первом различии в содержимом двух файловНапример, filename1 differs from filename2: line 5 char 36*4.
sort filenameсортировка строк файла в соответствии с кодировкой ASCIIвозможны флаги:-r обратный порядок-f не различать большие и малые буквы-n числовой порядок+n начать сортировку с (n+1)-ой строкиIII. 1. cat filenamesвозможен флаг:-nс нумерацией строк (если файлов несколько, тонумерация сквозная)2. tail filenameвывод 10 последних строк файлавозможны флаги:-n n последних строк+n с n-ой строки и до конца файла3. od filenameвывод содержимого файла по 10 символов в строке с указанием номера первого символа в каждой десятке53Например, 000001 a b c d \n e f g h i000011 j k \t l m nвозможен флаг:-b с указанием восьмеричных кодов символовIV.