s
Sesiya.ru

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ Cи

Информация о работе

Тема
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ Cи
Тип Лекции
Предмет Программирование
Количество страниц 63
Язык работы Русский язык
Дата загрузки 2014-12-14 02:05:17
Размер файла 234.16 кб
Количество скачиваний 33

Узнать стоимость работы

Заполнение формы не обязывает Вас к заказу работы

Скачать файл с работой

Помогла работа? Поделись ссылкой

ПРОГРАММИРОВАНИЕ
НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ Cи

ЧАСТЬ I


ПРАКТИКУМ



Содержание
Работа 1 5
Знакомство со средой Borland C 5
Работа 2 12
Обзор элементов языка С 12
Работа 3 22
Операции языка Си, оператор присваивания 22
Работа 4 32
Числовые типы данных 32
Работа 5 44
Операторы отношений и логические операторы 44
Работа 6 55
Инструкции управления. Операторы Си, реализующие повторения 55
Список литературы 65

Работа 1
Знакомство со средой Borland C
Цель работы:
- познакомиться с основными правилами работы в инструментальной среде программирования С;
- выработать практические навыки работы в ней.

1. Введение

Язык С (читается "Си") создан в начале 70х годов программистами Кен Томпсон и Дэннис Ритчи из Bell Labs. Сначала они создали часть компилятора С, затем использовали се для компиляции остальной части компилятора С и, наконец, применили полученный в результате компилятор для компиляции UNIX. С был третьим языком, который разработали Томсон и Ритчи в процессе создания UNIX; первыми двумя были, разумеется, А и В.
По сравнению с более ранним языком — BCPL, С был улучшен путем добавления типов данных определенной длины. Например, тип данных int мог применяться для соз-дания переменной с определенным числом битов (обычно 16), в то время как тип данных long мог использоваться для создания целой переменной с большим числом битов (обыч-но 32). В отличие от других языков высокого уровня, С мог работать с адресами памяти напрямую с помощью указателей и ссылок. Поскольку С сохранил способность прямого доступа к аппаратному обеспечению, его часто относят к языкам среднего уровня или в шутку называют "мобильным языком ассемблера".
Что касается грамматики и синтаксиса, то С является структурным языком про-граммирования. В то время как многие современные программисты мыслят в категориях классов и объектов, программисты на С думают в категориях процедур и функций. В С можно определить собственные абстрактные типы данных, используя ключевое слово struct. Аналогично можно описывать собственные целые типы (перечисления) и давать другие названия существующим типам данных при помощи ключевого слова typedef. В этом смысле С является структурным языком с зародышами объектно-ориентированного программирования.
Бьерн Страуструп высвободил объектно-ориентированный потенциал С путем пе-ренесения возможностей классов Simula 67 в С. Первоначально новый язык носил имя "С с классами" и только потом стал называться C. Язык C достиг популярности, будучи раз-работанным в Bell Labs, позже он был перенесен в другие индустрии и корпорации. Сего-дня это один из наиболее популярных языков программирования в мире. C наследует как хорошие, так и плохие стороны С.
Название C выдумал Рик Масситти. Название указывает на эволюционную природу перехода к нему от C. "++" - это операция приращения в C. Чуть более короткое имя C+ является синтаксической ошибкой; кроме того, оно уже было использовано как имя совсем другого языка.
В языке С полностью поддерживаются принципы объектно-ориентированного про-граммирования, включая три кита, на которых оно стоит: инкапсуляцию, наследование и полиморфизм. Инкапсуляция в С поддерживается посредством создания нестандартных (пользовательских) типов данных, называемых классами. Язык С поддерживает наследо-вание. Это значит, что можно объявить новый тип данных (класс), который является рас-ширением существующего.
Хотя язык С справедливо называют продолжением С и любая работоспособная про-грамма на языке С будет поддерживаться компилятором С, при переходе от С к С был сделан весьма существенный скачок. Язык С выигрывал от своего родства с языком С в течение многих лет, поскольку многие программисты обнаружили, что для того, чтобы в полной мере воспользоваться преимуществами языка С, им нужно отказаться от некото-рых своих прежних знаний и приобрести новые, а именно: изучить новый способ концептуальности и решения проблем программирования. Перед тем как начинать осваивать С, Страуструп и большинство других программистов, использующих С считают изучение языка С необязательным.
C в настоящее время считается господствующим языком, используемым для разра-ботки коммерческих продуктов, 90% игр пишутся на С с применением DirectX.

2. Начало работы в среде

2.1. Вызов Borland C
Для входа в среду Turbo Pascal необходимо отыскать файл с именем tc.exe или bc.exe
После его запуска на экране появится окно программы. В верхней строке экрана расположено «меню» возможных режимов работы C, нижняя строка содержит справку о назначении основных функциональных клавиш. (Функциональные клавиши используются для управления средой. Они обозначаются F1,F2...F12, и располагаются в самом верхнем углу клавиатуры.) Вся остальная часть экрана принадлежит окну редактора, очерченному двойной рамкой и предназначенному для ввода и коррекции текстов программ. В верхней строке окна редактора помещается имя файла. Здесь же расположены два специальных поля для работы с мышкой.
Войдите в среду Borland C и внимательно изучите содержимое экрана. Для выхода из Borland C следует нажать клавиши Alt + X.

2.2. Использование меню
Для перехода в меню следует просто нажать клавишу F10 или, поместив на один из его пунктов (их называют опции) курсор мыши, щелкнуть её левой клавишей. Для возврата в редактор нажмите Esc или щелкните мышью в любом месте экрана. Перемещаться по вариантам меню можно с помощью клавиш «стрелка влево» и «стрелка вправо».
Заметим, что в названии каждого пункта меню одна из букв выделена красным цве-том. Нажимая эти буквы в комбинации с клавишей Alt – это еще один способ попасть в нужный пункт меню. Потренируйтесь.
Если нажать клавишу Enter или «стрелка вниз», находясь на одном из пунктов ме-ню, то появиться дополнительное меню (подменю), обведенное одинарной рамкой. Пона-жимайте эти клавиши.
Выбрать какой-нибудь пункт из подменю можно, нажав клавишу с соответствую-щей выделенной буквой, либо установив курсор на нужный пункт и нажав клавишу Enter. Кроме этого некоторые часто используемые опции можно вызвать непосредственно из режима редактирования. Справа от таких опций в меню указывается клавиша или комбинация клавиш, которая позволяет сделать это. Заметим, что некоторые пункты меню бывают светло-серыми. Они не доступны в данный момент. Если Вы их выберете, то никаких действий выполняться не будет.
Обратите внимание на содержание нижней строки. В ней отражается краткая ин-формация о предназначении того пункта меню, на котором в данный момент находится курсор. Кстати, есть убедительный повод изучать английский язык. Советуем: записывай-те в лабораторный журнал непонятные фразы, а дома попробуйте со словарем разобраться в них. Следует учесть, что детальную информацию о той или иной опции меню можно получить с помощью справочной службы, если клавишами перемещения курсора сме-стить указатель к этой опции и нажать клавишу F1.
Исследуйте самостоятельно все пункты меню используя справочную службу.


2.3. Работа с окнами. Использование мыши
Войдем в подменю File/New (В дальнейшем для краткости будем просто указывать пункт главного меню и подменю через так называемый слэш “ / ”). На экране появиться еще одно окно, частично перекрывающееся с первым. Это активное окно, так как с ним мы сейчас работаем. Оно обведено двойной рамкой, остальные - одинарной.
В правой верхней части рамки активного окна мы видим цифру – номер окна. Мож-но перейти к любому из окон по его номеру. Для этого одновременно с клавишей Alt на-жимается номер окна, например Alt+2. Потренируйтесь. Для перехода к следующему ок-ну можно также использовать команду Window/Next (F6) или воспользоваться списком окон Window/List … (Alt + 0) .( Window по английски - окно)
Зайдем в подменю Window/Size/Move. Рамка при этом вокруг активного окна ста-новиться одинарной и приобретает зеленый цвет, а в нижней информационной строке высвечивается список всех действий, которые в данном режиме можно совершать. На-пример, можно двигать (move) окно с помощью клавиш «вверх», «вниз», «влево» и «вправо». Если нажимать их совместно с клавишей Shift, то окна будут изменять свой размер (resize). Нажатие клавиши Enter зафиксирует сделанные изменения, а с помощью клавиши Esc можно отменить текущий режим.
Изменяя положение и размеры окон, добейтесь того, чтобы они располагались на экране, не пересекая друг друга. Проделайте то же, открыв четыре окна.
Заметим, что комбинация клавиш Ctrl+F5 позволяет более оперативно входить в режим Window/Size/Move.
Исследуйте самостоятельно все пункты меню Window (Используя справочную службу и проводя эксперименты).
Если внимательно посмотреть на активное окно, в левом и правом краях его верх-ней части можно увидеть в квадратных скобках специальные значки, предназначенные для работы с мышью. Правый из этих значков имеет вид двойной стрелочки, если окно растянуто до максимальных размеров, и вид простой стрелочки в других случаях. Если курсор от мышки установить на квадратик со стрелкой и щелкнуть левой клавишей мыши, то окно растянется до максимальных размеров - аналогично действию функциональной клавиши F5. Понажимайте.
Зеленый квадратик в левой части верхней линии предназначен для закрытия окна, подобно Window/Close.
Если поместить курсор в любую точку верхней части рамки окна, нажать левую клавишу, и не отпуская её, двигать мышкой, то окна начнут перемещаться. Поэкспери-ментируйте.
Для изменений размеров окна нужно поместить курсор на правый нижний уголок окна, нажать левую кнопку, и не отпуская её, двигать мышкой. Попробуйте.
В правой и нижней частях рамки активного окна расположены, так называемые ли-нии прокрутки. Если окно непусто, то на каждой из этих линий можно увидеть маленький квадратик – маркер прокрутки. Он показывает относительное положение текста окна. Линии прокрутки очень полезны при работе с мышью. Если курсор мыши поместить на указатель прокрутки, нажать левую кнопку и не отпуская её, перемещаться вдоль линейки, то текст в окне будет двигаться соответственно. Пробуйте.
Пощелкайте также мышкой на маленьких треугольниках на концах линейки про-крутки и по самой линейке прокрутки. Что при этом происходит с текстом?
Резюмируя, можно сказать, что в интегрированной среде Turbo Pascal имеется три метода работы:
- наиболее быстрый - с помощью горячих клавиш (но их нужно помнить!);
- наиболее удобный - с помощью устройства мышь;
- наиболее простой - с помощью клавиш перемещения курсора.


2.4. Первая программа
Теперь давайте в окне редактора наберем текст небольшой программы на языке Turbo Pascal. Пока не будем комментировать её содержание, а только скажем, что она по-зволяет вычислять значение функции для . Откроем через File/New новый файл и введем текст следующей программы.
#include <iostream.h>
#include <conio.h>
void main(void)
{
float x=3.25,y;
y=x*x-3*x+5;
cout<<"y="<<y;
getch();
}
Теперь откомпилируем программу. В результате компиляции получится исполняе-мый файл с тем же именем, но расширением exe. Этот файл может выполняться незави-симо от среды программирования, к примеру, в DOS или Windows. Для компиляции про-граммы достаточно нажать Alt + F9, что соответствует пунктам Compile/Compile.
Если при наборе программы не было совершено ошибок, то появится окно информа-ции об успешно откомпилированном файле Errors:0. Теперь можно приступить к запуску программы с помощью комбинации клавиш Ctrl+F9 или, используя меню Run/Run ( для возврата в среду программирования нажмите Enter).
Поэкспериментируйте с текстом программы, убирая некоторые символы.

2.5. Работа с файлами
Основной формой хранения текстов программ являются файлы. После набора про-граммы, её следует сохранить, т.к. в процессе отладки компилятор может «зависнуть» и набранная информация исчезнуть. Для сохранения текста программы в файле нажмите клавишу F10 и далее, перемещая курсор, выберите пункт File/Save as… . Он отличается от пункта Save тем, что при его исполнении создается файл с новым именем. В появив-шемся окне сохранения файлов наберём имя нашего файла, к примеру, examp_01.cpp. Расширение имени cpp указывает на то, что программа написана на языке Pascal. Теперь нажмите клавишу Enter, и среда программирования запишет Ваш файл на диск.
Советуем файлы записывать в Ваш рабочий каталог. Для этого надо выбрать пункт меню File/Change dir - в специальном окне Вы увидите дерево каталогов, путешествуя по которому найдите нужный.
Познакомимся с подменю File/Open. Три точки в конце названия Open ...означают, что при вызове этого пункта подменю высветится панель диалога. Она содержит целый ряд элементов управления. Курсор мигает в строке ввода Name. Сюда можно ввести имя файла, с которым Вы хотите работать. C помощью клавиши Tab можно перемещаться между элементами управления панели диалога. Пройдите полный круг в одном направле-нии, а при нажатой клавише Shift, с помощью той же клавиши Tab – в обратном направлении.
Маленькая стрелочка в конце строки Name позволяет вызвать еще одно окно – «ок-но истории». В нем можно увидеть все, что набиралось во время текущего сеанса работы и, если необходимо, выбрать нужный файл.
На панельке “Files” также можно выбрать имя необходимого файла из представлен-ного там списка. Перемещение по этой панели осуществляется, используя клавиши End, Home, PgUp и PgDn, а также воспользовавшись линейкой прокрутки.
После имен файлов на панели Files следуют имена подкаталогов, которые заканчи-ваются символом « » - обратный слэш. В частности, в самом конце, мы видим “..” , т.е. вышележащий подкаталог. Войдите в него, а для тренировки просмотрите другие подка-талоги.
Изучите назначение оставшихся кнопок панели Open. Подробнее рассмотрите воз-можности пункта Open на основе справочной службы и вспомните про совет о записи в лабораторный журнал.

2.6. Основные приемы работы с текстовым редактором
С помощью подменю File/Open откроем созданный нами файл examp_01.pas. Рас-смотрим еще раз внимательнее окно редактирования. В нижней левой части рамки окна мы видим, разделенные двоеточием, номер строки и номер столбца, в которых находится курсор. При наборе текста их значения изменяются в соответствии с перемещением кур-сора. Понаблюдайте.
Обратите внимание на курсор: он имеет половинную высоту. Это означает, что мы работаем в режиме вставки, т.е. набираемый текст будет отодвигать все символы, стоя-щие справа от курсора. Если же нажмем клавишу Ins , то курсор изменит свою форму на прямоугольник полной высоты (режим Overwrite - "набор поверх ") и, набираемый нами текст будет затирать текст, находящийся справа от курсора. Советуем такой режим ис-пользовать лишь изредка, когда нужно исправить один или несколько символов. Режим вставки более безопасен. Мы не рискуем затереть ранее набранный текст при случайном нажатии не на ту клавишу.
Повторное нажатие клавиши Ins вернет нас в прежнее состояние. Поработайте в одном и другом режимах. Нажмите при этом клавишу Enter. Сделайте сравнение. Используя клавиши Del и BackSpase, "подклейте" нечаянно отрезанный кусок текста на прежнее место.
Поэкспериментируйте также с текстом программы, используя клавиши редактора:
Home - в начало строки;
End - в конец строки;
Ctrl+PgUp - в начало текста;
Ctrl+PgDn - в конец текста.
BackSpace - стереть символ слева от курсора;
Del - стереть символ справа от курсора;
Ctrl+Y - стереть строку, на которой располагается курсор;
Enter - вставить новую строку;
Ctrl+Q+L - восстановить текущую строку.
Заметим, что клавиша Ctrl действует на клавиши перемещения курсора как усили-тель.
Для перемещения по тексту очень удобно воспользоваться подменю Search. Разы-щите там пункт Go to line number... Многоточие в конце названия пункта меню, как Вы уже знаете, означает, что при входе в этот пункт на экране появиться панель диалога. Раз-беритесь с работой этой панели самостоятельно.

2.7. Меню Edit
В меню Edit находятся команды, позволяющие вырезать, копировать и вставлять текст в окнах редактирования. Вы можете также открыть окно буфера обмена, чтобы про-сматривать или редактировать его содержимое.
В меню Edit есть следующие команды:
Edit/Undo (Отменить)
Команда Undo отменяет последнюю команду редактирования, которую вы примени-ли к строке. Она может также отменять Ctrl-Y. Отмена работает только для последней из-мененной или удаленной строки.
Edit/Redo (Повторить)
Команда Redo отменяет последнюю команду Undo, которую вы выполнили для строки. Установите Group Undo в диалоговом окне Options|Environment|Editor Editor Options, чтобы применять команду Undo для более чем одного нажатия клавиши.
Edit/Cut (Shift-Del) (Вырезать)
Команда Cut удаляет выбранный текст из вашей программы и помещает его в буфер обмена. Затем вы можете выбрать Edit/Paste, чтобы вставить вырезанный текст в любую другую программу (или в другое место данной программы). Текст остается в буфере об-мена, так что вы можете вставлять его в программу столько раз, сколько вам нужно.
Edit/Copy (Ctrl-Ins) (Скопировать)
Команда Copy оставляет выбранный текст неизменным и помещает точную копию этого текста в буфер обмена. Чтобы вставить скопированный текст в любую другую про-грамму, выберите Edit/Paste. Вы можете также копировать текст с окна справочной систе-мы.
Edit/Paste (Shift-Ins) (Вставить)
Команда Paste вставляет выбранный текст из буфера обмена в текущее окно в пози-ции курсора.
Edit/Clear (Ctrl-Del) (Очистить)
Команда Clear удаляет выбранный текст, но не помещает его в буфер обмена. Это значит, что вы не сможете вставлять этот текст в дальнейшем, как вы могли бы пользуясь командами Cut или Copy.
Edit/Show Clipboard (Буфер обмена)
Команда Show Clipboard открывает окно буфера обмена, в котором находится текст, который вы вырезали или копировали с других окон. Любой текст, который вы вырезаете или копируете, добавляется к концу буфера обмена. Текст, который в настоящее время высвечен в буфере обмена - это текст который Turbo Pascal будет использовать по коман-де Paste (Вставить).
Используя перечисленные пункты меню Edit, наработайте приемы, облегчающие набор текста. Введите текст программы, используя эти приёмы. Чтобы выбрать текст, можно использовать клавишу Shift. Нажмите клавишу Shift, и, не отпуская её, понажи-майте клавишу "стрелка вправо", выделяя текст. Отметим общий принцип: клавиша Shift в комбинации с клавишами, обеспечивающими перемещение по тексту, производит выделение текста. В этих же целях можно использовать мышь. Для этого, нажав левую кнопку, перетащите курсор мыши через необходимую часть текста.
Когда выделен участок текста (в дальнейшем блок), то становятся доступными пункты Cut (вырезать) и Copy (копировать).
Поэкспериментируйте с копированием участков текста из одного окна в другое. Умение это делать сослужит Вам хорошую службу, когда Вам захочется при написании новой программы использовать какие-то участки уже имеющейся похожей программы.
Система Turbo Pascal помнит, изменялось ли содержимое файла и при закрытии окна будет задан соответствующий вопрос. В нижней части окна редактирования есть специальный признак изменений в тексте - звездочка. Попробуйте с помощью пункта Undo добиться, чтобы этот признак исчез.
Теперь поэкспериментируйте с текстом программы, используя клавиши редактора работы с блоком:
Ctrl +K+ B -пометить начало блока;
Ctrl +K+ K -пометить конец блока;
Ctrl +K +Y -стереть блок;
Ctrl +K +C -копировать блок;
Ctrl +K +V -переместить блок;



3. В конце работы Вы должны уметь

□ Входить и выходить из среды Турбо Паскаль.
□ Выбирать нужный пункт меню.
□ Получать справку о нужных пунктах меню.
□ Создавать новые окна.
□ Изменять положение и размер окон.
□ Набирать текст, перемещаться вдоль текста.
□ Редактировать текст, используя команды работы с блоками.
□ Запускать программы на выполнение.
□ Открывать и сохранять тексты программ.

Работа 2
Обзор элементов языка С

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

I. Теоретический раздел работы

1.1. Введение
Процесс создания программы относится к одной из наиболее сложных сфер творче-ской деятельности человека, требующий больших усилий и специальной технологии раз-работки. Языки программирования, как средство общения человека и машины, отличают-ся своей строгостью и лаконичностью. Они имеют жестко определенную грамматику (синтаксис) и не допускают двусмысленностей и неопределенностей. Программирование, как и любое ремесло, необходимо оттачивать и совершенствовать. Но программирование - это не только знание языков, здесь важным является умение логически и в тоже время нестандартно мыслить. Кроме того, нужно помнить, что программирование – это дисцип-лина, ориентированная не на машину, а в конечном итоге, на человека. Хорошая про-грамма должна быть написана так, чтобы она была понятна другим, её легко можно было бы читать и ею было бы удобно пользоваться. Хорошему стилю программирования тоже надо учиться.
Программа для компьютера – это последовательность операторов. Операторы пред-ставляют собой команды, следуя которым машина решает поставленную задачу.
Научимся создавать простейшие программы.

1.2. Структура программы на языке Borland C
Программа на языке С имеет следующую структуру:

#директивы препроцессора
………………
#директивы препроцессора
функция а ()
операторы
функция в ()
операторы
void main () //функция, с которой начинается выполнение программы операторы
описания присваива-ния функция пустой оператор составной выбора циклов пере-хода
Директивы препроцессора - управляют преобразованием текста программы до ее компиляции. Исходная программа, подготовленная на СИ в виде текстового файла, про-ходит 3 этапа обработки:
1) препроцессорное преобразование текста;
2) компиляция;
3) компоновка (редактирование связей или сборка).
После этих трех этапов формируется исполняемый код программы. Задача препро-цессора - преобразование текста программы до ее компиляции. Правила препроцессорной обработки определяет программист с помощью директив препроцессора. Директива начи-нается со знака #. Например,
1) #define - указывает правила замены в тексте.
#define ZERO 0.0 - Означает, что каждое использование в программе имени ZERO будет заменяться на 0.0.
2) #include< имя заголовочного файла> - предназначена для включения в текст программы текста из каталога «Заголовочных файлов», поставляемых вме-сте со стандартны¬ми библиотеками.
Каждая библиотечная функция Си имеет соответствующее описание в
одном из заголовочных файлов. Список заголовочных файлов определен стандартом язы-ка. Употребление директивы include не подключает соответствующую стандартную биб-лиотеку, а только позволяют вставить в текст программы описания из указанного заголо-вочного файла. Подключение кодов библиотеки осуществляется на этапе компоновки, т. е. после компиляции. Хотя в заголовочных файлах содержатся все описания стандартных функций, в код программы включаются только те функции, которые используются в про-грамме.
После выполнения препроцессорной обработки в тексте программы не оста¬ется ни одной препроцессорной директивы.
Программа представляет собой набор описаний и определений, и состоит из набора функций. Среди этих функций всегда должна быть функция с именем main. Без нее про-грамма не может быть выполнена. Перед именем функции помещаются сведения о типе возвращаемого функцией значения (тип результата). Если функция ничего не возвращает, то указывается тип void: void main ().
void main (void) //—-------> Программа не возвращает значение
Каждая функция, в том числе и main должна иметь набор параметров, он может быть пустым, тогда в скобках указывается (void).
void main (void) //-----> Программа не использует аргументы командной строки
За заголовком функции размещается тело функции. Тело функции - это последова-тельность определений, описаний и исполняемых операторов, заключенных в фигурные скобки. Каждое определение, описание или оператор заканчивается точкой с запятой.
Определения - вводят объекты (объект - это именованная область памяти, частный случай объекта - переменная), необходимые для представления в программе обрабаты-ваемых данных. Примером являются
int у = 10 ; //именованная константа
float х; //переменная
Описания - уведомляют компилятор о свойствах и именах объектов и функций, описанных в других частях программы. Операторы - определяют действия программы на каждом шаге ее исполнения.
Пример программы на Си:
#include <stdio.h> //препроцессорная директива
void main() //функция
{ //начало
printf("Hello!"); //печать
} //конец

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

1.3. Состав языка
В тексте на любом естественном языке можно выделить четыре основных элемен-та: символы, слова, словосочетания и предложения. Алгоритмический язык также содер-жит такие элементы, только слова называют лексемами (элементарными конструкциями), словосочетания - выражениями, предложения - операторами. Лексемы образуются из символов, выражения из лексем и символов, операторы из символов выражений и лексем.
Таким образом, элементами алгоритмического языка являются:
1) Алфавит языка С, который включает
• прописные и строчные латинские буквы и знак подчеркивания; арабские цифры от 0 до 9;
• специальные знаки "{},| []()+-/%*.:;&?о=!#
• пробельные символы (пробел, символ табуляции, символы перехода на новую строку).
2) Из символов формируются лексемы языка:
• Идентификаторы - имена объектов С-программ. В идентификаторе могут быть использованы латинские буквы, цифры и знак подчеркивания. Прописные и строчные буквы различаются, например, PROG1, progl и Progl - три различных идентификатора. Первым символом должна быть буква или знак подчеркивания (но не цифра). Пробелы в идентификаторах не допускаются.
• Ключевые (зарезервированные) слова (таблица 1) - это слова, которые имеют спе-циальное зна¬чение для компилятора. Их нельзя использовать в качестве идентифи-каторов. Знаки операций - это один или несколько символов, определяющих дей-ствие над операндами. Операции делятся на унарные, бинарные и тернарную по количеству участвующих в этой операции операндов.
• Константы - это неизменяемые величины. Существуют целые, вещественные, символьные и строковые константы. Компилятор выделяет константу в качестве лексемы (элементарной конструкции) и относит ее к одному из типов по ее внеш-нему виду.
• Разделители - скобки, точка, запятая пробельные символы.

Таблица 1
Ключевые слова C
asm auto break case catch char class const
default delete do double else enum extern float
friend goto if inline int long new operator
protected public register return short signed sizeof static
switch template this throw try typedef union unsigned
void volatile while continue for private struct virtual

1.3.1. Константы и переменные
Константы не изменяются в процессе работы программы. Они задаются таким об-разом:
const count = 790, Name = V;
или с указанием типа:
const float cout=0.12313;
Примечание
- Числа, строки, используемые непосредственно в программе также часто называ-ются константами, хотя они и не имеют специального описания. В этом случае говорят, что константы представлены своим значением.
- Строковые константы заключаются в скобки ”…”.
Чтобы использовать определенные ячейки памяти, программы применяют перемен-ные. Проще говоря, переменная представляет собой имя ячейки памяти, которая может хранить конкретное значение. Вы должны объявлять переменные, которые будете исполь-зовать в программе, сообщая компилятору имя и тип переменной.
Имейте также в виду, что С различает регистры символов, т.е. переменные Name и name считаются разными.
Прежде чем вы сможете использовать переменную, ваша программа должна ее объя-вить. Другими словами, вам следует представить переменную компилятору C. Чтобы объ-явить переменную в программе, вам следует указать тип переменной и ее имя, по которо-му программа будет обращаться к данной переменной. Указывайте тип и имя переменной после открывающей фигурной скобки главной программы, как показано ниже:
тип_переменной имя_переменной;
Пример:
int a,b; //мы объявили переменные a и b типа int -целого типа
char Name; //объявление переменная Name типа char -символьного типа
Для использованья в программе строковых переменных, вам следует объявить ее, как массив символов:
char str[255];
Число в скобках это ее максимальная длина хранимой строки. Вам надо знать, что для присваиванье значения строковой переменно в программе используется функция stpcpy , которая содержится в заголовочном файле string.h :
stpcpy(str,"Hello!");
При этом в переменную str записывается строка Hello!.
При объявление переменной, вы можете сразу присвоить значение в С оператор присваивания “=”
Пример:
int a=12,c,d=200;/*Мы объявили три переменные целого типа и присвоили значение переменным а и d*/
char str1[12]=”Как дела?”;
Компилятор С позволяет объявлять переменные и константы в любом месте про-граммы, но до того как вы будете их использовать.

1.3.2. Типы данных в С
Данные отображают в программе окружающий мир. Цель программы состоит в обработке данных. Данные различных типов хранятся и обрабатываются по-разному. Тип данных определяет:
1) внутреннее представление данных в памяти компьютера;
2) множество значений, которые могут принимать величины этого типа;
3) операции и функции, которые можно применять к данным этого типа.
В зависимости от требований задания программист выбирает тип для объектов про-граммы. Типы С можно разделить на простые и составные. К простым типам относят ти-пы, которые характеризуются одним значением. В С определено 6 простых типов данных:
int (целый)
char (символьный)
bool (логический)
float (вещественный)
double (вещественный с двойной точностью)
void (пустое значение)
Существует 4 спецификатора типа, уточняющих внутреннее представление и диапазон стандартных типов: short (короткий), long (длинный), signed (знаковый) и un-signed (беззнаковый).

1.4. Ввод и вывод данных
В языке С нет встроенных средств ввода и вывода - он осуществляется с помощью функций, типов и объектов, которые находятся в стандартных библиотеках. Существует два основных способа: функции, унаследованные из С и объекты С.
Для ввода/вывода данных в стиле С используются функции, которые описываются в библиотечном файле stdio.h. Для вывода используется функции printf, для ввода – scanf.
printf( форматная строка, список аргументов);
форматная строка - строка символов, заключенных в кавычки, которая показывает, как должны быть напечатаны аргументы.
Например:
printf ("Значение числа Пи равно %f
", pi);
Форматная строка может содержать
1) символы печатаемые текстуально;
2) спецификации преобразования;
3) управляющие символы.
Каждому аргументу соответствует своя спецификация преобразования:
%d, %i - десятичное целое число; %f - число с плавающей точкой;
%е,%Е - число с плавающей точкой в экспоненциальной форме;
%u - десятичное число в беззнаковой форме;
%с - символ;
%s - строка.
В форматную строку также могут входить управляющие символы:

- управляющий символ новая строка;
- табуляция;
а - звуковой сигнал и др.
Также в форматной строке могут использоваться модификаторы формата, которые управляют шириной поля, отводимого для размещения выводимого значения. Модифика-торы - это числа, которые указывают минимальное количество позиций для вывода значе-ния и количество позиций для вывода дробной части числа: %[-]m[.р]c, где
1 - задает выравнивание по левому краю,
m - минимальная ширина поля,
p - количество цифр после запятой для чисел с плавающей точкой и минимальное количество выводимых цифр для целых чисел (если цифр в числе меньше, чем значение р, то выводятся начальные нули),
c - спецификация формата вывода.
Пример
printf("
Спецификации формата:
%10.5d - целое,
%10.5 - с плавающей точкой
%10.5е - в экспоненциальной форме
%10s - строка", 10,10.0,10.0,"10");
Будет выведено:
Спецификации формата:
00010-целое
10.00000 - с плавающей точкой
1.00000е+001 - в экспоненциальной форме
10-строка.
scanf ( форматная строка, список аргументов);
В качестве аргументов используются адреса переменных.
Например: scanf(" %d%f ", &х,&у);
При использовании библиотеки классов Си++, используется библиотечный файл iostream.h, в котором определены стандартные потоки ввода данных от клавиатуры cin и вывода данных на экран дисплея cout, а также соответствующие операции
1) << - операция записи данных в поток;
2) >> - операция чтения данных из потока.
Пример:
сout<<120; //Выводит на экран число 120
cout<<0.12123; //Выводит на экран число 0.12123
cout<<’a’; //Выводит на экран символ «а»
cout<<”Soon session!!!”; //Выводит на экран строку Soon session!!!

Можно так же вывести несколько значений одним оператором
Пример:
cout<<120<<’-’<<”This is a number”<<’!’; //Выведет стороку «120-This is a number!»
Если необходимо переместить курсор в начало следующей строки, можно поместить символ новой строки (
) или символ конца строки (endl).
В дополнение к символу новой строки, позволяющему вашим программам продви-гать курсор в начало новой строки, вы можете использовать специальные символы, пере-численные в табл. 3.
Таблица 2
Специальные символы для использования с cout
Символ Назначение
а Сигнальный (или звонок) символ
 Символ возврата

Символ новой строки

Возврат каретки (не перевод строки)
Символ горизонтальной табуляции
v Символ вертикальной табуляции
\ Символ обратный слеш
? Знак вопроса
Одинарные кавычки
" Двойные кавычки
Нулевой символ
00 Восьмеричное значение, например 07
xhhhh Шестнадцатеричное значение, например xFFFF
Для чтения ввода с клавиатуры программы могут использовать входной поток cin. При использовании cin вы должны указать переменную, в которую cin помещает данные. Затем используйте оператор извлечения (>>) для направления данных, как показано ниже:
cin >> some_variable; /* Записывает значение, введенное с клавиатуры в переменную some_varible */
Оператор извлечения называется так, потому что он извлекает (удаляет) данные из входного потока, присваивая значение указанной переменной.
Можно вводить значение нескольких переменных, как это показано ниже:
cin>>a>>b;
Значения нескольких переменных вводятся через пробел.
Так же полезно знать такую функцию, как getch(), которая без параметров требует нажатия клавиши и это можно использовать для просмотра выведенной информации в окне вывода данных. Чтобы использовать функцию getch(), ваша программа должна включать заголовочный файл conio.h.
Несколько предыдущих программ выводили числа на экран. Чтобы гарантировать правильное отображение этих чисел (с правильной расстановкой пробелов), программы включали пробелы до и после чисел. При выводе на cout или cerr ваши программы могут указать ширину вывода каждого числа, используя модификатор setw (установка ширины). С помощью setw программы указывают минимальное количество символов, занимаемое числом. Чтобы использовать модификатор setw, ваша программа должна включать заго-ловочный файл iomanip.h:
cout << "Number" << setw(3) << 1001 << endl;
Если вы указываете ширину с помощью setw, вы указываете минимальное количест-во символьных позиций, занимаемых числом. В примере модификатор setw(3) указывал минимум три символа. Однако, так как число 1001 потребовало больше трех символов, cout использовал реально требуемое количество, которое в данном случае равнялось че-тырем. Следует отметить, что при использовании setw для выбора ширины, указанная ши-рина действительна для вывода только одного числа. Если вам необходимо указать шири-ну для нескольких чисел, вы должны использовать setw несколько раз.

II. Экспериментальный раздел работы
Пример 1. Войдем в С, создайте новое окно и наберем в нем текст программы:
#include <iostream.h>
#include <conio.h>
void main (void)
{
cout<<"Hello!";
getch();
}
Сохраните программу с именем Example_21. В разделе операторов имеется два ис-полняемых оператора count и getch. Запустите программу.
Поэкспериментируйте с текстом программы, убирая некоторые символы. Удалите оператор getch(). Запустите программу на выполнение. Что изменилось? Объясните на-блюдаемые изменения.
Пример 2.Найти сумму двух чисел:
#include
<stdio.h>
{
int a,b,c;
scanf(" %d %d",&a,&b);
c=a+b;
printf("Cумма = %d
",c)
}
Поэкспериментируйте с форматами ввода-вывода.

Пример 3. Напишем программу, работающую в режиме диалога с пользователем. Про-грамма запрашивает имя пользователя, а затем выводит приветствие.

#include <iostream.h>
#include <conio.h>
void main (void)
{
char Name[40],Famalu[40];
cout<<"Как вас зовут?"<<endl;
cin>>Name;
cout<<"Как твоя фамилия?"<<
;
cin>>Famalu;
cout<<"Здраствуй "<<Name<< <<Famalu<<endl;
getch();
}
Здесь объявляются Name и Famalu – переменные строкового типа. Последователь-ность символов языка, заключенная в кавычки, называется строкой. В данном примере строки используются для вывода текста на экран.
Введите программу, запустите её на выполнение и объясните результаты работы.
Поэкспериментируйте с текстом этой программы, объясняя смысл используемых конструкций.

Пример 4. Напишем программу, которая просит пользователя ввести число, а потом вы-водит это число на экран в восьмеричном, шестнадцатеричном и десятичном видах:

#include <iostream.h>
#include <conio.h>
void main (void)
{
int Number;
cout<<"Enter the number"<<endl;
cin>>Number;
cout<<"This number in "<<endl;
cout << "Oct:" <<oct<<Number<<endl;
cout << "Hex:" <<hex<<Number<<endl;
cout << "Dec:" <<dec<<Number<<endl;
getch();
}
Введите программу, запустите её на выполнение и объясните результаты работы.
Поэкспериментируйте с текстом этой программы, объясняя смысл используемых кон-струкций.
Попробуйте при запуске ввести дробное число, что произойдет?

Пример 5. Составим программу, которая выводит на экран таблицу различных мер длины.
#include <iostream.h>
#include <conio.h>
void main(void)
{
const inn=0.0254, ft=0.3048, yd=0.914, mile=1852.0;
cout<<"--------------------------------------------------"<<endl;
cout<<"Наименование Обозначение СИ, метр"<<endl;
cout<<"--------------------------------------------------"<<endl;
cout<<" Дюйм in "<<inn<<endl;
cout<<" Фут ft "<<ft<<endl;
cout<<" Ярд yd "<<yd<<endl;
cout<<" Миля mile "<<mile<<endl;
getch();
}
Введите программу, запустите её на выполнение и объясните результаты работы. Ис-пользуя модификатор setw() добейтесь того, чтобы все элементы таблицы были выровне-ны.

III. Дополнительный материал
Справочная служба Borland C.
Неотъемлемой составной частью среды C является встроенная справочная служба. Суще-ствуют два способа обращения к справочной службе непосредственно из окна редактора.
F1 – получение контекстно-зависимой справки. Например, если нажать F1 в мо-мент, когда среда обнаружила ошибку в программе, в справке будут сообщены дополни-тельные сведения о причинах ошибки и даны рекомендации по ее устранению;
Ctrl-F1 – получение справки о нужной стандартной процедуре, функции, типе, константе или переменной имя которой находится вблизи курсора;

IV. Раздел заданий для самостоятельной работы
Раздел заданий для самостоятельной работы разбит на три части – A, B и C различной степени тяжести. Раздел С предназначен для студентов достаточно хорошо знакомых с языком С.
A.
1. Написать самостоятельно программу, которая запрашивает по отдельности имя, отчество и фамилию, а потом выводит их в строчку с пожеланием успехов в изу-чении информатики.
2. Составить программу, в которой в ответ на выводимое полное имя, нужно ввести уменьшительное имя. Например, Александр – Саша, Шурик и т.д.
3. Составить программу, которая предлагает слова, к которым нужно придумать рифму. Выводить на экран предложенные программой слова, а рядом – рифмы.
4. Написать программу, выводящую на экран слова, к которым необходимо приду-мать слова-синонимы и слова-антонимы.
5. Составить программу, которая экзаменовала бы студентов, например, на знание столиц государств мира, президентов государств, рек континентов, исполнителей песен, актеров кино и др.
6. Придумать самостоятельно задания на составление программ, в которых организу-ется с помощью операторов read и write диалог пользователя и компьютера.
7. Написать программу, выводящую на экран дисплея таблицу со списком друзей: фамилию, имя, телефон, адрес.
B.
8. Написать программу-диалог, с помощью которой можно будет разъяснять значе-ния выводимых на экран слов.
9. Написать в виде диалога с компьютером программу – переводчик слов с одного языка на другой.
10. Написать “программу – игру в города.”
11. Составить программу, выводящую на экран дисплея таблицу основных единиц физических величин в системе СИ и их размерности.
12. Составить программу, которая выводит в виде таблицы некоторые производные единицы физических величин в системе СИ.
13. Составить программу, которая выводит в виде таблицы значения некоторых физи-ческих постоянных: радиус и массу Земли, Гравитационную постоянную, постоян-ные Авогадро, Больцмана, Планка, Ридберга и другие.
14. Составить программу, которая выводит в виде таблицы массы и заряды электрона, протона, альфа-частицы и некоторых других легких элементов.
15. Составить программу, выводящую на экран дисплея таблицу некоторых характеристик планет Солнечной систем

Расстояние Масса Радиус Плотность Орбитальная Планета от Солнца, относительно км 103 кг/м3 скорость
млн.км МЗ=6 1024кг км/с
Меркурий 57.9 0.06 2 440 5.5 47.9
Венера 108.2 0.82 6 050 5.2 35.0
Земля 149.6 1.0 6 371 5.5 29.8
Марс 227.9 0.11 3 397 3.9 24.1
Юпитер 778.3 318 69 900 1.3 13.1
Сатурн 1427 95.2 58 000 0.7 9.6
. Уран 2870 14.6 25 400 1.4 6.8
Нептун 4496 17.2 24 300 1.6 5.4
Плутон 5946 0.002 1 140 2.0 4.7

16. Придумать самостоятельно задания на составление программ, с помощью которых можно будет выводить какую-либо информацию в виде таблиц, кроссвордов, ре-бусов, чайнвордов, сканвордов и т.п.
C.
17. Напишите программу, выводящую текст справа(в той же строке) от текста введен-ного пользователем.
18. Напишите программу, выводящую текст в окне( окно должно быть окружено рам-кой).
19. Напишите программу, в которой при нажатии на клавишу a на экране выводится символ b, при нажатии на клавишу b на экране выводится символ c, и т.д.
20. Вывести график функции sin x, используя в качестве точек символ *.
21. Составить программу, в результате работы которой на экране будет отображаться ходьба человека. Для рисования используйте псевдографику, например

Работа 3
Операции языка Си, оператор присваивания

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

I.Теоретический раздел работы

1.1. Знаки операций в Си
Знаки операций обеспечивают формирование выражений. Выражения состоят из операндов, знаков операций и скобок. Каждый операнд является, в свою очередь, выраже-нием или частным случаем выражения – константой или переменной.
Таблица 1
Унарные операции
& Получение адреса операнда
* Обращение по адресу (разыменование)
- Унарный минус, меняет знак арифметического операнда
~ Поразрядное инвертирование внутреннего двоичного кода целочисленного операнда (побитовое отрицание)
! логическое отрицание (НЕ). В качестве логических значений используется 0 - ложь и не 0 - истина, отрицанием 0 будет 1, от¬рицанием любого ненулевого числа будет 0.
++ Увеличение на единицу:
префиксная операция - увеличивает операнд до его использо¬вания,
постфиксная операция увеличивает операнд после его исполь¬зования,
int m=l,n=2;
int a=(m++)+n; // a=4,m=2,n=2
int b=m+(++n) ;//a=3 ,m= 1 ,n=3
-- Уменьшение на единицу:
префиксная операция - уменьшает операнд до его использова¬ния, пост-фиксная операция уменьшает операнд после его использо¬вания.
sizeof Вычисление размера (в байтах) для объекта того типа, который имеет опе-ранд; имеет две формы sizeof выражение sizeof (тип). Примеры: sizeof(float)//4
sizeof(1.0)//8,
т. к. вещественные константы по умолчанию имеют тип double

Таблица 2
Бинарные операции


+ бинарный плюс (сложение арифметических операндов)
- бинарный минус (вычитание арифметических операндов)
Мультипликативные:
* умножение операндов арифметического типа
/ деление операндов арифметического типа (если операнды целочисленные, то выполняется целочисленное деление)
% о получение остатка от деления целочисленных операндов
Операции сдвига (определены только для целочисленных операндов).
Формат выражения с операцией сдвига:
операнд левый операция сдвига операнд правый.
<< сдвиг влево битового представления значения левого целочисленного опе-ранда на количество разрядов, равное значению правого операнда, осво-бодившиеся разряды обнуляются
>> сдвиг вправо битового представления значения правого целочисленного операнда на количество разрядов, равное значению правого операнда, осво-бодившиеся разряды обнуляются, если операнд беззнакового типа и запол-няются знаковым разрядом, если - знакового
Поразрядные операции:
& поразрядная конъюнкция (И) битовых представлений значений целочис-ленных операндов (бит =1, если соответствующие биты обоих операндов=1)
| поразрядная дизъюнкция (ИЛИ) битовых представлений значений цело-численных операндов (бит =1, если соответствующий бит одного из опе-рандов=1)
^ поразрядное исключающее ИЛИ битовых представлений значений цело-численных операндов (бит =1, если соответствующий бит только одного из операндов=1)
~ поразрядное отрицание битовых представлений значений целочисленных операндов (бит = 1, если соответствующий бит 0)
Операции сравнения: результатом являются true (не 0) или false(0)
< меньше, чем
> больше, чем
<= меньше или равно
>= больше или равно
= = равно
!= не равно
Логические бинарные операции:
&& конъюнкция (И) целочисленных операндов или отношений, целочислен-ный результат ложь(0) или истина(не 0)
|| дизъюнкция (ИЛИ) целочисленных операндов или отношений, целочислен-ный результат ложь(0) или истина(не 0)
!


Условная операция.
В отличие от унарных и бинарных операций в ней используется три операнда.
(Выражение1) ? (Выражение2): (Выражение3);
Первым вычисляется значение выражения1. Если оно истинно, то вычисляется зна-чение выражения2, которое становится результатом. Если при вычислении выражения1 получится 0, то в качестве результата берется значение выражения3.
Например: (x<0) ? (-x) : (x) ; //вычисляется абсолютное значение x.

Операция явного (преобразования) приведения типа.
Существует две формы: каноническая и функциональная:
1) (имя_типа) операнд(int)a; //каноническая форма
2) имя_типа (операнд) int(a); //функциональная форма
Таблица 3
Приоритет операций
Ранг Операции
1 (), [], ->
2 ! ~ - ++--&* (тип) sizeof тип()
3 * / % (мультипликативные бинарные)
4 + - (аддитивные бинарные)
5 << >> (поразрядного сдвига)
6 <><=>= (отношения)
7 = != (отношения)
8 & (поразрядная конъюнкция «И»)
9 ^ (поразрядное исключающее «ИЛИ»)
10 | (поразрядная дизъюнкция «ИЛИ»)
11 && (конъюнкция «И»)
12 | | (дизъюнкция «ИЛИ»)
13 ?: (условная операция)
14 = *= /= %= -= &= л= |=«= »= (операция присваивания)
15 , (операция запятая)

1.2.Выражения
Из констант, переменных, разделителей и знаков операций можно конструировать выражения. Каждое выражение представляет собой правило вычисления нового значения. Если выражение формирует целое или вещественное число, то оно называется арифметическим. Пара арифметических выражений, объединенная операцией сравнения, называется отношением. Если отношение имеет ненулевое значение, то оно – истинно, иначе – ложно.
Приоритеты операций в выражениях
Любое выражение, заканчивающееся точкой с запятой, рассматривается как опера-тор, выполнение которого заключается в вычислении этого выражения. Частным случаем выражения является пустой оператор ; .
Примеры:
i++;
a+=2;
x=a+b;
К составным операторам относят собственно составные операторы и блоки. В обоих случаях это последовательность операторов, заключенная в фигурные скобки. Блок отли-чается от составного оператора наличием определений в теле блока.
Например:
{
n++; это составной оператор
summa+=n;
}
{int n=0;
n++; это блок
summa+=n;
}




2. Оператор присваивания
Переменная - это такой "ящик" с именем, в котором может храниться некое значе-ние. Имя у переменной постоянно и неизменно, значение же может меняться.
Переменную можно изменять при помощи операции присваивания:
< переменная > = < выражение > ;
Выражение справа от символа присваивания состоит из констант, переменных, об-ращений к функциям и знаков операций. Вначале вычисляется значение выражения. Затем полученное значение заносится в ячейку памяти компьютера, зарезервированную под переменную, я которой указано в левой части оператора присваивания. Значение выражения должно быть совместимо по типу с указанной переменной.
Важно, чтобы все переменные, стоящие справа от знака оператора присваивания ( = ) были определены. При попытке использовать в вычислениях неопределенную пере-менную, работа программы может быть прервана.
Что происходит со старыми значениями переменной, когда ей присваивается новое? Оно просто стирается. Например, запись операторов x =2; x = x+1; увеличивает значение переменной х на единицу. Выражение x = x + 1; - не уравнение. Если рассматривать эту строку как математическое уравнение, оно не имеет решений. На самом деле тут написа-но:
1) "взять значение переменной ИКС"
2) "прибавить к нему 1"
3) "положить новое значение в переменную ИКС"
В результате, в ячейке памяти с именем х, будет размещаться число 3, а предыдущее значение переменной равное 2 будет утеряно.
В С существует укороченный синтаксис. Например сумму двух чисел можно запи-сать: x=x+y; , но для того чтобы ваша программа была меньше и легче воспринималось, следует использовать запись x+=y; . Эти две записи производят одно и тоже действие. Аналогичный синтаксис для других простых математических операций:
x=x+y;  x+=y;
x=x-y;  x-=y;
x=x*y;  x*=y;
x=x/y;  x/=y;

3. Алгебраические выражения

Выражения строятся из констант, переменных, функций, знаков операций и круглых скобок. Константы, переменные и функции должны быть либо описаны в программе, либо иметь стандартные имена.
В языке имеются следующие математические функции, используемые для выполне-ния математических операций и возвращающие значения вещественного типа double:
Таблица 4
Математические операции
Функция Назначение
abs(x) Возвращает модуль целого числа
acos(x) Возвращает арккосинус числа х
asin(x) Возвращает арксинус числа х
atan(x) Возвращает арктангенс числа х
atan2(x,y) Возвращает арктангенс частного х/y
cos(x) Возвращает косинус числа х
cosh(x) Возвращает косенкас числа х
exp(x) Вычисляет экспоненту, т.е. «e» в степени х
fabs(x) Возвращает модуль дробного числа
hypot(x,y) Вычисляет гипотенузу прямоугольного треугольника с катетами x и y
ldexp(x,exp) Вычисляет Х*2exp, где exp –целое число
log(x) Вычисляет натуральный логарифм х
log10(x) Вычисляет десятичный логарифм х
modf(x,&y) Возвращает дробную часть числа х , а целую часть сохраняет в переменой y
sin(x) Возвращает синус числа х
sinh(x) Возвращает секанс числа х
sqrt(x) Вычисляет квадратный корень из неотрицательного числа
tan(x) Возвращает тангенс числа х
tanh(x) Возвращает частное sinh(x)/cosh(x).

Для вычисления значений некоторых других функций следует пользоваться тождества-ми:
arcctg(x) = / 2 – arctg(x);


Порядок выполнения операций определяется их приоритетом: операции умножения и деления ( *, / ) выполняются перед операциями сложения и вычитания ( +, - ). Операции одинакового приоритета выполняются в порядке их написания слева направо. Выражение, заключенное в скобки, вычисляется в первую очередь. Таким образом, скобки позволяют изменять порядок выполнения операций. К примеру, (2 + 3) * 3=15, но 2 + 3*3=11.
Знак минус может употребляется для изображения величины, противоположенной данной: -х, -(f+d*s) и т.п.
Не рекомендуется в одном арифметическом выражении использовать данные раз-личных типов. Это приводит к дополнительным затратам машинного времени на преобразование типов и возможны потери в точности.

4. Описание пользовательских подпрограмм-функций
Несмотря на то, что в языке С имеется много стандартных функций, часто возника-ет необходимость создавать свои собственные. Функцией называется фрагмент програм-мы, в который передаются ПАРАМЕТРЫ, и который ВОЗВРАЩАЕТ значение. Прелесть функции в том, что ее можно выполнить много раз из разных точек программы. Функции дают удобный способ заключения некоторой части вычислений в черный ящик, который в дальнейшем можно использовать, не интересуясь его внутренним содержанием. Использование функций является фактически единственным способом справиться с потенциальной сложностью больших программ. Если функции организованы должным образом, то можно игнорировать то, как делается работа; достаточно знание того, что делается. Язык С разработан таким образом, чтобы сделать использование функций легким, удобным и эффективным. Вам будут часто встречаться функции длиной всего в несколько строчек, вызываемые только один раз, и они используются только потому, что это проясняет некоторую часть программы. До сих пор мы использовали только предоставленные нам функции типа sqrt, sin; теперь пора написать несколько наших собственных.
Функция C по структуре подобна программе main, которую вы использовали во всех предыдущих программах. Другими словами, имя функции предваряется ее типом, а за ним следует список параметров, описание которых появляется в скобках. Вы группи-руете операторы функций внутри левой и правой фигурных скобок, как показано ниже:
тип_возврата имя_функции (список_параметров)
{
объявления_переменных;
операторы;
}

Пример:
void MyFunction (void)
{
/*
………………..
*/
}
Как вы, возможно, помните, слово void, предшествующее имени функции, указы-вает функции не возвращать значение. Подобно этому, слово void, содержащееся внутри круглых скобок, указывает (компилятору C и программистам, читающим ваш код), что функция не использует параметры (информацию, которую программа передает функ-ции).
Вы может, как передаватьзначения в вашу функцию, так и возвращать значения из нее. Для этого надо указать входные переменные и тип результат :
int MyFunction (int a,int b,double f)
Функции используют оператор return для возврата значения вызвавшей функции. Когда ваша программа встречает оператор return, она возвращает заданное значение и за-вершает выполнение функции, возвращая управление вызвавшей программе. В программе вы можете использовать возвращаемое значение, как показано ниже:

Result =MyFunction(a,b,f);

Если операторы появляются в функции после оператора return они не будут выполняться. Как уже обсуждалось выше, если ваша программа встречает оператор return в функции, то возвращается соответствующее значение, функция заканчивается и выполнение программы продолжается с первого оператора, следующего за вызовом функции.
Имена, использованные для формальных параметров функций, являются чисто ло-кальными и недоступны никаким другим функциям: другие процедуры могут использо-вать те же самые имена без возникновения конфликта. Формальные параметры – это на-именование переменных, с помощью которых резервируются ячейки памяти, и передается информация.
При вызове функции в основной программе вместо формальных параметров помеща-ются их конкретные значения – фактические параметры. Между формальными и фактиче-скими параметрами должно быть полное соответствие по количеству, порядку следования и типу. Однако обозначения соответствующих параметров не обязательно должно совпадать. Напомним, что имя функции может быть использовано в алгебраических выражениях.
II. Экспериментальный раздел работы
Пример 1. Работа с унарными операциями ++ и --.
#include <stdio.h>
void main(void)
{
int x=5, y=60;
x++;
++y;
printf(“x=%d y%d
”,x,y);
printf(“x=%d y%d
”,x++,++y);
int d=x--;
printf(“d=%d d %d
”,d);
int c=--x;
printf(“c=%d c%d
”,c);
}
Объясните полученные значения переменных c и d. Выясните различие в использовании префиксной и постфиксной форм операций инкремента и декремента.
Пример 2. Многократное использование оператора присваивания.
#include <conio.h>
void main(void)
{
int x, y,z;
cout<<”Введите три целых числа”;
cin>>x>>y>>z;
z=x=y=x*y*z;
cout<<z<<y<<x;
}
Объясните результат работы программы.
Пример 3. Найдите значение выражения, используя лишь арифметические операции y= 3x6 – 6x2 – 7.
#include <iostream.h>
#include <conio.h>
void main(void)
{
float y,x;
cout<<”Введите значение”;
cin>>x;
x*=x;
y=-6*x;
float d=x*=x*=x;
y+=3*d-7;
cout<<"Значение ="<<y<<endl;
getch();
}

Пример 4. Найдите сумму 3 значений введённых с клавиатуры.
#include <conio.h>
void main(void)
{
int x,z;
char y;
cout<<”Введите три значения”;
cin>>x>>y>>z;
cout<<"Результат ="<<x+y+z<<endl;
}
Для эксперимента введите следующие значения (1, “a”, 3), (1, “2”, 3). Объясните получен-ные результаты.
Пример 5. Найти максимальное из двух значений.
#include <conio.h>
void main(void)
{
int x,y,max;
cout<<”Введите два значения”;
cin>>x>>y;
max=x>y?x:y;
cout<<"Результат ="<<max <<endl;
}

III. Раздел заданий для самостоятельной работы
Все входные и выходные данные в заданиях этой группы являются вещественными вели-чинами (типы данных :float/double).
A.
2. Дана сторона квадрата a. Найти его периметр P = 4•a.
3. Дана сторона квадрата a. Найти его площадь S = a2.
4. Даны стороны прямоугольника a и b. Найти его площадь S = a•b и периметр P = 2•(a + b).
5. Дан диаметр окружности d. Найти ее длину L = •d. В качестве значения  использо-вать 3.14.
6. Дана длина ребра куба a. Найти объем куба V = a3 и площадь его поверхности S = 6•a2.
7. Даны длины ребер a, b, c прямоугольного параллелепипеда. Найти его объем V = a•b•c и площадь поверхности S = 2•(a•b + b•c + a•c).
8. Найти длину окружности L и площадь круга S заданного радиуса R: L = 2••R, S = •R2. В качестве значения  использовать 3.14.
9. Даны два числа a и b. Найти их среднее арифметическое: (a + b)/2.
10. Даны два неотрицательных числа a и b. Найти их среднее геометрическое, то есть квадратный корень из их произведения: (a•b)1/2.
11. Даны два ненулевых числа. Найти сумму, разность, произведение и частное их квадратов.
12. Даны два ненулевых числа. Найти сумму, разность, произведение и частное их модулей.
B.
1. Даны катеты прямоугольного треугольника a и b. Найти его гипотенузу c и пери-метр P: c = (a2 + b2)1/2, P = a + b + c.
2. Даны два круга с общим центром и радиусами R1 и R2 (R1 > R2). Найти площади этих кругов S1 и S2, а также площадь S3 кольца, внешний радиус которого равен R1, а внутренний радиус равен R2: S1 = •(R1)2, S2 = •(R2)2, S3 = S1 – S2. В качестве значения  использовать 3.14.
3. Дана длина L окружности. Найти ее радиус R и площадь S круга, ограниченного этой окружностью, учитывая, что L = 2••R, S = •R2. В качестве значения  использо-вать 3.14.
4. Дана площадь S круга. Найти его диаметр D и длину L окружности, ограничивающей этот круг, учитывая, что L = 2••R, S = •R2. В качестве значения  использовать 3.14.
5. Найти расстояние между двумя точками с заданными координатами x1 и x2 на числовой оси: |x2 – x1|.
6. Даны три точки A, B, C на числовой оси. Найти длины отрезков AC и BC и их сумму.
7. Даны три точки A, B, C на числовой оси. Точка C расположена между точками A и B. Найти произведение длин отрезков AC и BC.
8. Даны координаты двух противоположных вершин прямоугольника: (x1, y1), (x2, y2). Стороны прямоугольника параллельны осям координат. Найти периметр и площадь данного прямоугольника.
9. Найти расстояние между двумя точками с заданными координатами (x1, y1) и (x2, y2) на плоскости. Расстояние вычисляется по формуле ((x2 – x1)2 + (y2 – y1)2)1/2.
10. Даны координаты трех вершин треугольника: (x1, y1), (x2, y2), (x3, y3). Найти его пери-метр и площадь, используя формулу для расстояния между двумя точками на плоско-сти (см. задание Begin20). Для нахождения площади треугольника со сторонами a, b, c использовать формулу Герона: S = (p•(p – a)•(p – b)•(p – c))1/2, где p = (a + b + c)/2 — полупериметр.
11. Поменять местами содержимое переменных A и B и вывести новые значения A и B.
12. Даны переменные A, B, C. Изменить их значения, переместив содержимое A в B, B — в C, C — в A, и вывести новые значения переменных A, B, C.
13. Даны переменные A, B, C. Изменить их значения, переместив содержимое A в C, C — в B, B — в A, и вывести новые значения переменных A, B, C.
14. Найти значение функции y = 3x6 – 6x2 – 7 при данном значении x.
15. Найти значение функции y = 4(x–3)6 – 7(x–3)3 + 2 при данном значении x.
16. Дано число A. Вычислить A8, используя вспомогательную переменную и три операции умножения. Для этого последовательно находить A2, A4, A8. Вывести все найденные степени числа A.
17. Дано число A. Вычислить A15, используя две вспомогательные переменные и пять опе-раций умножения. Для этого последовательно находить A2, A3, A5, A10, A15. Вывести все найденные степени числа A.
18. Дано значение угла  в градусах (0 <  < 360). Определить значение этого же угла в радианах, учитывая, что 180° =  радианов. В качестве значения  использовать 3.14.
19. Дано значение угла  в радианах (0 <  < 2•). Определить значение этого же угла в градусах, учитывая, что 180° =  радианов. В качестве значения  использовать 3.14.
C.
1. Дано значение температуры T в градусах Фаренгейта. Определить значение этой же температуры в градусах Цельсия. Температура по Цельсию TC и температура по Фа-ренгейту TF связаны следующим соотношением: TC = (TF – 32)•5/9.
2. Дано значение температуры T в градусах Цельсия. Определить значение этой же тем-пературы в градусах Фаренгейта. Температура по Цельсию TC и температура по Фа-ренгейту TF связаны следующим соотношением: TC = (TF – 32)•5/9.
3. Известно, что X кг конфет стоит A рублей. Определить, сколько стоит 1 кг и Y кг этих же конфет.
4. Известно, что X кг шоколадных конфет стоит A рублей, а Y кг ирисок стоит B рублей. Определить, сколько стоит 1 кг шоколадных конфет, 1 кг ирисок, а также во сколько раз шоколадные конфеты дороже ирисок.
5. Скорость лодки в стоячей воде V км/ч, скорость течения реки U км/ч (U < V). Время движения лодки по озеру T1 ч, а по реке (против течения) — T2 ч. Определить путь S, пройденный лодкой (путь = время • скорость). Учесть, что при движении против тече-ния скорость лодки уменьшается на величину скорости течения.
6. Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили удаляются друг от друга. Данное расстояние равно сумме начального расстояния и общего пути, проделанного автомобилями; общий путь = время • суммарная скорость.
7. Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили первона-чально движутся навстречу друг другу. Данное расстояние равно модулю разности на-чального расстояния и общего пути, проделанного автомобилями; общий путь = время • суммарная скорость.
8. Решить линейное уравнение A•x + B = 0, заданное своими коэффициентами A и B (ко-эффициент A не равен 0).
9. Найти корни квадратного уравнения A•x2 + B•x + C = 0, заданного своими коэффици-ентами A, B, C (коэффициент A не равен 0), если известно, что дискриминант уравне-ния положителен. Вывести вначале меньший, а затем больший из найденных корней. Корни квадратного уравнения находятся по формуле x1, 2 = (–B ± (D)1/2)/(2•A), где D — дискриминант, равный B2 – 4•A•C.
10. Найти решение системы линейных уравнений вида
A1•x + B1•y = C1,
A2•x + B2•y = C2,
заданной своими коэффициентами A1, B1, C1, A2, B2, C2, если известно, что данная система имеет единственное решение. Воспользоваться формулами x = (C1•B2 – C2•B1)/D, y=(A1•C2 – A2•C1)/D, где D = A1•B2 – A2•B1.


Работа 4
Числовые типы данных
Цель работы:
- освоить основные приемы работы с целыми типами данных;
- изучить стандартные вещественные типы данных в языке C;
- изучить методы составления алгебраических выражений;
- научиться создавать, вводить и запускать простейшие линейные программы расчета по формулам;
- научиться создавать собственные пользовательские подпрограммы-функции;
- закрепить навыки работы в среде C++.

I.Теоретический раздел работы
1.1. Целые типы данных
В СИ имеется несколько целых типов данных, отличающихся размером памяти, от-водимой для хранения значения данного, и способом записи знака значения. Для объявле-ния целых переменных используются спецификаторы_типа представленные в табл.1
Таблица 1
Тип Размер в байтах Диапазон значений
char 1 от -128 до 127
int 2 или 4 как long или short
short 2 от -32768 до 32767
long 4 от -2 147 483 648 до 2 147 483 647
unsigned сhar 1 oт 0 до 255
unsigned int 2 или 4 как unsigned long или unsigned short
unsigned short 2 от 0 до 65535
unsigned long 4 от 0 до 4 294 967 295

Заметим, что ключевые слова signed и unsigned необязательны. Они указывают как интерпретируется нулевой бит объявляемой переменной, т.е., если указано ключевое сло-во unsigned, то нулевой бит интерпретируется как часть числа, в противном случае нуле-вой бит интерпретируется как знаковый. В случае отсутствия ключевого слова unsigned целая переменная считается знаковой. В том случае, если спецификатор_типа состоит из ключевого типа signed или unsigned и далее следует идентификатор переменной, то она будет рассматриваться как переменная типа int.
Cпецификатор_типа char требуется для представления символьных переменных, ко-торые в СИ могут использоваться как арифметические данные. Значением объекта типа char является код (размером 1 байт) соответствующий представляемому символу. Для представления символов русского алфавита необходимо использовать тип unsigned char, так как коды русских букв превышают величину 127.
Например:
unsigned int n;
unsigned int b;
signed char lat;
unsigned char rus;
int c; (подразумевается signed int c )
unsigned d; (подразумевается unsigned int d )
signed f; (подразумевается signed int f )

Следует сделать следующее замечание, в языке СИ не определено представление в памяти и диапазон значений для переменных со спецификаторами_типа int и unsigned int. Размер памяти для переменной типа int определяется длиной машинного слова, которое имеет различный размер на разных машинах. Так на 16-ти разрядных машинах размер слова равен 2-м байтам, на 32-х разрядных машинах соответственно 4-м байтам, т.е. тип int эквивалентен типам short int, или long int в зависимости от архитектуры используемой ПЭВМ. Таким образом, одна и та же программа может правильно работать на одном ком-пьютере и неправильно на другом.
Целая константа - это число записанное в программе в десятичной, восьмеричной или шестнадцатеричной форме. Десятичная целая константа может состоять из десятич-ных цифр, причем первая цифра не должна быть нулем. Восьмеричная константа состоит из обязательного нуля и одной или нескольких восьмеричных цифр (среди цифр должны отсутствовать восьмерка и девятка, так как эти цифры не входят в восьмеричную систему счисления). Шестнадцатеричная константа начинается с обязательной последовательности 0х или 0Х и содержит одну или несколько шестнадцатеричных цифр (цифры представляющие собой набор цифр шестнадцатеричной системы счисления: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
Примеры целых констант:

Десятичная Восьмеричная Шестнадцатеричная
16 020 0x10
127 0117 0x2B
240 0360 0xF0
Если требуется сформировать отрицательную целую константу, то используют знак "-" перед записью константы (который будет называться унарным минусом). Например: -0x2A, -088, -16 .
Для того чтобы любую целую константу определить типом long, достаточно в конце константы поставить букву "l" или "L", для того, чтобы сделать константу беззнаковой, можно использовать букву u или U . Буквы L и U можно использовать одновременно. Пример:
5l, 6l, 128L, 0105L, OX2A11L, 0x004000c2ul.
В заголовочном файле values.h есть встроенные константы MAXINT и MAXLONG позволяют определить границы диапазонов целых типов int и long.

1.1.1. Операции над целыми типами данных
Над элементами целого типа определены операции: сложения (+), вычитания (-), умножения(*), деление(/) и вычисления остатка от целочисленного деления (%). В цело-численной арифметике используется другой символ для операции деления, поскольку, работая с операндами целого типа, вы получайте результаты, также принадлежащие це-лому типу. Например
19 /3 = 6; 3 / 4 = 0; 13/ 5 = 2.
Выделение остатка от деления двух целых чисел осуществляется операндом mod , например

19 % 3 = 1; 3 % 4 =3; 13 % 5 = 3.
В общем случае можно записать:
a % b = a – b*(a / b).
Над данными целого типа определены также операции сдвига влево (<<) и сдвига вправо (>>). Применение этих операций к беззнаковым целым типам экви-валентно операциям умножения и деления на степень 2. Например,
5 << 3 эквивалентно операции ;
40 >> 3 эквивалентно операции .
В компьютере все числа представлены в двоичной системе счисления. Операции сдвига смещают все биты вправо (>>) или влево (<<). При этом лишние биты отбрасыва-ются, а освободившиеся места заполняются нулями. Например,
00000111 << 3 => 00111000
00111000 >> 3 => 00000111
Применяя операции сдвига к целым типам со знаком, следует иметь в виду, что старший бит отводится под знак числа. Правый сдвиг присваивает этому биту нулевое значение, т.е. знак плюс, а левый сдвиг может приводить к произвольному результату.

1.1.2. Представление целых чисел в компьютере
В машине числа хранятся в двоичной системе счисления. Под целый тип shortint отводится 8 бит памяти. Биты в двоичном слове нумеруются на арабский манер справа налево. Крайний левый бит отводится под знак числа: 0 кодирует положительные числа, 1 – отрицательные. Например,
0 => 00000000; 1 => 00000001; 2 => 00000010; …7 => 00000111; …127 => 01111111;
Такое представление числа А называется прямым кодом и обозначается . По прямому коду заменой всех 0 на 1 и всех 1 на 0 строится обратный код R(A). Отрицательные целые числа представляются в коде, называемом дополнительным и обозначаемом как D(A). Дополнительный код равен D(A)=R( -1). Например,
-1 => 11111111; -2 => 11111110; -3 => 11111101; -4 =>11111100; -128 => 10000000 .

1.1.3. Некоторые стандартные подпрограммы для работы с целыми числами
Для работы с порядковым типом данных полезны следующие функции:
floor(double x)-находит самое большое целое число, не большее, чем x;
ceil(double x) –находит минимальное целое, не меньшее чем x;
Эти функции находится в заголовочном файле math.h

1.2. Представление вещественных чисел в ЭВМ
В математике каждому числу ставится в соответствие точка на числовой оси. При ра-боте на компьютере из-за того, что числа хранятся в ячейках памяти, эта ось ограничена. Границы зависят от формы представления числа и количества разрядов в ячейках памяти машины.
Привычная нам форма записи чисел, например 3.1415 , - это запись десятичных чисел с фиксированной точкой. Однако удобнее при составлении программ пользоваться записью в форме с плавающей точкой. Десятичное число D в этой форме записи имеет вид где m –мантисса числа, n – его порядок. Мантиссу числа записывают в нормализованной форме так, чтобы , где – разрядность числа. Например,

В языке C++ при записи чисел с фиксированной точкой для обозначения «умножить на десять в степени» вводится буква Е, например

Цифры, предшествующие букве Е, образуют мантиссу числа, а цифры, следующие за ней – порядок.
Компьютер из-за ограниченности его разрядной сетки оперирует лишь с конечным подмножеством действительных чисел. Оно определяется разрядностью , а также гра-ницами порядка числа Границы порядка определяют ограниченность действительных чисел по величине, а разрядность - дискретность их распределения на отрезке числовой оси.
В С++ имеется два стандартных вещественных типов, характеристики которых при-ведены в таблице:
Таблица 4. Вещественные типы
Float Значения в диапазоне от -3.4 x 10-38 до 3.4 x 1038
double Значения в диапазоне от 1.7х 10-308 до 1.7х 10308

II.Экспериментальный раздел работы

Пример 1. Рассмотрим одну из характерных ситуаций, которая возникает при работе с целыми типами данных.

#include <iostream.h>
#include <conio.h>
void main (void)
{
short n;
cout<<"Введите целое число n=?";
cin>>n; //Ввод данных
cout<<"n="<<n; //Вывод результата
getch();
}
Для выбранного типа целых чисел shortint введите ряд чисел, превышающих границу допустимых значений, например, 32769, 32770, 32771, 32772. Выходная информация бу-дет не соответствовать входной. Чтобы лучше понять данную ситуацию, необходимо ра-зобраться, как представлены целые числа в компьютере.
Для целых чисел других типов проведите аналогичные численные опыты. Обратите внимание на то, что компилятор в рассмотренных случаях не выдает диагностики.

Пример 2. Составим программу, позволяющую выделить цифры трехзначного числа.
Запишем натуральное число n в виде n = akak-1...a0, где ak- цифры, составляющие его в десятичной системе счисления, которые необходимо выделить. Итак,

n = akak-1...a0 = a0100 + a1101 + ... + ak10k
Значение a0 находится как остаток от деления числа n на 10. Разделив n на 10, и най-дя снова остаток, получим цифру а1, и так далее. Приведем текст программы

#include <iostream.h>
#include <conio.h>
void main (void)
{
int n,m,res;
short a0,a1,a2;
//Ввод данных
cout<<"Введите значение натурального трехзначного числа n=?"<<endl;
cin>>n;
//Расчет
m=n;
a0=m % 10;
cout<<a0<<endl;
m=m/10;
a1=m % 10;
cout<<a1<<endl;
a2=m /10;
cout<<a2<<endl;
res=a0+10*(a1+10*a2);
//Вывод результата
cout<<"n="<<n<<" test="<<res<<endl;
getch();
}
Отладить программу, до тонкостей разобравшись с её алгоритмом. Составить про-грамму, позволяющую выделить цифры четырехзначного числа.

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

#include <conio.h>
#include <math.h>
double S0,S,P;
/*Функция, которая вычисляет, сколько лет понадобиться ждать,
чтобы этот начальный вклад увеличился до желаемой суммы */
double Lg(double s,double s0,double p)
{
return log10(s/s0)/log10(1+0.01*p);
}
void main(void)
{
//Ввод данных
cout<<"Введите значение единовременного денежного вклада S0= ?"<<endl;
cin>>S0;
cout<<"Введите значение ожидаемой суммы S=? "<<endl;
cin>>S;
cout<<"Введите значение годового процента начислений P=? "<<endl;
cin>>P;
//Вывод данных
cout<<" Вам необходимо ждать "<<Lg(S0,S,P)<<" лет";
getch();
}

Разберитесь с текстом программы. Проведите отладку и тестирование. Как полу-чить вывод в виде целого числа?

Пример 4. Рассмотрим пример, связанный с тем, что компьютеры не могут обеспечить неограниченную точность при хранении чисел.

#include <iostream.h>
#include <conio.h>

void main(void)
{
float y=0.9999999;
double x=0.9999999;
cout<<"Значение типа float 0.9999999 равно "<<x<<endl;
cout<<"Значение типа double 0.4999999 равно "<<y<<endl;
getch();
}

Пример 5. Составить программу, вычисляющую значение следующего выражения:
,
где a=0.721; b=0.324; x=0.976.
Если в выражении некоторая конструкция повторяется, то удобно ввести новую пе-ременную:

и сделать следующие преобразования

где . Эти преобразования позволяют упростить выражения и избавиться от опе-рации возведения в степень. Запишем программу:
#include <iostream.h>
#include <conio.h>
#include <math.h>
//Программа вычисляет значение выражения
void main(void)
{
//Объявление переменных и ввод исходной информации
double x=0.976,a=0.721,b=0.324,y,u,z;
//Расчет
z=a/(2*x+b);
u=z*z;
y=z*(1+u*(1/3.0+u*(1/5.0+u/7.0)));
//Вывод результатов}
cout<<"y="<<y;
getch();
}

Проведите отладку и тестирование программы.

III. Раздел заданий для самостоятельной работы.
A.
1. Составить программу, в которой
a. дано расстояние в сантиметрах. Найти число полных метров в нем;
b. дана масса в килограммах. Найти число полных центнеров в ней;
c. дана масса в килограммах. Найти число полных тонн в ней;
d. дано расстояние в метрах. Найти число полных километров в нем;
e. дан прямоугольник с размерами 543 130 мм. Сколько квадратов со сторо-ной 130 мм можно отрезать от него?
2. Дано двузначное число. Получить число, образованное при перестановке цифр за-данного числа.
3. Дано трехзначное число. Найти число, полученное при прочтении его цифр справа налево.
4. Дано целое число, большее 99. Найти третью от конца его цифру (так, если данное число 2345, то искомая цифра 3).
5. Дано четырехзначное число. Найти:
a. сумму его цифр;
b. произведение его цифр.
6. Составить программу, вычисляющую следующие выражения, в которых величины x,y,z вводятся с клавиатуры в диалоговом режиме:
6.
6.
6.
6.
6.
6.6.A = x + xy + xyz; B = xy / z + z / xy;
6.7.A = (1+x)2 ;B = sin (x +2zy);
6.8. A = arctg(1 - x 2) ;B = (x + y - z) 4 ;
6.9. A = (x – y)4y – ln z ;B = lg(x4 -yz) ;
6.10. A = lg(x4/4) + sin(yz); B = arcsin(y3 - 3) + zln x ;

7. Составить программу, вычисляющую следующие выражения, вводя новые переменные:
7.

7.

7.
7.
7.
7 ;

7.

7.

7.

7.

8.Составить программу расчета значений функции
и при любых значениях и .
9. Составить программу расчета значений функции
и при любых значениях и .
10. Составить программу обмена значениями двух переменных величин.
11. Составить программу обмена значениями трёх переменных величин по сле-дующей схеме:
11.1. присвоить значение присвоить значение , присвоить значение ;
11.2. присвоить значение , присвоить значение , присвоить значение .
12. Дано вещественное число . Не пользуясь никакими арифметическими операциями, кроме умножения, получить:
12.1. за две операции; 12.5. за три операции; 12.9. за четыре операции;
12.2. за три операции; 12.6 за четыре операции; 12.10 за четыре операции;
12.3 за пять операций; 12.7. за пять операций; 12.11 за шесть операций;
12.4 за шесть операций; 12.8 за шесть операций;

13.Вычислите несколько (n=3,4,5,6) длин волн спектральной серии Бальмера:

где масса электрона m=9.1 10-31 кг, его заряд е=1.6 10-19 Кл, постоянная Планка h=1.05 10-34 Дж с, диэлектрическая постоянная =8.85 10-12 Кл2/(Нм2), скорость света с=3 108 м/с.

B.
1. Дано трехзначное число.
a. В нем зачеркнули первую слева цифру и приписали её в конце. Найти по-лученное число.
b. В нем зачеркнули последнюю справа цифру и приписали её в начале. Найти полученное число.
c. Найти число, полученное при перестановке первой и второй цифр заданного числа.
d. Найти число, полученное при перестановке второй и третьей цифр заданного числа.
e. Получить 6 чисел, образованных при перестановке цифр заданного числа.
2. Из трехзначного числа
a. Вычли его последнюю цифру. Когда результат разделили на 10, а к частно-му слева приписали последнюю цифру числа , то получилось число 237. Найти число
b. Вычли его последнюю цифру. Когда результат разделили на 10, а к част-ному слева приписали последнюю цифру числа , то получилось число . Найти число . По заданному найти число (значение вводится с клавиатуры, 10≤ ≤999, и при этом число десятков в не равно нулю).
3. В трехзначном числе
a. Зачеркнули первую цифру. Когда оставшееся число умножили на 10, а про-изведение сложили с первой цифрой числа , то получили число 564. Най-ти число .
b. Зачеркнули первую цифру. Когда полученное число умножили на 10, а произведение сложили с первой цифрой числа , то получили число . По заданному найти число (значение вводится с клавиатуры, 1≤ ≤999).
c. Зачеркнули его вторую цифру. Когда к образованному при этом двузнач-ному числу слева приписали вторую цифру числа , то получилось число 546. Найти число .
d. Зачеркнули его вторую цифру. Когда к образованному при этом двузнач-ному числу слева приписали вторую цифру числа , то получилось число . По заданному найти число (значение вводится с клавиатуры, 10≤ ≤999, и при этом число десятков в не равно нулю).
e. Зачеркнули его вторую цифру. Когда к образованному при этом двузнач-ному числу справа приписали вторую цифру числа , то получилось число 456. Найти число .
f. Зачеркнули его вторую цифру. Когда к образованному при этом двузнач-ному числу справа приписали вторую цифру числа , то получилось число . По заданному найти число (значение вводится с клавиатуры, 100≤ ≤999).
g. Зачеркнули его последнюю цифру. Когда в оставшемся двузначном числе переставили цифры, а затем приписали к ним слева последнюю цифру числа , то получилось число 654. Найти число .
h. Зачеркнули его последнюю цифру. Когда в оставшемся двузначном числе переставили цифры, а затем приписали к ним слева последнюю цифру числа , то получилось число . По заданному найти число (значение вводится с клавиатуры, 1≤ ≤999, и при этом число единиц в не равно нулю).
4. Дано четырехзначное число.
a. Найти число, полученное при прочтении его цифр справа налево.
b. Получить число, образуемое при перестановке двух первых и последних цифр заданного числа. Например, из числа 4566 получить 6645, из числа 7304 – 473.
c. Получить число, образуемое при перестановке первой и второй, третьей и четвертой цифр заданного числа. Например, из числа 5434 получить 4543, из числа 7048 – 784.
d. Получить число, образуемое при перестановке второй и третьей цифр за-данного числа. Например, из числа 5084 получить 5804.
5. Даны целое число ( ) и последовательность цифр 10111213…9899, в ко-торой выписаны подряд все двузначные числа. Определить:
a. номер пары цифр, в которую входит -я цифра;
b. двузначное число, образованное парой цифр, в которую входит -я цифра;
c. -ю цифру, если известно, что: - – четное число; - - нечетное число.
6. Даны целое число ( ) и последовательность цифр 101102103…149150, в которой выписаны подряд все трехзначные числа от 101 до 150. определить -ю цифру, если известно, что: - - число кратное трём; - - одно из чисел 1,4,7…;- - одно их чисел 2,5,8…
7. Определить время приземления самолета в часах X, минутах Y и секундах Z. Извест-но, что самолет вылетел в X0 часов, Y0 минут и Z0 секунд и находился в воздухе Q секунд. Учесть переход времени на другие сутки.
8. С начала 1990 года по некоторый день прошло n месяцев и 2 дня (n≥1). Присвоить целочисленной величине 1,2, …, 11 или 12 в зависимости от того, каким месяцем (январем, февралём и т.п.) является месяц этого дня. Например, при значение равно 3.
9. Часовая стрелка образует угол Y с лучом, проходящим через центр и через точку, соответствующую 12 часам на циферблате, 0<Y≤ . Определить значение угла для минутной стрелки, а также количество часов и полных минут.
10. Даны целые числа (0< 23, 0 , 0 ), указывающие момент вре-мени: “b часов, m минут, s секунд”. Определить угол в градусах между положением часовой стрелки в начале суток и в указанный момент времени.
11. С начала суток часовая стрелка повернулась на Y градусов (0 ,Y- вещест-венное число). Определить число полных часов и число полных минут, прошедших с начала суток.
12. С начала суток прошло секунд. Определить:
a. сколько полных часов прошло с начала суток;
b. сколько полных минут прошло с начала очередного часа;
c. сколько полных секунд прошло с начала очередной минуты.

13. Составить программу, вычисляющую следующие выражения, в которых величины x,y,z вводятся с клавиатуры в диалоговом режиме:
2.

2.
2.
2.
2.

3.1.Составить программу вычисления площади треугольника по формулам:
S1=a*ha/2; S2=b*hb/2; S3=c*hc/2;

S5=a*b*c/(4R); S6=p*r;

где a,b,c – стороны треугольника;
hа , hb , hc – высоты, опущенные на стороны a,b,c, соответственно;
p = (a+b+c)/2 – полупериметр;
R,r – радиусы окружностей, описанной около треугольника и вписанной в него;
углы, противолежащие сторонам a,b,c соответственно.
3.2.Дан треугольник со сторонами a,b,c. Составить программу вычисления его медиан, биссектрис и углов.
3.3.Треугольник задан величинами своих углов и радиусом описанной окружности. Со-ставить программу вычисления сторон треугольника.
3.4.Треугольник задан координатами своих вершин (x1,y1) , (x2,y2) и (x3,y3). Составить программу вычисления периметра и площади треугольника.
3.5.Треугольник задан координатами своих вершин (x1,y1) , (x2,y2) и (x3,y3). Составить программу вычисления радиуса вписанной окружности.
3.6.Треугольник задан координатами своих вершин (x1,y1) , (x2,y2) и (x3,y3). Составить программу вычисления радиуса описанной окружности.
3.7.Треугольник задан координатами своих вершин (x1,y1) , (x2,y2) и (x3,y3). Составить программу вычисления углов треугольника.
3.8. Дана сторона квадрата. Найти его периметр.
3.9. Дана длина ребра куба. Найти объём куба и площадь его боковой поверхности.
3.10.Даны основания и высота равнобедренной трапеции. Найти её периметр. Даны осно-вания трапеции и угол при большом основании. Найти площадь трапеции.
4.1. Используя таблицу данных о планетах Солнечной системы (см. работу 2), составить программу расчета ускорения свободного падения на каждой из планет, периоды обра-щения планет, предполагая, что их обращение вокруг Солнца происходит по круговой орбите и силы их притяжения к Солнцу. Результаты получить в абсолютных и относительных к параметрам Земли единицах и вывести в виде таблицы. Гравитационная постоянная равна G=6.67 Е-12.
4.2.Напишите программу решения квадратного уравнения ax2 + bx + c =0, используя формулы:
и
Проведите расчеты в случае b2 >> 4ac. Например, а=1, b=2000, c=1. Сравнить результа-ты расчетов и объяснить полученный результат.
4.3.При измерении сопротивлений при помощи моста Уитстона вычисления проводятся по формуле:
Rx=R0 *z/(1-z),
где z =l1/L – относительная длина реохорда. Абсолютная и относительная ошибки

Составить программу и сделать расчеты погрешностей для z=0.1...0.9.

4.4. Написать программу показывающая что значение выражения (1/3)*3 – 1 в Паскале не равно нулю.
4.5. Выведите на экран величину основания натуральных логарифмов (число е), не ис-пользуя явно его цифры. Выведите число  не используя стандартную функцию Pi.
4.6. Вычислите выражение ( x + 1/2)*(y + 7/10) – 3/4 сделав минимальное количество опе-раций.
4.7. Присвоить целой переменной d первую цифру из дробной части положительного ве-щественного числа х ( так, если х = 32.597, то d = 5).
4.8. Определить f - угол (в градусах) между положением часовой стрелки в начале суток и ее положением в h часов, m минут и s секунд (0≤h≤11, 0≤m, s≤59)

С. (В программах условные операторы и операторы цикла не использовать)

1. Даны два целых числа a и b. Если делится на или делится на , то вывести 1, иначе - любое другое число.
2. Даны целые числа b, m (0< 12, 0 ), указывающие момент времени: “b ча-сов, m минут ”. определить наименьшее время ( число полных минут), которое долж-но пройти до того момента, когда часовая и минутная стрелки на циферблате
d. совпадут;
e. расположатся перпендикулярно друг другу.
3. Определите, какой день недели приходится на 1 января для любого года XX и XXI вв. 1 января 1900 г. – Понедельник.
4. Дано целое число . Присвоить целочисленной величине значение 1, 2,…, 6 или 7 в зависимости от того, на какой день недели (понедельник, вторник,…, субботу или воскресенье) приходится -й день года, в котором 1 января – понедель-ник.
5. Составьте программу определяющую день недели по дате.(см. с.3, с.4)
6. Составьте программу определяющую разницу в сутках между двумя датами.


Работа 5
Операторы отношений и логические операторы

Цель работы:
- изучить логические данные, правила составления логических выражений в язы-ке Cи;
- изучить правила работы с логическими операторами;
- закрепить навыки работы в среде C++.

I.Теоретический раздел работы
1.1. Некоторые сведения о логическом типе данных
Логические (булевы) константы, переменные и выражения могут принимать только два значения: true (истина) и false (ложь).
Логические переменные объявляются, как bool, например:
bool p,q;
Под них выделяется 1 байт памяти.
Логический тип является перечисляемым, причем
true > false ;
false=0; true=1;

В языке Cи введены три логические операции:
! - НЕТ (отрицание; математическое обозначение: ) ;
&& - И (логическое умножение, конъюнкция; математическое обозначение: ^, &);
|| - ИЛИ ( логическое сложение, дизъюнкция; );
Однако в Си существуют и побитовые операции, которые в некоторых случаях эквива-лентны логическим.
~ - НЕТ (отрицание) ;
& - И (логическое умножение, конъюнкция);
| - ИЛИ ( логическое сложение, дизъюнкция).
Подробно операции рассмотрены во второй работе.

1.2. Оператор условного перехода if...else
Разветвляющийся вычислительный процесс может быть осуществлен с помощью структуры выбора, содержащей логическое условие и ветви true и false. Если условие выполняется, то осуществляется переход к верви true, в противном случае – к ветви false. В языке C++ структура выбора реализуется с помощью оператора условного перехода.
Его синтаксис:
if (B) S1;
else S2;
где B - логическое выражение;
S1, S2 – любые операторы языка;
if ( если), else (иначе) – служебные слова.
Если значение B – true, то выполняется оператор S1, если – false, то выполняется опе-ратор S2. Затем в обоих случаях управление передается следующему оператору програм-мы. Допускается и краткая форма условного оператора:
if (B) S1;
В этом случае, если значение B – false, управление сразу передается оператору, сле-дующему за оператором if.
Условные операторы могут иметь вложенную конструкцию, когда после слова else используется также условный оператор. Если в какую- либо ветвь разветвления требуется вставить несколько операторов S1,S2,...Sn, то они объединяются в один составной оператор:
{ S1;S2; ... Sn;}
Для этого они заключаются в фигурные скобки. Элементами составного оператора могут быть любые операторы языка, в том числе условные и другие составные операторы. Заме-тим, что и сама программа строится на основе понятия составного оператора.

1.3. Условный оператор switch
Обычно при написании программы не рекомендуется использовать многократно вложенные друг в друга условные операторы, так как программа при этом становится громоздкой и трудно понимаемой. Для этих целей в языке C++ существует специальный оператор выбора. Его синтаксис:

switch (N)
{
case M1: S1;
break;
case M2: S2;
break;
……………………………..
default: S;
}
где N - переменная, называемая селектором или переключателем;
S1,...Si,S – операторы;
M1, M2,... - метки, которые отличаются по смыслу от меток,
описываемых в разделе label;
switch(переключатель),case(выбор), default (умолчание), end – служебные слова.
Отметим, что переключатель и метки должны быть одного и того же скалярного типа, за исключением вещественного.
Оператор switch передает управление тому оператору case, с одной из меток кото-рого совпало значение селектора N и будут выполняться все строки программыпосле выбранного case до тех пор, пока не закончится тело блока оператора switch или не повстречается оператор break, а затем управление передается на оператор, следующий за скобкой «}». Если значение селектора N не совпало ни с одной из меток, то исполняется строки стоящие после оператора default - оператор S.
Ветвь оператора default является необязательной. Тогда при отсутствии в списке выбора нужной константы оператор switch завершит свою работу.

II. Экспериментальный раздел работы

Пример 1. Напишем программу, в которой логическая переменная принимает значение true, если, случайным образом выбранная, точка с координатами (x,y) попадает внутрь кольца с центром в начале координат и радиусами 0.1 и 0.6, иначе - логическая перемен-ная принимает значение false.
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
void main (void)
{
float x,y;
bool p;
//Ввод данных
randomize();
x=rand()/10000.0; y=rand()/10000.0;
cout<<"x="<<x<<" y="<<y<<endl;
//Расчет
p=((x*x + y*y)> 0.1) && ((x*x + y*y) < 0.6);
//Вывод результата}
cout<<"p="<<p;
getch();
}
Поэкспериментируйте с программой. Замените логическое выражение на
p=!(((x*x + y*y)< 0.1) || ((x*x + y*y) > 0.6));
Основываясь на законах де Моргана, объясните полученные экспериментальные результаты.

Пример 2. Составим программу, результатом работы которой будет удаление из двоич-ного представления данного натурального числа i-го бита.

#include <iostream.h>
#include <conio.h>
void main (void)
{
int n,x,y,z,k;
//Ввод данных
cout<<"Введите значение натурального числа n=?"<<endl;
cin>>n;
cout<<"Введите номер вычеркиваемого бита k=?"<<endl;
cin>>k;
//Расчет
x=1 << k;
y=~x;
z=n & y; //Можно было написать z=n & ~(1 << k);
//Вывод результата
cout<<"x="<<x<<" y="<<y<<" z="<<z<<endl;
getch();
}
Необходимо разобраться с алгоритмом программы, провести тестовый расчет.

Пример 3. Дайте объяснение результатам следующей программы.

#include <iostream.h>
#include <conio.h>
void main (void)
{
cout<<(1365 & 2730)<<endl;
cout<<(1365 | 2730)<<endl;
cout<<(1365 ^ 2730)<<endl;
cout<<(1365 & 0xFF)<<endl;
cout<<(1365 & 0xFF0)<<endl;
cout<<(1365 & 0xFF00)<<endl;
getch();
}

Для объяснения полученных результатов переведите числа в двоичную систему счисления. Поэкспериментируйте с программой. Убедитесь, например, что -256 & 255 =0; -256 | 255 = -1; -256 ^ 255 = -1. Вспомните, что для представления отрицательных чи-сел в компьютере используется дополнительный код.
Замените побитовые операции над числами логическими и сравните полученные ре-зультаты. Дайте объяснение путем выполнения данных операций без использования ЭВМ.

Пример 4. Составим программу определения наибольшего из двух чисел.

#include <iostream.h>
#include <conio.h>

double Max(double a,double b)
{
if (a>b)
return a;
else
return b;
}
void main (void)
{
double x,y,max;
cout<<"Введите два числа x,y=?";
cin>>x>>y;
cout<<"max="<<Max(x,y)<<endl;
getch();
}

Разработайте алгоритм и составьте программу определения наибольшего числа из трех, четырех чисел. Используйте для ввода чисел генератор случайных чисел random-ize(); rand. Проведите вычислительный эксперимент с программой.
Пример 5. Проведите вычислительный эксперимент с программой, использующей оператор switch:
#include <iostream.h>
#include <conio.h>
void main (void)
{
short month;
cout<<"Введите номер месяца в году:"<<endl; cin>>month;
switch (month)
{
case 1: cout<<"зимняя сессия";break;
case 2: case 3:
case 4: case 5: cout<<"весенний семестр";break;
case 6: cout<<"летняя сессия";break;
case 7:case 8: cout<<"летние каникулы";break;
case 9:case 10:
case 11:case 12: cout<<"осенний семестр";break;
}
getch(); }
Ш. Раздел заданий для самостоятельной работы
A.
1. Вычислить значение логического выражения при всех возможных значениях логических величин А и В:
1.1 А или В; А и В; В или С.; А или В и не С; А и не В или С; не А или не В;
1.2 А или не В;А и В или С; А и (А или не В); (не А или В) и В; не А и не В или А;
1.3 А и (не В или С);В или не(А и не В); В или не А и не В; не (не А и не В) или А;
1.4 не А и не В; не (не А или не В) или А; не (А и С) или В; А и (не (В или С));
1.5 не (не А или не В) и В; А или не (А и В) или С; не А или А и (В или С);
1.6 (А или В и не С) и С; (не А или не В) и не С; (не А или не В) и (А или В);
1.7 А и В или А и С или не С; не (А или не В и С); А и не (В или не С);.
1.8 не (А или не В и С) или С; не (не А или В и С); не (А и не В или С) и В;
1.9 не (не А или В и С) или А; не (А и В) и (не А или не С); не (А и не В) или (А или не С);
2 Вычислить значения логических выражении:
2.1 при х= 1, у=-1;
2.2 ( 0) или ( 4) при
2.3 ( 0) и ( 4) при
2.4 и при ;
2.5 или при ;
2.6 (не ( и (у > х) при ;
2.7 (не ( или (у > х) при .
2.8 при
2.9 или ( 4) при ;
2.10 ( ) и ( > 4) при
2.11 и при
2.12 или при ;
2.13 (не ( и (у > х) при
2.14 (не ( и (у > х) при ;
3 Записать условие, которое является истинным, когда
3.1 каждое из чисел А и В больше 100;
3.2 только одно из чисел А и В четное;
3.3 хотя бы одно из чисел А и В положительно;
3.4 каждое из чисел А, В, С кратно трем;
3.5 только одно из чисел А, В и С меньше 50;
3.6 хотя бы одно на чисел А, В, С отрицательно.
3.7 каждое из чисел X и У нечетное;
3.8 только одно из чисел X и У меньше 20;
3.9 хотя бы одно из чисел X и У равно нулю;
3.10 каждое из чисел X, У, Z отрицательное;
3.11 только одно из чисел X, Y и Z кратно пяти;
3.12 хотя бы одно из чисел X, Y, Z больше 100.
3.13 целое А кратно двум или трем;
3.14 целое А не кратно трем и оканчивается нулем.
3.15 целое N кратно пяти или семи;
4 Дано целое число. Определить:
4.1 является ли оно четным;
4.2 оканчивается ли оно цифрой 7;
4.3 оканчивается ли оно четной цифрой. Составное условие не использовать.
5 Дано натуральное число. Верно ли, что оно заканчивается нечетной цифрой?
6 Дано двузначное число. Определить:
6.1 какая из его цифр больше: первая или вторая;
6.2 одинаковы ли его цифры;
6.3 равен ли квадрат этого числа учетверенной сумме кубов его цифр. Например, для числа 48 ответ положительный, для числа 52-отрицательный.
6.4 является ли сумма его цифр двузначным числом;
6.5 больше ли числа А сумма его цифр;
6.6 кратна ли трем сумма его цифр;
6.7 кратна ли сумма его цифр числу А;
6.8 входят ли в него цифры А или В;
7 Даны три вещественных числа a, b, c. Проверить:
а) выполняется ли неравенство а < b< c;
б) выполняется ли неравенство b > а > с;
в) имеется ли среди них хотя бы одна пара равных между собой чисел;
г) сколько среди них отрицательных.
8. Даны два числа. Если квадратный корень из второго числа меньше первого числа, то увеличить второе число в пять раз.
9. Даны три целых числа. Вывести на экран те из них, которые являются четными.
11. Даны три вещественных числа. Возвести в квад¬рат те из них, значения которых неотрицательны.
12. Даны два вещественных числа. Условно принимая, что стандартной функции определения абсо¬лютной величины числа нет, найти:
а) полу сумму абсолютных величин заданных чисел;
б) квадратный корень из произведения абсолютных величин заданных чисел.
13. Даны три вещественных числа. Вывести на экран:
а) те из них, которые принадлежат интервалу (1,6 - 3,8);
б) те из них, которые принадлежат интервалу (0,7-5,1).
14. Проверить, принадлежит ли число, введенное с клавиатуры, интервалу ( ).
15. Дано четырехзначное число. Определить:
а) равна ли сумма двух первых его цифр сумме двух его последних цифр;
б) кратна ли трем сумма его цифр;
в) кратно ли четырем произведение его цифр;
г) кратно ли произведение его цифр числу А;
д) входит ли в него цифра 4;
е) входит ли в него цифра В.
ж) входят ли в него цифры 2 или 7;
з) входят ли в него цифры 3, 6 или 9.
B.
1. Составьте программу проверки эквивалентности двух логических функций. Постройте соответствующие таблицы истинности(программно).
1.1. Проверьте что X → Y эквивалентна not (x) or y
1.2. Проверьте что X │ Y (Функция Шеффера) эквивалентна not (x) or not(y)
1.3. Проверьте что X ↓ Y (Функция Вебба, или стрелка Пирса) эквивалентна not (x) and not (y)
1.4. Дана некоторая логическая функция, например, ( x→y)→z. Постройте таблицу ис-тинности данной функции. Преобразуйте эту формулу в эквивалентную ей. Со-ставьте программу проверки эквивалентности этих двух логических формул.
1.5. Дана логическая функция ( x │ y) │ z. Постройте таблицу истинности данной функции. Преобразуйте эту формулу в эквивалентную ей. Составьте программу проверки эквивалентности этих двух логических формул.
1.6. Дана логическая функция ( x ↓ y) ↓ z. Постройте таблицу истинности данной функции. Преобразуйте эту формулу в эквивалентную ей. Составьте программу проверки эквива-лентности этих двух логических формул.
1.7. Дана логическая функция ( x → y) and z. Постройте таблицу истинности данной функ-ции. Преобразуйте эту формулу в эквивалентную ей. Составьте программу проверки эквивалентности этих двух логических формул.
1.8. Дана логическая функция not ( x or not y and z). Постройте таблицу истинности данной функции. Преобразуйте эту формулу в эквивалентную ей. Составьте программу проверки эквивалентности этих двух логических формул.
1.9. Дана логическая функция x and not ( y or not z). Постройте таблицу истинности данной функции. Преобразуйте эту формулу в эквивалентную ей. Составьте программу проверки эквивалентности этих двух логических формул.
1.10. Дана логическая функция not ( not x or y and z). Постройте таблицу истинности данной функции. Преобразуйте эту формулу в эквивалентную ей. Составьте программу проверки эквивалентности этих двух логических формул.
1.11. Дана логическая функция ( x ↓ y ) ↓ ( z ↓ v). Постройте таблицу истинности данной функции. Преобразуйте эту формулу в эквивалентную ей. Составьте программу проверки эквивалентности этих двух логических формул.
2. Вывести на экран True при выполнении условия
2.1. х принадлежит отрезку [2,5] или [-1,1];
2.2. x лежит вне отрезков [2,5] и [-1,1];
2.3. только одно из чисел x, y и z положительно;
2.4. из чисел x, y и z только два равны между собой;
2.5. уравнение ax2+bx+c=0 не имеет вещественных корней;
2.6. a = max (a, b, c, d) ;
2.7. целые n и k имеют одинаковую чётность;
2.8. поля (г1, в1) и (г2, в2) шахматной доски имеют одинаковый цвет.
2.9. ферзь, расположенный на поле (г1, в1) шахматной доски, "бьет" поле(г2, в2).
2.10. число n нечетное.(Напишите свой вариант функции odd, возвращающей значение "Истина", если её целочисленный аргумент имеет нечетное значение).
3. Если целое число М делится нацело на целое число N, то вывести на экран частное от деле-ния, а в противном случае вывести сообщение "М на N нацело не делится".
4. Даны цифры двух десятичных целых чисел: трехзначного и двузначного , где и - число единиц, и - число десятков, - число сотен. Получить:
4.1. цифры, составляющие сумму этих чисел;
4.2. цифры, составляющие разность этих чисел.
5. Дано натуральное число п (п < 9999). Выяс¬нить, является ли оно палиндромом ("пере-вертышем"), с учетом четырех цифр, как, например, числа 7777, 8338, 0330 и т.п. (па-линдромом называется число, десятичная запись которого читается одинаково слева направо и справа налево).
6. Даны вещественные числа a, b, c ( ).Вы¬яснить, имеет ли уравнение вещественные корни.
7. Даны вещественные положительные числа a, b, c
a. выяснить, существует ли треугольник со сторона¬ми a, b, c.
b. можно ли прямоугольник со сторо¬нами a, b уместить внутри прямоугольника со сторо¬нами c, d так, чтобы каждая из сторон одного прямо¬угольника была параллельна или перпендикулярна каж¬дой стороне второго прямоугольника.
8. В подъезде жилого дома имеется п квартир, пронумерованных подряд, начиная с но-мера a. Опре¬делить, является ли сумма номеров всех квартир чет¬ным числом. Формулу суммы членов арифметической прогрессии не использовать.
9. Случайным образом вводятся координаты точек. Определить, сколько из них попадет в круг радиусом R с центром в точке (a,b).
10. Даны два прямоугольники, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего угла каждого из них и длины их сторон. Один из прямоугольников назовем первым, другой — вторым.
a. Определить, принадлежат ли все точки первого прямоугольника второму.
b. Определить, принадлежат ли все точки одного из прямоугольников другому.
c. Определить, пересекаются ли эти прямоугольники.
11. Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего угла каждого из них и длины их сторон. Один из прямоугольников назовем первым, другой — вторым. Найти коорди-наты левого нижнего и правого верхнего углов минимального прямоугольника, содержащего указанные прямоугольники.
12. Определить, попадает ли точка с вводимыми координатами (x,y) внутрь прямоуголь-ника, заданного уравнениями y=a, y=b, x=c, x=d (a>b, c>d).
13. Определить находится точка с координатами (x,y) выше или ниже прямой, заданной уравнением y=ax+b.
14. Определить находится точка с координатами (x,y) в кольце с радиусами R = 5, r = 3 с центром в точке (2,-1).
15. Является ли случайным образом введенный год високосным. У високосного года но-мер года делится на 4 или на 400, но не делится на 100.
16. Известны год и номер месяца рождения человека, а также год и номер месяца сегодняшнего дня (январь – 1 и т.д.). Определить возраст человека (чис¬ло полных лет). В случае совпадения указанных месяцев считать, что прошел полный год.
17. Дано натуральное число п ( 1 п 1188), определяющее возраст человека (в месяцах). Выразить возраст в годах и месяцах, например, 21 год 10 меся¬цев, 52 года 1 месяц, 46 лет ровно и т.п.
18. Известны год и номер месяца рождения двух человек. Опреде¬лить, возраст каждого человека (число полных лет).
19. Известны год, номер месяца и день рождения человека, а также год, номер месяца и номер те¬кущего дня месяца (1 — январь и т.п.). Определить возраст человека (число полных лет).
20. Известны год и номер месяца рождении человека, а также год и номер месяца сего-дняшнего дня (1 январь и т.п.). Определить возраст челове¬ка (число полных лет и число полных месяцев). При определении числа полных месяцев дни месяца не учитывать, а использовать разность между номерами месяцев. Например, если месяц рождения февраль, а текущий (сегодняшний) месяц май, то число полных месяцев равно трем независимо от дней рождения и сегодняшнего.
21. Дано натуральное число п (п < 9999). Выяс¬нить, верно ли, что это число содержит ровно три оди¬наковые цифры, если оно записано четырьмя цифра¬ми, как, например, числа 3363, 4844, 0300 и т.п.
22. Дано натуральное число п (п < 9999). Выяс¬нить, различны ли все четыре цифры этого числа (если оно записано четырьмя цифрами). Например, в числе 3678 все цифры раз-личны, в числе 0023 — нет.
23. Даны вещественные положительные числа a, b, c, x, у. Выяснить, пройдет ли кирпич с ребрами a, b, c в прямоугольное отверстие со сторонами x и у. Просовывать кирпич в отверстие разрешается только так, чтобы каждое из его ребер было параллельно или перпендикулярно каждой из сторон отверстия.
24. Работа светофора для пешеходов запрограм¬мирована следующим образом: в начале ка-ждого часа в течение трех минут горит зеленый сигнал, затем в течение двух минут — красный, в течение трех ми¬нут - опять зеленый и т.д. Дано вещественное число t, озна-чающее время в минутах, прошедшее с нача¬ла очередного часа. Определить, сигнал какого цвета горит для пешеходов в этот момент.
25. Даны вещественные числа а, b, с ( ). Вы¬яснить, имеет ли уравнение веще¬ственные корни. Если такие корни имеются, то найти их. В про-тивном случае ответом должно служить сообщение, что вещественных корней нет.
26. Даны две тройки вещественных чисел. В каж¬дой тройке все числа различные. Найти среднее арифметическое средних чисел каждой тройки (средним назовем такое число в тройке, которое больше наименьшего из чисел данной тройки, но меньше наибольшего).
27. Даны целые числа х и у. Написать программу определения знака разности х – у. Саму разность при этом не вычислять. Разрешается сравнивать числа х и у с нулем, а между собой можно сравнивать только модули чисел х и у.
28. Считая, что стандартные функции sin и cos применимы только к аргументам из отрезка [0,/2], вычислить у = sin x для произвольного числа х.
29. Даны числа a1, b1, c1, a2, b2, c2. Напечатать координаты точки пересечения прямых a1*x + b1*y = c1 и a2*x + b2*y = c2, либо сообщить, что эти прямые совпадают, не пересекаются или вовсе не существуют.
30. Даны числа a, b и c (a¬ ≠ 0).Найти вещественные корни уравнения a x4 + b x2 + c=0. Если корней нет, то сообщить об этом.
31. Решить систему неравенств
a x > b,
c x > d.
a, b, c, d вводятся с клавиатуры.
32. Даны три вещественных числа, Используя только два неполных условных оператора, определить:
a. максимальное значение заданных чисел;
b. минимальное значение заданных чисел.
33. Даны отрезки А,B,C. Составить программу для определения возможности построения треугольника и вида этого треугольника.
34. Даны координаты трех точек. Определить тип треугольника (равнобедренный, равно-сторонний, прямоугольный, разносторонний), вычислить его площадь и периметр.
35. Определить попадает ли точка с координатами (x,y) внутрь треугольника, заданного координатами (x1,y1), (x2,y2), (x3,y3).
36. Вводятся три числа: g – год, m – месяц, n – число. Найти номер этого дня в году.
37. Известны год и номер месяца рождения двух человек. Опреде¬лить, возраст каждого человека (число полных лет). Определить, кто из них старше.
38. Известны год, номер месяца и день рождения человека, а также год, номер месяца и номер те¬кущего дня месяца (1 — январь и т.п.). Определить возраст человека (число дней).Учитывать неправильность в вводе дат. Так если первое число "больше" второго должно выводится соответствующее предупреждение.
39. Поезд прибывает на станцию в а часов b минут и отправляется в с часов d минут. Пас-сажир пришел на платформу в п часов m минут. Будет ли поезд стоять на платформе? Числа а, b, с, d, п, т — целые, 0 < а 23, 0 < b 59, 0 < c 23, 0 < d , 0 < n 23, 0 < т 59.
40. С начала 1990 года по некоторый день про¬шло п месяцев и 2 дня ( ). Определить название месяца (январь, февраль и т.п.) этого дня.
41. Дата некоторого дня определяется двумя на¬туральными числами: т (порядковый номер месяца) и п (число). По заданным п и т определить:
а) дату предыдущего дня (принять, что п и т не определяют 1 января);
б) дату следующего дня (принять, что п и т не определяют 31 декабря).
В обеих задачах принять также, что год не является високосным.

С.
При решении задач (№ 1-14) необходимо использовать оператор выбора switch
1. Написать программу, которая бы переводила слова «ДОБРЫЙ ДЕНЬ» по выбору на один из пяти языков.
2. Найти остаток от деления целой части значения функции z=ln(x3+y3) на семь и в за-висимости от его величины напечатать сообщение об одном из дней недели, пронуме-ровав их от 0 до 6.
3. Вычисления значения функции
y= ax+bx2+cx3, если 1<=x<2,
y= [a sin(x b)]c, если 2<=x<3,
, если 3<=x<4,
, если 4<=x<5,
если 5<=x<6.
4. Составить программу, которая в зависимости от порядкового номера дня недели (1, 2, ..., 7) выводит на экран его название (понедельник, вторник, .... воскресенье).
5. Составить программу, которая в зависимос¬ти от порядкового номера месяца (1,2, .... 12) выво¬дит на экран его название (январь, февраль,…, декабрь).
6. Составить программу, которая в зависимости от порядкового номера месяца (1,2, …, 12) выводит на экран количество дней в этом месяце. Рассмотреть 2 случая:
a) год не является високосным (см. задачу 4.48);
b) год високосный (информация об этом вводится с клавиатуры).
7. Мастям игральных карт условно присвоены следующие порядковые номера: масти "пики"—1,масти трефы - 2, масти "бубны" — 3, масти "червы" — 4. По заданному номеру масти т ( ) определить название соответствующей масти.
8. Игральным картам условно присвоены следу¬ющие порядковые номера в зависимости от их досто¬инства: "валету" — 11, "даме" — 12, "королю" — 13, "тузу" 14. Порядковые номера остальных карт со¬ответствуют их названиям ("шестерка", "девятка" и т.д.). По заданному номеру карты k ( ) определить достоинство соответствующей карты.
9. Дано целое число п (1 < п < 99), определяю¬щее возраст человека (в годах). Для этого человека напе¬чатать фразу “мне п лет ”, учитывая при этом, что при некоторых значе-ниях п слово “лет” надо заменить на слово “год” или “года”.
10. В чемпионатe по футболу команде за выигрыш дается 3 очка, за проигрыш — 0, за ничью - 1. Изве¬стно количество очков, полученных командой за игру. Определить словесный результат игры (выигрыш, про¬игрыш или ничья).
11. В старояпонском календаре был принят 60-летний цикл, состоящий из пяти 12-летних подциклов. Подциклы обозначались названиями цветов: зеле¬ный, красный, желтый, белый и черный. Внутри каждого подцикла годы носили названия животных: крыса, корова, тигр, заяц, дракон, змея, лошадь, овца, обезьяна, курица, собака и свинья. Например, 1984 год — год начала очередного цикла — назывался Годом Зеленой Крысы. Составить программу, которая по заданному номеру года нашей эры п печатает его название по старояпонскому календарю. Рассмотреть два случая:
а) значение п ≥ 1984;
б) значение п может быть любым натуральным числом.
12. Дано целое число k ( ). Определить, каким будет k-й день года: выходным (суббота и воскресенье) или рабочим, если 1 января — понедельник.
13. Дано число типа Word. Определить номер самого старшего бита отличного от ну-ля(Оператор Case должен содержать 16 меток).
14. Решите предыдущую задачу, с условием, что оператор Case должен содержать не более 8 меток.
15. Дана последовательность цифр, представляю¬щая собой записанные подряд ноль и 20 первых нату¬ральных чисел. Найти цифру с номером п в этой последовательности ( ).
16. Даны целое число k ( ) и последо¬вательность цифр 505152... 9899100101... 149150, в ко-торой выписаны подряд все натуральные числа от 50 до 150. Определить k -ю цифру.
17. Даны целое число k ( ) и после¬довательность цифр 123…91011…9899100101…109110, в которой выписаны подряд все натуральные числа от 1 до 110. Определить k -ю цифру.



Работа 6
Инструкции управления. Операторы Си, реализующие повторения

Цель работы:
- изучить инструкции управления языка Си: операторы циклов;
- изучить правила работы с операторами цикла while, do… while, for;
- приобрести навыки составления, отладки и тестирования программ, исполь-зующих циклы с постусловием;
- закрепить навыки работы в среде Cи.

I. Теоретический раздел работы

Введение
Одной из трех основных структур в программировании является цикл. Он использу-ется тогда, когда некоторую часть программы необходимо выполнять многократно для различных значений входящих в нее параметров.
Алгоритмы циклической структуры должны содержать следующие элементы:
1. подготовка цикла, т.е. задание начальных значений переменных перед первым его выполнением;
2. тело цикла, т.е. действия, повторяемые в цикле многократно;
3. изменение значений переменных цикла перед каждым новым его выполнением;
4. управление циклом, т.е. проверка условия продолжения или окончания цикла и переход к его началу.
В Cи имеется несколько возможностей организации цикла в зависимости от того, на-пример, известно или неизвестно число повторений. Отметим, что программно цикл мо-жет быть реализован с помощью операторов goto, if и присваивания. Однако, хороший стиль программирования – это программирование без употребления оператора goto. Ис-пользование специальных конструкций циклов, рассматриваемых в этой работе, позволя-ют обходиться без этого оператора, и является более эффективным методом программи-рования. При их использовании Ваша программа принимает более компактную форму, проще контролируема и более наглядна.

1.1. Оператор цикла с предусловием
Его структура имеет вид:
while (B) S;
где B – логическое (булево) выражение;
S - любой оператор языка (тело цикла);
while (пока) – служебные слова.
Схематически оператор цикла с предусловием можно изобразить таким образом:


false


true





Такая конструкция цикла организует выполнение оператора S до тех пор, пока логи-ческое выражение B – истинно. Если условие, которое вычисляется и анализируется перед каждым выполнением цикла, - ложно, то выполняется оператор, следующий за while. Заметим, что если первоначальное значение логического выражения B ложно, то оператор S не будет выполняться ни разу. Другая крайность, которую следует избегать,- логическое условие всегда истинно. В этом случае оператор S будет повторяться бесконечное число раз. Произойдет, так называемое, «зацикливание» и тогда потребуются принудительные меры выхода из него,- перезагрузка компьютера.

1.2. Оператор цикла с постусловием
Его синтаксис:
do { S1;S2;...Sn } while (B);
где B- логическое выражение;
S1;S2;...Sn – любые операторы языка;
do (делать), while(пока ) – служебные слова.
Схематически оператор цикла с предусловием можно изобразить таким образом:







true

false


В такой конструкции цикла проверка условия производится в его конце (постусло-вие), что обеспечивает выполнение операторов S1,...Sn хотя бы один раз. Тело цикла вы-полняется в операторе do…while до тех пор, пока условие истино. Выход из цикла осуще-ствляется при ложности логического выражения B.
Оператор цикла с предусловием обычно используется чаще оператора do…while, т.к. проверка на окончание цикла в нем производится до выполнения и есть возможность при необходимости цикл пропустить вообще.
Важно помнить, что перед каждым (и первым в том числе) выполнением цикла, ус-ловие его окончания должно быть определено. Кроме того, тело цикла должно содержать хотя бы один оператор, влияющий на условие В, иначе произойдет зацикливание. Условие окончания цикла должно быть, в конце концов, удовлетворено.

1.3. Оператор цикла со счётчиком
Он имеет следующий вид:

for (k = m; k<= n; k++) S;
Инициализация Проверка Увеличение

где k-параметр цикла (счетчик);
m,n – начальное и конечное, соответственно, значения параметра k;
for ( для )- служебное слово.
Оператор S в такой конструкции цикла выполняется для каждого значения счетчи-ка: от начального m до конечного n, включительно, с шагом 1. Такой цикл со счетчиком используется, когда заранее известно число повторений тела цикла S. Управление циклом осуществляется на основании сравнения текущего значения счетчика с заранее заданным диапазоном его изменения (m,n). В качестве m и n могут быть конкретные числа, пере-менные или выражения. Если m>n, то тело цикла не выполняется ни разу. Если необхо-димо выполнить группу операторов их заключают в скобки {}, кроме этого в качестве тела цикла может использоваться вложенный цикл.
Можно организовать цикл по убыванию:
for (k=n; k=>m;k--) S;
Параметр цикла k принимает последовательно убывающие значения от n до m с шагом -1.
Шаг можно задавать самостоятельно. Например следующий цикл с шагом 3
for(k=0;k<=10;k+=3)

1.4. Операторы завершения цикла
Для всех операторов цикла выход из цикла осуществляется как вследствие естест-венного окончания оператора цикла, так и с помощью операторов перехода и выхода. В C++ определены стандартные процедуры Break и
Continue. Процедура Break выполняет безусловный выход из цикла. Процедура Continue обеспечивает переход к началу новой итерации цикла.
II.Экспериментальный раздел работы
Пример 1. Пусть задано натуральное число m. Необходимо найти минимальное число n такое, что факториал n! > m.
По определению, n!=1*2*3*…n.Таким образом, решение поставленной задачи сво-дится к последовательному увеличению значения n, вычисления n! и сравнения его с за-данным числом m. Как только величина n! станет больше m, вычисления нужно прекра-тить и вывести результат. Последовательное увеличение n организуем с помощью цикла while, а для вычисления факториала числа воспользуемся следующими соотношениями:

В этой последовательности первый член равен 1, а каждый последующий равен пре-дыдущему, умноженному на k. Такое соотношение называется рекуррентным, что озна-чает «возвращающийся».
Из школьного курса математики нам известны такого рода соотношения для членов арифметической и геометрической прогрессий, где d – раз-ность, q – знаменатель. Рекуррентные соотношения играют важную роль в программиро-вании, т.к. в сочетании с операторами циклов создают мощный вычислительный инстру-ментарий.
Запишем алгоритм нашей задачи:
1. «подготовка» цикла: ввод m; k=1; p=1;
2.«управление» циклом: если p<m, то выполнять пункт 3 (тело цикла),
иначе выполнять пункт 4 (вывод результата);
3.«тело» цикла: к=к+1; p=p*k; возврат к пункту 2;
4.вывод результата n=k.
Оформим его в виде подпрограммы-функции:
#include <iostream.h>
#include <conio.h>
int Min_N(int m)
{
int k=1,p=1;
while (p<m)
{ k++; p*=k;}
return k;
}
void main (void)
{
int m;
cout<<"Введите число m=?"<<endl; cin>>m;
cout<<" Минимальное значение n="<<Min_N(m)<<endl;
getch();
}
Провести отладку и тестирование программы. Вычислить значение n для случаев, когда m=MAXINT и MAXLONG.

Пример 2.Напишем логическую функцию, которая будет возвращать значение true, если натуральное число n простое, и false – в противном случае.
Напомним, что натуральное число называется простым, если оно делится без остат-ка только на единицу и само себя. Очевидно также, что число n – составное, если оно де-лится хотя бы на одно из чисел 2,3,…,n-1.
Таким образом, при n>2 необходимо проверить делимость n на каждое из чисел k=2,3, … n-1. На самом деле, как показано в теории чисел, можно сократить сверху диа-пазон поиска до целой части корня квадратного из n: .
Составим программу на языке C++:

bool Simple(int n)
{
bool b=true; int k=2,max;
max=sqrt(n)+1;
while (b&&(k<max))
{
if ((n%k)==0) b=false;
k++;
}
return b;
}

Поэкспериментируйте с программой. Простые числа 2,3,5,7,11,13,…расположены в натуральном ряду весьма загадочным образом. Двигаясь по этой последовательности чи-сел необходимо вычислить простое число по его номеру.

Пример 3. Используя алгоритм Евклида, составим программу определения наибольшего общего делителя числа a на b: НОД(a,b).
Один из вариантов этого алгоритма состоит в том, что необходимо последова-тельно находить остатки от деления :

a на b : ; r1 = a mod b;
b на ; r2= b mod r1;
на ; r3 = r1 mod r2;
..........................
до тех пор, пока не станет равным нулю. Итак,

НОД(a,b) = НОД(b,r1) = НОД(r1,r2) =... = НОД(rn,0) = rn .
Например,

НОД(18,12) = НОД(12,6) = НОД(6,0) = 6 .
Напишем подпрограмму-функцию:
int GCD(int a,int b)
{
// Greatest Common Divisor -наибольший общий делитель
int r1,r2,r3;
if (a>b){ r1=a; r2=b;}
else { r1=b; r2=a;}
while(r2 !=0)
{
r3=r1%r2;
r1=r2; r2=r3;
}
return r1;
}

Введите, отладьте и протестируйте программу.

Пример 4. Напишем программу, в которой для заданного натурального числа n, ищется число q, записанное цифрами в обратном порядке. К примеру, если n=1965, то q=5691.

Запишем натуральное число n в виде n=akak-1...a0 , где ai - цифры, состав-ляющие его в десятичной системе счисления:

akak-1...a0 = a0100 + a1101 + ... + ak10k

Тогда натуральное число q, записанное цифрами в обратном порядке

a0a1...ak = ak100 + ak-1101 + ... + a010k .

Значение a0 можно найти как остаток от деления числа n на 10. Разделив n на 10, и найдя снова остаток, получим цифру а1, ... В противоположность этому, число q форми-руется путем умножения на 10 , полученных остатков от деления числа n. Это последова-тельное умножение на 10 можно осуществить в виде:

a0a1...ak = ak + 10( ak-1 + 10(ak-2 + ... + 10(a1 + 10a0 )...)

Пусть тогда




Теперь нетрудно составить систему рекуррентных соотношений:

которую нужно «прокрутить» в цикле до тех пор пока . Начальное значение искомой величины .
Запишем алгоритм вычислений:
1) «подготовка» цикла: ввод n; k=0; p=n; q=0;
2) «управление» циклом: если p>0, то выполнять пункт 3 (тело цикла),
иначе выполнять пункт 4 (вывод результата);
3) «тело» цикла: a=p mod 10; к=к+1; p=p div 10; q=q*10 +a; возврат к пункту 2;
4) вывод результата q.
Оформим его в виде подпрограммы-функции:
int Inv_N(int n)
{
int a,p=n,q=0,k=0;
while(p>0)
{
a=p%10;k++;
p/=10; q=q*10+a;
}
return q;
}
Отладить, протестировать и провести эксперимент с программой.
Напишите программу перевода чисел из двоичной системы счисления в десятич-ную; из системы счисления m в систему счисления n.

Ш. Раздел заданий для самостоятельной работы
Задачи самостоятельного раздела необходимо решить с использованием всех изученных операторов повторений.
A.
1. Составить программы.
1.1. Дано натуральное число n. Вычислить количество цифр данного числа. Найти ( ).
1.2. Определить сумму и произведение цифр целого числа. Найти сумму цифр, больших 5.
1.3. Найти максимальную и минимальную цифры числа. Верно ли, что данное число заканчивается на них?
1.4. Вычислить сколько раз данная цифра встречается в целом числе. Верно ли, что цифра А, введенная с клавиатуры, не встречается в этом числе?
1.5. Определить, является ли данное натуральное число палиндромом, то есть таким, десятичная запись которого читается одинаково слева направо и справа налево. Например, палиндромы 234432, 089980, 5225 .
1.6. Составить программу вычисления факториала числа n!=123...n.
1.7. Составить программу, которая выдавала бы сообщение ‘ true ‘, если после-довательность из N целых чисел, вводимых с клавиатуры, является возрастающей.
1.8. Дано целое число. Приписать к нему такое же число.
1.9. Найти все трехзначные числа, которые при увеличении на 1 делятся на 2, при увеличении на 2, делятся на 3, при увеличении на 3, делятся на 4, а при увеличе-нии на 4 делятся на 5.
1.10. Найти все трехзначные числа, которые при делении на 2, дают остаток 1, при делении на 3, - остаток 2, при делении на 4 – остаток 3, а само число делится на 5.
1.11. Найти все делители числа 1234.

2. Составить программы.
2.1. Найти наименьшее общее кратное (НОК) чисел а и в, если
НОК(a,b)= ab/ НОД(a,b).
2.2. Найти наибольший общий делитель трех чисел НОД(a,b,c)=НОД (НОД(a,b),c).
2.3. Определить, являются ли два натуральных числа a и b взаимно простыми, то есть не имеющих общих делителей, кроме единицы.
2.4. Некоторая сумма денег S помещается в банк под годовой процент Р. Вычис-лить, через сколько лет она удвоится.
2.5. Население города составило на начало года 82 тыс. человек, а годовой при-рост, который можно считать постоянным, составил 3.7%.Оперделить, через сколько лет население города составит 150 тыс. человек.
2.6. В нынешнем году урожай зерновых составил 20 центнеров с гектара. В среднем каждые 2 года за счет применения передовых агротехнических приемов уро-жай увеличивается на 5%. Вычислить, через сколько лет урожайность достигнет 30 центнера с гектара.
2.7. Найти двузначное число, обладающее тем свойством, что куб суммы его цифр равен квадрату самого числа.
2.8. Найти все двузначные числа, сумма квадратов цифр которых делится на 17
2.9. Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр.
2.10. Найти все трехзначные числа, средняя цифра которых равна данному цело-му числу.
2.11. Проверить, содержит ли квадрат данного натурального числа n, цифру 3 в свой записи.
3. Составить программу вычисления суммы первых n=10; 20; 30 членов ряда:
3.1. S=1+1/1!+1/2!+1/3!+...
3.2. S=1-1/3+1/5-1/7+...
3.3. S=1-1/1!+1/2!-1/3!+...
3.4. S=1-1/2+1/3-1/4+...
3.5. S=1+1/2+1/4+1/8+...
3.6. S=1/(1*2)+1/(2*3)+1/(3*4)+...
3.7. S=1/(1*3)+1/(2*4)+1/(3*5)+...
3.8. S=1/(1*3)+1/(3*5)+1/(5*7)+...
3.9. S=1/(3*5)+1/(7*9)+1/(11*13)+...
3.10. S=1/(1*2*3)+1/(2*3*4)+1/(3*4*5)+...
3.11. S=1+1/32 +1/52 +...
3.12. S=1+1/24+1/34+...
3.13. S=1-1/22+1/32-1/42+...
3.14. S=1-1/24+1/34-...
3.15. S=1+1/34+1/54+...
B.
1. Составить программы.
1.1. Дано натуральное число n. Вычислить количество цифр данного числа с ис-пользованием цикла и при помощи формулы. Какой способ лучше?
1.2. Найти первую и последнюю цифры числа, поменять их местами.
1.3. Вычислить сумму четных цифр целого числа, и удалить их.
1.4. Если в заданном натуральном числе содержится две одинаковые цифры, программа должна выдавать сообщение.
1.5. Вычислить количество симметричных натуральных чисел в промежутке от n до m.
1.6. Найти все трехзначные числа, такие, что сумма цифр равна N.
1.7. Найти количество различных цифр данного натурального числа.
1.8. Найти все четырехзначные числа, в которых есть три одинаковые цифры.
1.9. Найти все симметричные четырехзначные числа.
1.10. Найти все трехзначные числа, которые состоят из разных цифр, а их сумма равна M.
1.11. Найти все натуральные числа из промежутка от 1 до 200, у которых количе-ство делителей равно N.

2. Составить программы.
2.1. Найти количество делителей натурального числа, больших K.
2.2. Найти сумму четных делителей натурального числа.
2.3. Разложить натуральное число на простые множители.
2.4. Составить программу, проверяющую, является ли заданное натуральное число совершенным, то есть равным сумме своих положительных делителей, кроме самого этого числа.
2.5. Определить, является ли данное натуральное число автоморфным. Авто-морфное число равно последним разрядам квадрата этого числа.
2.6. Население двух стран равно N1 и N2 , а прирост населения P1 и P2 , соот-ветственно. Известно, что N1 > N2 и P1 < P2 . Вычислить, через сколько лет насе-ление N2 превзойдет население N1.
2.7. Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый сле-дующий день он увеличивал дневную норму на 10% от нормы предыдущего дня. Че-рез сколько дней спортсмен будет пробегать в день больше 20 км и, когда суммар-ный путь будет больше 200 км.
2.8. Вычислить, в каких двузначных числах удвоенная сумма цифр равна их произведению.
2.9. Найти все трехзначные числа, представляемые в виде суммы факториалов своих цифр.
2.10. Можно ли заданное натуральное число m представить в виде суммы квадра-тов двух натуральных чисел.
2.11. Натуральное число из n цифр называется числом Армстронга, если сумма его цифр, возведенная в n-степень, равна самому числу. Составить программу поиска чисел Армстронга в диапазоне от 0 до 2000.
3. Составить программу вычисления суммы первых n=10; 20; 30 членов ряда:
3.1. сравнить результат с * /6;
3.2. сравнить результат с /4;
3.3. сравнить результат с 1;
3.4. сравнить результат с 3/4;
3.5. сравнить результат с e;
3.6. сравнить результат с 1/e;
3.7. сравнить результат с ln2;
3.8. сравнить результат с 2;
3.9. сравнить результат с 1/2;
3.10. сравнить результат с * /8;
3.11. сравнить результат с * /12;
3.12. сравнить результат с ;
3.13. сравнить результат с
4. Составить алгоритм и написать программу вычисления следующих сумм.
4.1. , и сравнить результат с ln(x) при x>0;
4.2. , и сравнить результат с ln(x) при 0< x<2;
4.3. , и сравнить результат с ln(1+x) при [x] <1;
4.4. , и сравнить результат с ln((1+x)/(1-x)) при [x] <1;
4.5. , и сравнить результат с ln((1+x)/(x-1)) при [x] >1;
4.6. , и сравнить результат с arctg(x) при [x] <1;
4.7. , и сравнить результат с arctg(x) при [x] >1;
4.8. , и сравнить результат с sh(x)=0.5*(ex-e-x);
4.9. , и сравнитеь результат с ch(x)=0.5*(ex+e-x);
4.10. ,

C.
Составить программу и вычислить сумму ряда с точностью , и . Сравнить число итераций для каждого из этих случаев.
1. ,
2. ,
3. ,
4. ,
5. ,
6. ,
7.
8. ,
9. ,
10.
11. ,
12. ,
13.
14.

Список литературы
1. Абрамов С. А. Начала информатики, - М.: Наука, 1990
2. Абрамов С. А. и др. Задачи по программированию,- М.: Наука, 1998
3. Берёзин Б.И., Берёзин С.Б. Начальный курс С и С. – М.: ДИАЛОГ-ЬИФИ, 1996.- 288 с.
4. Гусева А. И. Учимся информатике: задачи и методы их решения, - М.: Диалог МИ-ФИ, 1998
5. Кушниренко А.Г. Основы и информатики и вычислительной техники: Проб.учеб. для сред.учеб.заведений./А.Г.Кушниренко, Г. В. Лебедев, Р.А.Сворьев. – 3-е изд.- М.: Просвещение, 1993. – 224 с. : ил.
6. Микелсен Клаус. Язык программирования С#. Лекции и упражнения. Учебник.Пер. с англ./ Микелсен Клаус –СПб.: ООО «ДиаСофтЮП», 2002. – 656 с.
7. Сван Т. Освоение Borland C 4.5. Практический курс. – К.: «Диалектика», 1996. – 544с.
8. Сердвик Роберс Фундаментальные алгоритмы на С. Анализ/Структуры дан-ных/Сортировки/Поиск.:пер. англ./Роберт Сердвик.-К.: Издательство «ДиаСофт», 2001.-688 с.
9. Том Сван. Освоение Borland C 4.5. Энциклопедия функций. – К.: «Диалектика», 1996. – 320с.
10. Трой Д. Программирование на языке Си для персонального компьютера IPM PC: Пер с англ. – М.: Радио и связь, 1991. – 432 с.: ил.
11. Халперн, Пабло. Стандартная библиотека С на примерах.: Пер. с англ. : М.: Изда-тельский дом «Вильямс», 2001. – 336 с.: ил.
12. Шелест В.Д. Программирование.- СПб.: БХВ-Петербург, 2001. – 592 с.: ил.
13. Шилдт, Герберт С: базовый курс, 3-е издание.: Пер. с англ. – М.: Издательский дом «Вильямс», 2005. -624 с.: ил.
14. Язык Си для профессионалов по материалам книги Г.Шилдта. «И.И.К.-СОФТ», Мо-сква. 1992. 319 с.
15. Языки программирования Ада, Си, Паскаль. Сравнение и оценка /под ред. А.Р. Фьюэра, Н.Джехани: пер.с англ. В.В.Леонаса.- М.: Радио и связь, 1989.-368 с.: ил.

© Copyright 2012-2019, Все права защищены.