Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Линейные вычислительные процессы




Лекция 3

Линейные вычислительные процессы

Цели:

ü познакомиться с понятием алгоритма и управляющими структурами;

ü дать понятие линейного вычислительного процесса;

ü освоить методику написания линейных вычислительных алгоритмов, перевода таких алгоритмов на язык программирования С++ и разработки соответствующего проекта в среде Visual C++ 6. 0.

1. Алгоритм. Управляющие структуры

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

1) постановка задачи, её анализ;

2) разбиение задачи на логически завершенные подзадачи (декомпозиция) и описание основного алгоритма;

3) описание решения каждой подзадачи в виде последовательности некоторых шагов и построение полного набора инструкций, выполнение которых обеспечит достижение цели, определённой на первом этапе;

4) перевод алгоритма на язык программирования (этот процесс называется кодированием);

5) отладка программы (поиск ошибок) и проверка правильности работы программы при помощи тестовых примеров.

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

Основные свойства алгоритма:

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

дискретность – алгоритм должен представлять процесс решения задачи как последовательное выполнение простых (или ранее определённых) шагов, этапов;

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

результативность – алгоритм должен приводить к решению задачи за конечное число шагов;

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

На практике будем пользоваться формами представления алгоритмов:

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

- программная (тексты на языках программирования).

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

1) следование – выполнение указанного набора действий в естественном порядке без пропусков и повторений;

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

3)  цикл – выполнение некоторое количество раз одного и того же набора действий, который может либо зависеть от некоторой величины (параметра), либо не зависеть от какой-либо величины.

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

2. Линейные вычислительные алгоритмы

 

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

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

Помимо операций ввода-вывода основным элементарным действием в алгоритме является операция присваивания значения переменной. Формат команды присваивания:

< имя переменной> = < выражение>

Знак «=» следует читать как «присвоить». Под командой присваивания понимается последовательность действий:

- вычисляется выражение;

- полученное значение записывается в переменную.

Отметим три основных свойства команды присваивания:

1) до тех пор пока переменной не присвоено никакое значение, она остается неопределенной;

2) значение, которое было присвоено переменной, сохраняется в ней до следующей операции присваивания другого значения этой переменной;

3) значение, вновь присвоенное переменной, заменяет её предыдущее значение.

Пример построения линейного вычислительного алгоритма

и соответствующего проекта в среде Visual C++ 6. 0

Пример. Разработать алгоритм и составить по нему программу (разработать консольный проект) для вычисления значений функции         z = . Область определения функции не учитывать.

Ход выполнения работы

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

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

Алгоритм Программа
объявление  вещ: х, у, z ввод х, у z=(sin3(x2)+cos(y))/(x2/3+5) вывод х, у, z   // подключение головных файлов stdio. h и math. h #include " stdio. h" #include " math. h" //заголовок главной функции main() int main ( ) { // объявление вещественных переменных x, y, z float y, z, x; // вывод на печать строки x= printf (" x=" ); // ввод значения переменной x scanf (" %i", & x); // вывод на печать строки у= printf (" y=" ); // ввод значения переменной y scanf (" %f", & y); // вычисление значения переменной z с использованием // математических функций z=(pow(sin(pow(x, 2)), 3)+cos(y))/(pow(x, (float)2/3)+5); // вывод значений переменных x, y, z последовательно printf (" x=%5i\ty=%f\tz=%7. 3f\n", x, y, z); // завершение работы главной функции return 1; }

3. Создать консольное приложение A “Hello, World! ” application. Открыть главную функцию main(), для чего нужно выполнить шаги, описанные в Лекции 1.

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

удалить все строки, следующие за строкой #include " stdafx. h".

за указанной строкой напечатать текст программы.

5. Запустить приложение на выполнение, как это описано в       Лекции 1.

6. Отладить программу.

7. Сохранить отлаженный проект на рабочем диске.

Примечания:

1). При вычислении знаменателя функции z была применена операция приведения к типу данных: (float)2/3. Причиной этого является то, что знак ‘/’ обозначает операцию целочисленного деления, т. е. при делении целого числа на целое число результат округляется до нуля. Если же один из операндов является вещественной переменной, то в результате получается вещественное значение. В нашем случае операция приведения к типу данных (float) позволяет «перевести» число 2 из разряда целых чисел в разряд вещественных.

2). При запуске программы на экране монитора появится строка

x=_

Часть строки x= выводит на экран функция printf(), мигающий курсор – это приглашение к вводу значения переменной x с клавиатуры. Ввод значения с клавиатуры заканчивается нажатием клавиши < enter>. Приглашение к вводу и считывание значения, введенного с клавиатуры, в ячейку оперативной памяти, отведенную под переменную x, – это результат работы функции scanf().

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

4). Запись \t в форматной строке означает горизонтальную табуляцию, а запись \n – перевод на другую строку.

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

%< количество_позиций_под_значение>. < количество_позиций_под_дробную_часть> f

%< количество_позиций_под_значение> i

В приведенном примере формат вывода %5i означает, что при выводе переменной x под вывод всего значения переменной будет отведено 5 позиций, а формат вывода %7. 3f означает, что при выводе переменной z под вывод всего значения переменной будет отведено 7 позиций, из них 3 позиции – под дробную часть.

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...