Методические указания по выполнению заданий
Программирование алгоритмических структур
на ЯВУ C#
Пояснительная записка
на ____листах
Студент(ка) группы (роспись) Фамилия И. О.
№ зач. кн. _________
Руководитель Фамилия И. О.
Самара
200_ г.
Рис. 10. Образец оформления титульного листа
Пример выполнения задачи 1. Вычислить значение переменных y и p, используя значения входных данных и расчетные формулы:
,
где а = 0.59, z = -4.8, x = 2.1
Расчетные функции y и p опишем как переменные. Величины a, z, x можно описать в программе как константы, так как их значения заранее определены условием задачи. Если же описать их как переменные, то нужные значения указываются при вводе.
Теперь составим блок-схему алгоритма (рис. 11) и напишем программу.
using System;
…
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
const double x = 2.1, a = 0.59, z = -4.8;
double y = 0, p = 0;
y = a * Math.Pow(Math.Tan(x * x), 3) +
Math.Sqrt(z * z / (a * a + x * x));
p = Math.Log(a + x * x) + Math.Pow(Math.Sin(z / a), 2);
Console.WriteLine("Результаты");
Console.WriteLine();
Console.Write("y=");
Console.WriteLine(y.ToString());
//формат вывода по умолчанию
Console.WriteLine();
Console.WriteLine("p={0:E}",p);
//экспоненциальный формат вывода переменной
Console.WriteLine();
Console.WriteLine("y={0,5:f} p={1,5:f}", y, p);
//фиксированный формат вывода переменных
Console.WriteLine("Нажми клавишу Enter");
Console.ReadKey();
}
}
}
Результаты выполнения задачи1:
Замечания.
1. В программе предусмотрен форматный вывод вещественных переменных y и p, который устанавливает при выводе на печать 5 символов, 2 из которых отведены для дробной части (F).
2. При небольших показателях степени задача возведения в степень решается умножением. Например: х3=х2∙х. При дробных и больших значениях показателя степени вычисление производится по формуле:Ах = ех∙ln(А) или (exp(x*ln(a)).
Пример выполнения задания 2. Вычислить на ПЭВМ значения функции:
|
Обратим внимание, что функция y не определена в диапазоне a < x < b {(x > a) and (x < b)}. В этой ситуации программа должна обеспечить вывод соответствующего сообщения, например "функция не определена". Таким образом, фактически имеем три диапазона изменения x:
функция
sin(x) не определена k·ln(x)
0 2 4 6 x
Примем диапазон изменения x от 0 до 6, что позволит протестировать программу по всем трем условиям. Поскольку в задаче три условия, число блоков «решение» в алгоритме должно быть два (на единицу меньше). Блок-схема одного из вариантов алгоритма решения задачи и соответствующая программа будут иметь вид:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double x, y, k = 1.2;
Console.Write("Введите х ");
x = Convert.ToDouble(Console.ReadLine());
/*преобразует вводимое с клавиатуры число в виде строки в вещественный тип данных*/
Console.WriteLine();
if (x <= 2 & x > 0)
{
y = Math.Sin(x);
Console.WriteLine("x={0,3:f} y={1,3:f}", x, y);
}
else
if (x <= 6 & x > 4)
{
y = k * Math.Log(x);
Console.WriteLine("x={0,3:f} y={1,5:f}", x, y);
}
else Console.WriteLine("x={0,3:f} Func No",x);
Console.WriteLine();
Console.WriteLine("Нажми любую клавишу");
Console.ReadKey();
}
}
} Результаты решения задачи 1:
Пример выполнения задания 3. Используя оператор fo… to…do , вычислить на ПК значения функции , при х=0,5.
Параметром цикла является аргумент n.
При вычислении конечных сумм и произведений искомый результат формируется постепенно. При вычислении суммы сначала вычисляется S1 = S0 + S(n1), во втором повторе цикла эта сумма увеличивается на второе слагаемое и получается S2 = S1 + S(n2), в третьем повторе - на третье слагаемое S3 = S2 + S(n3) и т.д. Здесь S0 - начальное значение суммы и т.к. S1 должна быть равна S(n1) , то S0 = 0.
При вычислении произведения сначала вычисляется Р1=Р0×P(n1), затем Р2 = Р1×P(n2) и т.д. Здесь Р0 - начальное значение произведения и т.к. Р1 должно быть равно P(n1) , то Р0 = 1.
Поскольку 5×х2 можно вынести за знак суммы, в тело цикла это произведение включать не следует. Тем самым сокращается время исполнения программы.
Блок-схема алгоритма решения задачи и соответствующая программа будут иметь вид (рис. 13):
static void Main(string[] args)
{
double x = 0.5, t = 0, n;
for (n = 1; n <= 10; n++)
t = t + 1/ n; // накопление суммы в теле цикла
t = 5*Math.Pow(x,2) * t;
Console.WriteLine("Сумма членов ряда = {0:#.###}", t);
Console.ReadKey();
}
Результаты работы программы:
Рис. 13. Блок схема алгоритма задания 3.
Пример выполнения задания 4. Используя операторы while… и do… while, вычислить значения функции
, в диапазоне изменения x от 0 до 3 с шагом 0.5.
При решении данной задачи можно использовать алгоритмы циклической структуры "до" и "пока". Параметром данного цикла является х, причем при каждом повторном вычислении его значение следует увеличивать на величину шага.
Объявим переменную х в разделе объявлений вещественного типа и зададим в программе ей начальное значение равное 0. В процессе вычислений значение переменной будет изменяться с заданным шагом 0,5.
Для вычисления y при х£1 будем использовать алгоритмическую структуру "цикл-до", а при вычислении функции в диапазоне 1<x£3 – "цикл-пока".
Блок-схема одного из вариантов алгоритма решения задачи приведена на рис.14. Как видно, программно алгоритм можно описать с помощью условных операторов. Но мы будем использовать специальные средства языка, реализующие циклические структуры.
С учетом сказанного, программа, соответствующая представленному алгоритму будет иметь вид:
Рис. 14. Блок схема алгоритма задания 4.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double y, x = 0;
Console.WriteLine("_____________________");
do
{
y=Math.Cos(x);
Console.WriteLine(" x = {0,2:f} | y = {1,3:f}", x,y);
Console.WriteLine("_____________________");
x=x+0.5;
}
while (x<=1);
while (x<=3)
{
y=Math.Sin(x);
Console.WriteLine(" x = {0,2:f} | y = {1,3:f}", x,y);
Console.WriteLine("_____________________");
x=x+0.5;
}
Console.ReadKey();
}
}
}
Результаты работы программы:
Пример выполнения задания 5.
В массиве из N £ 10 элементов вычислить наибольший элемент массива Х и его номер.
Алгоритм поиска максимального (минимального) элемента массива заключается в следующем. Сначала предполагается, что первый элемент массива является максимальным (минимальным). В этом предположении он сравнивается с последующими элементами массива до тех пор, пока очередной из них не окажется больше (меньше). Этот больший (меньший) элемент массива принимается в качестве нового максимального (минимального) элемента, после чего процесс сравнения продолжается. И так продолжается до тех пор, пока не выявится максимальный (минимальный) элемент массива.
Рассмотрим вариант, когда одномерный
массив инициализирован заранее, например:
static void Main(string[] args)
{
int[] A = new int[10] { -5, 6, -8, 2, 4, 9, -7, 4, 1, 0 };
// одномерный массив А из 10 целых чисел
int Amin; // минимальный элемент
int Imin; // номер минимального элемента
for (int i = 0; i < 10; i++)
Console.WriteLine("A[" + i + "]=" + A[i]);
Console.WriteLine(); // вывод элементов массива
Amin = A[0]; // предположение
Imin = 0;
for (int i = 1; i < 10; i++)
if (A[i] < Amin)
{
Amin = A[i]; // выявление min элемента
Imin = i; // его индекс
}
Console.WriteLine("Минимальный элемент: {0} ", Amin);
Console.WriteLine("Его индекс: {0} ", Imin);
Console.ReadKey();
}
Рис. 15. Блок схема алгоритма задания 5
Результаты работы программы:
Для создания оглавления в пояснительной записке с помощью средств текстового редактора необходимо:
I. Организовать дополнительную страницу перед описательной частью выполнения заданий с целью размещения на ней будущего оглавления. Для этого:
– поместить курсор на место вставки оглавления (перед заголовком Выполнение заданий);
– выбрать команду Разрыв… в меню Вставка;
– в диалоговом окне Разрыв установить переключатель Новую страницу и нажать кнопку ОК.
Присвоить заголовку название Оглавление.
II. Аналогично организовать дополнительную страницу для рецензии и присваивается название заголовок Рецензия.
III. Присвоить стили всем заголовкам, которые должны быть в оглавлении. Например,
1. Рецензия (стиль Заголовок 1)
2. Оглавление (стиль Заголовок 1)
3. Выполнение заданий (стиль Заголовок 1)
3.1. Задание 1 (стиль Заголовок 2)
3.2. Задание 2 (стиль Заголовок 2)
3.3. Задание 3 (стиль Заголовок 2)
3.4. Задание 4 (стиль Заголовок 2)
3.4. Задание 5 (стиль Заголовок 2)
4. Выводы по работе (стиль Заголовок 1)
5. Литература (стиль Заголовок 1)
IV. Вставка оглавления:
– установить курсор в место вставки оглавления в начало новой страницы, но после заголовка «Оглавление»;
– активизировать команду Вставка\Ссылка\Оглавление и указатели;
– в диалоговом окне Оглавление и указатели открыть вкладку Оглавление;
– в поле Форматы выбрать один из готовых стилей (например, Классический или любой другой понравившийся);
– наличие флажка Показать номера страниц позволяет для каждого элемента списка отображать номера страниц;
– установка флажка Номера страниц по правому краю даёт возможность выровнять номера страниц по правому полю;
– в поле Уровни задать количество уровней для оглавления (в примере два);
– нажать кнопку ОК.