АЛМАТИНСКИЙ ИНСТИТУТ ЭНЕРГЕТИКИ И СВЯЗИ

 

 

 

Кафедра электроники и компьютерных технологий

 

 

 

 

 

 

 

 

СПЕЦИАЛЬНЫЙ КУРС ПО ИНФОРМАТИКЕ 2

 

Методические указания к выполнению лабораторных работ

(для студентов всех форм обучения специальности 050704 –

Вычислительная техника и программное обеспечение )

 

 

 

 

 

 

 

Алматы 2006

 

СОСТАВИТЕЛЬ: Т.С. Бимагамбетов.  Специальный курс по информатике 2. Методические указания к выполнению лабораторных работ (для студентов всех форм обучения специальности 050704 – Вычислительная техника и программное обеспечение .  -Алматы: АИЭС, 2006. –56 с.

 

 

 

 

 

 

         Методические указания предназначены для изучения программирования на стандартном языке Си. В работе дано описание девяти лабораторных работ. В каждой работе указываются цель и краткая теория изучаемых вопросов, порядок выполняемых работ, а также контрольные вопросы. Дано  описание в интегрированной среде Borland C++ и MS Visual C++.  

         Ил. 5, библиогр. 5- назв.

 

 

 

 

 

         Рецензент: ст.преподаватель Г.Т. Мусатаева

 

 

 

 

 

 

 

         Печатается по плану издания Алматинского института энергетики и связи на 2006 г.

 

 

 

 

 

 

 

 

 

 

 

ã Алматинский институт энергетики и связи, 2006 г.

Введение

 

Язык программирования Си создан в 1972 г. сотрудником Bell Laboratories Деннисом Ритчи при разработке операционной системы Unix. В семейство языка Си входят такие мощные языки, как Си++, поддерживающий технологии объектно-ориентированного программирования; Java для программирования в Internet ; С# - новый объектно-ориентированный язык программирования для платформы  Microsoft.Net

            Методические указания предназначены для изучения программирования на стандартном языке Си. В работе дано описание девяти лабораторных работ. В каждой работе указываются цель и краткая теория изучаемых вопросов, порядок выполняемых работ, а также контрольные вопросы. Дано  описание в интегрированной среде Borland C++ и MS Visual C++.  

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

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

 

 

 

1 Лабораторная работа №1. Работа в интегрированной среде

 

Цель работы – освоение интегрированной среды программирования.

 

1.1 Теория метода. Работа в интегрированной среде Borland C++

1.1.1 Запуск и выход из системы Borland C++

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

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

Для того чтобы запустить систему Borland C++, надо, войдя в каталог, в котором расположен файл bc.exe, в командной строке DOS  набрать >bc. Чтобы окончательно покинуть систему Borland C++, можно использовать Quit в меню File или нажать комбинацию клавиш Alt-X. Для временного выхода в операционную среду, чтобы выполнить какую-либо команду  DOS, оставив при этом программу в памяти машины, используется опция  DOS Shell в меню File.

E     File    Edit    Search    Run    Compile    Debug    Project    Options    Window    Help

#include <iostream.h>

void main() { cout<<”Hello, world!\n ” }

*Complling HELLO.CPP

F1 Help  Alt ->F6  Next Msg  Alt->F7  Preu Msg  Alt->F8  Compile  F9  Make F10 Menu

 

 

 


        

 

 

 

 

 

 

 

 

Для возврата в систему требуется набрать в командной строке  DOS >Exit. Для временного перехода к другой программе можно использовать системное меню. Войдя в каталог, где находится система, и вызовем систему Borland C++. Вы увидите на экране то, что изображено на рисунке, экран содержит 4 основные части:

-         главное меню;

-         окно редактирования;

-         окно сообщений;

-         строку состояния.

1.1.2 Главное меню. Для входа в главное меню можно нажать клавишу F10. Как видно из рисунка, главное меню состоит из: Е- системное меню; File – загрузка и создание файлов; Edit – реализация различных режимов редактирования текста в активном окне; Search – поиск фрагментов текста, объявление функций,  местоположение ошибок; Run – компиляция, компоновка, запись на выполнение программы; Compile – компиляция программы; Debug – управление возможностями отладчика; Project – организация проектов (многофайловых программ); Options – установка опций; Window – управление окнами; Help – обращение к системе оперативной подсказки.

Системное меню. Когда вы вызываете это меню, вы видите команду Repaint Desktop (Восстановить рабочую область) . В результате выбора этой команды осуществляется перерисовка изображения на экране. Это может потребоваться, например, в том случае, если какая-либо программа оставила на экране «мусор» в результате работы программ, особенно при прямой работе с видеопамятью.

Меню File (Файл). Данное меню состоит из команды New, Open, Save, Save as, Save all, Change dir, Print, Dos shell, Quit    Alt+X.

Команда New (Новый) позволяет вам открыть новое окно редактирования со стандартным именем NONAMExx.C.

Команда Open (Открыть) отображает блок диалога, предназначенный для выбора файлов, чтобы можно было выбрать файл программы, который будет открыт в окне редактирования. Этот блок диалога содержит в себе блок ввода, список файлов, кнопки с пометками Open, Replase (Заменить), Cancel (Отменить) Help, а также информационную панель, которая описывает выбранный в настоящий момент файл.

Команда  Save осуществляет запись на диск того файла, который находится в активном окне редактирования.

Команда  Save as позволяет вам сохранить файл в активном окне редактирования под другим именем, в другой директории или на другом дисководе.

Команда  Save all действует аналогично команде Save с тем исключением, что она осуществляет запись на диск содержимого всех

модифицированных файлов, а не только того файла, который находится в активном окне редактирования.

Команда Change dir (Сменить директорию) позволяет вам задать идентификатор дисковода и имя директории, которые следует сделать текущими.

Команда Print (Печатать) позволяет вывести на печать содержимое активного окна редактирования.

Команда Dos shell (Выход в оболочку Dos) позволяет временно выйти из системы Borland C++, чтобы выполнить команду Dos или запустить какую-либо программу. Для того чтобы возвратиться в систему Borland C++, необходимо ввести с клавиатуры Exit и нажать клавишу Enter.

Команда Quit (Выйти) осуществляет выход из системы Borland C++, удаляет ее из памяти и возвращает вас к запросу со стороны Dos. Можно выйти, используя клавиши Alt+X.

Меню Edit (Редактирование). Данное меню состоит из команды Undo, Redo, Cut, Paste, Copy, Clear, Copy Example, Show Clipboard.

Команда Undo (Восстановить) отменяет действие последней команды редактирования, которая была применена к какой-либо строке.

Команда Redo (Повторить) повторяет действие последней команды редактирования.

Команда Cut (Вырезать) и  Paste (Вставить). Команда Cut удаляет выделенный фрагмент текста из вашего документа и заносит его в текстовый буфер. Затем можно вклеить текст в любой другой документ путем выбора команды  Paste. Текст в текстовом буфере остается выделенным, поэтому можно вклеивать тот же самый текст многократно.

Команда Copy (Копировать) оставляет выделенный текст не тронутым, но заносит в текстовый буфер точную копию этого текста.

Команда Clear (Стереть) удаляет выбранный фрагмент текста, но не заносить его в текстовый буфер.

Команда Copy Example (Скопировать пример) копирует предварительно выбранный в окне Help текст примера в окно Clipboard (Текстовый буфер).

Команда  Show Clipboard (Показать содержимое текстового буфера) открывает окно Clipboard, в котором хранятся фрагменты текста, отсеченного и скопированного вами из других окон.

Меню Search (Поиск). Данное меню состоит из команды Find, Replace, Search again, Go to line number, Previous error, Next error, Locate function.

Команда  Find (Найти) позволяет ввести образец для поиска и задать параметры, оказывающие влияние на процесс поиск.

Команда Replace (Заменить) отображает блок диалога, который позволяет вводить искомый текст и текст, на который его следует заменить.

Команда  Search again (Повторить поиск)  повторяет действие последней команды Find и Replace.

Команда Go to line number (Перейти к строке с номером) запрашивает

номер той строки, к которой требуется осуществить переход.

 Команда Previous error (Предыдущая ошибка) перемещает курсор на

позицию возникновения предыдущего сообщения об ошибке или предупреждающего сообщения.

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

Команда Locate function (Местоположение функции) отображает блок диалога, в который вы должны ввести имя искомой функции. Данная команда оказывается доступной только в период проведения отладочного сеанса.

Меню Run (Выполнение). Данное меню состоит из команды Run, Program reset, Go to cursor, Trance into, Step over, Arguments.

Команда Run (Выполнение) осуществляет выполнение вашей программы, используя те аргументы, которые переданы программе с помощью команды  Arguments. Если с момента последней компиляции исходный код был модифицирован, эта команда вызовет также Менеджер проектов, чтобы рекомпилировать и перекомпоновать программу.

Команда Program reset (Реинициализация программы) прекращает текущий сеанс отладки, освобождает память, которая была выделена программе, и закрывает все открытые файлы.

Команда Go to cursor (Выполнить до курсора) осуществляет выполнение программы от маркера до той строки, в которой позиционирован курсор в текущем окне редактирования.

Команда Trance into (Вхождение при трассировке) осуществляет пооператорное выполнение программы.

Команда Step over (Одношаговое выполнение программы) выполняет следующий оператор в текущей функции.

Команда Arguments (Аргументы) позволяет задавать выполняемой программе аргументы командной строки  точно так же, как если бы они вводились в командной строке DOS.

Меню Compile (Компиляция). Данное меню состоит из команды Compile to OBJ, Make exe file, Link exe file, Build all, Information, Remove messages.

Команда Compile to OBJ (Компилировать в объектный файл) осуществляет компиляцию активного файла редактора (файла с расширением .с или  .срр в файл с расширением .OBJ).

Команда Make exe file (Избирательная перекомпиляция в exe - файл) вызывает Менеджер проектов для создания exe – файла.

Команда Link exe file (Компоновать в  exe - файл) использует текущие  .obj и .lib файлы и компонует их, не производя избирательной компиляции, в результате получается новый exe – файл.

Команда Build all (Полная перекомпиляция всех файлов) осуществляет полную перекомпиляцию всех файлов, составляющих ваш проект, вне

зависимости от того, как их дата исходного кода соотносится с датой объектного кода.

Команда Information (Информация) выдает окно диалога с информацией о текущем состоянии системы.

            Команда Remove messages (Удалить сообщения) удаляет все сообщения из окна message.

         Меню Debug (Отладка). Данное меню состоит из команды Inspect, Evalute/Modify, Call stack, Watches, Add watch, Delete watch, Edit watch,

Remove all watches, Toggle Breakpoint, Breakpoints.

Команда Inspect (Инспектировать) открывает окно, которое позволяет проанализировать значения объекта.

Команда  Evalute/Modify (Вычислить/Модифицировать) вычисляет значения переменной или выражения, отображает их значения и позволяет модифицировать это значение. Данная команда открывает блок диалога, в котором содержатся три поля: Expression, Result и New value.

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

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

Команда Add watch (Добавить выражение просмотра) вставляет в окно watch еще одно выражение просмотра.

Команда Delete watch (Удалить выражение просмотра) удаляет из окна watch текущее выражение просмотра.

Команда Edit watch (Редактировать выражение просмотра) позволяет редактировать текущее выражение просмотра в окне watch.

Команда Remove all watches (Удалить все выражения просмотра) удаляет все выражения просмотра из окна watch.

Команда Toggle Breakpoint (Триггерная установка точки ) позволяет установить или отменить безусловную точку останова на той строке, где позиционирован курсор.

Команда Breakpoints (Точки останова) открывает блок диалога, который позволяет управлять использованием точек останова,  как условных, так и безусловных (которые вызывают останов выполнения программы вне зависимости от каких-либо условий).

Меню Project (Проект). Данное меню состоит из команды Open project, Close  project, Add item, Delete item, Local options, Include files.

            Команда Open project (Открыть проект) отображает блок диалога Load

project file, который позволяет выбрать и загрузить какой-либо проект или

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

Команда  Close  project (Закрыть проект), закрывает проект.

Команда Add item (Добавить элемент) добавляет к списку проекта какой-либо файл.

Команда Delete item (Удалить элемент)  удаляет имя какого-либо файла в окне project.

Команда Local options (Локальные параметры) открывает блок диалога Overeide options.

Команда Include files (Параметры) содержит команды, которые просматривают и модифицируют различные стандартные параметры,

определяющие функционирование системы Borland C++.

Меню Window (Окно). Данное меню состоит из команды Size/Move, Zoom, Tile, Cascade, Next, Close, Close all, Message, Output, Watch, User screen, Register, Project, Project notes, List all.

Команда Size/Move (Изменить размер/Переместить) используется для того, чтобы изменить размер и местоположение активного окна.

Команда Zoom (Увеличить окно до размеров экрана)  используется для изменения размера окна, в результате чего оно получает максимально допустимый размер.

Команда Tile (Мозаичное расположение) располагает все открытые окна таким образом, чтобы они были одновременно видны и не перекрывали одно другое.

Команда Cascade (Каскадное расположение) располагает все открытые окна каскадом (уступами), чтобы край последующего окна выступал из-под предыдущего.

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

Команда Close (Закрыть) закрывает активное окно.

Команда Close all, Message (Закрыть все) используется для того, чтобы закрыть все окна и очистить поверхность рабочего стола.

Команда Message (Сообщение) открывает окно сообщение и делает его активным.

Команда Output (Выводимые данные) используется для того, чтобы открыть окно Output и активизировать его.

Команда Watch (Выражение просмотра) используется для того, чтобы открыть окно  Watch и активизировать его.

Команда User screen (Экранный кадр пользователя) используется для просмотра выводимых программой данных в полноэкранном режиме.

Команда Register (Регистры) открывает окно Register,  отображает содержимое регистров центрального процессора и используется при отладке встроенных ассемблерных модулей и модулей Турбо ассемблера проекта.

Команда  Project (Проект) открывает окно Project, которое позволяет просмотреть файлы, используемые для создания программы.

Команда Project notes (Примечания) используется для записи каких-либо подробностей, создания перечней того, что следует сделать, или иных деталей, которые касаются файлов проекта.

Команда List all (Список) используется для получения перечня всех окон, которые были открыты.

Меню Help (Подсказка). Данное меню состоит из команды Contents, Index, Topic search, Previous topic, Help on help, Active file, About.

Команда Contents (Содержание) открывает окно, в котором отображается перечень тем (содержание).

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

быть получена подсказка.

Команда Topic search (Тематический поиск) отображает справку по выбранному элементу синтаксиса языка.

Команда Previous topic (Предшествующая тема) открывает окно  Help, в котором отображается тот текст, который вы просматривали в последний раз при обращении к системе подсказки.

Команда  Help on help (Информация по системе подсказки) открывает экранный кадр , в котором объясняется , как пользоваться системой подсказки в Borland C++.

Команда Active file (Активный файл) открывает окно диалога, в котором можно выбрать подсказку по одной из тем.

Команда About (Подсказка/О…) открывает окно с информацией о версии системы.

 

1.1.3 Выполнение первой программы в среде Borland C++

Запустите систему Borland C++, войдя в каталог, в котором расположен файл bc.exe, в командной строке DOS  набрать >bc.

          1.1.3.1 В пункте меню File выберите команду  New.

1.1.3.2 В появившемся диалоговом окне перейдите на вкладку Text Edit. (рисунок 1.2.1).

1.1.3.3 В области редактирования на языке Си наберите текст программы, которая  выведет на экран строку It is my first program!

1.1.3.4 Проверьте правильность написанной программы, нажав на кнопку компиляции Compile, если в программе были допущены ошибки, то сообщения о них появятся в окне.

1.1.3.5 Выполните написанную программу, нажав на кнопку выполнения Run. После этого появится окно с результатами выполнения программы:   It is my first program.

1.1.3.6 Для закрытия этого окна следует нажать на клавишу Enter.

 

Код программы.

#include <stdio.h>

#include <conio.h>

void main()  {printf(“It is my first program”); getch ();}

 

1.2 Работа в интегрированной среде MS Visual C++

 

1.2.1 Запуск и выход из системы MS Visual C++

Для запуска Visual C++ откройте группу Microsoft Visual Studio и выберите строку MS Visual C++ .

Для завершения работы Visual C++ вызовите команду File -> Exit (Файл -> Выход).

Если запустите Visual C++ , вы увидите на экране то, что изображено на рисунке 1.2.1, экран содержит 6 основных частей:

-         главное меню;

-         окно редактирования;

-         окно сообщений;

-         панель инструментов Standard(Стандартная);

-         панель инструментов Buld (Компоновка);

-         окно проекта.

1.2.2 Главное меню. Для входа в главное меню можно нажать клавишу F10. Как видно из рисунка, главное меню состоит из: File – загрузка и создание файлов; Edit – реализация различных режимов редактирования текста в активном окне; View  вызов различных окон просмотра ; Insert  содержит команды, позволяющие включить в проект различные компоненты; Project содержит команды создания и управления проектом;

Build содержит функции для разработки программы, а также команды запуска встроенного отладчика, выделенные в подменю Start debug (Начать отладку); Tools позволяет вызвать из IDE различные вспомогательные программы, а также настроить интегрированную среду разработки; Window – управление окнами; Help обращение к системе оперативной подсказки.

Меню File (Файл). Здесь и далее перечислим те команды, которые отсутствуют в системе Borland C++ . Данное меню состоит из команды Open workspace, Save  workspace, Close workspace, Page setup, Resent files, Resent workspace, Exit.

Команда Open workspace (Открыть область проекта) открывает область проекта.

 Команда Save  workspace (Сохранить область проекта) сохраняет область проекта.

Команда Close workspace (Закрыть область проекта) закрывает область проекта.

Команда Page setup (Параметры страницы) задает параметры страницы.

Команда Resent files (Последние открытые файлы) отображает список последних открытых файлов.

Команда Resent workspace (Последние открытые рабочие области)  отображает список последних открытых рабочих областей.

Команда Exit (Выход)  осуществляет выход из системы.

Меню Edit (Правка). Данное меню состоит из команды Bookmarks,

Advanced, Breakpoints, List members, Type info, Parametr info, Complete word.

Команда Bookmarks (Закладки) предназначена для установки закладок.

Команда  Advanced (Расширенные опции) подменю содержит дополнительные команды, такие, как Format selection (Форматировать выделение) и View whitespace (Отобразить пробелы).

Команда Breakpoints (Точки останова) открывает одноименное диалоговое окно, с помощью которого можно установить точки останова для отладки программы.

 

Команда List members (Список элементов) отображает список элементов класса.

Команда Type info (Информация о типе) вызывает окно подсказки, отображающее тип свойства или метода.

Команда Parametr info (Информация о параметрах) вызывает окно подсказки, отображающее список параметров метода.

Команда Complete word (Закончить слово)  заканчивает либо предлагает варианты окончания для идентификатора метода либо свойства класса.

Меню View (Вид). Данное меню состоит из команды Classwizard, Resource Symbols,  Resource include, Properties.

Команда Classwizard (Мастер классов)  вызывает диалоговое окно.

Мастера классов, с помощью которого можно создать и дополнить классы разрабатываемого приложения.

Команда Resource Symbols (Идентификаторы ресурсов)  вызывает одноименное диалоговое окно, позволяющее просмотреть и отредактировать идентификаторы ресурсов, которые используются в текущем проекте.    

Resource include (Заголовочные файлы ресурсов) редактирует заголовочные файлы ресурсов текущего проекта.

Команда Properties (Свойства) вызывает на экран диалоговое окно с информацией о файле, открытом в активном окне редактирования.

Меню Insert (Вставка). Данное меню состоит из команды New class, New form, File as text, New atl object.

Команда  New class (Создать класс)  создает новый класс.

Команда New form (Создать форму)  вызывает на экран одноименное диалоговое окно, позволяющее задать новый класс диалогового окна, указать для создаваемого класса базовый , исходные файлы и идентификатор ресурса диалогового окна.

Команда File as text (Вставить текст из файла) предназначена для включения в текущую позицию курсора ввода текста указанного файла.

Команда New atl object (Создать atl - объект)  добавляет в проект новый atl – объект.

Меню Project (Проект). Данное меню состоит из команды Source

control, Dependencies, Settings, Export makefile, Insert project into workspace.

Команда Source control (Контроль изменений исходного кода) 

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

Команда Dependencies (Под проекты) позволяет активизировать и

де активизировать под проекты.

Команда Settings (Настройки) позволяет настроить параметры проектов.

Команда Export makefile (Экспорт make - файла) предназначена для создания внешнего make – файла проекта.

Команда Insert project into workspace (Загрузить проект в рабочую область) загружает проект в рабочую область .

Меню Build (Компоновка). Данное меню состоит из команды Rebuild all, Batch build, Start debung, Debugger remote connection, execute загрузочный_файл, Set active configuration, Profile.

Команда  Rebuild all (Переформировать проект) выполняет компиляцию всех исходных файлов проекта  заново и компоновку загрузочного модуля проекта.

Команда Batch build (Пакетная обработка) вызывает на экран диалоговое окно, в котором пользователь может одновременно выбрать и сформировать несколько конфигурации проекта.

Команда Start debung (Запуска отладчика) вызывает подменю,

содержащее команды загрузки текущей программы в режиме отладчика.

Команда Debugger remote connection (Удаленная отладка) позволяет настроить удаленный запуск отладчика.

Команда execute загрузочный файл (Выполнить загрузочный файл)  продолжает выполнение загруженной  и приостановленной программы или запускает на выполнение указанную программу.

Команда Set active configuration (Установить текущую конфигурацию)  позволяет выбрать конфигурацию настроек проекта, используемых при разработке программы.

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

 Меню Tools (Сервис).  Данное меню состоит из команды Source browser, Close source browser files, Customize, Options, Macro, record quick macro, Play quick macro.

Команда Source browser (Просмотр исходных кодов) вызывает диалоговое окно, в котором можно выбрать информацию о компонентах проекта.

Команда Close source browser files (Закрыть файл просмотра исходных кодов) закрывает базу данных просмотра компонентов проекта.

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

Команда Options (Параметры) предназначена для настойки интегрированной среды разработки.

Команда Macro (Макросы) выполняет запись и редактирование макросов.

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

Команда Play quick macro (Запуск макроса) выполняет последовательность действий, записанную с помощью команды record quick macro.

1.2.3 Выполнение первой программы в среде MS Visual C++

Запустите систему MS Visual Studio.

1.2.3.1  В пункте меню File выберите команду  New.

1.2.3.2 В появившемся диалоговом окне перейдите на вкладку Projects.

1.2.3.3  В поле Project name введите имя проекта, например, first.

1.2.3.4 Укажите тип создаваемого проекта, выделив один из элементов списка (Win32 console application).

1.2.3.5 В поле Location задайте путь к папке, в которой будет создан проект.

1.2.3.6 Нажмите Ok, в появившемся окне нажмите Finish и Ok.

1.2.3.7 В окне проекта появятся две закладки Class view и File view.

1.2.3.8 Щелкните на закладке File view, затем на + возле вашего файла в окне проекта.

1.2.3.9 В окне проекта появятся изображения пустых пока папок: Source files, Header files и Resource files.

1.2.3.10 Выполните команду меню Project->Add to project->New.

1.2.3.11 Откроется окно, в котором необходимо выбрать из списка С++ Source files.

1.2.3.12 Задайте имя файла в поле File name, например, first, нажмите Ok.

1.2.3.13 В области редактирования на языке Си наберите текст программы, которая  выведет на экран строку It is my first program!

1.2.3.14 Выполните написанную программу, нажав на кнопку компиляции Compile и кнопку  компоновки Build, а затем на кнопку выполнения  Execute program, если в программе были допущены ошибки, то сообщения о них появятся в окне сообщений.

1.2.3.15 После этого появится окно с результатами выполнения программы   It is my first program.

1.2.3.16 Для закрытия этого окна следует нажать на клавишу Enter.

1.3   Задания к лабораторной работе

1.3.1 Вместо текста на английском языке “It is my first program” набрать “Это моя первая программа”. Выполнить работу в обеих системах.

1.3.1.1 Запустите систему. Наберите текст программы.

1.3.1.2 Откомпилируйте, скомпонуйте и выполните программу.

1.3.1.3 Дайте имя в расширении .срр, например first.срр, и сохраните.

1.3.1.4 Закройте программу.

1.3.1.5 Откройте рабочее пространство и найдите файл first.срр.

1.3.1.6 Выделите его и откройте.

1.4   Контрольные вопросы

1.4.1      Что включает в себе интегрированная среда?

1.4.2      Какие особенности и возможности этих двух систем?

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

1.4.4      Опишите типы файлов.

1.4.5      Библиотека MSDN (Microsoft Developer Network) Visual Studio.

2 Лабораторная работа № 2. Программирование линейных алгоритмов

 

Цель работы – построение алгоритмов и приобретение навыков программирования линейных алгоритмов.

 

2.1  Теория метода

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

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

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

 

- начало и конец алгоритма;

- ввод или вывод информации;

- выполнение арифметических вычислений;

- проверка условия.

 

        

 

 

 

 

 

 

 

 

 

 

 

Рисунок 2.1

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

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

         Структура программы состоит из описательной и и исполнительной

части. Главной частью программы является ее исполнительная часть, то есть

последовательность инструкций, которую должен выполнить компьютер. Эти инструкции принято называть операторами.

Пример. Составить блок – схему алгоритма и программу для вычисления функции   z для заданного x,y.

.

 

Для ввода данных с клавиатуры в программе используется функция scanf (),

она описана в заголовочном файле stdio.h. Математические функции описаны

 

I=1,N-1

Ввод x, y

x

/*  Программа пример */

# include <stdio.h>

# include <math.h>

         void main()

{

int x;

float y,z, z1,z2,z3;

const float pi=3.14;

printf (“Введите значения x, y\n”);

scanf (“%d%f ”, &x&y);

z1=sqrt(x*x+y*y);

z2=sin(x*x+y*y);

z3= exp(5*log(x))*log(y)/pi;

// или z3= pow(x,5)*log(y)/pi;

z=z1/z2+z3;

printf (“z= %5.2f”, z);

}

 

Результаты выполнения программы:

Введите значения x, y

2

3.23

z = 4.12

     Конец

Вывод z

    Начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Рисунок 2.2

в файле math.h   % - спецификации преобразования. Значение z выводится с шириной поли 5 (позиция на экране) и точностью два знака в дробной части.

На рисунке 2.1 представлены блок-схемы алгоритма и программа решения примера.

 

2.2 Задания к лабораторной работе

         2.2.1 Составить блок – схему алгоритма.

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

2.2.3 Вывести на экран результаты вычислений  в виде таблицы.

2.2.4 Построить график функции Y=f(X) заданным точкам.

1.                          2.            3.      

4.           5.                     6.

 

         2.3 Контрольные вопросы

 

         2.3.1 Что такое алгоритм? Назовите и поясните его основные свойства.

         2.3.2 Назовите основные типы данных языка Си.

         2.3.3 Из каких частей состоят алгоритмы линейных структур?

         2.3.4 Основные типы переменных.

         2.3.5 Что такое операторы, назовите основные операторы языка Си.

 

         3 Лабораторная работа № 3. Программирование разветвляющихся алгоритмов

 

Цель работы – построение алгоритмов и приобретение навыков программирования разветвляющихся алгоритмов.

 

3.1            Теория метода

Программирование алгоритмов разветвляющихся структур.

Организация ветвления осуществляется операторами выбора. Операторы выбора – это условный оператор (if), переключатель (switch) и трехарная операция.

3.1.1 Условный оператор. Оператор  if имеет сокращенную форму: if (выражение условия) и полную форму if (выражение условия) оператор_1; else

оператор_2; (Рисунок 3.1). Если значение условия «истинно», то выполняется оператор, следующий за условием, если же условие принимает значение «ложно», то выполняется оператор, следующий за ключевым словом else. Часто встречается необходимость использовать конструкцию if- elseif:

if (условие) оператор;

else if (условие) оператор;

else if (условие) оператор;

…… else оператор.

В этой форме условия операторов if проверяются сверху вниз.

 

Вложенным оператором if называется следующая конструкция:

if (х)

  {

 if (y) оператор 1;

}

else оператор 2;

Условие

Оператор

Истинно

Ложно

(0)

(!=0)

(if)

(0)

Оператор 2

Условие

Истинно

Ложно

(!=0)

(if)

Оператор 1

 


 

 

 

 

 

 

 

 

 

 

Рисунок 5

 

         Пример решения задачи. Составим программу для вычисления функции

 

        

Код программы.

#include <stdio.h>

#include <conio.h>

#include <math.h>

         void main ()

         {  clrscr ();

int x; double y;

printf (“Введите значение целого числа х \n ”);

scanf (“%d”, &x);

if (x<5 && x>-2) Y=5*x*x+67; else if (x>=5) Y=pow(x,3)+7;

printf (“\n Y= %1f”,Y);

getch(); }

 

 

         3.1.2 Оператор switch

            Язык Си имеет встроенный оператор множественного выбора, называемый switch. Основная форма оператора имеет такой вид:

         switch (выражение) {

 

case constant1:

последовательность операторов

break;

case constant2:

последовательность операторов

break;

…..

case constantN :

последовательность операторов

break;

default

последовательность операторов

}

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

         Когда после последовательности операторов встречается ключевое слово break, то выполнение оператора break приводит к выходу из оператора

switch и переходу к следующему оператору программы.

Пример, предположим, что в переменной х хранится целое  число от 0 до 2 и нам нужно выполнить различные действия в зависимости от ее значения:


# include <conio.h>

# include <stdio.h>

void main ()

{ int x;

printf (“Введите х\n”);

scanf (“%d”, &x);

switch (x)

{ case 0:

printf (“%d”,x);

break;

case 1:

printf (“%d”,x);

break;

case 2:

printf (“%d”,x);

break;

defult:

printf (“Необрабатываемое значение);

} getch ();}


3.1.3 Оператор ?:. Этот оператор позволяет создавать однострочные   условные выражения: условия ? выражение 1 : выражение 2; если значение первого операнда – истина, то выполняется  выражение 1(результат операнда 2) операнда; если ложь – выражение 2 (результат третий операнд). Этот оператор называются трехарная (или тернарным), так как он требует наличия 3 операндов. Например, выражение, использующее конструкцию ifelse;

if (‘A’<=c && c<=’Z’) printf (“%c”, ‘a’+c – ‘A’); else printf (“%c”, c),

можно записать иначе

printf (“%c”, (‘A’<=c && c<=’Z’) ? (‘a’+c – ‘A’) : с).

 

3.2 Задания к лабораторной работе        

 

3.2.1 Составить блок – схему алгоритма.

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

3.2.3 Вывести на экран результаты вычислений  в виде таблицы.

3.2.4 Построить график функции Y=f(X) заданным точкам.

 

     

 

                     

 

В качестве f(x) используйте по выбору  x2 или ex.

         3.2.5 Напишите программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели или сообщение об ошибке, если введены неверные данные (использовать оператор switch).

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

 

         3.3 Контрольные вопросы

 

         3.3.1 Как происходит работа условного оператора if?

         3.3.2 Что такое вложенные ветвления ifelse?

            3.3.3 Операторы switch и break.

         3.3.4 Почему оператор ?: называют трехарным?

         3.3.5 Перечислите логические операции .

 

 

         4 Лабораторная работа № 4. Программирование циклических алгоритмов

 

Цель работы – построение алгоритмов и приобретение навыков программирования циклических алгоритмов.

 

4.1 Теория метода

          Программирование циклических алгоритмов. Действия циклов заключается в последовательном повторении определенной части программы некоторое количество раз. Повторение продолжается до тех пор, пока выполняется соответствующее условие. Когда значение выражения, задающего условие, становится ложным, выполнение передается оператору, следующему непосредственно за циклом. Существуют три типа цикла:  

с предусловием (while), с постусловием (do-while) и параметрический (for).

    Операторы перехода выполняют безусловную передачу управления: goto (безусловный переход), continue (завершение текущей итерации цикла), break (выход из цикла или переключателя), return (возврат из функции).

Цикл for подходит для тех случаев, когда мы заранее знаем, сколько раз нам потребуется его выполнения. Циклы while и do-while используются в тех случаях, когда число итераций цикла заранее неизвестно, причем цикл while подходит тех случаях, когда тело цикла может быть не использованным ни разу, а цикл  do-while – когда обязательно хотя бы однократное исполнение тела цикла.

 

4.1.1 Операторы цикла. Оператор цикла состоит из заголовка цикла и тела цикла. Тело цикла – это оператор, который будет повторно выполнятся.

Цикл while имеет вид 

while (выражение условие) тело_цикла

         В качестве выражения условия чаще всего используется отношение или логическое выражение. Если оно истинно, т.е. не равно 0, то тело цикла выполняется до тех пор, пока выражение условия не станет ложным. На рисунке 4.1 показан механизм работы цикла.          

Цикл do-while имеет вид

 do

тело_цикла

while (выражение условия)

         Ключевое слова do обозначает начало цикла. Завершает цикл условие продолжения, описываемое с помощью слова while. На рисунке 4.2 показан механизм работы цикла.   

         Цикл for имеет вид

         for (выражение_1; выражение условие; выражение_3)

         тело_цикла.

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

Оператор for реализует фундаментальный принцип вычислений в программировании – итерацию.

 

Условие

Тело цикла

Истинно

Ложно

(0)

(!=0)

(0)

Условие

  Тело цикла

Истинно

Ложно

(!=0)

 

 

 

 

 

 

 

 

 


                         

 

                            Рисунок 4.1                                       Рисунок 4.2    

 

 

Условие

Истинно

Ложно  (0)

(!=0)

  Тело цикла

  Выражение 3

  Выражение 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Рисунок 4.3

 

         Проиллюстрируем особенности трех типов цикла на примере вычисления приближенного значения

 

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

 

Оператро for.


# include <stdio.h>

# include <conio.h>

void main ()

{

clrscr ();

float x,y,s;

int i,n,k;

printf (“Введите х\n);

scanf  (“%f ”,&x);

printf (“Введите n\n”);

scanf  (“%d ”,&n);

s=0;

for (i=0; i<=n; i++)

{

if (i= =0) k=1; // факториал нуля еденица

else k=k*i; // факториал

y = exp (i*log (x))/ k; // xi = exp (i*log (x))

s=s+y;

}

printf (“s=%1.3f ”, s);

getch ();

}


 

Оператор do-while.


# include <stdio.h>

# include <conio.h>

void main ()

{

clrscr ();

float x,y,s;

int i,n,k;

const double e = 0.0001; // 

точность вычисления

printf (“Введите х\n);

scanf  (“%f ”,&x);

s=1.0; i=1; y=0.0; k=1;

 

do

{

s=s+y;

k=k*i;

y = exp (i*log (x))/ k;

i++;

}

while (y>e);

printf (“s=%1.3f ”, s);

printf (“s=%1.3d ”, i);

getch ();

}


 


Оператор while.

# include <stdio.h>

# include <conio.h>

void main ()

{

clrscr ();

float x,y,s;

int i,n,k;

const double e = 0.0001; // точность вычисления

printf (“Введите х\n);

scanf  (“%f ”,&x);

s=0.0; i=1; y=0.1; k=1;

while (y>e);

{

y = exp (i*log (x))/ k;

s=s+y;

i++;

k=k*i;

}

printf (“s=%1.3f ”, s);

printf (“s=%1.3d ”, i);

getch ();

}


24    4.1.2 Операторы перехода 

Оператор goto

Для использования оператора goto надо ввести понятие метки. Метка – идентификатор, за которым следует двоеточие. Метка должна находиться в той же функции, что и оператор goto. Например, вычислить абсолютную величину значения переменной х.

#include <stdio.h>

#include <conio.h>

void main()

{

clrscr();

int x,y;

if (x>=0)

goto positiv;

x=-x;

positiv : // объявление метки

y=x;

printf(“y=%d”,y);

getch();

}

Оператор continue.

Этот оператор необходим, если вы хотите закончить текущую

итерацию цикла и не выполнять оставшиеся операторы, а сразу

перейти к следующей итерации цикла. Например, если вы хотите найти сумму всех целых чисел от 0 до 100, которые не делятся на 7.

#include <stdio.h>

#include <conio.h>

void main()

{

clrscr();

int i;

float sum;

int sum=0;

for (int i=1; i<=100;  i++)

{ if (i%7 = = 0) continue;

sum=sum+1;

}

printf(“som=%f”,sum);

getch();

}

 

Оператор return.

Оператор return завершает выполнение функции и возвращает управление в ту точку, откуда она была вызвана. Его форма: return выражение; где выражение – это результат функции. Если функция не возвращает никакого значения, то оператор возврата имеет форму return;. Например, вычисляем факториал целого числа.

int fact(int n)

{

int k;

if (n= =1) k=1;

         else k=n*fact (n-1);

return k;

}

 

3.2 Задания к лабораторной работе

3.2.1 Составить блок – схему алгоритма и программу для вычисления выражений:

3.2.1.1                                

3.2.1.2           3.2.1.2       

3.2.1.3                 

3.2.1.4          

3.2.1.4            

3.2.1.5                   

 

 3.2.1.6 Решать задачу с использованием операторов goto, continue, return, break.

3.2.1.7 Вычислить сумму заданного количества (k) первых членов ряда Фибоначчи, если известны первые два (использовать goto).

3.2.1.8 Введя значения переменных n и x, вычислить сумму   , где  n>0. Использовать оператор прерывания break , если n<0

3.2.1.9 Используя оператор continue, суммировать положительные числа.

3.2.1.10 Используя оператор return, вычислить объем цилиндра.

 

        

3.3 Контрольные вопросы

        

3.3.1 Отчего зависит количество выполнения циклов?

         3.3.2 Чем отличается циклические конструкции с предусловием и с постусловием?

            3.3.3 В каких случаях удобно использовать цикл for?

         3.3.4 Можно ли объявить переменные в инструкции цикла?

         3.3.5 Чем отличается continue от break?

         3.3.6 Какой вид имеет return, если не возвращает никакого значения функции?

 

 

5 Лабораторная работа № 5. Функция

 

Цель работы – изучение функции.

 

5.1 Теория метода

5.1.1 Общие сведения о функциях

Функция представляет собой именованное объединение группы операторов. Это объединение может быть вызвано из других частей программы. Наиболее важной причиной использования функций служит необходимость концептуализировать структуру программы.

Программа на языке Си состоит, по крайней мере из одной функции- функции main () (главной функции). С нее всегда начинается выполнение программы. Встретив имя функции в выражении, программа вызовет эту функцию, т.е. передаст управление на ее начало, и начнет выполнять операторы. Достигнув конца функции или оператора return – выход из функции, управление вернется в ту точку, откуда функция была вызвана, подставив вместо нее вычисленный результат. 

Определение функции. Определение функции состоит из заголовка и тела функции.

Тип_имя функции (список параметров)

{тело функции }

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

Объявление функции. Объявление функции состоит из заголовок функции. Тип_имя функции (список параметров);

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

Вызов функции. Для того чтобы вызывать функцию, необходимо только имя функции и круглые скобки. Имя функции -список фактических параметров. При вызове не указывается тип возвращаемого значения. Между формальным и фактическими параметрами должно быть соответствие. Лучше всего, когда тип фактического параметра совпадает с типом формального параметра. В прототипе функции имя формальных параметров можно не писать, поэтому прототип функции может выглядеть или так: int func (float a) или int func (float).

Пример.

# include <stdio.h>

# include <conio.h>

void stline (char, int); //или void stline (char ch, int n) прототип функции

void main ()

{clrscr ();

stline (‘-‘, 25); // вызов функции

printf (“\nТип данных диапазон\n”);

stline (‘=‘,17); // вызов функции

printf (“\nchar    -128 …. 127\n”);

stline (‘+‘,18); // вызов функции ; getch (); }

// Определение функции

void stline (char ch, int n) // заголовок функции

{ int i=0; i<n; i++) // тело функции

printf (“%c”, ch); }

Результат: --------------------------

                Тип данных диапазон

       ================

        char    -128 …. …..27

      +++++++++++++++++

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

 # include <stdio.h>

# include <conio.h>

void stline (char, int);

void main ()

{clrscr ();

char chin; int n;

printf (“Введите символ\n”); scanf (“%c”, &chin);

printf (“Введите число повторений символа:\n”); scanf (“%c”, &n);

stline (chin,n);

getch (); }

void stline (char ch, int n) // заголовок функции

{ int i=0; i<n; i++) // тело функции

printf (“%c”, ch); }

 

Результат: Введите символы: +

                   Введите число повторений символов: 20

                   ++++++++++++++++++++

 

5.1.2 Ссылки на аргументы

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

void swap (int a, int b)                          void swap (int *a, int *b)

{                                                             {

int tpm = a;                                                int tpm = *a;

a = b;                                                         *a = *b;

b = tpm;   }                                               *b = tpm; }

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

         # include <stdio.h>

         # include <conio.h>

         void main ()

{ int k =-3;  positive (&k);

printf (“\nk=%d”, k); getch (); }

void positive (int *m)

{ *m =*m > 0 ? m : -m; }

Результат: k =3. Параметр функции positive () – указатель типа int *m. При обращении к ней из основной программы main () в качестве фактического параметра используется адрес &k переменной типа int. Внутри функции значение аргумента (т.е. адрес &k) “записывается ” в участок памяти, выделенный для указателя int *m. Разыменование  *m обеспечивает доступ к тому участку памяти, на которой в этот момент “смотрит ” указатель m. Тем самым в выражении *m =*m > 0 ? m : -m все действия выполняются над значениями той переменной основной программы (int k), адрес которой (&k) использован в качестве фактического параметра.

 

5.1.3 Указатель на функцию

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

Тип (*имя_указателя), (спецификация_параметров); спецификация_параметров определяет состав и типы параметров функции.

Например. int (*point) (double x).

# include <stdio.h>

# include <conio.h>

void stline (char,int)

void main ()

{clrscr ();

char chin; int n;

printf (“Введите символ\n”); scanf (“%c”, &chin);

printf (“Введите число повторений символа:\n”); scanf (“%d”, &n);

(*stline) (chin,n);

getch (); }

void stline (char chin, int n) // заголовок функции

{ int i=0; i<n; i++) // тело функции

printf (“%c”, chin); }

 

5.1.4 Рекурсия

Существование функций делает возможным использование такого средства программирования, как рекурсия. Рекурсия – это вызов функции

на выполнение самого себя. Классический пример рекурсивной функции – это вычисление факториала целого числа.

         # include <stdio.h>

         # include <conio.h>

int factorial (int); // прототип

         void main ()

{ int n; printf (“Введите целое число n=”); scanf (“%d”, &n);

printf (“Факториал числа n!=%d”, factorial (n));

getch (); }int factorial (int n)

{if (n>1) return n*factorial (n-1); // вызов самой себе

else return 1;}

Если функция main () вызвала функцию factorial () с аргументом , равным 5, то сначала функция factorial () вызовет себя с аргументом – 4, затем этот вызов обратится к функции factorial () с аргументом –3 и т.д. Каждый экземпляр функции хранит свое значение параметра n во время выполнения. После того функция вызывает себя четырежды, пятый вызов производится с аргументом, равным 1. Четвертый вызов хранит значение параметра, равное 2, поэтому, умножая значения 5 вызовам, он получит число 2*1=2, которое будет возвращено третьему вызову. Третий вызов хранит значение параметра, равное 3, поэтому второму вызову будет возвращено значение 3*2=6 и т.д. 

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

 

5.2 Задания к лабораторной работе

5.2.1 Составить программу вычисления функции

 

5.2.1.1 Даны действительные числа s,t , вычислить , 

где     .

5.2.1.2 Дан треугольник с известными длинами а, в, с его сторон, причем а, в, с имеют целые значения. Вычислить периметр и площадь треугольника по формуле Герона.

5.2.1.3 Составить программу для вычисления функции (использовать рекурсию)

 

 

В функции вычисляется

 

 

         5.2.1.4 Вычислить значение функции

     

        

 

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

 

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

 

         5.3 Контрольные вопросы

 

         5.3.1 Определение и вызов функции.

         5.3.2 Возврат значения функций, оператор return.

            5.3.3 Прототип функции.

         5.3.4 Область видимости функции и класс памяти.

         5.3.5 Рекурсия.

         5.3.6 Способы передачи аргументов в функцию.

 

6 Лабораторная работа № 6. Массивы. Обработка одномерных и двумерных массивов

 

Цель работы – программирование структур данных типа массив

 

6.1 Теория метода

6.1.1 Общие сведения о массивах

Массив – это структурированный тип данных, который представляет фиксированное число элементов, связанных между собой по определенному правилу и имеющих один и тот же тип. Каждый элемент массива

определяется именем массива и порядковым номером элемента, которой называется индексом. Индекс всегда целое число. Размером массива задается константой или константным выражением. Различают одномерные массивы (векторы) и двумерные массивы (матрицы). Индекс одномерного массива указывает на порядковый номер элемента в нем. В двумерном массиве первый индекс соответствует номеру строки, а второй – номеру столбца, в которых стоит элемент. Первый элемент массива всегда начинается с нуля.

Определение массива. Основная форма определения массива размерности N такова: тип <имя массива>[размер1] [размер2]…. [размерN]. В одномерном массиве: тип <имя массива>[размер]; тип – базовый тип элементов массива, размер – количество элементов одномерного массива. При двумерном: тип <имя массива>[размер1][размер2]. Объявление двумерного массива можно трактовать как объявление массива массивов, т.е. массив размера [размер2], элементами которого являются одномерные массивы <имя массива>[размер1].

Инициализация массива. Инициализация – это объединение определения объекта с одновременным присваиванием его элементам значения. Значения, которыми инициализируется массив, заключаются в скобки и разделяются запятыми. Например, int A []= {1, 2, 5, 9, 10}. В данном примере не указано количество элементов одномерного массива, оно вычисляется по количеству начальных значений, перечисляемых в фигурных скобках A [0] = 1, A [1] = 2 и т.д. до A [4]= 10. Если количество начальных значений меньше, чем объявленная длина массива, то начальные значения получат только первые элементы массива: int A [8] = {8,4,2}. Инициализируются только переменные A [0]= 8, A [1]= 4, A [2]= 2, а остальные элементы A [3],…, A [7] не инициализируются.

В двумерный массив можно инициализировать, рассматривая их как массив массивов int A [3][5]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; и int A [3][5]= {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}}; эквивалентны. В то же время инициализации int A [3][5]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; и int A [3][5]= {{1, 2, 3}, {4, 5, 6, 7, 8}, {9, 10, 11}}; различны.

Символьные массивы могут инициализироваться как обычный массив:

shar str[15]={‘C’,’+’,’+’}; а могут – как строка символов shar str[15]=“C++”; Отличие этих двух способов состоит в том, что во втором случае будет добавлен еще и нулевой байт. К тому же второй способ короче. Допускаются также объявление и инициализация массива без явного указания размера массива. В языке Си не проверяется выход индекса за пределы массива. Если массив А [100] описан как целочисленный массив, имеющий 100 элементов, а вы в программе укажете А [200], то сообщение об ошибке не будет выдано, а в качестве значения элемента А [200] будет выдано некоторое число, занимающее соответствующие 2 байта.

 

6.1.2 Одномерные массивы.

Ввод и вывод массивов осуществляется с помощью оператора цикла:

for (i=0; i<=4; i++)

scanf (“%d”, &A [i]);  ввод одномерного массива А [5].

for (i=0; i<=4; i++)

printf (“%d”, &A [i]);  вывод одномерного массива А [5].

Массив состоит из 5 элементов: A [0] первый элемент, A [1]-второй,…, A [4] – пятой элемент.

Примеры

1 Ввод и вывод элементов массива

 # include<stdio.h>

void main ()

{

int age [4];

for (int i=0; i<3; i++)

{

printf (“\n Введите возраст: ”);

scanf (“%d”, &age[i]);

}

for (int i=0; i<3; i++)

printf (“\n Вы вели: %d”, age[i]);

}

Результат.  Введите возраст: 44

         Введите возраст: 16

                   Введите возраст: 23

         Введите возраст: 68

 

         Вы ввели: 44

         Вы ввели: 16

         Вы ввели: 23

         Вы ввели: 68

2 Упорядочение элементов массива

# include <stdio.h>

# include <conio.h>

void main ()

{

int n, i, j;

float A[100],k;

printf (“Введите количество элементов n:\n”);


scanf (“%d ”, &n);

for (i=0; i<n; i++)

{

printf (“A [%d]”, i);

scanf (“%f ”, &A [i]);

          for (j=0; j<n-1; j++)                 

 

for (i=1; i<n; i++)

if (A [j])>A [i]

{

k=A [j]; A [j] = A [i]; A [i] = k;

}

printf (“Упорядочный  

массив\n”);

          for (i=0; i<n; i++)

printf (“A [%d]=%f\n”, i, A [i]);

getch ();

}

Результат. A [0] = 32.3

                  A [1] = -4

                  A [2] = 0.11

Упорядочный массив

                  A [0] = -4

                  A [1] = 0.11

                  A [2] =32.3

Каждый элемент A [j], начиная с A [0] сравнивается со всеми последующими, и на место A [j] выбирается минимальный



3 Определить минимальное число и их количество из элементов массива

# include <stdio.h>

# include <conio.h>

void main ()

{

int n, i, k;

float A[100], min;

printf (“Введите количество

элементов n:\n”);

scanf (“%d ”, &n);

for (i=0; i<n; i++)

{

printf (“A [%d]”, i);

scanf (“%f ”, &A [i]);

}

min = A [0], k=0;

for (i=1; i<n; i++)

if (min>A [i] min = A [i];

for (i=0; i<n; i++)

if (min= = A [i]) k=k+1;

printf (“Упорядочный

массив\n”);

for (i=0; i<n; i++)

printf (“\n min=%f , коли-

чество min=%5d ”, min, k);

getch ();

}


 


4 Объединение двух массивов в один

# include <stdio.h>

# include <conio.h>

#include <math.h>

# define B 3

      void main ()

{

clrscr ();                                           { if (k<B) c[k++]= a[i++];

int a[B];                                           else c[k++] = b[j++];

 int b[B];                                                    }

int c[2*B];                                       while (k<2*B);

int i,j,k;                                            for (i=0; i<2*B; i++)

for (i=0; i<B; i++)                           printf (“\t%d “, c[i]);

scanf (“%d ”, &a[i]);                       getch ();

printf (“\n”);                                    }

for (j=0; j<B; j++)                         

scanf (“%d ”, &b[j]);                     

k = i = j = o;                                   

do                                                               



5 Вывести одномерный массив  наборот                                           

# include <stdio.h>

# include <conio.h>

# define B 2

      void main ()

{

clrscr ();

int a[B]; int i;

for (i=0; i<B; i++)

scanf (“%d ”, &a[i]);

printf (“\n”);

for (i=B; i>=0; i--)

printf (“\t%d “, a[i]);

getch ();

 

6 Разделить а[8] на два массива, записать в один из них элементы с четными номерами, а в другой – с нечетными

# include <stdio.h>

# include <conio.h>

      void main ()

{

clrscr ();

const int n=7;

int a[100]; b[100]; c[100];

int i,j,k,s;

j=k=s=0;

for (i=0; i<=7; i++)

{

a[i]=rand ()%20; //псевдо-

случайное целое число

printf (“\t%d “, a[i]);

if (a[i]%2 = =0) // четные

элементы

{ b[j]=a[i]; j++;k++; } //к –

число четных элементов

else {c[s]=a[i]; s++}// не-

четные элементы

}

printf (“\n”);

for (j=0; j<k; j++)

printf (\t%d ”, b[j]);

printf (“\n”);

for (s=0; s<=n-k; s++)

printf (\t%d ”, c[s]);

getch ();}



 

6.1.3 Двумерные массивы.

При переработке элементов двумерных массивов необходимо открыть два цикла для изменения номера строки (i) и номера столбца (j), т.е. в одном цикле организовать другой.

Элементы главной диагонали имеют равные индексы строк и столбцов (i=j), поэтому при их переборе можно использовать только один цикл. Для элементов, расположенных выше главной диагонали, номер строки меньше номера столбца (i<j), а для элементов ниже главной диагонали–наборот (i>j).

Для элементов побочной диагонали номера строки и столбца меняются одновременно, номер строки изменяется от 1 до n с шагом +1, а номер столбца от n до 1 с шагом –1. Кроме того, для элементов побочной диагонали характерно i+j=n+1 (n- порядок матрицы).

Примеры


1 Дана матрица a[4][4]. Все элементы ниже главной диагонали обнулить, выше – заменить «3», а на главной диагонали заменить «7».

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

void main()  {clrscr();

int a[100][100], k, i, j, n;

         printf("Bedite n=");

         scanf("%d",&n);

         k=1;


         for(i=1; i<=n; i++)

         {

         for(j=1; j<=n; j++)

         {

         a[i][j]=k; k++;

         printf("%d",a[i][j]);

         printf("\t");

         }

         printf("\n");

         }

         printf("\n");

         for(i=1; i<=n; i++)

         {

         a[i][i]=7;

         for(j=1;j<=n;j++)

         {

         if(i>j) a[i][j]=0;

         if(i<j) a[i][j]=3;

         printf("%d", a[i][j]);

         printf("\t");

         }

         printf("\n");

         }

         getch();

         }


 


2 Дана матрица a[4][4]. Найти сумму элементов матрицы и заменить элементы побочной диагонали на «7» 

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

void main()

{

         clrscr();

         int a[100][100],k,i,j,n;

         float s;

         printf("Bedite n=");

         scanf("%d",&n);

         k=1;

for(i=1;i<=n;i++)

         {

         for(j=1;j<=n;j++)

         {

         a[i][j]=k;k++;

         printf("%d",a[i][j]);

         printf("\t");

         s=s+a[i][j];

         }

         printf("\n");

         }

         printf("s=%1.1f\n",s);

         printf("\n");

         for(i=1;i<=n;i++)

         {

 

          a[i][5-i]=7;

         for(j=1;j<=n;j++)

         {

         printf("%d",a[i][j]);

         printf("\t");

 

         }

         printf("\n");

         }

         getch();

         }


 


3 Дана матрица a[4][4]. Найти сумму элементов каждой строки (столбцы ).

#include<conio.h>

#include<stdio.h>         

#include <stdlib.h>

         void main()

        {

         clrscr();

         int a[100][100],s[100],k,i,j,n;


         printf("Bedite n=")


         scanf("%d",&n);

         k=1;

         for(i=1; i<=n; i++)

         {

         for(j=1; j<=n; j++)

         {

         a[i][j]=k; k++;

         printf("%d",a[i][j]);

         printf("\t");

         }

         printf("\n");

         }

         printf("\n");

         /*в циклах при столбце, i

          менять на j*/

         for(i=1; i<=n; ++)


      

         {

         s[i]=0;

         for(j=1; j<=n; j++)

         {

         s[i]=s[i]+a[i][j];

          }

         printf("s[%d]=%d\n",i,s[i]);

         printf("\n");

         }

         getch();

         }


 


4 Поворот исходного массива на 180 0

 

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

void main()

{

         clrscr();

         int a[100][100],

b[100][100];

          int k, i;

int j, n;

         printf(“Bedite n=”);

         scanf(“%d”,&n);

         k=1;

         for(i=1; i<=n; i++)

         {

         for(j=1; j<=n; j++)

         {

         a[i][j]=k;

k++;

         printf(“%d”,a[i][j]);

         printf(“\t”);

         }

         printf(“\n”);

}

printf(“\n”);

         for(i=1;i<=n;i++)


         for(j=1;j<=n;j++)

         {

         b[i][j]=a[n+1-i][n+1-j];

          printf("%d",b[i][j]);

         printf("\t");

         }

         printf("\n");

         }

         getch();

}

        

6.2 Задания к лабораторной работе

        

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

6.2.1.1 Дан массив А(5). Найти сумму и количество положительных элементов.

6.2.1.2 Дан массив А(5). Найти наименьший положительный элемента среди  элементов с четными номерами массива.

6.2.1.3 Найти наибольший среди элементов массива А(10),  остальные обнулить.

6.2.1.4 Дана матрица А(5,5). Все элементы ниже главной диагонали обнулить,   выше – заменить на  «3».

6.2.1.5 Дан массив А(4,3). Переписать все его элементы в вектор В.

6.2.1.6 Найти среднее арифметическое отрицательных элементов матрицы А(4,4).

6.2.1.7 Поворот исходного массива на 90 .

 

         6.3 Контрольные вопросы

 

         6.3.1 Что представляет собой массив как структура данных?

         6.3.2 Каким образом задается описание массива, что в нем указывается?

         6.3.3 Что называют инициализацией массива?

         6.3.4 Динамические массивы.

         6.3.5 Передача массивов в функции.

    6.3.6 Сортировка массива пузырьковым методом.

 

 

7 Лабораторная работа № 7. Обработка строк, символов и текстов

 

Цель работы – работа символьным переменным и со строками

 

7.1 Теория метода

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

7.1.1 Символьные переменные. Символьные переменные – это величина размером в 1 байт, которая используется для представления бите и целых чисел в диапазоне от 0 до 255 или от –128 до 127 в зависимости от того, знаковая эта переменная или беззнаковая. Единственное, что может хранить компьютер, это числа. Поэтому для того чтобы можно было хранить символы и манипулировать ими, символам присвоены коды – целые числа. Согласно стандарту ASCII, каждому символу и некотором управляющим инструкциям соответствует свой числовой код, принимающий значения от 0 до 127. Русские буквы кодируется числами от 128 до 255. Максимальное число символов могут быть 255.

         Для символьных данных языка Си служит базовый тип char. Описание символьных переменных имеет вид: char список_имен переменных; Например: char a, z;

         Ввод-вывод символьных данных. Для ввода и вывода символьных значений в форматных строках библиотечных функций scanf() и printf() используется спецификация преобразования  %c.

Например -

         # include <stdio.h>                       # include <stdio.h>   

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

         void main ()                                  void main ()

         {                                                    {

         char z;                                            char z;

         printf (“Введите символ”);          printf (“Нажмите какую-либо клавишу”);

         scanf (“%c” , &z);                         z=getchar(); //вводит один символ

         printf (“%c” , z);                            putchar(z);

         getch ();                                         getch ();

         }                                                      }

         Помимо scanf () и printf(), для ввода и вывода символов в библиотеке предусмотрены специальные функции: getchar() – функция без параметров, которая позволяет читать с клавиатуры по одному символу за обращение;  putchar(z) выводит символьные значения z на экран дисплея (вторая программа).

7.1.2   Символьные константы.

         Для изображения отдельных знаков, имеющих индивидуальные внутренние коды, используются символьные константы. Каждая символьная константа-это лексема, которая состоит из изображения символа и ограничивающих апострофов. Например: ‘A’, ‘a’, ‘0’,’+’ и т.д. Символьная константа имеет целый тип, т.е. символы можно использовать в качестве целочисленных операндов в выражениях.

         # include <stdio.h>

         void main ()

         {

         char z;

          z=’a’;

         printf (“%c”,z); }

        

         7.1.3 Строки

         В отличие от других языков (например от Паскаля (string), в языке Си нет отдельного типа для строк. Принято, что строка – это массив символов, заканчивающийся нулевым байтам, она всегда имеет тип char[]. Так как в конец строки добавлен нулевой байт ‘\0’, количество элементов в таком массиве на 1 больше. В программе строки представляются последовательностью изображений символов, заключенной в кавычки, “любые символы”. В записи строки может быть один символ “А”, однако, в отличие от символьной константы ‘А’, длина строки равна двум байтам.

В преобразователе %s.

         Пример-

         # include <stdio.h>

         void main ()

         { char A[17]=”Сезам, откройся!”;

         printf (“%s” ,A); }

В приведенном примере при инициализации массива выделяются 17, байтов из них 16 символов и плюс нулевой байт окончания строки. Кроме функции scanf() и printf(), для ввода-вывода используется gets() и puts().

Пример-

         # include <stdio.h>

         void main()

         shar str[80];

         { printf (“Введите Ваше имя:”) ;

gets (str);

         printf(“Ваше имя:”);

puts(str); }

          

         7.1.4 Строки и указатели

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

сhar A[]=”Hello, word!” – массив, в котором записана строка char*A=”Hello,

word!” –  строка записана с помощью указателя. В следующем примере, использующем приведенные функции, в массиве result будет образована строка «1 января 1998 года, 12 часов»:

         char result[100];

         char*date = “1 января 1998 года ”;

         char*time = “12 часов”;

         strspy(result, date);

         strcat(result, “,”);

         strcat(result, time);

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

длины. В следующей программе определен и при инициализации связан набор строки, одномерный массив А[] указателя char*.

         # include <stdio.h>

         void main ()

{char*A[] = {“one”, “two”, “three”, “four”, “five”};

         int i,n;

         for(i=0;i<=4; i++)

         printf(“\t%s”, A[i]);

}

 

Для символьных функции scanf() и printf() строк используется спецификация

Результат: one, two, three, four, five.

 

7.1.4 Функции для работы со строками

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

Функция strcpy(). Вызов функции strcpy () имеет вид strcpy(s1,s2). Она используется для копирования содержимого строки s2 в  строку s1.

Функция strcat() имеет вид strcat(s1,s2). Функция присоединяет строку s2 к  строке s1 и помещает ее в массив, где находилась строка s1, при этом строка s2 не изменяется. Нулевой байт , который завершал строку s1, будет заменен первым символом строки s2.

Функция strlen() имеет вид strlen(s). Функция возвращает длину строки s, при этом завершающий нулевой байт не учитывается.

Функция strcmp() имеет вид strcmp(s1,s2). Сравнивают строки s1 и s2. Результат отрицателен, если s1<s2; равен 0, если строки равны, и положителен , если s1>s2 (сравнение беззнаковое).

         Функция strstr() имеет вид strstr(s1,s2). Ищет в строке s1 подстроку s2. Вовращает указатель на тот элемент в строке s1, с которого начинается под- строка s2.

         Примеры

         1 Копирование, объединение двух слов, и найти длину строки:

# include <stdio.h>

# include <conio.h>

# include <string.h>

void main ()

{

 clrscr();

char s1[10], s2[10];

char des[40];

scanf (“%s”, &s1);

scanf (“%s”, &s2);

strcat (des,s1);

strcat (des,s2);

strcpy(s1,s2);

printf (“%s”, s1);

printf (“\n%s”, des);

printf(“Длина строки (число символов) s2=%d”,strlen(s2));

getch ();

}

 

2 Даны слова, найти сколько буквы «а»

# include <stdio.h>

# include <conio.h>

void main ()

{

clrscr ();

char*s1;

int i,k;

scanf (“%s”, &*s1);

for (k=0, i=0; s1[i]!=’\0’; i++)

if (s1[i]== ‘a’) k++;

printf (“%d”, k);

 getch ();

}

 

3 Даны предложения, найти количество слов

# include <stdio.h>

# include <conio.h>

void main ()

{

clrscr ();

char s1, s2;

int k;

printf (“Напишите предложения с точкой в конце: \n ”);

for (k=1, s1=s2=’ ‘; s1!=’.’; s2= s1)

{scanf (“%c”, &s1);

if (s1== ‘ ’)  &&  s2=’ ’ ) continue; if (s1==’ ’)  k++; }

printf (“%d”, k);

getch ();}

 

4 Считывание символов

# include <stdio.h>

# include <conio.h>

void main ()

{

clrscr (); char s1; int k;

for (k=0, (s1=getchar())!=’.’; )

if (s1!= ‘ ’)  k++; printf (“%d”, k); getch (); }

 

         7.2 Задания к лабораторной работе        

 

7.2.1 Дана строка символов. Определить количество слов, начинающихся с        буквы “с”.

7.2.2  Дана строка символов. Вывести на экран самое длинное слово.

7.2.3  Даны два слова, сложить и найти длину .

7.2.4  Написать программу , которая запрашивает у пользователя имя и отчество, затем здоровается с ним.

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

7.2.6 Дана строка текста , в которой слова разделены двоеточиями и пробелами.

Необходимо :

а) определить количество слов в строке и вывести на экран все слова, количество букв у которых нечетное;

     б) найти самое короткое слово в строке, которое заканчивается на букву «а»;

в) исключить из строки все слова, которые заканчиваются на букву «а».

7.2.7 Дана строка, состоящая из групп нулей и единиц, разделенных пробелом. 

Найдите и выведите на экран группы с четными количеством символов.     

 

7.3 Контрольные вопросы

        

7.3.1 Строка – это массив символов.

7.3.2 Инициализация символьных переменных.

         7.3.3 Стандартные функции  при работе со строками.

         7.3.4 Указатели на строки.

         7.3.5 Библиотека обработки символов.

8 Лабораторная работа № 8. Файлы. Файлы последовательного и прямого доступа

 

         Цель работы – работы с файлами.

 

      8.1 Теория метода

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

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

Поток – это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику. Чтение данных из потока называется извлечением, а вывод в поток – помещением, включением. Обмен с потоком производится через специальную область – буфер. Фактическая передача данных происходит  при выводе, после заполнения буфера, а при вводе – если буфер исчерпан.

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

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

В языке Си существуют два типа потоков: текстовой и двоичный. Текстовой поток – это последовательность символов. Двоичный поток – это последовательность байтов, которые взаимооднозначно соответствуют тому, что находится на внешнем устройстве. Каждый поток, связанный с файлом, имеет управляющую структуру, называемую FILE. Она описана в заголовочном файле stdio.h. В структуре FILE содержатся компоненты, с помощью которых ведется работа с потоком, в частности, указатель на буфер, указатель текущей позиции в потоке и другая информация. При открытии потока в программу возвращается указатель на поток, являющийся указателем на объект структурного типа FILE. Этот указатель идентифицирует поток во всех последующих операциях. Указатель на поток, например f1, должен быть объявлен в программе следующим образом:

#include<stdio.h>

FILE *f1.

Указатель на поток приобретает значение в результате выполнения функции «открытие потока»:

f1= fopen(имя_файла, режим_открытия);

f1= fopen(“t.txt”, “r”),

где “r” – существующий текстовый файл открывается только для чтения.

При открытии потока могут возникнуть ошибки. При открытии для вывода на экран дисплея сообщения об ошибке используется стандартная

 

Функции

                                     Действие функции

fopen()

Открыт файл

Flcose()

Создать для записи

putc()

Записать символ в поток

getc()

Прочитать символ из потока

fseek()

Изменить указатель позиции файла на указанное место

Fprintf()

Форматная запись в файл

Fscanf()

Форматное чтение из файла

feof()

Возвращает значение «истинно», если достигнут конец файла

ferror()

Возвращает значение «ложно», если обнаружена ошибка

fread()

Читает блок данных из потока

fwrite()

Пишет блок данных в поток

Rewind()

Устанавливает указатель позиции файла на начало

Remove()

Уничтожает файл

         8.1.2 Режимы работы файлов

Режим

                                          Действие

r

Открыть для чтения

w

Создать для записи

a

Открыть для добавления в существующий файл

rb

Открыть двоичный файл для чтения

wb

Открыть двоичный файл для записи

ab

Открыть двоичный файл для добавления

r+“

Открыть файл для чтения и записи

w+“

Создать файл для чтения и записи

a+“

Открыть для добавления или создать для чтения и записи

r+b

Открыть текстовый файл для чтения и записи

w+b

Создать двоичный файл для чтения и записи

a+b

Открыть двоичный файл для добавления или создать для чтения и записи

rt

Открыть текстовый файл для чтения

wt

Создать текстовый файл для записи

at

Открыть текстовый файл для добавления

r+t

Открыть текстовый файл для чтения и записи

w+t

Создать тестовый файл для чтения и записи

a+t

Открыть текстовый файл для добавления или создать для чтения и записи

библиотечная функция perror(), прототип  void perror(const char*s). Заметим,

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

if ((f1=fopen (“t.txt”, “w”))= =NULL)

         {

         perror(“Ошибка при открытии файла t.txt \n”);

         getch(); return 1; }

Для закрытия файла используется библиотечная функция int fclose (указатель_на _поток);

 

8.1.3 Работа с файлами на диске. Файлы последовательного доступа.

Для работы с файлами на диске в библиотеку языка Си включены следующие функции:

fgetc(), getc() - ввод (чтение) одного символа из файла;

fputc(), putc() - запись одного символа в файл;

fprintf() - форматированный вывод в файл;

fscanf() - форматированный ввод (чтение) из файла;

fgets() - ввод (чтение) строки из файла;

fputs() - запись строки в файл.

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

c=getc(f1), int getc (FILE *stream); putc(c,f1), int putc (int c, FILE *stream), где с- переменная типа int для приема очередного символа из файла или для записи ее значения в файл.

Пример использования этих функций. В программе задается имя файла и записывает в нее поток символов.

#include<stdio.h>

#include<conio.h>

int main()

{

clrscr();

FILE *f1;

char c; char fname[20];

puts("Введите имя файла:");

gets(fname); // gr.txt

if ((f1=fopen (fname,"w"))==NULL)

{perror (fname); return 1;}

while ((c=getchar ()) != '.' ) // Ввести предложение, заканчивающееся точкой

putc(c,f1);

fclose(f1);

getch();

return 0;

}

Следующая программа читает поток символов из ранее созданного файла и

выводит его на экран.

#include<stdio.h>

#include<conio.h>

int main()

{

clrscr();

FILE *f1;

char c; char fname[20];

puts("Введите имя файла gr.txt:");

gets(fname); // см. предыдущие программы

if ((f1=fopen (fname,"r"))==NULL)

{ perror (fname); return 1; }

while ((c=getc(f1)) != EOF)

putchar (c);

fclose (f1);

getch();

return 0;

}

         8.1.4 Строковый обмен с файлами. Строковый режим обмена организуется с помощью функции fgets () , fputs () и их прототипов int fputs (const char *s, FILE *stream), char *fgets (char *s, int n, FILE *stream).

         Функция fputs () записывает ограниченную символом ‘\0’ строку (на которую указывает s) в файл, определенный указателем stream на поток, и возвращает неотрицательное целое. Функция fgets () читает из определенного указателем stream файла не более (n-1), записывает их в строку, на которую указывает s. Функция прекращает чтение, как только прочтет n-1 символов или встретит символ новой строки ‘\n’, который переносится в строку s. В качестве примера с помощью функции переписать содержимое файла tok.txt (f1) в файл tk.txt (f2)

3. #include<stdio.h>

include<conio.h>

int main()

{

clrscr();

FILE *f1,*f2;

int n; char cc[256]; // массив для обмена с файлами

if ((f1=fopen ("tok.txt","r"))==NULL) // открытие входного файла

{perror ("tok.txt"); return 1;}

if ((f2=fopen ("tk.txt","w"))==NULL) // открытие выходного файла

{perror("tk.txt"); return 1;}

while (fgets(cc, 256, f1)!=NULL) // запись содержимого файла f1 в f2;

fputs(cc,f2);

fclose (f1); fclose (f2);

return 0; getch ();

}

         8.1.5 Режим форматного обмена с файлами. Форматный режим обмена  организуется с помощью функций fprintf () , fscanf () и их прототипов int fprintf (указатель_на_поток, форматная строка, список переменных), int fscanf (указатель_на_поток, форматная строка, список_адресов_переменных). От функций printf (), scanf () для форматного обмена с дисплеем и клавиатурой функций fprintf () , fscanf () отличаются лишь тем, что в качестве первого параметра в них необходимо задавать указатель на поток, с которым производится обмен.

Примеры

1 В заранее созданном файле bi.txt находится фамилиям, имя и номер телефона клиентов фирмы. Напишем программу: по фамилиям клиентов находить имя и номер телефонов. Если есть люди с одинаковыми фамилиями, то программа должна вывести список эти людей. 


1. #include<stdio.h>

#include<conio.h>

#define FNAME "C:\\bi.txt\0"

void main()

{

clrscr();

char *fname=FNAME;

FILE*in;

char *fam;int n=0;char *obr;

puts("\nВведите фамилию клиентов");

if ((in=fopen(fname,"rt"))==NULL)

{

printf("Ошибка открытия файла для записи");

getch();

return;

}

scanf("%s",&obr);

while (!feof(in))

{

fscanf(in,"%s %s %s",&fam);

if (fam==obr)

{

printf("%s  %s  %s\n",fam);

n++;

}

}

printf("N=%i",n);

fclose(in);

getch();

}


 

2 В заранее созданном файле numbers.txt дана матрица 4х4. Напишем программу, которая вычисляет сумму элементов каждой строки.

#include<stdio.h>

#include<conio.h>

#define FNAME "C:\\numbers.txt\0"

void main()

{ clrscr();

char fname[20]=FNAME;

FILE*in;

int a;int n=0;int sum1,sum2,sum3,sum4;

puts("\n");

if ((in=fopen(fname,"rt"))==NULL)

{printf("Ошибка открытия файла для записи"); getch(); return; }

sum1=sum2=sum3=sum4=0;

while (!feof(in))

{

fscanf(in,"%i",&a);

if (n<4) sum1+=a; if (n>3 && n<8) sum2+=a;

if (n>7 && n<12) sum3+=a; if (n>11 && n<16) sum4+=a;

n++;

}

fclose(in);

printf("\nsum[1]=%i\n",sum1); printf("sum[2]=%i\n",sum2);

printf("sum[3]=%i\n",sum3); printf("sum[4]=%i\n",sum4);

getch();

}

 

3 В файле numbers.txt дано некоторое целое число, определить сколько чисел, равных числу, введенному пользователем.

#include<stdio.h>

#include<conio.h>

#define FNAME "C:\\numbers.txt\0"

void main()

{

clrscr();

char fname[20]=FNAME;

FILE*in;

int a;int n=0;int k;

if ((in=fopen(fname,"rt"))==NULL)

{ printf("Ошибка открытия файла для записи"); getch(); return; }

scanf("%i",&k);

while (!feof(in))

{

fscanf(in,"%i",&a);

if (k==a) n++;

}

fclose(in);

printf("\n‚Количество одинаковых чисел=%i\n",n);

getch();

}

         8.1.6 Работа с файлами на диске. Файлы произвольного доступа.

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

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

включена функция fseek() для перемещения указателя текущей позиции в потоке на нужный байт файла. Она имеет следующий прототип: int fseek (указатель_на_поток, смещение, начало_отсчета). Функция fseek() возвращает 0, если перемещение в потоке выполнено успешно, в противном случае возвращается ненулевое значение. Смещение задается переменной или выражением типа long и может быть отрицательным, т.е. возможно перемещение по файлу в прямом и обратном направлениях. Для переменного типа long выделяются 4 байта, чем и определен диапазон его значений.  Начало отсчета задается одной из предопределенных констант, размещенных в заголовочном файле stdio.h:

         SEEK_SET (имеет значение 0) – начало файла;

         SEEK_CUR (имеет значение 1) – текущая позиция;

         SEEK_END (имеет значение 2) – конец файла.

Приведем примеры      использования функции fseek(). В файле vac.txt даны цифры от 1 до 20, записаны через пробел. В зависимости от значения k, задающего пользователем, и i можно прочитать вам нужные цифры. Если задаете k=250, получите на дисплее цифры 4 5 6 7 8, т.к. i меняется от 0 до 9.


#include<stdio.h>

#include<conio.h>

int main()

{

clrscr();

int i,k;

char buf[30];

char *c;long pos;

char ln;

FILE*fp;

int lang;

if ((fp=fopen("vac.txt","r"))==NULL)

{

perror("vac.txt");

return 1;

}

while (1)

{

c=buf;

puts("Введите цифру (0 – для завершения):");

scanf("%d",&k);

if (k==0)

{

fclose(fp);

return 0;

}

pos=(256-k);

fseek(fp,pos,SEEK_END);

for(i=0;i<=9;i++)

*c++=getc(fp);

   c++;

   *c='0';

   printf("%d->%s\n",k, buf);

}

fclose(fp);

return 0;

getch();

}


Следующая программа вычисляет сумму чисел, начиная с выбранной подстроки. Пусть  k=240, подстрока начинается с 9 и дает сумму 174. Суммирует с 9 до 20. На экране дисплея программа выводит

значения суммы чисел и суммируемые числа.


#include<stdio.h>

#include<conio.h>

int main()

{clrscr();

FILE*fp;

int a,k,i;int n=0;int sum;long pos;char


*c;char buf[30];

if ((fp=fopen("vac.txt","r"))==NULL)

{

perror("vac.txt");

return 1;

}

sum=0;

puts("Введите цифру (0 – для завершения): ");

scanf("%d",&k);

if (k==0)

{

fclose(fp);

return 0;

}

pos=(256-k);

fseek(fp,pos,SEEK_SET);

while (!feof(fp))

{

fscanf(fp,"%i",&a);

sum+=a;

}

printf("\nСумма чисел sum=%i\n",sum);

fseek(fp,pos,SEEK_SET);

{

c=buf;

for(i=0;i<256;i++)

*c++=getc(fp);

 c++;

 printf("%d->%s\n",k, buf);

}

fclose(fp);

getch();

return 0;

}


 


 

         8.2 Задания к лабораторной работе   

8.2.1 Создайте файл (диск С) number.txt и запишите в него элементы матрицы A[3,3]. Вычислите сумму элементов этой матрицы. Вывести результат на экран.

8.2.2 Напишите программу, которая выводит на экран содержимое файла С:\  number.txt.

8.2.3 Напишите программу, которая дописывает в файл, находящийся на диске С, массив В[3].

8.2.4 Создайте файл и записывайте в него символьные изображения чисел от 1 до 10 и их квадраты.

8.2.5 Создайте два файла: f1.dat и f2.dat. Перепишите содержимое  f1.dat в файл f2.dat.

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

8.2.7 Информация об участниках спортивных соревнований содержит:

Ф.И.О. игрока; игровой номер; возраст; рост; вес.

 

         8.3 Контрольные вопросы

 

         8.3.1 Потоки и для чего даны стандартные потоки.

         8.3.2 Функции и режим работы файлов.

         8.3.3 Файлы последовательного и прямого доступа.

         8.3.4 Строковый и форматный обмен с файлами.

         8.3.5 Какими функциями выполняется чтение и запись данных из тестового файла?

         8.3.6 Что проверяет функция ferror?

 

         9 Лабораторная работа № 9. Графика

 

         Цель работы – изучение возможности графического режима языка Си.

        

         9.1 Теория метода

Работа в графическом режиме

         9.1.1 Инициализация графического режима. Видеопамять, размещаемая на плате управления дисплеем – адаптерем, хранит образ экрана – страницу. Использование видеопамяти обеспечивает драйвер – программа, взаимодействующая с адаптером. Управление экраном в графическом режиме производится с помощью наборов функций, прототипы которых находятся в заголовочном файле graphics.h. Файл graphics.h должен быть подключен с помощью директивы #include < graphics.h. > препроцессора языка Си ко всем модулям, использующим графические подпрограммы. В зависимости от типа дисплея, объема видеопамяти и вариантов ее расходования для представления страниц и цветности, программе указывают соответствующий драйвер и режим его работы,  производят инициализацию графического режима с помощью оператора initgraph (драйвер, режим, путь к файлу драйвера), где драйвер, режим – переменные типа int. Для максимальных возможностей использования режима работы применяются видеоадаптеры int driver=DETECT, gmode, errorcode; инициализация, графики initgraph (&graphdriver, &gmode, “..\\bgi”). Ошибку результата работы графика можно узнать с помощью функции graphresult ().

Ее шаблон

         errorcode = graphresult ();

         if (errorcode !=grOk)

         {

         printf (“Ошибка: %s\n”, grapherrormsg (errorcode ));

         printf (“Для останова нажмите любую клавишу \n”));

         getch();

         exit (1);

}

         Файлы драйверов хранятся в поддиректории BGI, имя файла драйвера определяется названием адаптера и имеет расширение BGI: CGA.BGI, EGA.BGI. От переменной «режим» зависят следующие характеристики: число различимых точек – пикселей по горизонтали и вертикали, палитра – набор цветов для линий и пикселей, число страниц видеопамяти. 

         9.1.2 Координаты. Создание окон. Изображение стандартных фигур, закраска. Вывод текстов в графическом режиме. Запоминание изображений. Страницы. Моделирование движения.

         Координаты. Создание окон. В графических функциях, например line, используются координаты точек экрана по горизонтали и вертикали; необычна направленность вертикальной оси – вверх- вниз. Поэтому пиксель в левом верхнем углу экрана имеет координаты (0,0). Относительно него измеряются координаты других точек экрана. Максимальные значения координат имеет пиксель в правом нижнем углу; эти значения дают функции

getmaxx и getmaxy соответственно. В графике используется понятие текущего указателя СР, аналогичное понятие курсора; СР невидим в отличие от курсора. Например, функция moveto (x,y) помещает СР в точку (x,y), а moverel (dx,dy) -  (dx,dy).

         Действие ряда графических операторов, например moveto, ограничивается прямоугольной областью, называемой окном или областью просмотра. Это справедливо и для параметров функции line. Окно не имеет видимых границ, но, если нужно, его можно очертить с помощью функции rectangle (прямоугольник). Функция setviewport (x1,y1,x2,y2,<отсечка>) устанавливает окно, определяя точками (x1,y1) и (x2,y2) соответственно левый верхний и правый нижний его угол; если до этого было окно, то оно аннулируется. Параметр <отсечка> задают равным truе, если строящиеся элементы изображения, выходящие за рамки окна, нужно отбрасывать. В противном случае указывают false. Функция cleardevice () очищает экран, устанавливает текущей точкой левый верхний угол экрана, learviewport очищает текущее окно и устанавливает текущую точку в левый верхний угол окна.

         9.1.3 Изображение стандартных фигур, закраска. Функция circle (x,y,r)

рисует на экран окружность с центром в точке с координатами (x,y) и радиусом r. arc (x,y, <начальн.угол>,<конеч.угол>,r), рисует окружность, ellipse (x,y, <начальн.угол>, <конеч.угол>,rx,ry) – эллипс, linerel (dx,dy) рисует линию из текущей точки в точку, задаваемую относительным расстоянием. lineto (x,y) рисует линию из текущей точки в с координатами (x,y),  drawpoly (<число вершин>+1,<двумерный массив координат вершин>),  рисует контур многоугольника, bar(x1,y1,x2,y2) – заполненный прямоугольник, bar3d(x1,y1,x2,y2,<глубина>,<крышка>) рисует параллелепипед, fillelipse (x,y,rx,ry) – заполненный эллипс, fillpoly (<число вершин>,<двумерный массив координат вершин >) – заполненный многоугольник, pieslice (x,y, <начальн.угол>,<конеч.угол>, r) – заполненный сектор круга.

         Тип и цвет раскраски устанавливает функция setfillstyle (<тип

краски>,<цвет>). Например, закрашиваем сектор круга сплошной краcкой, заданным цветом (желтым) setcolor(14), setfillstyle (1,14), pieslice (x,y, <0>,<360>, 5).

         9.1.4 Вывод текстов в графическом режиме. Для вывода текста в графическом режиме на экране используются функции:

outtext (<текст>) выводит символ или строку с текущей позиции;  outtextxy(x,y,<текст>) выводит символ или строку с заданной позиции;  setttextjustify(<гор.>,<вер.>) устанавливает режим выравнивания текста; settextstyle(<шрифты>,<направление>,<размер шрифта.>) устанавливает шрифты, стиль и размер шрифта. Параметр <направление> имеет значение 0 (текст идет слева направо) и 1 (текст идет снизу вверх, по вертикали, символы “положены набок”). Setlinestyle(<вид линии>,<образец>,<толщина линий>), параметр  <образец> обычно принимают значение 0.

         9.1.5 Запоминание изображений. Страницы. Моделирование движения. Содержимое всей видеопамяти или часть ее может быть перенесено в основную память, а при необходимости возвращено в видеопамять на прежнее или новое место. Запоминаются только прямоугольные фрагменты изображения; размер соответствующей памяти в байтах возвращает функция imagesize (x1,y2,x2,y2). Копию этого фрагмента помещают в основную память функции getimage (x1,y2,x2,y2, <область памяти>), параметр  <область памяти> задают в виде обычной или динамической переменной. Воспроизведение хранимого изображения осуществляет функция putimage (x,y, <область памяти>), <способ>).

         Чтобы были качественными мультипликации, необходимо использовать страницу, содержащую кадры изображения. Общая идея: пока высвечивается одна страница с кадром, на другой готовится очередной, измененный кадр. Страницы меняются ролями через 20-30 мс. Страница имеет номер; нумерация идет от 0. Функция setactivpage (<номер страницы>) делает активной указанную страницу. Другая функция setvisualpage (<номер страницы>) делает видимой указанную страницу.

         Приведем примеры: листинги программы, работа в графическом режиме.

1 Затухающие колебания в колебательном контуре  


#include <iostream.h>

#include <graphics.h>

#include <conio.h>

#include<stdio.h>

#include<dos.h>

#include<math.h>

int oci()

{

    setbkcolor(11);

    setcolor(4);setfillstyle(1,4);

setlinestyle(0,0,3);

rectangle(150,30,500,300);line(323,310,323,330);line(337,310,337,330);    ellipse(205,320,0,180,8,8);

ellipse(220,320,0,180,8,8);   ellipse(235,320,0,180,8,8);

ellipse(250,320,0,180,8,8);

    rectangle(255,400,340,420);    setfillstyle(1,1);bar(155,35,494,270);

    settextstyle(0,0,2);

    outtextxy(227,332,"L     C");outtextxy(295,427,"R");

    setcolor(14);   

55

line(200,40,200,265);

line(160,150,485,150);  settextstyle(0,0,2);

outtextxy(478,143,">");  settextstyle(0,1,2);

outtextxy(209,35,">");

    settextstyle(0,0,2);   outtextxy(175,38,"A");

outtextxy(475,160,"t");

    setcolor(4);   setlinestyle(0,0,3);

line(150,275,500,275);    settextstyle(0,0,1);

outtextxy(252,392,"v");

    line(250,365,355,365); line(255,365,255,395);

    setlinestyle(0,0,1);    line(150,320,150,410);

line(150,410,255,410);    line(450,320,450,410);

line(450,410,355,410);                                       

line (290, 320,290,287) line(370,320,370,287);   line(258,320,322,320);

line(338,320,450,320);  line(150,320,197,320);

line(355,410,355,365);    pieslice(290,289,0,360,3);

pieslice(370,289,0,360,3); pieslice(250,365,0,360,3);

pieslice(355,365,0,360,3);

    settextstyle(0,0,1);

    outtextxy(110,10,"Zatuhayhi kolebaniy");

    outtextxy(335,10,"Bbedite R ot 0 do 100 Om");

    settextstyle(0,0,2);

    outtextxy(480,350,"R=");

    settextstyle(0,0,1);

    return 0;

}

void main()

{

positiv:

    int graphdriver = DETECT, graphmode;

    initgraph(&graphdriver, &graphmode, "..\\bgi");

    float x1,x,y,k,r,A,y1;

    int n;

    char ky,chr;

    oci();

    gotoxy(65,23);

    scanf("%f",&A);

    if(A>85) A=85;  x1=-240;r=0;x=0;

   do

{

    x+=1;

    delay(10);

    setlinestyle(0,0,3);   setcolor(4);

line(255+x,365,255+x,395);

    outtextxy(252+x,392,"v");

    delay(200);

    setcolor(11);

 

line(255+x-3,367,255+x-3,393);

outtextxy(252+x-3,392,"v");

}

    while(x<A);

    do

{

    x1+=1;

    r+=0.001;

    y1=80*exp(-A*r)*sin(6.4*x1);    

    setcolor(14);setfillstyle(1,14);

    pieslice(441+x1,150+y1,0,360,1);

    delay(50);

}   while(x1<20);

setcolor(4);

outtextxy(150,450,"Dly povtoreniy upragneniy nagmite 1,bihod 0");

    gotoxy(65,24);

    scanf("%d",&n);

    if(n==1) goto positiv;

    closegraph();

}

2 Графики функции y=3x2 , y=x3 , y=6x2 + 3x.

#include <iostream.h>

#include <graphics.h>

#include <conio.h>

#include<stdio.h>

#include<dos.h>

int oci()

{

    setcolor(14);setbkcolor(1);setlinestyle(0,0,3);

    line(300,20,300,440);line(20,230,600,230);

    settextstyle(0,0,2);outtextxy(592,223,">");

    settextstyle(0,1,2);outtextxy(309,15,">");

    settextstyle(0,0,2);

outtextxy(274,15,"y");outtextxy(592,238,"x");

outtextxy(25,235,"-5 -4  -3 -2        1  2     4  5");

outtextxy(230,235,"-1 0         3");

    return 0;

}

int raz()

{

    float j;

    for(int i=1;i<=11;i++)

{   setlinestyle(0,0,1);

    j+=50;

    moveto(j,230);linerel(0,-6);

    moveto(300,j);linerel(6,0);

    setfillstyle(1,1);

    bar(295,450,310,460);

}

    return 0;

}

void main()

{

    int graphdriver = DETECT, graphmode;

    initgraph(&graphdriver, &graphmode, "..\\bgi");

    float x,y,k,i,y1,y2;

    oci();raz();

    printf("\tbbetite x ot (-5) do (5)\n\t");

    scanf("%f",&k);

    printf("\t");

    scanf("%f",&i);

    x=48*k;

   do

{

x+=1;

    delay(100);

    y=0.001*3*x*x;

    y1=0.00001*x*x*x;

    y2=-0.001*6*x*x+0.02*3*x;

    setcolor(4);setfillstyle(1,4);pieslice(300+x,230-y,0,360,1);

    setcolor(12);setfillstyle(1,12);pieslice(300+x,230-y1,0,360,1);

    setcolor(10);setfillstyle(1,10);pieslice(300+x,230-y2,0,360,1);

}

    while(x<48*i);

    getch();

    closegraph();

}

3 Графики функции y=sin(x)/x , y=tan(x) , y=cos(x) , y=sin(x).

#include <iostream.h>

#include <graphics.h>

#include <conio.h>

#include<stdio.h>

#include<dos.h>

#include<math.h>

int oci()

{

    setcolor(14);setbkcolor(1);setlinestyle(0,0,3);

    line(300,20,300,440);line(20,230,600,230);

    settextstyle(0,0,2);outtextxy(592,223,">");

    settextstyle(0,1,2);outtextxy(309,15,">");

    settextstyle(0,0,2);

    outtextxy(274,15,"y");outtextxy(592,238,"x");

    settextstyle(0,0,1);

    outtextxy(320,10,"Grafici sin(x),cos(x),tan(x),sin(x)/x");

    return 0; }

int raz()

{

    float j;

    for(int i=1;i<=11;i++)

{   setlinestyle(0,0,1);

    j+=50;

    moveto(j,230);linerel(0,-6);

    moveto(300,j);linerel(6,0);    setfillstyle(1,1);  bar(295,450,310,460);

}

    return 0;

}

void main()

{   int graphdriver = DETECT, graphmode;

    initgraph(&graphdriver, &graphmode, "..\\bgi");

    float x,y,k,r,A,y1,y2,y3;

    oci();raz();

    printf("\tbbetite x ot (-5) do (5)\n\t");

    scanf("%f",&k);

    printf("\t");

    scanf("%f",&r);

    printf("Bbedite razmax amplitudy ot 5 do 15\n");

    printf("\t");

    scanf("%f",&A);

    x=48*k;

   do  {

   x+=5;

    delay(300);

    y=-A*500*sin(5*x)/x;

    y1=A*5*sin(5*x);

    y2=A*5*cos(5*x); y3=-A*5*tan(5*x);

    setcolor(15);setfillstyle(1,15);pieslice(300+x,230-y3,0,360,2);

    setcolor(12);setfillstyle(1,12);pieslice(300+x,230-y2,0,360,2);

    setcolor(10);setfillstyle(1,10);pieslice(300+x,230-y1,0,360,2);

    setcolor(4);setfillstyle(1,4);pieslice(300+x,230-y,0,360,2);

} while(x<48*r);    getch();    closegraph(); }

 

4 Колебания маятника


#include<conio.h>

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include<math.h>

#include<dos.h>

    void kont(float a,int cvet)

{

int z,w;

double x,y;

x=300+200*sin(a); y=230+200*cos(a);

setcolor(cvet);setfillstyle(1,cvet);

line(300,120,x,y);

pieslice(300,120,0,360,5);

pieslice(x,y,0,360,20);

}

    void main()

{ int k;

double a,b,m;

  int gdriver = DETECT,gmode;

  initgraph(&gdriver, &gmode, “..\\bgi”);

  a=0;b=0;k=1;m=1;

  setbkcolor(1);setactivepage(1);

  do

{

 kont(b,getbkcolor());

  b=a;a=a+m*0.02;

  if (abs(a)>0.6) m=-m;

  kont(a,14);

//  setvisualpage(k);

  setactivepage(1-k);

  delay(50);

  k=1-k;

}

  while(a<2);

  getch();}

 


59      9.2 Задания к лабораторной работе        

         9.2.1 Написать программу, которая вычерчивает колебательный контур.

         9.2.2 Написать программу, которая рисует движущийся по экрану паровоз.

3. Написать программу вывода графика функции y=0.5x2 +4x-3 для

х [-5,5].

4. Написать программу вывода графика функции y=5cos(x)-2 для

х [-3,3].

5. Написать программу, рисующую фигуру Лиссажу.

 

         9.3 Контрольные вопросы

         9.3.1 Как выглядят шаблоны графического режима?

         9.3.2 Инициализация графического режима.

         9.3.3 Основные функции работы графического режима.

         9.3.4 Методы моделирования движения объектов.

 

Список литературы

 

1. Подбельский В.В., Фомин С.С. Программирование на языке Си: Учебное пособие. –М.: Финансы и статистика, 2000.

2. Керниган Б., Ритчи Д. Язык программирования Си. – М.: Финансы и статистика 1992.

2. Культин Н. С/С++ в задачах и примерах. –Санкт-Петербург: БХВ-Петербург, 2004.

3. Березин Б.И., Березин С.Б. Начальный курс Си и С++: Учебное пособие. –М.: ДИАЛОГ-МИФИ, 2004.

4. Шиманович. Е.Л. С/С++ в примерах и задачах: Учебное пособие. –Минск ООО «НОВОЕ ЗНАНИЕ», 2004.

5. Болски М.И. Язык программирования Си. –М.: Радио и связь, 1986.  

 

Содержание

Введение ……………………………………………………………………...3

1 Лабораторная работа №1. Работа в интегрированной среде……….……4

2 Лабораторная работа №2. Программирование линейных алгоритмов…16

3 Лабораторная работа №3. Программирование разветвляющих       

алгоритмов..……..……………………………………………………….……18

4 Лабораторная работа №4.  Программирование циклических    

алгоритмов..……..……………………………………………………….……22

5 Лабораторная работа №5. Функция……………………………………….27

6 Лабораторная работа №6. Массивы………………………………….……31     

7 Лабораторная работа №7. Обработка строк, символов и текстов……….39

8 Лабораторная работа № 8. Файлы………………………………..………..44

9 Графика……………………………………………………………..……….52

Список литературы……………………………………..…………….………59

                                                                    Доп. план 2006 г., доп____

 

 

 

 

Бимагамбетов Толеугали Сапарович

 

 

 

 

 

СПЕЦИАЛЬНЫЙ КУРС ПО ИНФОРМАТИКЕ 2

 

Методические указания к выполнению лабораторных работ

(для студентов всех форм обучения специальности 050704 –

Вычислительная техника и программное обеспечение )

 

 

        

 

Редактор        Ж.М. Сыздыкова

 

 

 

 

 

Подписан в печать ____________                    Формат 60х84    12/16

Тираж 50 экз                                                       Бумага типографская №1

Объем 2 уч.-изд.л.                                               Заказ _____. Цена

 

 

 

 

 

 

 

 

 

 

 

 

Копировально-множительное бюро

Алматинского института энергетики и связи

050013, Алматы, Байтурсынова, 126