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

СОДЕРЖАНИЕ

Общие требования к оформлению контрольной работы... 4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. Стандартный титульный лист, с указанным номером варианта задания, должен быть подписан исполнителем.

2. Отчет о решенных задачах должен содержать:

– постановку задачи;

– текст программы (желательно с пояснением его отдельных участков);

– результаты (скриншоты), иллюстрирующие работоспособность программы;

– список используемой литературы.

В зачетной сессии контрольная должна быть защищена (демонстрация на ПК решения задач своего варианта и ответы на поставленные вопросы).




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

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

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

Алфавит языка С/С++ состоит из: прописных и строчных букв латинского алфавита, арабских цифр и специальных символов, смысл и правила использования которых будут рассматриваться далее.

В языке C применяются данные двух категорий: простые (скалярные) и сложные (составные).

К основным (базовым) типам данных относятся целый (int), вещественный (float, double) и символьный (char) типы. В свою очередь, данные целого типа могут быть короткими (short) и длинными (long), со знаком (signed) и беззнаковыми (unsigned). Атрибут long может использоваться и с типом double – длинное вещественное.

К сложным типам данных относятся массивы, структуры (struct), объединения (union) и перечисления (enum).

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

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

Тип данных Общий формат записи Примеры
Десятичные целые ±n 22 –15 176 –1925
Вещественные с фиксированной десятичной точкой ±n.m 1.0 –3.125 –0.001
Вещественные с плавающей точкой ±n.mE±p смысл записи ±n,m×10±p 1.01E–10 0.12537е+4  
Символьные ' * ' 'A' 'х' '0' '<'
Строковые “ ****** ” “Minsk” “Press any key”

В таблице * – любой символ, набранный на клавиатуре.

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

Все объекты (переменные, массивы и т.д.), с которыми работает программа, необходимо декларировать. В декларации объектам присваиваются идентификаторы (ID), которые могут включать латинские буквы, символ нижнего подчеркивания «_» и цифры, причем первым символом ID не может быть цифра.

Внимание! В языке С/С++ строчные и прописные буквы имеют различные коды, т.е. PI, Pi и pi – различные идентификаторы (прил. 1).

При декларации объектам можно задавать начальные значения (инициализировать), например:

int k = 10, m = 3, n;

double c = –1.3, w = –10.23, s;

Принято использовать в ID переменных строчные буквы, а в именованных константах – прописные, например:

const double PI = 3.1415926;

double pi = 3.1415926;

Разделителями ID являются пробелы, символы табуляции, перевода строки и страницы, а также комментарии.

Комментарий – любая последовательность символов, начинающаяся парой символов /* и заканчивающаяся парой символов */ или начинающаяся // и до конца текущей строки.

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

Перед компиляцией программы с помощью директив препро­цес­сора выполняется предва­ри­те­ль­ная обработка текста программы.

Директивы начинаются с символа #; за которым следует наименование операции препроцессора. Чаще всего используются директивы include и define.

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

#include <stdio.h> – стандартные функции ввода-вывода;

#include <conio.h> – функции работы с консолью;

#include <math.h> – математические функции.

Директива #define(определить) создает макроконстанту и ее действие распро­страняется на весь файл, например:

#define PI 3.1415927

– в ходе препроцессорной обработки идентификатор PI везде заменяется указанным значе­нием 3,1415927.

Операции языка С/С++(арифметические: +,–,*,/,%) и наиболее часто использующиеся стандартные математические функцииописаны в прил.1.

Операция присваивания имеет полную и сокращенную формы записи.

Полная форма:

ID = выражение;

– выполняется справа налево, т.е. сначала вычисляется выражение, а затем его результат присваивается указанному ID, например: y=(x+2)/(3*x)–5;

В одном операторе можно присвоить значение несколь­ким перемен­ным, например: x = y = z = 0;

или z = (x = y) * 5; – сначала переменной x присваивается значение переменной y, далее вычисляется выражение x*5 , и результат присваивается переменной z.

Сокращенная форма:IDоперация=выражениe;

где операция – одна из арифметических операций + , –, *, /, %;например:

s += 7; (s = s+7;) или y *= x+3; (y = y*(x+3));

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

В языке С/С++ существуют операции инкремента (--) и декремента (++), т.е. уменьшения или увеличения значения переменной на 1. Операции могут быть префиксные (++i и --i) и постфиксные (i++ и i--). При использовании данной операции в выражении в префиксной форме, сначала выполняется сама операция (изменяется значение i), и только потом вычисляется выражение. В постфиксной форме – операция применяется после вычисления выражения, например, для значений b = 7 и n = 1 будут получены следующие результаты:

1) c = b*++n; – порядок выполнения: n = n+1, c = b*n, т.е. c = 14;

2) c = b*n++; – в этом случае: c = b*n, n = n+1, т.е. c = 7 .

Преобразование типов

При выполнении операций операнды различных типов преобразуются к общему типу по следуюим правилам (от «меньших» объектов к «большим»):

- значения char и short типов преобразуются в int;

- если любой из операндов имеет тип double, то второй преобразуется в double;

- если один из операндов имеет тип long, то другой преобразуется в long.

Внимание: результатом 1 / 3 будет 0, чтобы избежать такого рода ошибок необходимо явно изменять тип хотя бы одного операнда, т.е. записывать, например: 1. / 3.

Интегрированная среда разработчика C++ Builder

Среда Builder визуально реализуется в виде нескольких окон, одновременно раскрытых на экране монитора. Количество, расположение, размер и вид окон может меняться пользователем в зависимости от поставленной задачи. Меню среды Builder может иметь вид, представленный на рис. 1.1.

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

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

Окно инспектора объектов (вызывается нажатием клавиши F11) предназначено для изменения свойств выбранных компонент и состоит из двух страниц. Страница Properties (свойства) предназначена для изменения необходимых свойств компоненты, страница Events (события) – для определения реакции компоненты на то или иное событие, например, нажатие определенной клавиши или щелчок кнопкой мыши.

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

Окно текста (имя Unit1.cpp), предназначено для написания, редактирования и просмотра текста программы. При первоначальной загрузке в окне текста программы находится текст, содержащий минимальный набор операторов для нормального функционирования пустой формы в качестве Windows-окна.

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

Для каждого обрабатываемого в форме события с помощью страницы Events инспектора объектов или двойным щелчком кнопкой мыши по выбранной компоненте в текст программы вставляется функция-обработчик, между символами { и } в которой записываются соответствующие действия.

Переключение между окном формы и окном текста программы осуществляется с помощью клавиши F12.

Структура программ C++ Builder

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

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

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

Внимание! Для того чтобы перенести проект на другой компьютер, необходимо переписать все файлы с расширениями: *.bpr, *.h, *.cpp, *.dfm.

Общий вид структур следующих файлов: текст программы (Unit1.cpp), проект (Project1.cpp), заголовочный (Unit1.h) приведен в прил. 2.

Ввод-вывод в потоке

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

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

Для их работы необходимо подключить стандартную библиотеку iostream.h.

Пример:

#include<iostream.h>

#include<conio.h>

void main(void)

{

double x, y, s;

cout << “ Input x, y ” << endl; // end line - переход на новую строку

cin >> x >> y ;

s = x + y ;

cout << “ Sum x , y = “ << s << endl;

cout << “ Press any key … “ << endl;

getch();

}

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

Пустая форма в правом верхнем углу имеет кнопки управления, предназначенные для свертывания формы Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , для разворачивания формы на весь экран Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , для возвращения к исходному размеру Лабораторная работа №1. Линейный вычислительный процесс - student2.ru и для закрытия формы Лабораторная работа №1. Линейный вычислительный процесс - student2.ru . С помощью мыши, «захватывая» одну из кромок формы или выделенную строку заголовка, можно регулировать размеры формы и ее положение на экране.

Для изменения заголовка после вызова окна инспектора объектов (F11) выбирается свойство Caption, и в выделенном окошке вместо стандартного текста Form1 набирается нужный текст, например, «Лаб.раб.1. Гр.610101 Иванова А.».

Внимание! В свойстве Name (имя) и Сaption (заголовок) у компонент совпадают тексты, но имя менять не рекомендуется, т.к. оно входит в текст программы.

Компонента Edit

Если необходимо ввести из формы в программу или вывести на форму информацию, которая вмещается в одну строку, используют окно однострочного редактора текста, представляемого компонентой Edit, для чего в меню компонент Standard выбирается пиктограмма Лабораторная работа №1. Линейный вычислительный процесс - student2.ru и щелчком кнопкой мыши устанавливается в нужном месте формы. Мышью регулируются размер окошка и его положение на форме.

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

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

StrToFloat(St) – преобразует строку St в вещественное число;

StrToInt(St) – преобразует строку St в целое число.

FloatToStr (W) – преобразует вещественное число W в строку символов;

FloatToStrF (W, формат, n1, n2) – вещественное число W в строку символов под управлением формата:

ffFixed – фиксированное положение разделителя целой и дробной частей, n1 – общее количество цифр числа, n2 – количество цифр в дробной части, причем число округляется с учетом первой отбрасываемой цифры;

fFfExponent – n1 задает общее количество цифр мантиссы, n2 – количество цифр порядка XX (число округляется);

ffGeneral – универсальный формат, использующий наиболее удобную для чтения форму представления вещественного числа; соответствует формату ffFixed, если количество цифр в целой части £ n1, а само число больше 0,00001, в противном случае соответствует формату ffExponent.

FormatFloat (формат, W) – преобразует вещественное число W в строку;

IntToStr (W) – преобразует целое число W в строку символов.

Например, если значения вводимых из Edit1 и Edit2 переменны x и у имеют целый и действительный типы, соответственно, то следует записать:

х = StrToInt(Edit1–>Text);

y = StrToFloat(Edit2–>Text);

Внимание! При записи числовых значений в окошках Edit* не должно быть пробелов, а разделителем целой и дробной частей обычно является «запятая»!

В инспекторе объектов с помощью свойства Font устанавливается стиль, отражаемого в строке Edit* текста.

Компонента Label

Данная компонента используется для вывода надписей, для чего в меню компонент Standard выбирается пиктограмма Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , и в нужном месте формы устанавливается надпись Label1, регулируется размер, место положения, изменяется свойство Caption инспектора объектов, в котором вводится нужный текст, например, строка “Значение X = ”, а также выбирается стиль (свойство Font).

При установке таких компонент в текст Unit1.h вставляются переменные типа TLabel, в которых хранятся пояснительные строки. Эти строки можно изменять в процессе работы программы, например:

Label1->Caption = “”; – «очистка» строки;

Label1->Caption = “Не выполняется!”; – вывод строки.

Компонента Memo

Для вывода результатов работы программы обычно используется окно многострочного редактора текста, представленое компонентой Memo, для чего выбирается пиктограмма Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , помещается на форму, регулируется ее размер и местоположение. После установки с помощью инспектора свойства ScrollBars – SSBoth в окне появятся вертикальная и горизонтальная полосы прокрутки.

При установки данной компонеты в Unit1.h прописывается переменная Memo1 типа ТMemo. Информация, выводимая построчно в окне Memo1, находится в массиве строк Memo1–>Lines, каждая из которых имеет тип String.

Для очистки окна используется метод Memo1–>Clear( ).

Для добавления новой строки используется метод Memo1–>Lines–>Add( ).

Если нужно вывести числовое значение, то его надо преобразовать к типу AnsiString (см. прил. 4) и добавить в массив Memo1–>Lines, например, вывести int u = 100;

double w = –256.38666;

в результате записей

Memo1–>Lines–>Add (“ Значение u = ”+IntToStr(u));

Memo1–>Lines–>Add (“ Значение w = ”+FloatToStrF(w,ffFixed,8,2));

появятся строки

Значение u = 100

Значение w = –256.39

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

Если выводимая информация превышает размер окна Memo1, то для просмотра используются полосы прокрутки.

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

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

Оператор выбора 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: cout << “Error!” << endl; exit(1);

}

f=f+5;

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

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

Компонента RadioGroup

В меню Standard выберите пиктограмму Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , поместите ее в нужное место формы. На форме появится окаймленный линией чистый прямоугольник с заголовком RadioGroup1. Замените заголовок (Caption) на «Выбор функции».

В инспекторе объектов в свойстве Items вызовите строчный редактор списка заголовков кнопок и наберите три строки с именами выбираемых функций (cos(x), sin(x), tg(x)), нажмите ОК. После этого внутри компоненты появятся три кнопки-переключателя с введенными надписями.

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

В функции FormCreate() желательно установить начальное значение этой переменной, например, RadioGroup1->ItemIndex = 0.

Подготовив форму, создайте функции-обработчики событий FormСreate и Botton1Сlick аналогично первой работе. Текст функций приведен в примере.

Запустите программу и убедитесь в том, что все ветви алгоритма выполняются правильно. Форма приведена на рис. 2.1.

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

Рис. 2.1

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

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

#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="0,1";

Edit2->Text="0,356";

Edit3->Text="-3,5";

Memo1->Clear();

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

RadioGroup1->ItemIndex = 0;

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double x,y,z,u,ma;

x=StrToFloat(Edit1->Text);

y=StrToFloat(Edit2->Text);

z=StrToFloat(Edit3->Text);

// Проверка номера нажатой кнопки и выбор соответствующей функции

switch(RadioGroup1->ItemIndex){

case 0: u=cos(x);

Memo1->Lines->Add("Cos(x)= "+FloatToStrF(u,ffFixed,8,6));

break;

case 1: u=sin(x);

Memo1->Lines->Add("Sin(x)= "+FloatToStrF(u,ffFixed,8,6));

break;

case 2: u=tan(x);

Memo1->Lines->Add("Tg(x)= "+FloatToStrF(u,ffFixed,8,6));

break;

}

// Проверка состояния кнопки CheckBox1

if (CheckBox1->Checked){

u = fabs(u);

y = fabs(y);

z = fabs(z);

}

// Нахождение максимального из трех чисел

if (u>y) ma=u;

else ma=y;

if (z>ma) ma=z;

if (CheckBox1->Checked)

Memo1->Lines->Add("Max модулей= "+FloatToStrF(ma,ffFixed,8,6));

else Memo1->Lines->Add("Max= "+FloatToStrF(ma,ffFixed,8,6));

}

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

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

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

#pragma hdrstop

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

#pragma argsused

#include <stdio.h> // include <iostream.h>

#include <math.h>

#include <conio.h>

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

{

double x,y,z,u,ma;

int kod;

puts("Input x, y, z"); // cout << "Input x, y, z" << endl ;

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

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

// cout << "Function U(x):\n 0 - cos(x)\n 1 - sin(x)\n 2 - tan(x)" << endl;

scanf("%d", &kod); // cin >> kod;

switch(kod){

case 0: u=cos(x);

printf("\n\tCos(x)= %8.6lf",u); // cout << "\n\tCos(x) = " << u << endl;

break;

case 1: u=sin(x);

printf("\n\Sin(x)= %8.6lf",u); // cout << "\n\Sin(x) = " << u << endl;

break;

case 2: u=tan(x);

printf("\n\Tg(x)= %8.6lf",u); // cout << "\n\Tg(x) = " << u << endl;

break;

}

puts("\nMax ABS - 1, Else - Max"); // cout << "\nMax ABS - 1, Else - Max";

scanf("%d", &kod); // cin >> 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); // cout << "Max ABS = " << ma << endl;

else printf("Max = %8.6lf", ma); // cout << "Max = " << ma << endl;

puts("\nPress any key ... "); // cout << "\nPress any key ... " << endl;

getch();

return 0;

}

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

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

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

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

1. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

2. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

3. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

4. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

5. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

6. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

7. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

8. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

9. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

10. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

11. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

12. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

13. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

14. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

15. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

16. Лабораторная работа №1. Линейный вычислительный процесс - student2.ru , где Лабораторная работа №1. Линейный вычислительный процесс - student2.ru

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

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

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

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");

}

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

Рис. 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();

}

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

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

#include <stdio.h> // #include <iostream.h>

#include <conio.h>

void main()

{

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

int n, zn = -1, k;

puts("Input a,b,h,n"); // cout << "Input a,b,h,n" << endl;

scanf("%lf%lf%lf%d", &a, &b, &h, &n); // cin >> 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);

// cout <<"\n x = " << x << "\t sum = " << s;

}

puts("\nPress any key ... "); // cout << "\nPress any key ... " << endl;

getch();

}

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

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

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

Для каждого 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 выбрать в зависимости от задания (10, 20, 50, 100).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Глобальные переменные объявляются вне какой-либо функции и могут быть использованы в любом месте программы, но перед их первым использованием они должны быть объявлены и инициализированы. Область действия глобальных переменных – вся программа с момента их объявления. При объявлении глобальные переменные обнуляются.

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

В языке С каждая переменная принадлежит одному из четырех классов памяти – автоматической (auto), внешней (extern), статической (static) и регистровой (register). Тип памяти указывается перед спецификацией типа, например, register int a; или static double b; По умолчанию устанавливается класс auto и переменные размещаются в стеке.

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

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

double (*p)(double, int);

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

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

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

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

Компонента StringGrid

При работе с массивами ввод и вывод значений обычно организуется с использованием компоненты StringGrid, предназначенной для отображения информации в виде двухмерной таблицы, каждая ячейка которой представляет собой окно однострочного редактора (аналогично окну Edit). Доступ к информации осуществляется с помощью элемента Cells[ACol][ARow] типа AnsiString, где целочисленные значения ACol, ARow указывают позицию элемента.

Внимание! Первый индекс ACol определяет номер столбца, а второй ARow – номер строки в отличие от индексов массива.

В инспекторе объектов значения ColCount и RowCount устанавливают начальные значения количества столбцов и строк в таблице, а FixedCols и FixedRows задают количество столбцов и строк фиксированной зоны. Фиксированная зона выделена другим цветом и обычно используется для надписей.

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

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

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

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

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

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

Рис. 5.1

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

Текст программы может иметь следующий вид (обратите внимание на то, что функция 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<ko

Наши рекомендации