Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы программирования. Учебное пособие-1

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
951 Кб
Скачать

34.Даны два множества точек на плоскости. Выбрать три различные точки первого множества так, чтобы треугольник с вершинами в этих точках накрывал все точки второго множества и имел минимальную площадь.

35.Даны два множества точек на плоскости. Выбрать четыре различные точки первого множества так, чтобы квадрат с вершинами в этих точках накрывал все точки второго множества и имел минимальную площадь.

36.Даны два множества точек на плоскости. Выбрать три различные точки первого множества так, чтобы круг, ограниченный окружностью, проходящейчерезэти триточки,содержалвсеточкивторогомножества

иимел минимальную площадь.

37.Найти ромб наибольшей площади с вершинами в заданном множестве точек на плоскости.

38.Подсчитать количество равносторонних треугольников с различными длинами оснований и вершинами в заданном множестве точек на плоскости.

39.Задано множество точек на плоскости, не лежащих на одной прямой. Определить минимальное подмножество точек, после удаления которых остаются точки, лежащие на одной прямой.

40.Построить множество всех различных выпуклых четырехугольников с вершинами в заданном множестве точек на плоскости.

41.Построить множество всех различных остроугольных треугольников с вершинами в заданном множестве точек на плоскости,

42.На плоскости заданы множество точек и окружность радиусом R с центром в начале координат. Построить множество всех треугольников с вершинами в заданных точках, имеющих непустое пересечение с окружностью.

43.Из заданного на плоскости множества точек выбрать три различные точки так, чтобы разность между площадью круга, ограниченного окружностью, проходящей через эти три точки, и площадью треугольника с вершинами в этих точках была минимальной.

44.Среди треугольников с вершинами в заданном множестве точек на плоскости указать такой, стороны которого содержат максимальное число точек заданного множества.

45.Построить два треугольника с вершинами в заданном множестве точек на плоскости так, чтобы первый треугольник лежал строго внутри второго.

31

46.На плоскости задано множество окружностей. Две окружности А

иВназовемсвязанными,еслионипересекаютсялибосуществуеттретья окружность С заданного множества, связанная с А и В. Выбрать максимальное подмножество попарно не связанных друг с другом окружностей.

47.Задано множество точек на плоскости. Перечислить все различные максимальные подмножества точек, лежащих на одной прямой, которые содержат более двух точек.

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

49.Найти такую точку заданного на плоскости множества точек, сумма расстояний от которой до остальных минимальна.

Матрицы и векторы

50.Найти максимальное из чисел, встречающихся в заданной матрице более одного раза.

51.Расстояние между k-й и l-й строками матрицы A aij определя-

n

ется как akj alj . Указать номер строки, максимально удаленной от

j 1

первой строки заданной матрицы.

52. Определить норму заданной матрицы A aij , т. е. число

 

 

 

 

aij

 

 

max

 

 

.

i

 

j

 

 

 

 

 

 

53.Начиная с центра, обойти по спирали все элементы квадратной матрицы размером 13×13 (распечатывая их в порядке обхода).

54.По заданной квадратной матрице размером 10×10 построить вектор длиной 19, элементы которого – максимумы элементов диагоналей, параллельных главной диагонали.

55.Две строки матрицы назовем похожими, если совпадают множествачисел,встречающихсявэтихстроках.Найтиколичествостроквмаксимальном множестве попарно непохожих строк заданной матрицы.

56.Характеристикой строки целочисленной матрицы назовем сумму

ееположительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик.

32

57. Построить целочисленную матрицу A aij размером 10×10 следующим образом:

C j

при

i j,

 

i

 

 

aij Ci

при

i j,

 

j

 

 

 

 

 

 

где Cij – число сочетаний из i элементов по j.

58.Найти номер строки заданной целочисленной матрицы размером 10×10, в которой находится самая длинная серия.

59.Для заданной целочисленной матрицы найти максимум среди суммэлементовдиагоналей,параллельныхглавнойдиагоналиматрицы.

60.Для заданной целочисленной матрицы найти минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.

61.Поматрице A aij размером10×10построитьматрицу B bij

того же размера, элемент bij которой равен минимальному элементу треугольника в А, определяемого элементом aij :

62. По матрице A aij размером 10×10 построить матрицу B bij того же размера, где bij определяется следующим образом. Через aij

проведем вАдиагонали, параллельныеглавной ипобочнойдиагоналям; bij определяется как максимум в заштрихованной части матрицы А.

33

63.Дана матрица A размером 20 × 20. Считая ее составленной из 100квадратовразмером2×2ипереставляяэтиквадраты,преобразовать

Атак, чтобы в результирующей матрице для всяких двух квадратов В и С выполнялось следующее условие: если сумма элементов В меньше суммы элементов С, то В лежит либо выше, либо левее (когда В и С на одной горизонтали) квадрата С.

64.Найти максимальный среди всех элементов тех строк заданной матрицы, которые упорядочены (либо по возрастанию, либо по убыванию).

65.Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик.

66.Подсчитать количество столбцов заданной целочисленной матрицы размером 20×20, которые составлены из попарно различных чисел.

67.Подсчитать количество строк заданной целочисленной матрицы размером 20×20, являющихся перестановкой чисел 1, 2, .... 20.

68.Напечатать элементы заданной матрицы размером 10 × 10 в следующем порядке:

34

69. Напечатать элементы заданной матрицы размером 10×10 в следующем порядке:

70.Среди строк заданной целочисленной матрицы, содержащих только нечетные элементы, найти строку с максимальной суммой модулей элементов.

71.Среди столбцов заданной целочисленной матрицы, содержащих только такие элементы, которые по модулю не больше 10, найти столбец с минимальным произведением элементов.

72.Для заданной матрицы размером 10×10 найти такие k, что k-я строка матрицы совпадает с k-м столбцом.

73.Определить, являются ли линейно независимыми три заданных вектора целых чисел длиной 30.

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

75.Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером 10×13.

76.В условиях предыдущей задачи найти максимум среди всех локальных минимумов заданной матрицы размером 10×12.

ОБ ОТСТУПАХ В ТЕКСТАХ ПРОГРАММ

Стиль отступов (индентация) – правила форматирования исходного текста программы, в соответствии с которыми отступы программных блоков проставляются в удобочитаемой форме [9, 10, 13, 14].

Используемый стиль отступов обычно особо оговаривается в стандарте оформления текста программы.

35

Редакторы текста, входящие в состав большинства популярных сред разработки, часто предоставляют средства для поддержки используемого стиля отступов (например, автоматическую вставку пробелов/табуляции при вводе скобок, обозначающих начало/конец логического блока).

Стиль Олмана – по имени Эрика Олмана, программиста из Университета Беркли, написавшего множество BSD-утилит на языке С (также известен как «стиль BSD»). Этот стиль по умолчанию предлагается в

Microsoft Visual Studio.

Стиль заключается в следующем.

Открывающаяпрограммнаяскобкарасполагаетсянановойстроке

стем же отступом, что и выражение, находящееся на предшествующей строке.

Первое выражение внутри программных скобок располагается на новой строке с отступом, увеличенным (по выбору программиста):

на 1 символ табуляции (данный вариант используется в исходном кодесовременныхверсийпрограммыsendmail,авторомкоторой является Эрик Олман);

на 2, 3 или 4 пробела (конкретный выбор количества пробелов должен оставаться неизменным на протяжении всего текста программы);

на любое другое количество пробелов или символов табуляции при условии, что это количество не изменяется на протяжении

всего текста программы.

Последующие выражения внутри программных скобок располагаются с тем же отступом, что и первое.

Закрывающая программная скобка располагается с отступом, равным отступу соответствующей ей открывающей программной скобки (то есть точно под ней).

Пример фрагмента программы, отформатированного в стиле Олмана:

if∙(<condition>)

{

∙∙∙<body>

}

36

РЕКОМЕНДАЦИИ ПО ПРОГРАММИРОВАНИЮ

В данном разделе собраны советы, помогающие читателю сосредоточиться на наиболее важных аспектах разработки программ. Более полную версию этих советов можно найти в работах Пола Дейтела и Харви Дейтела [10, 11], которые за несколько десятилетий активного программированияипреподаваниянакопили,обобщилииструктурировали опыт программной разработки и создали методологическую основу, на которой строится хорошее программное обеспечение.

Рекомендации выделены по темам и представлены следующими рубриками.

Хороший стиль. Данные советы обращают внимание читателей на приемы и методы написания ясных программ и помогают студентам создавать более удобочитаемые, самодокументированные программы, которые проще сопровождать.

Распространенные ошибки. Студенты, изучающие язык (особенноеслидлянихэтопервыйкурспрограммирования),обычноделают некоторые виды ошибок наиболее часто. Советы этой рубрики помогут им избежать часто встречающихся ошибок.

Повышение эффективности. Умение студентов писать ясные и понятные программы – наиболее важная цель для учащихся первого курса, изучающих программирование. Но студенты хотят писать программы, которые работают быстрее, требуют меньше памяти, исходный текст которых короче. По этой причине в данной рубрике содержатся советы по повышению производительности: как заставить программы работать быстрее и занимать меньше места в памяти.

Переносимость программ. Разработка программного обеспечения – сложная и дорогостоящая деятельность. Организации, которые разрабатывают программное обеспечение, часто должны создавать его версии, специально приспособленные к различным компьютерам и операционным системам. Поэтому в настоящее время большое внимание уделяется переносимости. т. е. созданию программного обеспечения, которое будет работать на различных компьютерных системах с незначительными, если вообще они потребуются, изменениями. Некоторые программисты полагают, что если они реализуют приложение на стандартном C, оно будет переносимым. Это не всегда так. Достижение переносимости требует внимательной и кропотливой разработки. Здесь есть много ловушек и подводных камней, и приведенные замечания по переносимости программ помогут читателям научиться писать переносимый код.

37

Методические замечания. В этой рубрике выделяются методики, проблемы архитектуры и проектирования, которые влияют на архитектуру и конструирование систем программного обеспечения, особенно крупномасштабных систем. Многое из того, о чем узнают здесь студенты, будет полезно при освоении курсов более высокого уровня и в программной индустрии, когда студент начнет работать с большими, сложными реальными системами.

Принципы машинной обработки данных

Хороший стиль

Пишите программы в простой, четкой манере. Подобный стиль иногда называют KIS (Keep It Simple – «будьте проще»).

Читайте руководства пользователя по версиям C, с которыми вы работаете. Частое обращение к ним позволит вам узнать много полезного об особенностях языка C и поможет их корректно использовать.

Хорошими учителями являются компьютер и компилятор. Если

вынеуверенывтом,какработаеттаилиинаяконструкцияC,то следует написатьпробнуюпрограмму,откомпилировать,запуститьее ипосмотреть, что получится.

Переносимость программ

Благодаря тому, что C является машинно независимым и широкодоступнымязыком,прикладныепрограммы,написанныенаC,могутработать практически без изменений на большинстве компьютерных систем.

Использование функций стандартной библиотеки ANSI вместо

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

Несмотря на возможность написания переносимых программ, существует много проблем совместимости между различными версиями C и компьютерными системами, что затрудняет достижение переносимости. Само по себе написание программ на C не обеспечивает переносимости.

Повышение эффективности

Использование функций стандартной библиотеки ANSI вместо написания собственных аналогичных функций может улучшить характеристики программы, так как стандартные функции написаны весьма тщательно и работают очень эффективно.

38

Введение в программирование на C

Распространенные ошибки

Часто забывают закончить комментарий символами */.

Часто начинают комментарий символами */, а заканчивают символами /*.

Вместо имени функции вывода printf в тексте программы наби-

рают print.

Используют заглавные буквы там, где должны быть использо-

ваны строчные (например, вводят Main вместо main).

Объявляют переменные между двумя исполняемыми операто-

рами.

Вычисления в операторе присваивания должны находиться с пра-

вой стороны операции =. Вычисления, помещенные с левой стороны операции присваивания, считаются синтаксической ошибкой.

Иногда забывают одну или обе двойные кавычки, в которые следует помещать управляющую строку в printf или scanf.

Забывают поставить знак % в спецификации преобразования в управляющей строке printf или scanf.

Помещают esc-код, например \n, снаружи управляющей строки формата printf или scanf.

Задаютвprintf спецификациипреобразованияизабываютвключить в оператор выражения, значения которых должны быть напечатаны.

Не включают в управляющую строку printf спецификацию преобразования, когда необходимо напечатать выражение.

Помещают внутрь управляющей строки формата запятую, которая должна разделять управляющую строку и выражения, которые должны быть напечатаны.

Забываютпоставитьпередпеременнойвоператореscanf знакамперсанда.

Перед именем переменной, включенной в функцию printf, ставится амперсанд, тогда как на самом деле переменная не должна предваряться этим знаком.

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

Вслучае нефатальной ошибки программа выполнится до конца, однако результат выполнения программы, как правило, неверен.

39

Разделение символов в любой из операций ==, !=, >= или <= пробелами является синтаксической ошибкой.

Два символа в любой из операций !=, >= или <=, набранные в обратном порядке (соответственно =!, => и =<), также являются синтаксической ошибкой.

Часто путают операцию == с операцией присваивания =.

Иногда ставят точку с запятой непосредственно за правой скобкой, завершающей выражение условия структуры if.

Ставят запятые (хотя они не нужны) между спецификациями преобразования в управляющей строке формата считывания оператора

scanf.

Хороший стиль

Каждая функция должна быть предварена комментарием, объясняющим ее назначение.

Дляфункции,производящейкакую-либопечать,последнийвыво- димый символ должен быть символом новой строки ( \n ). Это гарантирует, что функция оставит экранный курсор расположенным в начале новой строки. Соглашения такого рода облегчают возможность повторного использования программного кода – основной задачи в процессе усовершенствования программного обеспечения.

Сдвигайте тело каждой функции на один абзацный отступ (три пробела) внутрь относительно скобок, ограничивающих тело функции. Это придает выразительность функциональной структуре программ и облегчает восприятие при чтении.

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

Хотя включение в текст программы <stdio.h> не является обязательным, это необходимо делать для каждой программы C, использующей любую из стандартных функций ввода/вывода. При этом компилятор поможет вам обнаружить ошибки еще на стадии компиляции, а не на стадии исполнения (когда исправить ошибки значительно труднее).

Вставляйте пробел после каждой запятой ( , ), это облегчит восприятие текста программы.

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]