рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Основы программирования в среде C++ Builder

Основы программирования в среде C++ Builder - раздел Информатика, Министерство Образования Республики Беларусь   Учрежде...

Министерство образования республики беларусь

 

Учреждение образования

 

«Белорусский государственный университет информатики и радиоэлектроники»

 

кафедра «Вычислительные методы и программирование»

 

Основы программирования в среде C++ Builder

 

Лабораторный практикум по курсу

«Основы алгоритмизации и программирования»

для студентов 1 – 2-го курсов БГУИР

В 2-х частях

Часть 1

 

ИСПРАВЛЕНА

 

Минск 2007


УДК 681.3.061 (075.8)

ББК 32.973.26-018.1 я 73

O – 75

 

 

Авторы:

В. Л. Бусько, В. Т. Карцев, Т. М. Кривоносова, А. А. Навроцкий

 

Основы программирования в среде С++ Builder: лаб.практикумпо курсу «Основы алгоритмизации и программирования» для студ. 1 – 2-го курсов БГУИР. В 2 ч. Ч. 1 / Бусько В. Л. [и др.] . – Минск: БГУИР, 2007. – 70 с.: ил.

 

 

ISBN (ч. 1)

 

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

 

 

УДК 681.3.061 (075.8)

ББК 32.973.26-018.1 я 73

 

ISBN (ч. 1) ISBN 985–444–583–6 © УО «Белорусский государственный университет информатики и радиоэлектроники», 2007

СОДЕРЖАНИЕ

Лабораторная работа №1. Линейный вычислительный процесс.. 4

1.1. Общие теоретические сведения. 4

1.2. Создание оконного приложения. 8

1.3. Создание консольного приложения. 11

1.4. Пример выполнения задания. 12

1.5. Индивидуальные задания. 15

Лабораторная работа №2. Реализация разветвляющихся алгоритмов.. 17

2.1. Общие теоретические сведения. 17

2.2. Создание оконного приложения. 18

2.3. Пример выполнения задания. 19

2.4. Индивидуальные задания. 22

Лабораторная работа №3. Реализация циклических алгоритмов.. 24

3.1. Общие теоретические сведения. 24

3.2. Пример выполнения задания. 25

3.3. Индивидуальные задания. 27

Лабораторная работа №4. Функции пользователя.. 29

4.1. Краткие теоретические сведения. 29

4.2. Пример выполнения задания. 30

4.3. Индивидуальные задания. 32

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

5.1. Общие теоретические сведения. 33

5.2. Создание оконного приложения. 33

5.3. Пример выполнения задания. 34

5.4. Индивидуальные задания. 37

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

6.1. Краткие теоретические сведения. 38

6.2. Пример выполнения задания. 40

6.3. Индивидуальные задания. 43

Лабораторная работа №7. Использование строк.. 44

7.1. Общие теоретические сведения. 44

7.2. Создание оконного приложения. 44

7.3. Пример выполнения задания. 46

7.4. Индивидуальные задания. 48

Лабораторная работа №8. Обработка структур с использованием файлов.. 49

8.1. Теоретические сведения. 49

8.2. Создание оконного приложения. 51

8.3. Пример выполнения задания. 51

8.4. Индивидуальные задания. 58

Лабораторная работа №9. Построение графиков функций.. 60

9.1. Краткие теоретические сведения. 60

9.2. Пример создания оконного приложения. 61

9.3. Индивидуальные задания. 64

Приложение 1. Операции и основные математические функции.. 65

Приложение 2. Описание общих структур файлов проекта.. 67

ЛИТЕРАТУРА.. 69

 


Лабораторная работа №1. Линейный вычислительный процесс

 

Цель работы: изучить правила составления текстов программ, научиться реализовывать линейные алгоритмы, а также составлять каркас простейшей программы в среде C++ Builder. Написать и отладить программу линейного алгоритма в консольном и(или) оконном приложении.

Общие теоретические сведения

В языке C применяются данные двух категорий: простые (скалярные) и сложные (составные). К основным (базовым) типам данных относятся целый (int), вещественный (float,… К сложным типам данных относятся массивы, структуры (struct), объединения (union) и перечисления (enum).

Запись самоопределенных констант

Декларация объектов

Внимание! В языке С/С++ строчные и прописные буквы имеют различные коды, т.е. PI, Pi и pi – различные идентификаторы (прил. 1). При декларации объектам можно задавать начальные значения (инициализировать),… int k = 10, m = 3, n;

Директивы препроцессора

Директивы начинаются с символа #; за которым следует наименование операции препроцессора. Чаще всего используются директивы include и define. Директива #include используется для подключения к программе заголовочных… #include <stdio.h> – стандартные функции ввода-вывода;

Создание оконного приложения

Настройка формы

Для изменения заголовка после вызова окна инспектора объектов (F11) выбирается свойство Caption, и в выделенном окошке вместо стандартного текста… Внимание! Свойства Name (имя) и Сaption (заголовок) у компонент совпадают, но…

Компоненты, предназначенные для ввода-вывода

В заголовочный файл Unit1.h автоматически вставляется переменная Edit* (1,2,…) класса TEdit. В поле Text (Edit1–>Text) такой переменной будет…

Основные функции преобразования строк

StrToInt(St) – преобразует строку St в целое число. FloatToStr (W) – преобразует вещественное число W в строку символов; FloatToStrF (W, формат, n1, n2) – вещественное число W в строку символов под управлением формата:

Компонента Label

При установке таких компонент в текст Unit1.h вставляются переменные типа TLabel, в которых хранятся пояснительные строки. Эти строки можно изменять… Label1->Caption = “”; – «очистка» строки; Label1->Caption = “Не выполняется!”; – вывод строки.

Компонента Memo

При установки данной компонеты в Unit1.h прописывается переменная Memo1 типа ТMemo. Информация, выводимая построчно в окне Memo1, находится в… Для очистки окна используется метод Memo1–>Clear( ). Для добавления новой строки используется метод Memo1–>Lines–>Add( ).

Обработка событий

Напомним, что программа в среде Builder представляет собой набор функций, выполняющих обработку событий, связанных с формой, например, щелчок кнопкой мыши – событие OnClick, создание формы – событие OnCreate.

Функция-обработчик FormCreate

Для этого делаем двойной щелчок кнопкой мыши на любом свободном месте формы, после чего в листинг программы (Unit1.cpp) автоматически вносится… Между символами { }, которые обозначают начало и конец функции,… Внимание! Не набирайте заголовки функций-обработчиков вручную.

Запуск и работа с программой

Запустить программу можно, нажав Run в главном меню Run, или клавишу F9, или пиктограмму . При этом происходит трансляция и, если нет ошибок,… Завершить работу программы можно, нажав кнопку на форме или выбрав…  

Создание консольного приложения

Программа, написанная на языке С/С++, состоит из одной или нескольких функций, одна из которых обязательно имеет идентификатор (имя) main – основная, главная. Ее назначение – управление всей работой программы (проекта).

Наиболее ощутимые отличия консольного и оконного приложений среды программирования C++ Builder – организация ввода-вывода данных.

Стандартные функции вывода информации

puts(S) – вывод строки символов S с переходом на начало новой строки и вывод данных с форматированием; рrintf(управляющая строка, список объектов вывода); управляющая строка – заключенная в кавычки строка, содержащая спецификации преобразования объектов вывода, управляющие…

Стандартные функции ввода информации

Для форматированного ввода информации любого вида предназначена функция scanf(управляющая строка, список адресов объектов ввода); в управляющей строке которой указываются только спецификации преобразований, а в списке объектов ввода – адреса…

Пример выполнения задания

Cоставить программу вычисления арифметического выражения для заданных значений x, y, z :

.

Пример создания оконного приложения

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

Рис. 1.2

 

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

1. Запускаем С++ Builder. Создаем в разрешенной для Пользователя папке (d:work или c:work) папку с номером группы (610101), открыв ее, сохраняем предлагаемые файлы Unit1.cpp и Project1.cpp (рекомендуем без изменения).

2. Оформляем окно формы, заменив заголовок Form1 на нужный текст. Помещаем на форму необходимые компоненты Label1, Label2, Label3, Label4 (вставляя в Caption соответствующие тексты), Edit1, Edit2, Edit3, Memo1 c полосами прокрутки (см. п. 1.3), Button1 (заменив в Caption текст).

Используя свойство Font, выбираем стили выводимых текстов.

3. Оформляем листинг программы (Unit1.cpp). Двойным щелчком кнопкой мыши по свободному месту формы создаем функцию FormCreate и заполняем ее (см. пример). Переходим на форму (F12), щелкаем дважды по кнопке «ВЫПОЛНИТЬ» и заполняем созданную функцию Button1Click (см. пример).

4. Перед запуском программы на обработку, сохраняем все.

5. Запускаем проект на выполнение, исправляем ошибки.

 

Текст программы может иметь следующий вид (наклонным мелким шрифтом выделен текст, редактировать который не рекомендуется):

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "math.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Edit1->Text = "3,4";

Edit2->Text = "7,4e-2";

Edit3->Text = "1,943e2";

Memo1->Clear();

Memo1->Lines->Add("Лабораторная работа № 1");

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double x, y, z, a, b ,c, rez;

x = StrToFloat(Edit1->Text);

y = StrToFloat(Edit2->Text);

z = StrToFloat(Edit3->Text);

a = pow(tan(x+y),2);

b = exp(y-z);

c = sqrt(cos(x*x)+sin(z*z));

rez = a-b*c;

Memo1->Lines->Add("При х = "+FloatToStrF(x,ffFixed,7,3)

+ "; y = "+FloatToStrF(y,ffFixed,7,3)+"; z = "+FloatToStrF(z,ffFixed,7,3));

Memo1->Lines->Add("Результат = "+FloatToStr(rez));

}

 

Внимание! В строковых константах разделитель целой и дробной частей – запятая: Edit1->Text = "3,4"; в отличие от числовых констант в тексте программы.

В результате должно получиться рабочее окно (рис. 1.3). Если щелкнуть мышью по кнопке «ВЫПОЛНИТЬ», в окне Memo1 появится соответствующий текст (результат). Далее в окошках Edit* можно изменять исходные значения и, нажимая кнопку «ВЫПОЛНИТЬ», получать новые результаты.

Рис. 1.3

 

Создание консольного приложения

Чтобы создать проект в консольном приложении, выполняем следующую последовательность действий: File ® Close All ® File ® New ® Other ® Console Wizard ® Ok. Закрываем все окошки, кроме 5 (см. рис 1.1), которое в консольном приложении будет иметь вид

Текст программы может иметь следующий вид:

//---------------------------------------------------------------------------

#include <vcl.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

int main(int argc, char* argv[])

{

double x, y, z, a, b ,c, rez;

puts("ntx,y,z = ");

scanf("%lf%lf%lf", &x, &y, &z);

a = pow(tan(x+y),2);

b = exp(y-z);

c = sqrt(cos(x*x)+sin(z*z));

rez = a-b*c;

printf("n x = %7.3lfn y = %7.3lfn z = %7.3lfnRezult = %lfn", x, y, z, rez);

puts("Press any key ... ");

getch();

return 0;

}

 

Для исходных данных x = 3,4; y = 7,4×10-2; z = 1,943×102, результат выполнения программы выглядит следующим образом:

 

Индивидуальные задания

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

1. . При x = 14.26, y = –1.22, z = 3.5´10-2 : 0.564846.
2. . При x = –4.5, y = 0.75´10-4, z = 0.845´102 : –55.6848.
3. . При x = 3.74´10-2, y = –0.825, z = 0.16´102 : 1.0553.
4. . При x = 0.4´104, y = –0.875, z = –0.475´10-3 : 1.9873.
5. При x = –15.246, y = 4.642´10-2, z = 20.001´102 : –182.036.
6. При x = 16.55´10-3, y = –2.75, z = 0.15 : 40.630694.
7. При x = 0.1722, y = 6.33, z = 3.25´10-4 : –205.305571.
8. При x = –2.235´10-2, y = 2.23, z = 15.221 : 39.374.
9. . При x = 1.825´102, y = 18.225, z = –3.298´10-2 : 1.2131.
10. При x = 3.981´10-2, y = –1.625 ´ ´103, z = 0.512 : 1.26185.
11. При x = 6.251, y = 0.827, z = 25.001 : 0.7121.
12. При x = 3.251, y = 0.325, z = 0.466´10-4 : 4.251433.
13. . При x = 17.421, y = 10.365´10-3, z = 0.828´105 : 0.33056.
14. . При x = 12.3´10-1, y = 15.4, z = 0.252´103 : 82.825623.
15. . При x = 2.444, y = 0.869´10-2, z = –0.13´103 : –0.49871.
16. При x = –2.235´10-2, y = 2.23, z = 15.221 : 39.374.

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

 

Цель работы: изучить операции сравнения, логические операции, операторы передачи управления if, switch, break, научиться пользоваться простейшими компонентами организации переключений (СheckBox, RadioGroup). Написать и отладить программу с разветвлениями.

 

Общие теоретические сведения

Оператор условной передачи управления if

Для выбора одной из ветвей вычислений применяется оператор условного перехода:

if (выражение)оператор 1;

elseоператор2;

вычисляется выражение, и если его значение не равно 0 (истинно), то выполняется оператор1, иначе – оператор2, например:

if(x>y) max = x;

else max = y;

Если операторы1, 2 содержат более одного оператора, то они заключаются в фигурные скобки { }, т.е. применяется блок.

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

Если операторы 1, 2 в свою очередь являются операторами if, то такой оператор называют вложенным, при этом ключевое слово else принадлежит ближайшему предшествующему if.

Например, найти наибольшее значение из трех чисел x, y, z:

if (x>y)

if (x>z) max=x;

else max=z;

else if(y>z) max=y;

else max=z;

Операции сравнения: < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), != (не равно), = = (равно). Пары символов разделять нельзя.

Операции сравнения бинарные, их общий вид:

Операнд 1знак операцииОперанд 2

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

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

! (отрицание или логическое НЕ – унарная операция), &&(конъюнкция или логическое И), || (дизъюнкция или логическое ИЛИ).

Например: (0<x)&&(x<=100)

((!x)&&(y>0)||((z==1)&&(k>0))

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

Тернарная (условная) операция ?:

Ее общая форма:

Операнд 1?Операнд 2:Операнд 3

Если значение операнда 1 истинно (не равно 0), то результатом операции является операнд 2, иначе – операнд 3.

Например, найти наибольшее из двух чисел: max = a>b ? a : b;

Оператор выбора switch

Общая форма оператора выбора (переключателя):

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

caseconst_1: операторы; break;

caseconst_N: операторы;break;

default:операторы;

}

Вычисляется выражение и проверяется, совпадает ли его результат со значением одной из констант. При совпадении выполняются операторы этого case. Значениями const_1,…, const_N могут быть только целые или символьные константы. Конструкция default выполняется, если результат выражения не совпал ни с одной из констант, и может отсутствовать. Оператор break выполняет досрочный выход из switch (после выполнения ветви case все остальные будут опущены). Если оператор break в case не записан, то будут выполняться операторы следующих ветвей case до появления оператора break, либо до завершения оператора switch.

Например:

switсh(i) {

case 1: f=pow(x,2); break;

case 2: f=fabs(x); break;

case 3: f=sqrt(x); break;

default: printf(“Ошибка!”); exit(1);

}

f=f+5;

 

Создание оконного приложения

При создании оконного приложения для организации разветвлений используются компоненты в виде кнопок-переключателей. Состояние такой кнопки (включено/выключено) визуально отражается на форме. На форме (рис. 2.1) представлены кнопки-переключатели двух типов TCheckBox и TRadioGroup.

Компонента CheckBox создает кнопку независимого переключателя, с помощью которой Пользователь может указать свое решение типа да/нет. В программе состояние кнопки связано со значением булевой переменной, которая проверяется с помощью оператора if.

Компонента Radiogroup создает группу кнопок – зависимых переключателей. При нажатии одной из кнопок группы все остальные кнопки отключаются. В программу передается номер включенной кнопки (0,1,2,…), который анализируется с помощью оператора switсh.

В языке C++ используются переменные типа bool, которые могут принимать только два значения – true и false (истина – 1, ложь – 0).

 

Пример выполнения задания

Ввести исходные данные x, y, z. Вычислить значение u в зависимости от выбора: sin(x), cos(x) или tg(x), после чего определить максимальное либо из u, y, z, либо из их модулей – |u|, |y|, |z|.

Реализация примера оконного приложения

Cоздать форму, представленную на рис. 2.1, скорректировать текст надписей, положение окон Edit и написать соответствующую программу.

Компонента СheckBox

В меню Standard выберите пиктограмму , поместите ее в нужное место формы, измените заголовок Caption на «max модулей», после чего в тексте программы появится переменная CheckBox1 типа TСheckBox. В зависимости от того, сделан выбор или нет, булева переменная CheckBox1->Checked будет принимать значение true или false.

Компонента RadioGroup

В инспекторе объектов в свойстве Items вызовите строчный редактор списка заголовков кнопок и наберите три строки с именами выбираемых функций… В тексте Unit1.h появилась переменная RadioGroup1 типа TRadioGroup. Теперь при… В функции FormCreate() желательно установить начальное значение этой переменной, например, RadioGroup1->ItemIndex =…

Пример написания программы консольного приложения

Текст программы может иметь вид

//---------------------------------------------------------------------------

#include <vcl.h>

#include <conio.h>

#include <stdio.h>

#include <math.h>

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

int main(int argc, char* argv[])

{

double x,y,z,u,ma;

int kod;

puts("Input x, y, z");

scanf("%lf%lf%lf",&x, &y, &z);

puts("Function U(x):n 0 - cos(x)n 1 - sin(x)n 2 - tan(x)");

scanf("%d", &kod);

switch(kod){

case 0: u=cos(x); printf("ntCos(x)= %8.6lf",u); break;

case 1: u=sin(x); printf("nSin(x)= %8.6lf",u); break;

case 2: u=tan(x); printf("nTg(x)= %8.6lf",u); break;

}

puts("nMax ABS - 1, Else - Max");

scanf("%d", &kod);

if (kod == 1){

u = fabs(u);

y = fabs(y);

z = fabs(z);

}

if (u>y) ma=u;

else ma=y;

if (z>ma) ma=z;

if (kod==1)printf("Max ABS = %8.6lf", ma);

else printf("Max = %8.6lf", ma);

puts("nPress any key ... ");

getch();

return 0;

}

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

 

Индивидуальные задания

Вычислить значение y в зависимости от выбранной функции j(x), аргумент которой определяется из поставленного условия. Возможные значения функции j(x): 2x, x2, х/3 (в оконном приложениии выбор выполнить с помощью компоненты RadioGroup). Предусмотреть вывод сообщений, показывающих, при каком условии и с какой функцией производились вычисления у.

1. , где

2. , где

3. , где

4. , где

5. , где

6. , где

7. , где

8. , где

9. , где

10. , где

11. , где

12. , где

13. , где

14. , где

15. , где

16. , где

 


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

Цель работы: изучить циклические операторы while, do-while, for, научиться реализовывать циклические алгоритмы. Изучив простейшие средства отладки программ в среде C++ Builder, составить и отладить программу.

 

Общие теоретические сведения

1. Оператор цикла с предусловием while (выражение) код цикла

Пример выполнения задания

Написать и отладить программу вывода всех значений функции S(x) для аргумента х, изменяющегося в интервале от а до b c шагом h и заданном n.

.

Панель диалога и полученные результаты представлены на рис. 3.1.

Пример создания оконного приложения

Текст функций-обработчиков может быть следующим (стандартный текст опущен):

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Edit1->Text="0,1"; Edit2->Text="1,0";

Edit3->Text="10"; Edit4->Text="0,2";

Memo1->Lines->Add("Лабораторная работа 3");

}

Рис. 3.1

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double a, b, x, h, r, s;

int n, zn = -1, k;

a = StrToFloat(Edit1->Text);

b = StrToFloat(Edit2->Text);

n = StrToInt(Edit3->Text);

h = StrToFloat(Edit4->Text);

for(x = a; x<=b; x+=h) {

r = s = 1;

for(k = 1; k<=n; k++) {

r = zn*r*x/k;

s+=r;

}

Memo1->Lines->Add("при x= "+FloatToStrF(x,ffFixed,8,2)

+" сумма= "+FloatToStrF(s,ffFixed,8,5));

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Memo1->Clear();

}

Пример создания консольного приложения

Текст программы предложенного задания может иметь вид

#include <vcl.h>

#include <stdio.h>

#include <conio.h>

#pragma hdrstop

#pragma argsused

int main(int argc, char* argv[])

{

double a, b, x, h, r, s;

int n, zn = -1, k;

puts("Input a,b,h,n");

scanf("%lf%lf%lf%d", &a, &b, &h, &n);

for(x = a; x<=b; x+=h) {

r = s = 1;

for(k = 1; k<=n; k++) {

r=zn*r*x/k;

s+=r;

}

printf("n x= %8.2lf sum= %8.5lf", x,s);

}

puts("nPress any key ... ");

getch();

return 0;

}

Результат программы с введенными значениями a=0.1, b=1.0, h=0.2 и n=10:

 

Индивидуальные задания

Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры. Так как значение S(x) является рядом разложения функции Y(x), при правильном решении значения S и Y для заданного аргумента x (для тестовых значений исходных данных) должны совпадать в целой части и в первых двух-четырех позициях после десятичной точки.

Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметра n выбрать в зависимости от задания.

1. , .

2. .

3. .

4. .

5. .

6. .

7. , .

8. , .

9. , .

10. , .

11. , .

12. , .

13. , .

14. , .

15., .

16. .


Лабораторная работа №4. Функции пользователя

 

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

Краткие теоретические сведения

В языке С++ в качестве подпрограмм используют функции, которые должны быть декларированы до их первого использования. Предварительное описание… Описание прототипа имеет следующий вид: тип_результата ID_функции (список типов параметров);

Область действия переменных

Глобальные переменные объявляются вне какой-либо функции и могут быть использованы в любом месте программы, но перед их первым использованием они… Область действия локальных переменных – это блоки, где они объявлены. К… В языке С каждая переменная принадлежит одному из четырех классов памяти – автоматической (auto), внешней (extern),…

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

Функции могут быть использованы в качестве формальных параметров, для этого используется указатель на функцию. Например, указатель р на функцию, возвращающую результат типа double и имеющую два параметра doublet и int, объявляется следующим образом:

double (*p)(double, int);

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

typedef double (*TFun)(double, int);

Пример выполнения задания

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

Создание оконного приложения

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

. . .

#include "math.h"

//------------ Декларация типа указателя на функции -------------------------

typedef double (*TFun)(double);

//------------Декларации прототипов функций Пользователя ---------------

double fun1(double);

double fun2(double);

void Out_Rez(TFun, double, double, double, TMemo*);

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Edit1->Text="0,1"; Edit2->Text="3"; Edit3->Text="0,3";

Memo1->Clear(); Memo2->Clear();

RadioGroup1->ItemIndex=0;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double a, b, h;

a = StrToFloat(Edit1->Text);

b = StrToFloat(Edit2->Text);

h = StrToFloat(Edit3->Text);

switch(RadioGroup1->ItemIndex) {

case 0: Out_Rez (fun1,a,b,h,Memo1); break;

case 1: Out_Rez (fun2,a,b,h,Memo2); break;

}

}

Рис. 4.1

//---------- Реализации функций Пользователя ---------------------------------

double fun1( double r){

return 2*exp(r*r);

}

double fun2(double r) {

return pow(sin(r), 2);

}

void Out_Rez (TFun f,double xn,double xk,double h,TMemo *mem) {

for(double x=xn; x<=xk; x+=h)

mem->Lines->Add(" x = "+FloatToStrF(x,ffFixed,8,2)+

" y = "+FloatToStrF(f(x),ffFixed,8,4));

}

Создание консольного приложения

Текст программы может выглядеть следующим образом:

. . .

typedef double (*TFun)(double); // Декларация типа указателя на функцию

double fun1(double); // Декларации прототипов функций

double fun2(double);

void Out_Rez (TFun,double,double,double);

void main()

{

double a, b, h;

puts("Input a,b,h"); scanf("%lf%lf%lf", &a, &b, &h);

puts("nt Function - 2*exp(x)"); Out_Rez (fun1,a,b,h);

puts("nt Function - sin(x)*sin(x)"); Out_Rez (fun2,a,b,h);

puts("n Press any key ... ");

getch();

}

//---------- Реализации функций пользователя ---------------------------------

double fun1( double r){

return 2*exp(r*r);

}

double fun2(double r) {

return pow(sin(r), 2);

}

void Out_Rez (TFun f,double xn,double xk,double h) {

for(double x=xn; x<=xk; x+=h)

printf(" x = %5.2lf, y = %8.4lfn",x,f(x));

}

 

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

 

Индивидуальные задания

По заданию лабораторной работы №3 написать программу расчета выбранной функции Y(x), или S(x) (желательно и |Y(x)–S(x)|), вид которой в свою очередь передается в качестве параметра в функцию вывода (Out_Rez).


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

Цель работы: изучить составной тип данных – массив, основные свойства компоненты StringGrid. Написать и отладить программу с использованием одномерных массивов.

 

Общие теоретические сведения

Внимание! Индексы массивов в языке С/С++ начинаются с 0. В программе одномерный массив декларируется следующим образом: тип ID массива [размер];

Создание оконного приложения

Компонента StringGrid

Внимание! Первый индекс ACol определяет номер столбца, а второй ARow – номер строки в отличие от индексов массива. В инспекторе объектов значения ColCount и RowCount устанавливают начальные…  

Пример выполнения задания

Удалить из массива А размером N, состоящего из целых чисел (положительных и отрицательных), все отрицательные числа. Новый массив не создавать. Для заполнения массива использовать фунцию random(kod) – генератор случайных равномерно распределенных целых чисел от 0 до (int)kod.

Пример создания оконного приложения

Значение N вводить из Edit, значения массива А – из компоненты StringGrid. Результат вывести в компоненту StringGrid.

Панель диалога и результаты выполнения программы приведена на рис. 5.1.

Рис. 5.1

Настройка компоненты StringGrid

По умолчанию в компоненту StringGrid ввод данных разрешен только программно. Для разрешения ввода данных с клавиатуры необходимо в свойстве Options… Текст функций-обработчиков может иметь следующий вид: . . .

Пример создания консольного приложения

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

. . .

#include <stdio.h>

#include <conio.h>

void main()

{

int a[10],n, i, kol=0;

randomize(); // Изменение начального адреса для random()

printf("Input N (<=10) ");

scanf("%d", &n);

puts("n Massiv A");

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

a[i] = random(21)-10; // Заполнение массива А случайными числами

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

}

//Удаление отрицательных элементов из массива А

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

if(a[i]>=0) a[kol++] = a[i];

puts("n Rezult massiv A");

for(i=0; i<kol;i++) printf("%4d", a[i]);

puts("n Press any key ... ");

getch();

}

 

С заполненным случайными числами массивом А результат программы может быть следующим:

 

 

Индивидуальные задания

Написать программу по обработке одномерных массивов. Размеры массивов вводить с клавиатуры. В консольном приложении предусмотреть возможность ввода данных как с клавиатуры, так и с использованием функции random().

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

В одномерном массиве, состоящем из n вводимых с клавиатуры целых элементов, вычислить:

1. Произведение элементов массива, расположенных между максимальным и минимальным элементами.

2. Сумму элементов массива, расположенных между первым и последним нулевыми элементами.

3. Сумму элементов массива, расположенных до последнего положительного элемента.

4. Сумму элементов массива, расположенных между первым и последним положительными элементами.

5. Произведение элементов массива, расположенных между первым и вторым нулевыми элементами.

6. Сумму элементов массива, расположенных между первым и вторым отрицательными элементами.

7. Сумму элементов массива, расположенных до минимального элемента.

8. Сумму модулей элементов массива, расположенных после последнего отрицательного элемента.

9. Сумму элементов массива, расположенных после последнего элемента, равного нулю.

10. Сумму модулей элементов массива, расположенных после минимального по модулю элемента.

11. Сумму элементов массива, расположенных после минимального элемента.

12. Сумму элементов массива, расположенных после первого положительного элемента.

13. Сумму модулей элементов массива, расположенных после первого отрицательного элемента.

14. Сумму модулей элементов массива, расположенных после первого элемента, рав­ного нулю.

15. Сумму положительных элементов массива, расположенных до максимального элемента.

16. Произведение элементов массива, расположенных между первым и последним отрицательными элементами.

 


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

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

Краткие теоретические сведения

Особенности применения указателей

Указатель – это переменная, которая может содержать адрес некоторого объекта в памяти компьютера, например, адрес другой переменной. Через… Указатель объявляется следующим образом: тип * ID указателя;

Связь указателей с массивами

Пусть объявлены – массив из 10 элементов и указатель типа double: double a[10], *p; если p = a; (установить указатель p на начало массива a), то следующие обращения: a[i] , *(a+i) и *(p+i) эквивалентны,…

Указатели на указатели

Если рассматривать предыдущий массив (int a[2][3];) как массив двух массивов размерностью по три элемента каждый, то обращение к элементу а[i][j]… int **а; Таким образом, имя двухмерного массива – ID указателя на указатель.

Динамическое размещение данных

Для работы с динамической памятью используются стандартные функции библиотеки alloc.h: void *malloc(size) и void *calloc(n, size) – выделяют блок памяти размером… void free(bf); – освобождает ранее выделенную память с адресом bf.

Пример выполнения задания

Рассчитать значения вектора , где А – квадратная матрица размером N´N, а Y и B – одномерные массивы размером N. Элементы вектора Y определяются по формуле .

Пример создания оконного приложения

Значение N вводить из Edit, А и B – из компонент StringGrid. Результат вывести в компоненту StringGrid.

Панель диалога и результаты выполнения программы приведена на рис. 6.1.

Рис. 6.1

Настройка компонент StringGrid

Так как компоненты StringGrid2 и StringGrid3 имеют только один столбец, то у них ColCount = 1, RowCount = 3, а FixedCols = 0 и FixedRows = 1. В свойстве Options строку goEditing для компонент StringGrid1 и StringGrid2… Для изменения размера n используется функция-обработчик EditChange, полученная двойным щелчком по компоненте Edit.

Пример создания консольного приложения

Текст программы может иметь следующий вид:

. . .

void main()

{

double **a, *b, s;

int i, j, n;

printf(" Input size N : "); scanf("%d",&n);

a = new double*[n]; // Захват памяти под указатели

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

a[i] = new double[n]; // Захват памяти под элементы

b = new double[n];

puts("n Input Massiv A:");

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

for(j=0; j<n;j++) scanf("%lf", &a[i][j]);

puts("n Input Massiv B:");

for( i=0; i<n;i++) scanf("%lf", &b[i]);

puts("n Massiv Y:");

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

for(s=0, j=0; j<n;j++) s+=a[i][j]*b[j];

printf(" %8.2lf ", s);

}

delete []a;

delete []b;

puts("n Delete !");

puts("n Press any key ... ");

getch();

}

 

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


Индивидуальные задания

Написать программу по обработке динамических массивов. Размеры массивов вводить с клавиатуры. При создании оконного приложения скалярный (простой) результат выводить в виде компоненты Label, а массивы вводить и выводить с помощью компонент StringGrid, в которых 0-й столбец и 0-ю строку использовать для отображения индексов массивов.

1. Из матрицы размером N´M получить вектор B, присвоив его k-му элементу значение 0, если все элементы k-го столбца матрицы нулевые, иначе 1.

2. Из матрицы размером N´M получить вектор B, присвоив его k-му элементу значение 1, если элементы k-й строки матрицы упорядочены по убыванию, иначе 0.

3. Из матрицы размером N´M получить вектор B, присвоив его k-му элементу значение 1, если k-я строка матрицы симметрична, иначе значение 0.

4. Задана матрица размером N´M. Определить количество «особых» элементов матрицы, считая элемент «особым», если он больше суммы остальных элементов своего столбца.

5. Задана матрица размером N´M. Определить количество элементов матрицы, у которых слева находится элемент больше его, а справа – меньше.

6. Задана матрица размером N´M. Определить количество различных значений матрицы, т.е. повторяющиеся элементы считать один раз.

7. В матрице размером N´M упорядочить строки по возрастанию их первых элементов.

8. В матрице размером N´M упорядочить строки по возрастанию суммы их элементов.

9. В матрице размером N´M упорядочить строки по возрастанию их наибольших элементов.

10. Определить, является ли квадратная матрица симметричной относительно побочной диагонали.

11. Задана матрица размером N´M. Определить количество элементов матрицы, у которых слева находится элемент меньше его, а справа – больше.

12. В квадратной матрице найти произведение элементов, лежащих выше побочной диагонали.

13. В квадратной матрице найти максимальный среди элементов, лежащих ниже побочной диагонали.

14. В матрице размером N´M поменять местами строку, содержащую элемент с наибольшим значением со строкой, содержащей элемент с наименьшим значением.

15. Из матрицы размером n получить матрицу размером n-1 путем удаления строки и столбца, на пересечении которых расположен элемент с наибольшим по модулю значением.

16. В матрице размером n найти сумму элементов, лежащих ниже главной диагонали, и произведение элементов, лежащих выше главной диагонали.


Лабораторная работа №7. Использование строк

Цель работы: изучить особенности строковых данных, правила работы с компонентами ListBox и СomboBox. Написать и отладить программу работы со строками.

Общие теоретические сведения

Строки как одномерные массивы символов

Для строки, состоящей из 80 символов, в описании массива необходимо указать размер 81, т.к. последний байт отведится под нуль-терминатор. Напомним, что строковая константа – это набор символов, заключенных в кавычки,… Строки можно инициализировать при декларации, например:

Создание оконного приложения

Тип AnsiString

Тип AnsiString является основным строковым классом вBuilder.

Часто используемые методы этого класса: с_str() – преобразование строки AnsiString в массив символов; Delete()– удаление символов, SubString() – копирование подстроки; Pos() – поиск позиции; Length() – определение длины строки.

Компонента ListBox

Данная компонента представляет собой список, элементы которого выбираются при помощи клавиатуры или мыши. Список элементов задается свойством Items, методы Add, Delete и Insert которого используются для добавления, удаления и вставки строк, соответственно. Объект Items хранит строки списка. Для определения номера выделенного элемента используется свойство ItemIndex.

Компонента ComboBox

Компонента-кнопка BitBtn

Обработка событий

Для создания обработчика события необходимо выделить нужную компоненту, далее на странице Events выбрать обработчик и двойным щелчком кнопкой мыши в… Каждая компонента имеет свой набор обработчиков событий, однако некоторые из… OnActivate – форма получает это событие при активации;

Пример выполнения задания

Написать программу подсчета числа слов в строке, содержащей пробелы.

Создание оконного приложения

Для ввода строк и работы с ними использовать компоненту ComboBox. Ввод строки заканчивать нажатием клавиши Enter, для выхода использовать кнопку «Close». Панель диалога с результатами программы может иметь вид, представленный на рис. 7.1.

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

//---------------------------------------------------------------------------

void __fastcall TForm1::FormActivate(TObject *Sender)

{

Form1->ComboBox1->SetFocus(); // Передача фокуса ComboBox1

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ComboBox1KeyDown(TObject *Sender, WORD &Key,TShiftState Shift)

{

if (Key == 13) {

ComboBox1->Items->Add(ComboBox1->Text);

// Строка из окна редактирования заносится в ComboBox1

ComboBox1->Text=""; // Очистка окна

}

}

//------------ Обработка нажатия кнопки мыши --------------------

void __fastcall TForm1::ComboBox1Click(TObject *Sender)

{

int n, i, nst;

nst = ComboBox1->ItemIndex; // Определение номера строки

String st = ComboBox1->Items->Strings[nst]; // Запись выбранной строки st

if (st[1] != ' ') n = 1; // Здесь и ниже ' ' – пробел

else n = 0;

for(i=1; i<st.Length(); i++) // Просмотр символов строки st

if(st[i] == ' ' && st[i+1] != ' ') n++;

Edit1->Text = IntToStr(n); // Вывод числа слов в Edit1

}

Рис. 7.1

Создание консольного приложения

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

Текст функции main() может иметь следующий вид:

#include <string.h>

void main()

{

int n, i, nst, len;

char st[81];

puts(" Input string ");

gets(st);

if (st[0] != ' ') n = 1; // Здесь и ниже ' ' – пробел

else n = 0;

len = strlen(st);

for(i=1; i<=len; i++) // Просмотр символов строки

if(st[i] == ' ' && st[i+1] != ' ') n++;

printf("n Words = %d", n); // Вывод количества слов

puts("nPress any key ... ");

getch();

}

 

Результат выполнения представленной программы будет иметь следующий вид:


Индивидуальные задания

В оконном приложении исходные данные вводить из компоненты Edit в ListBox (заканчивать нажатием Enter). Скалярный результат выводить в компоненту Label. Для выхода из программы использовать кнопку «Close».

 

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

2. В строке, состоящей из групп нулей и единиц, найти и вывести на экран самую короткую группу.

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

4. В строке, состоящей из групп нулей и единиц, найти и вывести на экран группы с четным количеством символов.

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

6. Из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделить подстроку, которая соответствует записи целого числа.

7. Из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделить подстроку, задающую вещественное число с фиксированной точкой.

8. Из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделить подстроку, задающую вещественное число с плавающей точкой.

9. Дана строка символов, состоящая из цифр, разделенных пробелами. Вывести на экран числа этой строки в порядке возрастания их значений.

10. Дана строка символов, состоящая из цифр, разделенных пробелами. Вывести четные числа этой строки.

11. Дана строка, состоящая из слов на английском языке, разделенных пробелами. Вывести на экран эти слова в порядке алфавита.

12. Дана строка, состоящая из слов, разделенных пробелами. Вывести на экран порядковый номер слова, содержащего k-ю позицию, если в k-й позиции пробел, то – номер предыдущего слова. Значение k ввести с клавиатуры.

13. Дана строка, состоящая из слов, разделенных пробелами. Разбить исходную строку на две подстроки, причем первая длиной k символов, если на k-ю позицию попадает слово, то его следует отнести ко второй строке. Значение k вводится с клавиатуры.

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

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

16. В строке символов посчитать количество скобок различного вида.


Лабораторная работа №8. Обработка структур с использованием файлов

 

Цель работы: изучить правила создания и обработки данных структурного типа с использованеием файлов; правила работы с компонентами OpenDialog и SaveDialog; написать и отладить программу по созданию файлов.

 

Теоретические сведения

struct Рerson { char Fio[30]; double sball;

Работа с файлами

Прежде чем работать с файлом, его нужно открыть для доступа, т.е. создать и инициализировать область данных, которая содержит информацию о файле:… FILE *указатель на файл; Формат функции

Создание оконного приложения

Компоненты OpenDialog и SaveDialog

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

Пример выполнения задания

 

Написать программу обработки файла, содержащего информацию о рейтинге студентов. Каждая запись должна содержать Ф.И.О. и полученный балл рейтинга. Вывести информацию, отсортированную в порядке увеличения рейтинга. Результаты выполнения программы сохранить в текстовом файле. При работе с файлом должны быть выполнены следующие действия: создание, просмотр, добавление новой записи, сортировка, сохранение результатов.

Создание оконного приложения

Настройка компонент OpenDialog и SaveDialog

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

Работа с программой

Кнопку «Создать» нажимаем только при первом запуске программы или, если захотим заменить прежнюю информацию на новую, в окне Memo1 отображается путь… Заполнив оба поля информацией, нажимаем кнопку «Добавить», после чего… Для работы с уже созданным файлом нажимаем кнопку «Открыть» – в Memo1 выводится содержимое всего файла, после чего…

Создание консольного приложения

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

. . .

#include <stdio.h>

#include <io.h>

. . .

struct TZap{

char FIO[30];

double s_b;

} Zap;

int size = sizeof(TZap);

FILE *Fz, *Ft;

char File_Zap[] = "zapisi.dat";

char File_Rez[] = "rezult.txt";

void Out(TZap);

 

void main()

{

int kod, D_f, i=0, j, kol;

long len;

TZap st, *mas_Z;

Ft = fopen(File_Rez, "w");

while(true) {

puts("n Create – 1n Add – 2n View – 3n Sort – 4n EXIT – 0");

scanf("%d", &kod);

switch(kod) {

case 1:

if ((Fz=fopen(File_Zap,"wb"))==NULL) {

puts("n Create ERROR!");

return;

}

fclose(Fz);

printf("n Create New File %s !n",File_Zap);

break;

case 2:

Fz = fopen(File_Zap,"ab");

printf("n F.I.O. – ");

fflush(stdin);

gets(Zap.FIO);

printf(" Ball – ");

scanf("%lf", &Zap.s_b);

fwrite(&Zap, size, 1, Fz);

fclose(Fz);

break;

case 3:

if ((Fz=fopen(File_Zap,"rb"))==NULL) {

puts("n Open ERROR!");

return;

}

// Вывод на экран

printf("nt--------- Informations ---------");

// Запись такой же информации в текстовый файл Ft

fprintf(Ft,"nt--------- Informations ---------");

while(1) {

if(!fread(&Zap,size,1,Fz)) break;

Out(Zap);

}

fclose(Fz);

break;

case 4:

Fz = fopen(File_Zap,"rb");

D_f = fileno(Fz);

len = filelength(D_f);

kol = len/size;

mas_Z = new TZap[kol];

// Считываем записи из файла в динамический массив

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

fread((mas_Z+i), size, 1, Fz);

fclose(Fz);

printf("nt----- S O R T -----n");

fprintf(Ft,"nt----- S O R T -----n");

for (i=0; i < kol-1; i++)

for (j=i+1; j < kol; j++)

if (mas_Z[i].s_b > mas_Z[j].s_b) {

st = mas_Z[i];

mas_Z[i] = mas_Z[j];

mas_Z[j] = st;

}

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

Out(mas_Z[i]);

delete []mas_Z;

break;

case 0:

fclose(Ft);

return;

}

}

}

//----------------- Функция вывода одной записи на экран и в файл --------------------

void Out(TZap z)

{

printf("n %20s , %6.3lf .", z.FIO,z.s_b);

fprintf(Ft, "n %20s , %6.3lf .", z.FIO, z.s_b);

}

 

Первоначально выбав пункт «1», создаем файл с именем zapisi.dat, который будет располагаться в текущем каталоге (созданной папке). Затем, выбирая пункт «2», последовательно вводим 4 записи. Выбрав пункт «3», просматриваем содержимое файла, а сортированные записи выведем на экран (запишем в файл), выбрав пункт «4». Результаты выполнения программы могут иметь вид:

Индивидуальные задания

Написать программу обработки файла типа запись, содержащую следующие пункты меню: «Создание», «Просмотр», «Коррекция» (добавление новых данных или редактирование старых), «Решение индивидуального задания».

Каждая запись должна содержать следующую информацию о студентах:

– фамилия и инициалы;

– год рождения;

– номер группы;

– оценки за семестр: по физике, математике, информатике, химии;

– средний балл.

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

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

 

1. Распечатать анкетные данные студентов, сдавших сессию на 8, 9 и 10.

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

3. Распечатать анкетные данные студентов-отличников из интересующей вас группы.

4. Распечатать анкетные данные студентов, фамилии которых начинаются с буквы А, и сдавших математику на 8 или 9.

5. Распечатать анкетные данные студентов, имеющих оценки 4 или 5 по физике и оценку больше 8 по остальным предметам.

6. Распечатать анкетные данные студентов интересующей вас группы. Фамилии студентов начинаются с букв В, Г и Д.

7. Распечатать анкетные данные студентов, не имеющих оценок меньше 4 по информатике и математике.

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

9. Вычислить общий средний балл всех студентов и распечатать список студентов интересующей вас группы, имеющих средний балл выше общего среднего балла.

10. Распечатать анкетные данные студентов интересующей вас группы, имеющих неудовлетворительную оценку (меньше 4).

11. Распечатать анкетные данные студентов интересующей вас группы, имеющих оценку 9 или 10 по информатике.

12. Распечатать анкетные данные студентов, имеющих оценки 7 или 8 по физике и оценки 9 или 10 по высшей математике.

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

14. Распечатать анкетные данные студентов-отличников интересующей вас группы.

15. Распечатать анкетные данные студентов интересующей вас группы, имеющих средний балл выше введенного с клавиатуры.

16. Распечатать анкетные данные студентов интересующей вас группы, имеющих оценку 8 по физике и оценку 9 по высшей математике.


Лабораторная работа №9. Построение графиков функций

 

Цель работы: изучить некоторые возможности построения графиков функций с помощью компонент Сhart и Image; научиться работать с графическими объектами; написать и отладить программу с использованием функций отображения графической информации.

 

Краткие теоретические сведения

Построение графиков с помощью компоненты Chart

Построение графика (диаграммы) производится по вычисленным значениям координат точек х и y = f(x), которые с помощью метода AddXY передаются в… Компонента Chart строит и размечает оси, рисует координатную сетку,… Установив компоненту Chart1 на форму, для изменения ее параметров двойным щелчком кнопкой мыши вызываем окно…

Использование класса Сanvas

Для рисования используется класс типа TСanvas, который является не самостоятельной компонентой, а свойством многих компонент, таких как Image, PaintBox, и представляет собой холст (контекст GDI в Windows) с набором инструментов для рисования. Каждая точка холста имеет свои координаты. Начало осей координат располагается в верхнем левом углу холста. Данные по оси Х увеличиваются слева направо, а по оси Y сверху вниз.

Компонента Image находится на странице Additional, а PaintBoxSystem.

Основные свойства класса Canvas:

Pen – перо (определяет параметры линий),

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

Font – шрифт (определяет параметры шрифта).

Некоторые методы класса Canvas:

Ellipse(х1,у1, х2,у2) – чертит эллипс в охватывающем прямоугольнике (х1, у1), (х2, у2) и заполняет внутреннее пространство эллипса текущей кистью;

MoveTo(х,y) – перемещает карандаш в положение (х,y);

LineTo(х,y) – чертит линию от текущего положения пера до точки (х,y);

Rectangle(х1,у1, х2,у2) – вычерчивает и заполняет прямоугольник (х1,у1), (х2, у2). Для вычерчивания без заполнения используйте FrameRect или Polyline;

Polygon(const TPoint* Points, const int Points_Size) – вычерчивает многоугольник по точкам, заданным в массиве Роints размера Points_Size. Конечная точка соединяется с начальной и многоугольник заполняется текущей кистью. Для вычерчивания без заполнения используется метод Polyline.

TextOut(х, у, const AnsiString Text)– выводит строку Техt так, чтобы левый верхний угол прямоугольника, охватывающего текст, располагался в точке (х, у).

 

Пример создания оконного приложения

Написать программу отображения графика выбранной функции с помощью компонент Сhart и Image.

Настройка формы

Рис. 9.2  

Индивидуальные задания

Написать программу вывода графиков функции (лабораторная работа №3) Y(x) и ее разложения в ряд S(x) для аргумента x, изменяющегося от a до b с шагом h (вводятся с клавиатуры) с использованием компоненты Сhart и графика функции Y(x) с использованием компоненты Image.


Приложение 1

Приложение 1. Операции и основные математические функции

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

Опера­ция Краткое описание Использование Выполне-ние
Первичные (унарные) операции
. Доступ к члену объект . член Слева направо
-> Доступ по указателю указатель -> член
[ ] Индексирование переменная [выражение]
( ) Вызов функции ID(список)
Унарные операции
++ Постфиксный инкремент lvalue++ Справа налево
-- Постфиксный декремент lvalue--
sizeof Размер объекта (типа) sizeof(ID или тип)
++ Префиксный инкремент ++lvalue
-- Префиксный декремент --lvalue
~ Побитовое НЕ ~выражение
! Логическое НЕ !выражение
- (+) Унарный минус (плюс) - (+)выражение
* Разадресация указателя *выражение
& Адрес &выражение
() Приведение типа (тип)выражение
Бинарные и тернарная операции
* Умножение выражение * выражение Слева направо
/ Деление выражение / выражение
% Получение остатка выражение % выражение
+ ( - ) Сложение (вычитание) выражение + (-) выражение
<< Сдвиг влево выражение << выражение
>> Сдвиг вправо выражение >> выражение
< Меньше выражение < выражение
<= Меньше или равно выражение <= выражение
> Больше выражение > выражение
>= Больше или равно выражение >= выражение
== Равно выражение == выражение
!= Не равно выражение != выражение
& Побитовое И выражение & выражение
^ Побитовое исключ. ИЛИ выражение ^ выражение
| Побитовое ИЛИ выражение | выражение
&& Логическое И выражение && выражение
|| Логическое ИЛИ выражение || выражение

Окончание прил. 1

 

Опера­ция Краткое описание Использование Выполне-ние
?: Условная операция (тернарная) выражение ? выражение : выражение     Справа налево  
= Присваивание lvalue = выражение
*= Умножение с присваиванием lvalue *= выражение
/= Деление с присваиванием lvalue /= выражение
%= Остаток от деления с присв-м lvalue %= выражение
+= Сложение с присваиванием lvalue += выражение
- = Вычитание с присваиванием lvalue -= выражение
<<= Сдвиг влево с присваиванием lvalue <<= выражение
>>= Сдвиг вправо с присваиванием lvalue >>= выражение
&= Поразрядное И с присваив-м lvalue &= выражение
|= Поразрядное ИЛИ с присв-м lvalue |= выражение
^= Поразрядное ИСКЛЮЧАЮ­ЩЕЕ ИЛИ с присваиванием lvalue ^= выражение
, Последовательное вычисление выражение, выражение Слева направо

 

Стандартные математические функции

Аргументы тригонометрических функций задаются в радианах. Напомним, что 2p (рад) равно 360о (град).   Математическая функция ID функции … Приложение 2

Приложение 2. Описание общих структур файлов проекта

 

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

Внимание! Не изменять и не удалять, уже имеющиеся в указанных файлах тексты.

 

Общая структура файла текста программы Unit*.cpp

 

// Директивы препроцессора

#include <vcl.h> // Подключение файла библиотеки VCL

#pragma hdrstop // Установки компилятора

#include "Unit1.h" // Подключение заголовочного файла

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1; // Объявление объекта формы

//--------------------------- Вызов конструктора формы --------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

// Описания глобальных объектов Пользователя

// Набор функций-обработчиков, использующихся в проекте

Структура заголовочного файла Unit*.h

 

// Директивы препроцессора

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

// Объявление класса формы

class TForm1 : public TForm

{

Окончание прил. 2

 

 

// Компоненты, размещенные на форме

__published: // IDE-managed Components

TLabel *Label1;

TEdit *Edit1;

TMemo *Memo1;

TButton *Button1;

private: // User declarations

// Объявления функций, типов переменных, доступных только в данном модуле

public: // User declarations

// Объявления функций, типов и переменных, доступных в проекте

 

__fastcall TForm1(TComponent* Owner);

};

extern PACKAGE TForm1 *Form1;

// Объявления элементов, которые не включаются в данный класс

#endif

 

Общая структура файла проекта Project*.cpp

 

// Директивы препроцессора

#include <vcl.h>

#pragma hdrstop

/* - директива #pragma служит для установки параметров компилятора. Эти установки могут быть определены и другим способом, – используя диалог Project Options. */

// Подключение файлов форм и файлов ресурсов

USEFORM("Unit1.cpp", Form1);

USEFORM("Unit2.cpp", Form2);

// Главная программа

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

// Инициализация

Application->Initialize();

// Создание объектов форм

Application->CreateForm(__classid(TForm1), &Form1);

Application->CreateForm(__classid(TForm2), &Form2);

// Выполнение программы

Application->Run();

}

 


ЛИТЕРАТУРА

 

 

1. Березин, Б. И. Начальный курс С и С++ / Б. И. Березин, С. Б. Березин. – М.: Диалог – МРТИ, 1999.

2. Демидович, Е. М. Основы алгоритмизации и программирования. Язык СИ / Е. М. Демидович. – Минск : Бест­принт, 2001.

3. Керниган, Б. Язык программирования СИ / Б. Керниган, Д. Ритчи. – М.: Финансы и статистика, 1992.

4. Касаткин, А. И. Профессиональное программирование на языке СИ: от Турбо-С до Borland С++ / А. И. Касаткин, А.Н. Вольвачев: Справочное пособие. Минск : Выш. шк., 1992.

5. Страуструп, Б. Язык программирования C++ / Б. Страуструп: 2-е изд.: В 2 т. – Киев: ДиаСофт, 1993.

6. Больски, М. Н. Язык программирования СИ / М. Н. Больски: Справочник. – М.: Радио и связь. 1988.

7. Архангельский, А. Я. Программирование в С++ Builder 6 / А. Я. Архангельский. – М.: ЗАО “Издательство БИНОМ”, 2002.

8. Юлин, В. А. Приглашение к СИ / В. А. Юлин, И. Р. Булатова. – Минск : Высш.шк., 1990.

9. Шилд, Г. Программирование на Borland С++ / Г. Шилд. – Минск : ПОПУРРИ, 1999.

10. Тимофеев, В. В. Программирование в среде С++ Builder 5 / В. В. Тимофеев. – М.: БИНОМ, 2000.


 

Св. план 2004, поз. 40

 

Учебное издание

БуськоВиталий Леонидович, КарцевВиктор Тимофеевич, КривоносоваТатьяна Михайловна,

– Конец работы –

Используемые теги: основы, программирования, среде, Builder0.067

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Основы программирования в среде C++ Builder

Что будем делать с полученным материалом:

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

Еще рефераты, курсовые, дипломные работы на эту тему:

Основы программирования в среде C++ Builder
Учреждение образования... Белорусский государственный университет информатики и радиоэлектроники...

Основы планирования. Теоретические основы управления проектами. Основы планирования. Планирование проекта в MS Project 7
Использованная литература В В Богданов Управление проектами в Microsoft Project Учебный курс Санкт Петербург Питер г...

ОСНОВЫ ПРОГРАММИРОВАНИЯ в среде TURBO DELPHI Учебное пособие
РЯЗАНСКИЙ ГОСУДАРСТВЕННЫЙ РАДИОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ... В В КАРАСЕВ ОСНОВЫ... Редактор М Е Цветкова...

Основы программирования в среде Турбо Паскаля Оператор присваивания процедуры ввода вывода
Лабораторная работа Основы программирования в среде Турбо Паскаля Оператор присваивания процедуры ввода вывода... Теоретический обзор... Схема алгоритма...

ОСНОВИ НАУКОВО-ДОСЛІДНОЇ РОБОТИ ОСНОВИ ТЕОРІЇ ПЛАНУВАННЯ ЕКСПЕРИМЕНТУ
Рубаненко О Є... Лук яненко Ю В...

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ЗАЩИТЫ ОКРУЖАЮЩЕЙ СРЕДЫ
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ СТАНКИН... ТЕХНОЛОГИЧЕСКИЙ ФАКУЛЬТЕТ... КАФЕДРА ИНЖЕНЕРНОЙ ЭКОЛОГИИ И БЕЗОПАСНОСТИ ЖИЗНЕДЕЯТЕЛЬНОСТИ...

ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ
РЕСПУБЛИКИ БЕЛАРУСЬ... Учреждение образования... ВЫСШИЙ ГОСУДАРСТВЕННЫЙ КОЛЛЕДЖ СВЯЗИ ВИТЕБСКИЙ ФИЛИАЛ Кафедра программного обеспечения сетей телекоммуникаций...

Модуль 1. ПРИРОДНИЧОНАУКОВІ ОСНОВИ УЯВЛЕНЬ ПРО НАВКОЛИШНЮ ДІЙСНІСТЬ Тема 1. Основи концепцій представлення детермінованої фізичної картини макросвіту
Тема Основи концепцій представлення детермінованої фізичної картини макросвіту... Лабораторная работа... Дослідження моделей геометричних і динамічних уявлень про об єкти...

Педагогическая технология развития у учащихся направленности на диалогическое общение при групповой форме обучения на уроках физики при изучении темы «Основы электродинамики» в средней школе
Основные понятия и законы.Место и роль темы в курсе физики 2.2 Краткая историческая справка 2.3 Возможности учебного материала для формирования… Этот процесс сопровождается существенными изменениями в педагогической теории… Происходит смена образовательной парадигмы предлагаются иное содержание, иные подходы, иное право, иные отношения,…

Основы информационных технологий и программирование
Министерство образования и науки... молодежи и спорта Украины... Национальный университет кораблестроения Херсонский филиал...

0.036
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам